https://bugs.llvm.org/show_bug.cgi?id=49012
Bug ID: 49012
Summary: IRCE wouldn't deal with range checks which predicate
is uge.
Product: libraries
Version: 11.0
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Loop Optimizer
Assignee: unassignedb...@nondot.org
Reporter: jie.he...@gmail.com
CC: llvm-bugs@lists.llvm.org
recently, I tried to use llvm to optimize my code generated by a managed VM.
this VM will instrument many range check code before memory access operations.
I found the optimization IRCE wouldn't work when the range check with the
predicate "uge". I wrote the following c/c++ code to simulate my code, where
len is the max buf length:
void testIRCE(unsigned int * buf, unsigned int len, unsigned int
iteration_count) {
if (iteration_count > 0) {
unsigned int i = 0;
do {
if (i >= len) { // range check
printf("overflow\n");
return;
}
buf[i] = i;
i ++;
} while (i < iteration_count);
}
}
the above code wouldn't be optimised as expected into 2 loops (iteration range
splitting). I checked the llvm code, found in function
InductiveRangeCheck::parseRangeCheckICmp(), it wouldn't deal with uge cases,
I'm not sure if it is intentional.
but I tried to modify the llvm IR code by replacing the uge to ult, and
interchanging the operands of next branch instruction. the optimization IRCE
works as expected.
my test command is below:
first, get a clean llvm IR file.
./clang++ -O3 -Xclang -disable-llvm-passes ~/testRCE.cpp -emit-llvm -S -o
~/testRCE.TBBA.ll
second, optimize it with other loop optimization.
./opt -gvn -simplifycfg -loop-simplify -loop-predication -licm -dce -mem2reg
-dce -jump-threading -lcssa -simplifycfg -loop-simplify -dce -stats
-debug-pass=Executions ~/testRCE.TBBA.ll -S -o ~/testRCE.mem2reg.ll
finally, take IRCE.
./opt -irce-skip-profitability-checks -irce -dce -S ~/testRCE.mem2reg.ll -o
~/testRCE.irce.ll
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs