bitcast整数到char的向量

时间:2016-03-23 08:29:19

标签: clang llvm simd llvm-ir

我刚刚使用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。

有人可以解释一下发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

实际上它看起来像是clang中的一个错误:

https://llvm.org/bugs/show_bug.cgi?id=27085

此输入代码应该不编译,或生成警告,或编译为向量splat