Fix inlining of insert/extract element constantexprs
authorChris Lattner <sabre@nondot.org>
Fri, 7 Apr 2006 04:41:03 +0000 (04:41 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 7 Apr 2006 04:41:03 +0000 (04:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27478 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/ValueMapper.cpp

index f1724db1d4773f36ac034f62333ab370cd55a9ea..3093acafab2b83e52b29a149786adc734695d49b 100644 (file)
@@ -85,6 +85,15 @@ Value *llvm::MapValue(const Value *V, std::map<const Value*, Value*> &VM) {
         Constant *MV2 = cast<Constant>(MapValue(CE->getOperand(1), VM));
         Constant *MV3 = cast<Constant>(MapValue(CE->getOperand(2), VM));
         return VMSlot = ConstantExpr::getSelect(MV1, MV2, MV3);
+      } else if (CE->getOpcode() == Instruction::InsertElement) {
+        Constant *MV1 = cast<Constant>(MapValue(CE->getOperand(0), VM));
+        Constant *MV2 = cast<Constant>(MapValue(CE->getOperand(1), VM));
+        Constant *MV3 = cast<Constant>(MapValue(CE->getOperand(2), VM));
+        return VMSlot = ConstantExpr::getInsertElement(MV1, MV2, MV3);
+      } else if (CE->getOpcode() == Instruction::ExtractElement) {
+        Constant *MV1 = cast<Constant>(MapValue(CE->getOperand(0), VM));
+        Constant *MV2 = cast<Constant>(MapValue(CE->getOperand(1), VM));
+        return VMSlot = ConstantExpr::getExtractElement(MV1, MV2);
       } else {
         assert(CE->getNumOperands() == 2 && "Must be binary operator?");
         Constant *MV1 = cast<Constant>(MapValue(CE->getOperand(0), VM));