Clang 从整数到字符向量的比特广播
我刚刚用clang 3.7编译了一小段C代码:Clang 从整数到字符向量的比特广播,clang,llvm,simd,llvm-ir,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@f1(%v){ 条目: %div=udiv%v,比特广播(到) 回收率%div } 根据llvm,比特广播操作不会改变比特,这意味着应该产生(或)。我说得对吗? 因此,我将得到除零
typedef unsigned char char4 __attribute__ ((vector_size (4)));
char4 f1 (char4 v)
{
return v / 2;
}
函数编译为(我删除了debuginfo):
define@f1(%v){
条目:
%div=udiv%v,比特广播(到)
回收率%div
}
根据llvm,比特广播操作不会改变比特,这意味着应该产生(或)。我说得对吗?
因此,我将得到除零异常
我编写的代码旨在进行广播(或splat),而不是比特广播
有人能解释一下发生了什么事吗
谢谢 实际上它看起来像叮当作响的虫子:
此输入代码不应编译,或生成警告,或编译为向量splat实际上,它看起来像一个叮当作响的bug:
这个输入代码要么不编译,要么生成警告,要么编译成向量splat,显然这是clang和gcc之间的不一致行为。上面的代码使用gcc正确运行,并使用clang生成浮点异常。显然,这是clang和gcc之间的不一致行为。上面的代码使用gcc正确运行,并生成一个带有clang的浮点异常。
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
}