LLVM:“;无效比特广播“;将结构转换为相同结构时

LLVM:“;无效比特广播“;将结构转换为相同结构时,llvm,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 %

我正在修复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

我想知道,比特广播到底有什么不合法的地方?

好的,我自己弄明白了:广播必须是非聚合类型的,结构是聚合的:(

好的,我自己弄明白了:广播必须是非聚合类型的,结构是聚合的:(

IIRC比特广播不适用于结构,仅适用于指针、整数…和浮点数?我的内存可能出错,但我的知识有时会过时。IIRC比特广播不适用于结构,仅适用于指针、整数…和浮点数?我的内存可能出错,但我的知识有时会过时。