simplify by using ShuffleVectorInst::getMaskValue.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149029 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2012-01-26 02:54:54 +00:00
parent 56243b89e7
commit 71a494d697

View File

@ -787,24 +787,22 @@ Constant *llvm::ConstantFoldShuffleVectorInstruction(Constant *V1,
// Undefined shuffle mask -> undefined value.
if (isa<UndefValue>(Mask)) return UndefValue::get(V1->getType());
unsigned MaskNumElts = cast<VectorType>(Mask->getType())->getNumElements();
unsigned SrcNumElts = cast<VectorType>(V1->getType())->getNumElements();
Type *EltTy = cast<VectorType>(V1->getType())->getElementType();
unsigned MaskNumElts = Mask->getType()->getVectorNumElements();
unsigned SrcNumElts = V1->getType()->getVectorNumElements();
Type *EltTy = V1->getType()->getVectorElementType();
// Loop over the shuffle mask, evaluating each element.
SmallVector<Constant*, 32> Result;
for (unsigned i = 0; i != MaskNumElts; ++i) {
Constant *InElt = Mask->getAggregateElement(i);
if (InElt == 0) return 0;
if (isa<UndefValue>(InElt)) {
int Elt = ShuffleVectorInst::getMaskValue(Mask, i);
if (Elt == -1) {
Result.push_back(UndefValue::get(EltTy));
continue;
}
unsigned Elt = cast<ConstantInt>(InElt)->getZExtValue();
if (Elt >= SrcNumElts*2)
Constant *InElt;
if (unsigned(Elt) >= SrcNumElts*2)
InElt = UndefValue::get(EltTy);
else if (Elt >= SrcNumElts)
else if (unsigned(Elt) >= SrcNumElts)
InElt = V2->getAggregateElement(Elt - SrcNumElts);
else
InElt = V1->getAggregateElement(Elt);