diff options
author | Dan Gohman <gohman@apple.com> | 2008-05-23 00:36:11 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-05-23 00:36:11 +0000 |
commit | e4569943d936d73dec6f36f545e9902095bd3fd8 (patch) | |
tree | 8918af17baca9e072ee2f33e1b1ee4bdc3faa294 /lib/VMCore/Constants.cpp | |
parent | 4fa2a3f0efe0081272b09550fef6251d355047e4 (diff) | |
download | external_llvm-e4569943d936d73dec6f36f545e9902095bd3fd8.zip external_llvm-e4569943d936d73dec6f36f545e9902095bd3fd8.tar.gz external_llvm-e4569943d936d73dec6f36f545e9902095bd3fd8.tar.bz2 |
Add more IR support for the new extractvalue and insertvalue
instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51461 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Constants.cpp')
-rw-r--r-- | lib/VMCore/Constants.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 75a2b00..1a79811 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -2308,8 +2308,8 @@ Constant *ConstantExpr::getInsertValueTy(const Type *ReqTy, Constant *Agg, if (Constant *FC = ConstantFoldInsertValue(Agg, Val, Idxs, NumIdx)) return FC; // Fold a few common cases... - assert(isa<PointerType>(Agg->getType()) && - "Non-pointer type for constant InsertValue expression"); + assert(Agg->getType()->isFirstClassType() && + "Non-first-class type for constant InsertValue expression"); // Look up the constant in the table first to ensure uniqueness std::vector<Constant*> ArgVec; ArgVec.reserve(NumIdx+2); @@ -2323,13 +2323,13 @@ Constant *ConstantExpr::getInsertValueTy(const Type *ReqTy, Constant *Agg, Constant *ConstantExpr::getInsertValue(Constant *Agg, Constant *Val, Constant* const *IdxList, unsigned NumIdx) { - assert((isa<StructType>(Agg->getType()) || isa<ArrayType>(Agg->getType()) || - isa<VectorType>(Agg->getType())) && - "Tried to create insertelement operation on non-aggregate type!"); + assert(Agg->getType()->isFirstClassType() && + "Tried to create insertelement operation on non-first-class type!"); - const Type *ReqTy = + const Type *ReqTy = Agg->getType(); + const Type *ValTy = ExtractValueInst::getIndexedType(Agg->getType(), IdxList, IdxList+NumIdx); - assert(ReqTy && "insertvalue indices invalid!"); + assert(ValTy == Val->getType() && "insertvalue indices invalid!"); return getInsertValueTy(ReqTy, Agg, Val, IdxList, NumIdx); } @@ -2342,8 +2342,8 @@ Constant *ConstantExpr::getExtractValueTy(const Type *ReqTy, Constant *Agg, if (Constant *FC = ConstantFoldExtractValue(Agg, Idxs, NumIdx)) return FC; // Fold a few common cases... - assert(isa<PointerType>(Agg->getType()) && - "Non-pointer type for constant ExtractValue expression"); + assert(Agg->getType()->isFirstClassType() && + "Non-first-class type for constant extractvalue expression"); // Look up the constant in the table first to ensure uniqueness std::vector<Constant*> ArgVec; ArgVec.reserve(NumIdx+1); @@ -2356,9 +2356,8 @@ Constant *ConstantExpr::getExtractValueTy(const Type *ReqTy, Constant *Agg, Constant *ConstantExpr::getExtractValue(Constant *Agg, Constant* const *IdxList, unsigned NumIdx) { - assert((isa<StructType>(Agg->getType()) || isa<ArrayType>(Agg->getType()) || - isa<VectorType>(Agg->getType())) && - "Tried to create extractelement operation on non-aggregate type!"); + assert(Agg->getType()->isFirstClassType() && + "Tried to create extractelement operation on non-first-class type!"); const Type *ReqTy = ExtractValueInst::getIndexedType(Agg->getType(), IdxList, IdxList+NumIdx); |