llvm中的SCEV打印选择

时间:2015-04-25 09:41:48

标签: llvm

我想在我的IR中分析几个值的标量演化(SCEV)表示。我可以在不编写辅助工具的情况下显示SCEV吗?我的意思是在我的IR上运行opt(或其他现有工具)并指定一些命令行参数。我概述了opt命令行参数,但没有找到合适的东西。

2 个答案:

答案 0 :(得分:1)

据我所知,您可以在不触及任何代码的情况下获得SCEV工作的唯一见解是启用统计信息(let ... and let ...) - 您可以在the implementation中看到SCEV发布的统计信息(在全局范围内查找in宏调用。)

否则SCEV类采用opt -stats方法,可能更符合您的要求。在命令行工具中运行SCEV并手动调用STATISTIC非常容易。如果您从其中一个samples here开始,则不应该花费超过5分钟的时间来查看转储。

答案 1 :(得分:1)

除了 Dr. @ eliben的回答之外,opt还有2个可能有用的选项(尽管可能不是您问题的直接答案)。

-analyze

这会调用Pass::print的{​​{1}}成员函数。如,

Pass

输出

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

&#34;打印PassManager调试信息&#34; 。您可以为不同级别的信息指定-debug-pass / Arguments / Structure / Executions。这很有用,因为Details依赖于其他LLVM通行证。如,

SCEV

outpus:

opt /dev/null -scev-aa -scalar-evolution -disable-output -debug-pass=Arguments