LLVM 中将数据从内存加载到 SIMD 向量中的“正确”(即可移植)方式是什么?
查看 LLVM 的自动矢量化器为 x86 目标生成的典型 IR,模式似乎是:
double *
)的指针位转换到相应的向量类型(例如,<4 x double>*
),在 AVX 的情况下,这种模式很好地映射到 SIMD 内在函数,例如_mm256_loadu_pd()
和朋友。但是,我不知道这种策略是否也适用于其他 ISA(例如 Neon、AltiVec)。
我无法在 LLVM 文档中找到有关该主题的信息。我错过了一些明显的东西吗?