Add support for constant select expressions. Clarify the assertion failure msg.
authorBrian Gaeke <gaeke@uiuc.edu>
Fri, 2 Apr 2004 17:52:29 +0000 (17:52 +0000)
committerBrian Gaeke <gaeke@uiuc.edu>
Fri, 2 Apr 2004 17:52:29 +0000 (17:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12613 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9PreSelection.cpp

index 90a5fa782cf5522f2b62d2aff7ae424a084fd03f..9677b45a2e2709af61046db48ce4e69609e47273 100644 (file)
@@ -104,7 +104,7 @@ static Instruction* DecomposeConstantExpr(ConstantExpr* CE,
                                           Instruction& insertBefore)
 {
   Value *getArg1, *getArg2;
-
+  
   switch(CE->getOpcode())
     {
     case Instruction::Cast:
@@ -124,11 +124,25 @@ static Instruction* DecomposeConstantExpr(ConstantExpr* CE,
       return new GetElementPtrInst(getArg1,
                           std::vector<Value*>(CE->op_begin()+1, CE->op_end()),
                           "constantGEP", &insertBefore);
-
+                          
+    case Instruction::Select: {
+      Value *C, *S1, *S2;
+      C = CE->getOperand (0);
+      if (ConstantExpr* CEarg = dyn_cast<ConstantExpr> (C))
+        C = DecomposeConstantExpr (CEarg, insertBefore);
+      S1 = CE->getOperand (1);
+      if (ConstantExpr* CEarg = dyn_cast<ConstantExpr> (S1))
+        S1 = DecomposeConstantExpr (CEarg, insertBefore);
+      S2 = CE->getOperand (2);
+      if (ConstantExpr* CEarg = dyn_cast<ConstantExpr> (S2))
+        S2 = DecomposeConstantExpr (CEarg, insertBefore);
+      return new SelectInst (C, S1, S2);
+    }
+    
     default:                            // must be a binary operator
       assert(CE->getOpcode() >= Instruction::BinaryOpsBegin &&
              CE->getOpcode() <  Instruction::BinaryOpsEnd &&
-             "Unrecognized opcode in ConstantExpr");
+             "Unhandled opcode in ConstantExpr");
       getArg1 = CE->getOperand(0);
       if (ConstantExpr* CEarg = dyn_cast<ConstantExpr>(getArg1))
         getArg1 = DecomposeConstantExpr(CEarg, insertBefore);