[llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Apr 7 21:09:32 PDT 2006
Changes in directory llvm/lib/Bytecode/Reader:
Reader.cpp updated: 1.192 -> 1.193
---
Log message:
use isValidOperands instead of duplicating checks
---
Diffs of the changes: (+24 -13)
Reader.cpp | 37 ++++++++++++++++++++++++-------------
1 files changed, 24 insertions(+), 13 deletions(-)
Index: llvm/lib/Bytecode/Reader/Reader.cpp
diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.192 llvm/lib/Bytecode/Reader/Reader.cpp:1.193
--- llvm/lib/Bytecode/Reader/Reader.cpp:1.192 Fri Apr 7 20:17:59 2006
+++ llvm/lib/Bytecode/Reader/Reader.cpp Fri Apr 7 23:09:19 2006
@@ -719,19 +719,27 @@
case Instruction::ExtractElement: {
if (Oprnds.size() != 2)
throw std::string("Invalid extractelement instruction!");
- Result = new ExtractElementInst(getValue(iType, Oprnds[0]),
- getValue(Type::UIntTyID, Oprnds[1]));
+ Value *V1 = getValue(iType, Oprnds[0]);
+ Value *V2 = getValue(Type::UIntTyID, Oprnds[1]);
+
+ if (!ExtractElementInst::isValidOperands(V1, V2))
+ throw std::string("Invalid extractelement instruction!");
+
+ Result = new ExtractElementInst(V1, V2);
break;
}
case Instruction::InsertElement: {
const PackedType *PackedTy = dyn_cast<PackedType>(InstTy);
if (!PackedTy || Oprnds.size() != 3)
throw std::string("Invalid insertelement instruction!");
- Result =
- new InsertElementInst(getValue(iType, Oprnds[0]),
- getValue(getTypeSlot(PackedTy->getElementType()),
- Oprnds[1]),
- getValue(Type::UIntTyID, Oprnds[2]));
+
+ Value *V1 = getValue(iType, Oprnds[0]);
+ Value *V2 = getValue(getTypeSlot(PackedTy->getElementType()), Oprnds[1]);
+ Value *V3 = getValue(Type::UIntTyID, Oprnds[2]);
+
+ if (!InsertElementInst::isValidOperands(V1, V2, V3))
+ throw std::string("Invalid insertelement instruction!");
+ Result = new InsertElementInst(V1, V2, V3);
break;
}
case Instruction::ShuffleVector: {
@@ -1495,22 +1503,25 @@
if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
return Result;
} else if (Opcode == Instruction::ExtractElement) {
- if (ArgVec.size() != 2)
- error("ExtractElement instruction must have two arguments.");
+ if (ArgVec.size() != 2 ||
+ !ExtractElementInst::isValidOperands(ArgVec[0], ArgVec[1]))
+ error("Invalid extractelement constand expr arguments");
Constant* Result = ConstantExpr::getExtractElement(ArgVec[0], ArgVec[1]);
if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
return Result;
} else if (Opcode == Instruction::InsertElement) {
- if (ArgVec.size() != 3)
- error("InsertElement instruction must have three arguments.");
- Constant* Result =
+ if (ArgVec.size() != 3 ||
+ !InsertElementInst::isValidOperands(ArgVec[0], ArgVec[1], ArgVec[2]))
+ error("Invalid insertelement constand expr arguments");
+
+ Constant *Result =
ConstantExpr::getInsertElement(ArgVec[0], ArgVec[1], ArgVec[2]);
if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
return Result;
} else if (Opcode == Instruction::ShuffleVector) {
if (ArgVec.size() != 3 ||
!ShuffleVectorInst::isValidOperands(ArgVec[0], ArgVec[1], ArgVec[2]))
- error("shufflevector constant expr must have three arguments.");
+ error("Invalid shufflevector constant expr arguments.");
Constant *Result =
ConstantExpr::getShuffleVector(ArgVec[0], ArgVec[1], ArgVec[2]);
if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
More information about the llvm-commits
mailing list