[llvm-commits] [llvm] r58947 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Bill Wendling isanbard at gmail.com
Sun Nov 9 15:37:53 PST 2008


Author: void
Date: Sun Nov  9 17:37:53 2008
New Revision: 58947

URL: http://llvm.org/viewvc/llvm-project?rev=58947&view=rev
Log:
Correction for the last patch. Should match the conditional in the first part
of the select match, not the select instruction itself.

Modified:
    llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=58947&r1=58946&r2=58947&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Sun Nov  9 17:37:53 2008
@@ -4352,59 +4352,67 @@
       }
     }
 
-#define SELECT_MATCH(Val) \
-    m_Select(m_Value(Val), m_ConstantInt(0), m_ConstantInt(-1))
 #define GET_SELECT_COND(Val) \
     cast<User>(Val)->getOperand(0)
+#define SELECT_MATCH(Val) \
+    m_Select(m_Value(Val), m_ConstantInt(0), m_ConstantInt(-1))
 
     // (A & (C0?-1:0)) | (B & ~(C0?-1:0)) ->  C0 ? A : B, and commuted variants
     if (match(A, m_Select(m_Value(), m_ConstantInt(-1), m_ConstantInt(0)))) {
-      if (match(D, m_Not(SELECT_MATCH(A))))
-        return SelectInst::Create(GET_SELECT_COND(D), C, B);
-      if (match(B, m_Not(SELECT_MATCH(A))))
-        return SelectInst::Create(GET_SELECT_COND(B), C, D);
+      Value *Cond = GET_SELECT_COND(A);
+      if (match(D, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, C, B);
+      if (match(B, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, C, D);
     }
     if (match(B, m_Select(m_Value(), m_ConstantInt(-1), m_ConstantInt(0)))) {
-      if (match(C, m_Not(SELECT_MATCH(B))))
-        return SelectInst::Create(GET_SELECT_COND(C), A, D);
-      if (match(A, m_Not(SELECT_MATCH(B))))
-        return SelectInst::Create(GET_SELECT_COND(A), C, D);
+      Value *Cond = GET_SELECT_COND(B);
+      if (match(C, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, A, D);
+      if (match(A, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, C, D);
     }
     if (match(C, m_Select(m_Value(), m_ConstantInt(-1), m_ConstantInt(0)))) {
-      if (match(D, m_Not(SELECT_MATCH(C))))
-        return SelectInst::Create(GET_SELECT_COND(D), A, B);
-      if (match(B, m_Not(SELECT_MATCH(C))))
-        return SelectInst::Create(GET_SELECT_COND(B), A, D);
+      Value *Cond = GET_SELECT_COND(C);
+      if (match(D, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, A, B);
+      if (match(B, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, A, D);
     }
     if (match(D, m_Select(m_Value(), m_ConstantInt(-1), m_ConstantInt(0)))) {
-      if (match(C, m_Not(SELECT_MATCH(D))))
-        return SelectInst::Create(GET_SELECT_COND(C), A, B);
-      if (match(A, m_Not(SELECT_MATCH(D))))
-        return SelectInst::Create(GET_SELECT_COND(A), C, B);
+      Value *Cond = GET_SELECT_COND(D);
+      if (match(C, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, A, B);
+      if (match(A, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, C, B);
     }
     if (match(A, m_Select(m_Value(), m_ConstantInt(0), m_ConstantInt(-1)))) {
-      if (match(D, m_Not(SELECT_MATCH(A))))
-        return SelectInst::Create(GET_SELECT_COND(D), B, C);
-      if (match(B, m_Not(SELECT_MATCH(A))))
-        return SelectInst::Create(GET_SELECT_COND(B), D, C);
+      Value *Cond = GET_SELECT_COND(A);
+      if (match(D, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, B, C);
+      if (match(B, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, D, C);
     }
     if (match(B, m_Select(m_Value(), m_ConstantInt(0), m_ConstantInt(-1)))) {
-      if (match(C, m_Not(SELECT_MATCH(B))))
-        return SelectInst::Create(GET_SELECT_COND(C), D, A);
-      if (match(A, m_Not(SELECT_MATCH(B))))
-        return SelectInst::Create(GET_SELECT_COND(A), D, C);
+      Value *Cond = GET_SELECT_COND(B);
+      if (match(C, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, D, A);
+      if (match(A, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, D, C);
     }
     if (match(C, m_Select(m_Value(), m_ConstantInt(0), m_ConstantInt(-1)))) {
-      if (match(D, m_Not(SELECT_MATCH(C))))
-        return SelectInst::Create(GET_SELECT_COND(D), B, A);
-      if (match(B, m_Not(SELECT_MATCH(C))))
-        return SelectInst::Create(GET_SELECT_COND(B), D, A);
+      Value *Cond = GET_SELECT_COND(C);
+      if (match(D, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, B, A);
+      if (match(B, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, D, A);
     }
     if (match(D, m_Select(m_Value(), m_ConstantInt(0), m_ConstantInt(-1)))) {
-      if (match(C, m_Not(SELECT_MATCH(D))))
-        return SelectInst::Create(GET_SELECT_COND(C), B, A);
-      if (match(A, m_Not(SELECT_MATCH(D))))
-        return SelectInst::Create(GET_SELECT_COND(A), B, C);
+      Value *Cond = GET_SELECT_COND(D);
+      if (match(C, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, B, A);
+      if (match(A, m_Not(SELECT_MATCH(Cond))))
+        return SelectInst::Create(Cond, B, C);
     }
 #undef SELECT_MATCH
 #undef GET_SELECT_COND





More information about the llvm-commits mailing list