InsertValue and ExtractValue constant expressions are always
authorDan Gohman <gohman@apple.com>
Mon, 21 Jul 2008 23:30:30 +0000 (23:30 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 21 Jul 2008 23:30:30 +0000 (23:30 +0000)
folded. Remove code that handled the case where they aren't
folded, and remove bitcode reader/writer support for them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53887 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/LLVMBitCodes.h
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Writer/BitcodeWriter.cpp
lib/VMCore/Constants.cpp

index da3604855a0e054a7f394b0401667b1ae42d5401..ef7f870c1a18129f0e9fb745b6baa896c759d460 100644 (file)
@@ -125,9 +125,7 @@ namespace bitc {
     CST_CODE_CE_INSERTELT  = 15,  // CE_INSERTELT:  [opval, opval, opval]
     CST_CODE_CE_SHUFFLEVEC = 16,  // CE_SHUFFLEVEC: [opval, opval, opval]
     CST_CODE_CE_CMP        = 17,  // CE_CMP:        [opty, opval, opval, pred]
-    CST_CODE_INLINEASM     = 18,  // INLINEASM:     [sideeffect,asmstr,conststr]
-    CST_CODE_CE_EXTRACTVAL = 19,  // CE_EXTRACTVAL: [n x operands]
-    CST_CODE_CE_INSERTVAL  = 20   // CE_INSERTVAL:  [n x operands]
+    CST_CODE_INLINEASM     = 18   // INLINEASM:     [sideeffect,asmstr,conststr]
   };
   
   /// CastOpcodes - These are values used in the bitcode files to encode which
index a8c62be88fc87bcc1d4d54f7b8f4034d2fca2235..3e2af4f17259cd0e84a8f04aa8f00bfe7f37a8fc 100644 (file)
@@ -770,47 +770,6 @@ bool BitcodeReader::ParseConstants() {
       V = ConstantExpr::getGetElementPtr(Elts[0], &Elts[1], Elts.size()-1);
       break;
     }
-    case bitc::CST_CODE_CE_EXTRACTVAL: {
-                                    // CE_EXTRACTVAL: [opty, opval, n x indices]
-      const Type *AggTy = getTypeByID(Record[0]);
-      if (!AggTy || !AggTy->isAggregateType())
-        return Error("Invalid CE_EXTRACTVAL record");
-      Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
-      SmallVector<unsigned, 4> Indices;
-      for (unsigned i = 2, e = Record.size(); i != e; ++i) {
-        uint64_t Index = Record[i];
-        if ((unsigned)Index != Index)
-          return Error("Invalid CE_EXTRACTVAL record");
-        Indices.push_back((unsigned)Index);
-      }
-      if (!ExtractValueInst::getIndexedType(AggTy,
-                                            Indices.begin(), Indices.end()))
-        return Error("Invalid CE_EXTRACTVAL record");
-      V = ConstantExpr::getExtractValue(Agg, &Indices[0], Indices.size());
-      break;
-    }
-    case bitc::CST_CODE_CE_INSERTVAL: {
-                        // CE_INSERTVAL: [opty, opval, opty, opval, n x indices]
-      const Type *AggTy = getTypeByID(Record[0]);
-      if (!AggTy || !AggTy->isAggregateType())
-        return Error("Invalid CE_INSERTVAL record");
-      Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
-      const Type *ValTy = getTypeByID(Record[2]);
-      Constant *Val = ValueList.getConstantFwdRef(Record[3], ValTy);
-      SmallVector<unsigned, 4> Indices;
-      for (unsigned i = 4, e = Record.size(); i != e; ++i) {
-        uint64_t Index = Record[i];
-        if ((unsigned)Index != Index)
-          return Error("Invalid CE_INSERTVAL record");
-        Indices.push_back((unsigned)Index);
-      }
-      if (ExtractValueInst::getIndexedType(AggTy,
-                                           Indices.begin(),
-                                           Indices.end()) != ValTy)
-        return Error("Invalid CE_INSERTVAL record");
-      V = ConstantExpr::getInsertValue(Agg, Val, &Indices[0], Indices.size());
-      break;
-    }
     case bitc::CST_CODE_CE_SELECT:  // CE_SELECT: [opval#, opval#, opval#]
       if (Record.size() < 3) return Error("Invalid CE_SELECT record");
       V = ConstantExpr::getSelect(ValueList.getConstantFwdRef(Record[0],
index 9794fac009c25c2ca0e8414ce8ea92bb705364fd..f4d73598b9ff72524f71927835628f6fcbda4e3d 100644 (file)
@@ -611,26 +611,6 @@ static void WriteConstants(unsigned FirstVal, unsigned LastVal,
           Record.push_back(VE.getValueID(C->getOperand(i)));
         }
         break;
-      case Instruction::ExtractValue: {
-        Code = bitc::CST_CODE_CE_EXTRACTVAL;
-        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
-        Record.push_back(VE.getValueID(C->getOperand(0)));
-        const SmallVector<unsigned, 4> &Indices = CE->getIndices();
-        for (unsigned i = 0, e = Indices.size(); i != e; ++i)
-          Record.push_back(Indices[i]);
-        break;
-      }
-      case Instruction::InsertValue: {
-        Code = bitc::CST_CODE_CE_INSERTVAL;
-        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
-        Record.push_back(VE.getValueID(C->getOperand(0)));
-        Record.push_back(VE.getTypeID(C->getOperand(1)->getType()));
-        Record.push_back(VE.getValueID(C->getOperand(1)));
-        const SmallVector<unsigned, 4> &Indices = CE->getIndices();
-        for (unsigned i = 0, e = Indices.size(); i != e; ++i)
-          Record.push_back(Indices[i]);
-        break;
-      }
       case Instruction::Select:
         Code = bitc::CST_CODE_CE_SELECT;
         Record.push_back(VE.getValueID(C->getOperand(0)));
index 48b0a8f31a5f31ccbb418cf07f1787aedacd7dab..e22449bab63683319b274ba52621df7f27f7b814 100644 (file)
@@ -857,19 +857,6 @@ ConstantExpr::getWithOperandReplaced(unsigned OpNo, Constant *Op) const {
     Op1 = (OpNo == 1) ? Op : getOperand(1);
     Op2 = (OpNo == 2) ? Op : getOperand(2);
     return ConstantExpr::getShuffleVector(Op0, Op1, Op2);
-  case Instruction::InsertValue: {
-    const SmallVector<unsigned, 4> &Indices = getIndices();
-    Op0 = (OpNo == 0) ? Op : getOperand(0);
-    Op1 = (OpNo == 1) ? Op : getOperand(1);
-    return ConstantExpr::getInsertValue(Op0, Op1,
-                                        &Indices[0], Indices.size());
-  }
-  case Instruction::ExtractValue: {
-    assert(OpNo == 0 && "ExtractaValue has only one operand!");
-    const SmallVector<unsigned, 4> &Indices = getIndices();
-    return
-      ConstantExpr::getExtractValue(Op, &Indices[0], Indices.size());
-  }
   case Instruction::GetElementPtr: {
     SmallVector<Constant*, 8> Ops;
     Ops.resize(getNumOperands()-1);
@@ -925,16 +912,6 @@ getWithOperands(const std::vector<Constant*> &Ops) const {
     return ConstantExpr::getExtractElement(Ops[0], Ops[1]);
   case Instruction::ShuffleVector:
     return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2]);
-  case Instruction::InsertValue: {
-    const SmallVector<unsigned, 4> &Indices = getIndices();
-    return ConstantExpr::getInsertValue(Ops[0], Ops[1],
-                                        &Indices[0], Indices.size());
-  }
-  case Instruction::ExtractValue: {
-    const SmallVector<unsigned, 4> &Indices = getIndices();
-    return ConstantExpr::getExtractValue(Ops[0],
-                                         &Indices[0], Indices.size());
-  }
   case Instruction::GetElementPtr:
     return ConstantExpr::getGetElementPtr(Ops[0], &Ops[1], Ops.size()-1);
   case Instruction::ICmp:
@@ -2365,15 +2342,9 @@ Constant *ConstantExpr::getInsertValueTy(const Type *ReqTy, Constant *Agg,
          "insertvalue type invalid!");
   assert(Agg->getType()->isFirstClassType() &&
          "Non-first-class type for constant InsertValue expression");
-  if (Constant *FC = ConstantFoldInsertValueInstruction(Agg, Val, Idxs, NumIdx))
-    return FC;          // Fold a few common cases...
-  // Look up the constant in the table first to ensure uniqueness
-  std::vector<Constant*> ArgVec;
-  ArgVec.push_back(Agg);
-  ArgVec.push_back(Val);
-  SmallVector<unsigned, 4> Indices(Idxs, Idxs + NumIdx);
-  const ExprMapKeyType Key(Instruction::InsertValue, ArgVec, 0, Indices);
-  return ExprConstants->getOrCreate(ReqTy, Key);
+  Constant *FC = ConstantFoldInsertValueInstruction(Agg, Val, Idxs, NumIdx);
+  assert(FC && "InsertValue constant expr couldn't be folded!");
+  return FC;
 }
 
 Constant *ConstantExpr::getInsertValue(Constant *Agg, Constant *Val,
@@ -2395,14 +2366,9 @@ Constant *ConstantExpr::getExtractValueTy(const Type *ReqTy, Constant *Agg,
          "extractvalue indices invalid!");
   assert(Agg->getType()->isFirstClassType() &&
          "Non-first-class type for constant extractvalue expression");
-  if (Constant *FC = ConstantFoldExtractValueInstruction(Agg, Idxs, NumIdx))
-    return FC;          // Fold a few common cases...
-  // Look up the constant in the table first to ensure uniqueness
-  std::vector<Constant*> ArgVec;
-  ArgVec.push_back(Agg);
-  SmallVector<unsigned, 4> Indices(Idxs, Idxs + NumIdx);
-  const ExprMapKeyType Key(Instruction::ExtractValue, ArgVec, 0, Indices);
-  return ExprConstants->getOrCreate(ReqTy, Key);
+  Constant *FC = ConstantFoldExtractValueInstruction(Agg, Idxs, NumIdx);
+  assert(FC && "ExtractValue constant expr couldn't be folded!");
+  return FC;
 }
 
 Constant *ConstantExpr::getExtractValue(Constant *Agg,