L-> getCanonicalInductionVariable()を使用して、参照L *が与えられた場合に、ループパスのループの正規帰納法変数を取得しようとしています。
しかし、私が遭遇するループの多くは標準形ではありません。例:
for (int i = 10; i < 20 ; i++) {
....
}
llvmのドキュメントhttp://llvm.org/docs/Passes.html#indvars-canonicalize-induction-variables)によると、「opt」で「indvars」パスを使用すると、ループの帰納法変数を標準形に変換することでトリックを実行できます。 。私は走ってみました:
opt -mem2reg -indvars < test.bc > optTest.bc
ここで、「test.bc」は上記のforループのビットコード形式です。しかし、indvarsパスは効果がないようです(ここではアセンブリコードを省略しましたが、チェックしました)。
後で、L-> getCanonicalInductionVariable()を使用するとnullが返されます。また、「loops」、「loop-simplify」などの他のパスで「indvars」を使用してみましたが、役に立ちませんでした。
これを機能させる方法について何かアイデアはありますか?