我刚刚使用clang 3.7编译了一小段C代码:
typedef unsigned char char4 __attribute__ ((vector_size (4)));
char4 f1 (char4 v)
{
return v / 2;
}
函数编译为(我删除了debuginfo):
define <4 x i8> @f1(<4 x i8> %v) {
entry:
%div = udiv <4 x i8> %v, bitcast (<1 x i32> <i32 2> to <4 x i8>)
ret <4 x i8> %div
}
根据llvm documentation,bitcast操作不改变位,意味着&lt; 4 x i8&gt;应该产生&lt; 2,0,0,0&gt; (或&lt; 0,0,0,2)。我对吗? 因此,我将获得除零除外。
我写的代码旨在制作广播(或splat),而不是bitcast。
有人可以解释一下发生了什么吗?
谢谢!
答案 0 :(得分:0)