我知道clang使用byval
和memcpy
分别返回或传递struct参数(如果它们很小,则强制它们)和%struct.X = type { i32, i32, i32, i32 }
%struct.Y = type { %struct.X, i32 }
define void @foo(%struct.X* noalias sret, %struct.X* byval align 8)
分配/复制它们,如下所示:
define %struct.X @foo(%struct.X align 8)
我也可以像这样直接通过/返回它们吗?
load
如果我要复制/分配结构怎么办?我可以像使用标量值一样定期使用store
/ %0 = load %struct.Y, %struct.Y* %a
store %struct.Y %0, %struct.Y* %b
吗?
{{1}}
如果是这样,当结构很大时会发生什么? LLVM是否会用完寄存器(因为目标体系结构中的寄存器数量有限)会发生吗?