compiler construction - LLVM fails to detect very simple loop trip count -
i'm trying understand how loop trip count calculation happens in llvm using scalar evolution analysis. however, can't simple test case work.
i have following test program:
// bug.cpp int main() { (int = 0; < 16; i++) { // nothing } return 0; }
which compile this:
$ clang++ -o0 -emit-llvm -c -o bug.bc bug.cpp
and analyze this:
$ opt -analyze -indvars -loop-simplify -scalar-evolution < bug.bc
but output of scalar evolution this:
... determining loop execution counts for: @main loop %for.cond: unpredictable backedge-taken count. loop %for.cond: unpredictable max backedge-taken count.
why simple loop have unpredictable trip count? doing wrong in invoking analysis? llvm 3.4.
solved of related question:
the use of getsmallconstanttripcount method of loop in llvm
add mem2reg
optimization pass , trip count correctly computed.
$ opt -analyze -mem2reg -indvars -loop-simplify -scalar-evolution < bug.bc
Comments
Post a Comment