当我调用llvm::Module::dump
时,它会打印十进制的整数常量。例如:
%1 = load float, float* inttoptr (i64 4404658304 to float*)
有没有办法告诉它用hex格式?据推测,IR语法允许十六进制整数常量。
答案 0 :(得分:0)
每Is it possible to specify a hexademical number in LLVM IR code?,十六进制保留用于浮点文字。所以答案是否定的。
答案 1 :(得分:0)
没有修补llvm就不可能。
如果你打开补丁llvm然后你可以修改lib / IR / AsmWriter.cpp:1084
static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
TypePrinting &TypePrinter,
SlotTracker *Machine,
const Module *Context) {
if (const ConstantInt *CI = dyn_cast<ConstantInt>(CV)) {
if (CI->getType()->isIntegerTy(1)) {
Out << (CI->getZExtValue() ? "true" : "false");
return;
}
Out << CI->getValue();
return;
}
这里你可以将代码修补到下面以将整数转储为十六进制。
- Out << CI->getValue();
+ Out << format_hex(CI->getZExtValue(), 0, /*Upper=*/true);