Я использую LLVM для выполнения статического анализа с использованием opt
(то есть проход LLVM). Чтобы выполнить этот анализ, пользователь предоставляет мне текстовый файл, в котором перечислены несколько метрик и некоторые статистические данные о них. Мне нужно, чтобы пользователь также сопоставил каждую из этих метрик с набором инструкций 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>
представлять данные.
Я не думаю, что это имеет большое значение, если у вас есть взаимно-однозначное соответствие между сущностями в вашем текстовом файле и действующими инструкциями LLVM IR. Имена инструкций могут быть более удобочитаемыми, поэтому вы можете std::set<std::string>
, Обратите внимание, что llvm::Instruction
имеет метод getOpcodeName
который вы можете сравнить с текстовым именем, прочитанным из файла.
Других решений пока нет …