【问题标题】:bitcast integer to vector of char将整数位转换为 char 向量
【发布时间】:2016-07-10 10:40:48
【问题描述】:

我刚刚使用 clang 3.7 编译了一小段 C 代码:

typedef unsigned char char4  __attribute__ ((vector_size (4)));

char4 f1 (char4  v)
{
  return v / 2;
}

该函数编译为(我删除了调试信息):

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 操作不会改变位,这意味着 应该产生 (或 )。我对吗? 因此,我会得到除零异常。

我编写的代码旨在进行广播(或 splat),而不是位广播。

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

谢谢!

【问题讨论】:

  • 显然这是clang和gcc之间的不一致行为。上面的代码用gcc正确运行,用clang生成浮点异常。

标签: clang llvm simd llvm-ir


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2023-03-28
    • 2016-04-30
    • 2019-11-21
    • 1970-01-01
    • 2012-05-10
    • 2018-06-27
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多