我可以在使用CloneFunctionInto()时将旧指令的映射添加到VMap的新指令吗?

时间:2016-09-19 22:42:54

标签: llvm

更改参数类型和返回函数类型时遇到问题。我是通过以下方式完成的:

  1. 使用新的返回类型和新参数类型
  2. 创建新的函数类型
  3. 使用新类型将旧参数映射到新参数,并将映射添加到VMap
  4. 对于函数体中需要新类型的每条旧指令,我创建一个新类型的新指令,并将映射添加到VMap
  5. 使用ClondFunctionInto(new_fun, old_fun, VMap, true, Returns)将旧函数的主体复制到新函数中,VMap中的所有值都替换为新版本。
  6. 然后我收到以下错误:

    /llvm/lib/Transforms/Utils/ValueMapper.cpp:444: void llvm::RemapInstruction(llvm::Instruction*, llvm::ValueToValueMapTy&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*): Assertion `(Flags & RF_IgnoreMissingEntries) && "Referenced value not in value map!"' failed.
    

    第3步是否正确?由于CloneFunctionInto()的文档说“将OldFunc克隆到NewFunc中,将旧参数转换为对VMap值的引用”。我是否还可以将函数体中的旧指令转换为VMap

    中的新指令

0 个答案:

没有答案