[llvm] r271843 - [InstCombine] allow vector icmp bool transforms

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 5 10:49:45 PDT 2016


Author: spatel
Date: Sun Jun  5 12:49:45 2016
New Revision: 271843

URL: http://llvm.org/viewvc/llvm-project?rev=271843&view=rev
Log:
[InstCombine] allow vector icmp bool transforms

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
    llvm/trunk/test/Transforms/InstCombine/cast.ll
    llvm/trunk/test/Transforms/InstCombine/set.ll

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=271843&r1=271842&r2=271843&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Sun Jun  5 12:49:45 2016
@@ -3188,7 +3188,7 @@ Instruction *InstCombiner::visitICmpInst
   Type *Ty = Op0->getType();
 
   // icmp's with boolean values can always be turned into bitwise operations
-  if (Ty->isIntegerTy(1)) {
+  if (Ty->getScalarType()->isIntegerTy(1)) {
     switch (I.getPredicate()) {
     default: llvm_unreachable("Invalid icmp instruction!");
     case ICmpInst::ICMP_EQ: {                // icmp eq i1 A, B -> ~(A^B)

Modified: llvm/trunk/test/Transforms/InstCombine/cast.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/cast.ll?rev=271843&r1=271842&r2=271843&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/cast.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/cast.ll Sun Jun  5 12:49:45 2016
@@ -226,7 +226,7 @@ define <2 x i1> @test19vec(<2 x i32> %X)
 
 define <3 x i1> @test19vec2(<3 x i1> %X) {
 ; CHECK-LABEL: @test19vec2(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq <3 x i1> %X, zeroinitializer
+; CHECK-NEXT:    [[CMPEQ:%.*]] = xor <3 x i1> %X, <i1 true, i1 true, i1 true>
 ; CHECK-NEXT:    ret <3 x i1> [[CMPEQ]]
 ;
   %sext = sext <3 x i1> %X to <3 x i32>

Modified: llvm/trunk/test/Transforms/InstCombine/set.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/set.ll?rev=271843&r1=271842&r2=271843&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/set.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/set.ll Sun Jun  5 12:49:45 2016
@@ -118,10 +118,10 @@ define i1 @test13(i1 %A, i1 %B) {
   ret i1 %C
 }
 
-; FIXME: Vectors should fold the same as scalars.
 define <2 x i1> @test13vec(<2 x i1> %A, <2 x i1> %B) {
 ; CHECK-LABEL: @test13vec(
-; CHECK-NEXT:    [[C:%.*]] = icmp uge <2 x i1> %A, %B
+; CHECK-NEXT:    [[CTMP:%.*]] = xor <2 x i1> %B, <i1 true, i1 true>
+; CHECK-NEXT:    [[C:%.*]] = or <2 x i1> [[CTMP]], %A
 ; CHECK-NEXT:    ret <2 x i1> [[C]]
 ;
   %C = icmp uge <2 x i1> %A, %B
@@ -138,10 +138,10 @@ define i1 @test14(i1 %A, i1 %B) {
   ret i1 %C
 }
 
-; FIXME: Vectors should fold the same as scalars.
 define <3 x i1> @test14vec(<3 x i1> %A, <3 x i1> %B) {
 ; CHECK-LABEL: @test14vec(
-; CHECK-NEXT:    [[C:%.*]] = icmp eq <3 x i1> %A, %B
+; CHECK-NEXT:    [[CTMP:%.*]] = xor <3 x i1> %A, %B
+; CHECK-NEXT:    [[C:%.*]] = xor <3 x i1> [[CTMP]], <i1 true, i1 true, i1 true>
 ; CHECK-NEXT:    ret <3 x i1> [[C]]
 ;
   %C = icmp eq <3 x i1> %A, %B




More information about the llvm-commits mailing list