c – 设置llvm :: ConstantInt的值
发布时间:2020-12-16 03:04:58 所属栏目:百科 来源:网络整理
导读:我正在玩LLVM.我想过在中间代码中改变常量的值.但是,对于类 llvm::ConstantInt,我没有看到setvalue函数.任何想法如何修改IR代码中常量的值? 解决方法 ConstantInt是一家工厂,不是吗?类有 get method构造新的常量: /* ... return a ConstantInt for the gi
我正在玩LLVM.我想过在中间代码中改变常量的值.但是,对于类
llvm::ConstantInt,我没有看到setvalue函数.任何想法如何修改IR代码中常量的值?
解决方法
ConstantInt是一家工厂,不是吗?类有
get method构造新的常量:
/* ... return a ConstantInt for the given value. */ 00069 static Constant *get(Type *Ty,uint64_t V,bool isSigned = false); 所以,我认为,你无法修改现有的ConstantInt.如果要修改IR,则应尝试将指针更改为参数(更改IR本身,但不更改常量对象). 可能你想要这样的东西(请记住,我对LLVM没有经验;我几乎可以肯定的例子是不正确的). Instruction *I = /* your argument */; /* check that instruction is of needed format,e.g: */ if (I->getOpcode() == Instruction::Add) { /* read the first operand of instruction */ Value *oldvalue = I->getOperand(0); /* construct new constant; here 0x1234 is used as value */ Value *newvalue = ConstantInt::get(oldValue->getType(),0x1234); /* replace operand with new value */ I->setOperand(0,newvalue); } 要“修改”一个常量,就有一个解决方案(增量和减量are illustrated): /// AddOne - Add one to a ConstantInt. static Constant *AddOne(Constant *C) { return ConstantExpr::getAdd(C,ConstantInt::get(C->getType(),1)); } /// SubOne - Subtract one from a ConstantInt. static Constant *SubOne(ConstantInt *C) { return ConstantInt::get(C->getContext(),C->getValue()-1); } PS,Constant.h在关于创建和不删除常量http://llvm.org/docs/doxygen/html/Constant_8h_source.html的请求中有重要的评论 00035 /// Note that Constants are immutable (once created they never change) 00036 /// and are fully shared by structural equivalence. This means that two 00037 /// structurally equivalent constants will always have the same address. 00038 /// Constants are created on demand as needed and never deleted: thus clients 00039 /// don't have to worry about the lifetime of the objects. 00040 /// @brief LLVM Constant Representation (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |