在llvm结构之间投

问题描述 投票:0回答:1

在我的开发中,一个函数返回一个类型为 {i8*, i64}而在call网站上,我需要将返回值分配给一个类型为 {some_struct*, i64}.一种方法是调用。mutateType() 方式 llvm::Value 函数调用的返回值;但是,我担心这个 mutateType()方法可能会造成太大干扰(文档中不鼓励使用它).由于LLVM不支持结构之间的直接转换。有什么方法可以让我安全地将一个结构类型的值 "投射 "到另一个结构类型?

llvm llvm-ir
1个回答
0
投票

如果不想处理单个结构成员,一个可能的解决方案是做一个alloca,将结构存储到alloca中,对alloca进行bitcast,然后加载cast指针。请注意,如果你在llvm中使用基于类型的别名分析,比如用c或c++代码生成的llvm,这可能会交互不良,但如果你处理的是纯llvm或禁用严格的别名,这应该不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.