llvm opt中的SCEV打印
我想分析IR中几个值的标量演化(SCEV)表示。我可以在不写入辅助工具的情况下显示SCEV吗?我的意思是在我的IR上运行opt(或其他现有工具),并指定一些命令行参数。我浏览了opt命令行参数,但没有找到合适的参数。据我所知,您可以在不接触任何代码的情况下了解SCEV的工作原理的唯一方法是启用统计信息(llvm opt中的SCEV打印,llvm,Llvm,我想分析IR中几个值的标量演化(SCEV)表示。我可以在不写入辅助工具的情况下显示SCEV吗?我的意思是在我的IR上运行opt(或其他现有工具),并指定一些命令行参数。我浏览了opt命令行参数,但没有找到合适的参数。据我所知,您可以在不接触任何代码的情况下了解SCEV的工作原理的唯一方法是启用统计信息(opt-stats)-您可以在中看到SCEV发出的统计信息(在全局范围内查找统计信息宏调用) 否则,SCEV类有一个dump方法,该方法可能更符合您所寻找的内容。只需在命令行工具中运行SCEV并手
opt-stats
)-您可以在中看到SCEV发出的统计信息(在全局范围内查找统计信息
宏调用)
否则,SCEV类有一个dump
方法,该方法可能更符合您所寻找的内容。只需在命令行工具中运行SCEV并手动调用dump
就非常容易了。如果您从其中一个开始,应该不会花费超过5分钟的时间来查看转储。除了@eliben博士的答案之外,还有两个附加选项可能有用的opt
选项(尽管可能不是您问题的直接答案)
-分析
这将调用Pass
的Pass::print
成员函数。例如
opt -analyze -scalar-evolution test/Analysis/ScalarEvolution/incorrect-nsw.ll
输出
Printing analysis 'Scalar Evolution Analysis' for function 'bad.nsw':
Classifying expressions for: @bad.nsw
%i = phi i8 [ -1, %entry ], [ %i.inc, %loop ]
--> {-1,+,-128}<%loop> U: [127,0) S: [127,0) Exits: 127
%counter = phi i8 [ 0, %entry ], [ %counter.inc, %loop ]
--> {0,+,1}<%loop> U: [0,2) S: [0,2) Exits: 1
%i.inc = add i8 %i, -128
--> {127,+,-128}<%loop> U: [-1,-128) S: [-1,-128) Exits: -1
%i.sext = sext i8 %i to i16
--> {-1,+,128}<nw><%loop> U: [-1,128) S: [-1,128) Exits: 127
%counter.inc = add i8 %counter, 1
--> {1,+,1}<%loop> U: [1,3) S: [1,3) Exits: 2
Determining loop execution counts for: @bad.nsw
Loop %loop: backedge-taken count is 1
Loop %loop: max backedge-taken count is 1
输出:
Pass Arguments: -targetlibinfo -tti -assumption-cache-tracker -no-aa -domtree -loops -scalar-evolution -scev-aa -verify
Pass Arguments: -targetlibinfo -tti -assumption-cache-tracker -no-aa -domtree -loops -scalar-evolution -scev-aa -verify