[llvm-bugs] [Bug 49012] New: IRCE wouldn't deal with range checks which predicate is uge.
via llvm-bugs
llvm-bugs at lists.llvm.org
Tue Feb 2 23:24:48 PST 2021
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: unassignedbugs at nondot.org
Reporter: jie.he.cn at gmail.com
CC: llvm-bugs at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210203/731eab21/attachment.html>
More information about the llvm-bugs
mailing list