将llvm :: Module :: dump打印整数以十六进制表示

时间:2016-03-27 18:59:57

标签: llvm llvm-ir

当我调用llvm::Module::dump时,它会打印十进制的整数常量。例如:

%1 = load float, float* inttoptr (i64 4404658304 to float*)

有没有办法告诉它用hex格式?据推测,IR语法允许十六进制整数常量。

2 个答案:

答案 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);