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