mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Add a new ShuffleVectorInst::getMaskValue method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47813 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0452ed6bd6
commit
8728f1915f
@ -1228,6 +1228,11 @@ public:
|
|||||||
Ops[i] = Val;
|
Ops[i] = Val;
|
||||||
}
|
}
|
||||||
unsigned getNumOperands() const { return 3; }
|
unsigned getNumOperands() const { return 3; }
|
||||||
|
|
||||||
|
/// getMaskValue - Return the index from the shuffle mask for the specified
|
||||||
|
/// output result. This is either -1 if the element is undef or a number less
|
||||||
|
/// than 2*numelements.
|
||||||
|
int getMaskValue(unsigned i) const;
|
||||||
|
|
||||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||||
static inline bool classof(const ShuffleVectorInst *) { return true; }
|
static inline bool classof(const ShuffleVectorInst *) { return true; }
|
||||||
|
@ -1350,16 +1350,34 @@ ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
|
|||||||
|
|
||||||
bool ShuffleVectorInst::isValidOperands(const Value *V1, const Value *V2,
|
bool ShuffleVectorInst::isValidOperands(const Value *V1, const Value *V2,
|
||||||
const Value *Mask) {
|
const Value *Mask) {
|
||||||
if (!isa<VectorType>(V1->getType())) return false;
|
if (!isa<VectorType>(V1->getType()) ||
|
||||||
if (V1->getType() != V2->getType()) return false;
|
V1->getType() != V2->getType())
|
||||||
if (!isa<VectorType>(Mask->getType()) ||
|
return false;
|
||||||
cast<VectorType>(Mask->getType())->getElementType() != Type::Int32Ty ||
|
|
||||||
cast<VectorType>(Mask->getType())->getNumElements() !=
|
const VectorType *MaskTy = dyn_cast<VectorType>(Mask->getType());
|
||||||
cast<VectorType>(V1->getType())->getNumElements())
|
if (!isa<Constant>(Mask) || MaskTy == 0 ||
|
||||||
|
MaskTy->getElementType() != Type::Int32Ty ||
|
||||||
|
MaskTy->getNumElements() !=
|
||||||
|
cast<VectorType>(V1->getType())->getNumElements())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getMaskValue - Return the index from the shuffle mask for the specified
|
||||||
|
/// output result. This is either -1 if the element is undef or a number less
|
||||||
|
/// than 2*numelements.
|
||||||
|
int ShuffleVectorInst::getMaskValue(unsigned i) const {
|
||||||
|
const Constant *Mask = cast<Constant>(getOperand(2));
|
||||||
|
if (isa<UndefValue>(Mask)) return -1;
|
||||||
|
if (isa<ConstantAggregateZero>(Mask)) return 0;
|
||||||
|
const ConstantVector *MaskCV = cast<ConstantVector>(Mask);
|
||||||
|
assert(i < MaskCV->getNumOperands() && "Index out of range");
|
||||||
|
|
||||||
|
if (isa<UndefValue>(MaskCV->getOperand(i)))
|
||||||
|
return -1;
|
||||||
|
return cast<ConstantInt>(MaskCV->getOperand(i))->getZExtValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// BinaryOperator Class
|
// BinaryOperator Class
|
||||||
|
Loading…
Reference in New Issue
Block a user