[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