LLVM:将结构转换为相同结构

时间:2019-01-31 01:46:36

标签: llvm

我正在修复TinyGo编译器中的一些错误。目前,我在比特广播方面有一个怪异的问题。 IR代码如下:

%structcast.go.A = type { i32, i32, i32, i32 }
%structcast.go.B = type { i32, i32, i32, i32 }
...
  %0 = load %structcast.go.B, %structcast.go.B* %b, !dbg !1851
  %changetype = bitcast %structcast.go.B %0 to %structcast.go.A, !dbg !1852
  call void @structcast.go.foo(%structcast.go.A %changetype, i8* undef, i8* undef), !dbg !1853

但是在进行IR验证时,我得到了:

Invalid bitcast
  %changetype = bitcast %structcast.go.B %0 to %structcast.go.A, !dbg !1852

我想知道,该位广播到底有何违法行为?

1 个答案:

答案 0 :(得分:1)

好吧,我自己弄清楚了:强制类型转换必须是非聚合类型,而struct是聚合:(