0

我正在使用 LLVM 执行静态分析opt(即 LLVM Pass)。为了执行此分析,用户向我提供了一个文本文件,其中列出了一些指标和一些关于它们的统计信息。我还需要用户将这些指标中的每一个映射到一组 LLVM 指令。因此,以下可以是示例输入文件:

<name 1>.attribute_a = 12  
<name 2>.attribute_a = 11 
<name 3>.attribute_a = 0.6  

<name 1>.instructions = Alloca,Load,Fence  
<name 2>.instructions = ZExt,SExt  
<name 3>.instructions = Shl,Xor,Add,FAdd,Invoke  

等等。解析属性已经完成,我有一个映射,它从每个度量的名称指向与其相关的数据结构。我现在想做的是解析指令并将指令集添加到该数据结构中。

我认为将输入文件中的指令表示为操作码对用户和我自己来说都是最方便的,因此我们可以使用以下内容代替上面的内容:

<name 1>.attribute_a = 12   

<name 1>.instructions = 26,27,30 

但我不完全确定。在文本文件中表示输入数据的最佳方式是什么,以及在完成后实际解析数据的最佳方式是什么?我想我最终会使用类似std::set<unsigned>的东西来表示数据。

4

1 回答 1

1

只要您在文本文件中的实体与实际的 LLVM IR 指令之间存在一对一的映射,我认为这并不重要。指令名称可能更具可读性,因此您可以解析为std::set<std::string>. 请注意,您可以llvm::InstructiongetOpcodeName其与从文件中读取的文本名称进行比较。

于 2013-04-24T12:59:54.853 回答