c语言中的.inst文件,c – 如何从LLVM中的LoadInst结果的值中解析AllocaInst?

从概念上讲,我想做的事情非常简单.我使用

Alloca technique described in the Kaleidoscope example与

mem2reg配对,以减少手动创建Phi节点的需要.

我已经实现了我的自定义语言的几个方面,但是我遇到了以通用方式实现后递增/递减的问题.

我的AST节点PostIncrDecrNode包含一个用于表示的标记或 – 以及一个表达式AST节点,该节点被编码为返回llvm :: Value *,就像Kaleidoscope示例一样.我已经注意到我可能需要返回一些其他的llvm :: Value *,因为我的语言非常安全,我需要知道诸如整数类型的符号之类的东西,但现在我觉得我可能还需要跟踪llvm :: AllocaInst.

一个简单的示例情况是这样的代码:

int myfunction(int i)

{

return i++;

}

我的调试AST打印如下所示:

- CompilationUnit:test.str

- FunctionDeclarationNode

- IdentifierNode:int

- IdentifierNode:myfunction

- FunctionParameterNode

- IdentifierNode:int

- IdentifierNode:i

- BlockNode

- ReturnNode

- PostIncrDecrNode

- IdentifierNode:i

最后两行是这里的相关部分,因为我有一个PostIncrDecrNode,它包含一个将被编码为如下代码的IdentifierNode:

Value* IdentifierNode::codeGenInternal(CodeGenContext& context)

{

Value* rtn = NULL;

SharedSymbolEntry entry = context.getSymbolInScopeByName(*value);

Value* val = entry ? entry->llvmVal : NULL;

if(val)

{

IRBuilder<>* builder = context.getIRBuilder();

rtn = builder->CreateLoad(val, value->c_str());

}

else

{

context.handleCodeGenError(*this, "Unknown variable name: " + Twine(value->c_str()));

}

return rtn;

}

SharedSymbolEntry entry = context.getSymbolInScopeByName(* value);使用存储的shared_ptr到标识符节点的std :: String“value”成员(也就是变量名称)来查找我的SharedSymbolEntry(只是一个包装器类型来存储语言特定信息以及llvm :: Value *,它是llvm: :AllocaInst *)在上下文堆栈中,由函数参数或变量AST节点填充入口块allocas.

问题是PostIncrDecrNode无法访问alloca,只能从load rtn = builder-> CreateLoad(val,value-> c_str());返回llvm :: Value *.

在LLVM中有什么方法可以从llvm :: Value *中解析llvm :: AllocaInst *,以便在存储指令中使用它(存储指令需要一个指针,在这种情况下我只有整数值)?

我遇到了一些类似的问题,但我不确定他们是否回答了我的问题.

最后一个似乎暗示这可能根本不可能,所以我很好奇别人如何解决这个问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值