[PATCH] [InstCombineCompares] Added shl optimization for the instruction - icmp eq/ne (shl Const2, A), Const1
David Majnemer
david.majnemer at gmail.com
Sat Oct 18 14:32:18 PDT 2014
I sat down and proved it with Alive:
```
Name: 1
Pre: C2 != 0 && C1 == 0 && countTrailingZeros(C2) != 0
%shl = shl i8 C2, %a
%cmp = icmp eq i8 %shl, C1
=>
%cmp = icmp uge i8 %a, width(%a) - countTrailingZeros(C2)
Name: 2
Pre: C2 != 0 && C1 == C2
%shl = shl i8 C2, %a
%cmp = icmp eq i8 %shl, C1
=>
%cmp = icmp eq i8 %a, 0
Name: 3
Pre: C2 != 0 && C1 != C2 && C1 != 0 && countTrailingZeros(C1) > countTrailingZeros(C2) && (C2 << (countTrailingZeros(C1) - countTrailingZeros(C2)) == C1)
%shl = shl i8 C2, %a
%cmp = icmp eq i8 %shl, C1
=>
%cmp = icmp eq i8 %a, countTrailingZeros(C1) - countTrailingZeros(C2)
Name: 4
Pre: C2 != 0 && C1 != C2 && C1 != 0 && !(countTrailingZeros(C1) > countTrailingZeros(C2) && (C2 << (countTrailingZeros(C1) - countTrailingZeros(C2)) == C1))
%shl = shl i8 C2, %a
%cmp = icmp eq i8 %shl, C1
=>
%cmp = i1 false
```
LGTM is conditional on addressing the variable name change.
================
Comment at: lib/Transforms/InstCombine/InstCombineCompares.cpp:1145
@@ +1144,3 @@
+
+ unsigned Zeros = AP2.countTrailingZeros();
+
----------------
Can we name this something like `AP2TrailingZeros`?
http://reviews.llvm.org/D5839
More information about the llvm-commits
mailing list