mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
Add methods to check insertelement/extractelement instructions for validity,
check validity when instructions are created. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27523 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fa495844a6
commit
d2325d0a73
@ -804,6 +804,8 @@ ExtractElementInst::ExtractElementInst(Value *Val, Value *Index,
|
||||
Instruction *InsertBef)
|
||||
: Instruction(cast<PackedType>(Val->getType())->getElementType(),
|
||||
ExtractElement, Ops, 2, Name, InsertBef) {
|
||||
assert(isValidOperands(Val, Index) &&
|
||||
"Invalid extractelement instruction operands!");
|
||||
Ops[0].init(Val, this);
|
||||
Ops[1].init(Index, this);
|
||||
}
|
||||
@ -813,32 +815,61 @@ ExtractElementInst::ExtractElementInst(Value *Val, Value *Index,
|
||||
BasicBlock *InsertAE)
|
||||
: Instruction(cast<PackedType>(Val->getType())->getElementType(),
|
||||
ExtractElement, Ops, 2, Name, InsertAE) {
|
||||
assert(isValidOperands(Val, Index) &&
|
||||
"Invalid extractelement instruction operands!");
|
||||
|
||||
Ops[0].init(Val, this);
|
||||
Ops[1].init(Index, this);
|
||||
}
|
||||
|
||||
bool ExtractElementInst::isValidOperands(const Value *Val, const Value *Index) {
|
||||
if (!isa<PackedType>(Val->getType()) || Index->getType() != Type::UIntTy)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// InsertElementInst Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
InsertElementInst::InsertElementInst(Value *Val, Value *Elt, Value *Index,
|
||||
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
|
||||
const std::string &Name,
|
||||
Instruction *InsertBef)
|
||||
: Instruction(Val->getType(), InsertElement, Ops, 3, Name, InsertBef) {
|
||||
Ops[0].init(Val, this);
|
||||
: Instruction(Vec->getType(), InsertElement, Ops, 3, Name, InsertBef) {
|
||||
assert(isValidOperands(Vec, Elt, Index) &&
|
||||
"Invalid insertelement instruction operands!");
|
||||
Ops[0].init(Vec, this);
|
||||
Ops[1].init(Elt, this);
|
||||
Ops[2].init(Index, this);
|
||||
}
|
||||
|
||||
InsertElementInst::InsertElementInst(Value *Val, Value *Elt, Value *Index,
|
||||
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
|
||||
const std::string &Name,
|
||||
BasicBlock *InsertAE)
|
||||
: Instruction(Val->getType(), InsertElement, Ops, 3, Name, InsertAE) {
|
||||
Ops[0].init(Val, this);
|
||||
: Instruction(Vec->getType(), InsertElement, Ops, 3, Name, InsertAE) {
|
||||
assert(isValidOperands(Vec, Elt, Index) &&
|
||||
"Invalid insertelement instruction operands!");
|
||||
|
||||
Ops[0].init(Vec, this);
|
||||
Ops[1].init(Elt, this);
|
||||
Ops[2].init(Index, this);
|
||||
}
|
||||
|
||||
bool InsertElementInst::isValidOperands(const Value *Vec, const Value *Elt,
|
||||
const Value *Index) {
|
||||
if (!isa<PackedType>(Vec->getType()))
|
||||
return false; // First operand of insertelement must be packed type.
|
||||
|
||||
if (Elt->getType() != cast<PackedType>(Vec->getType())->getElementType())
|
||||
return false;// Second operand of insertelement must be packed element type.
|
||||
|
||||
if (Index->getType() != Type::UIntTy)
|
||||
return false; // Third operand of insertelement must be uint.
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ShuffleVectorInst Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
x
Reference in New Issue
Block a user