Fixed scalarizing an extract subvector and prevent an infinite loop

when simplify a vector. 

llvm-svn: 58820
This commit is contained in:
Mon P Wang 2008-11-06 22:52:21 +00:00
parent 1e6576e1e0
commit 888f4e6fb0
2 changed files with 9 additions and 3 deletions

View File

@ -7516,8 +7516,8 @@ SDValue SelectionDAGLegalize::ScalarizeVectorOp(SDValue Op) {
break;
}
case ISD::EXTRACT_SUBVECTOR:
Result = Node->getOperand(0);
assert(Result.getValueType() == NewVT);
Result = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, NewVT, Node->getOperand(0),
Node->getOperand(1));
break;
case ISD::BIT_CONVERT: {
SDValue Op0 = Op.getOperand(0);
@ -8174,7 +8174,7 @@ void SelectionDAGLegalize::genWidenVectorStores(SDValueVector& StChain,
SDValue VecOp = DAG.getNode(ISD::BIT_CONVERT, VecEVT, ValOp);
SDValue EOp = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, EVT, VecOp,
DAG.getIntPtrConstant(0));
DAG.getIntPtrConstant(0));
SDValue StOp = DAG.getStore(Chain, EOp, BasePtr, SV, SVOffset,
isVolatile, Alignment);
StChain.push_back(StOp);

View File

@ -1410,6 +1410,12 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, uint64_t DemandedElts,
} else if (isa<ConstantAggregateZero>(V)) {
// Simplify the CAZ to a ConstantVector where the non-demanded elements are
// set to undef.
// Check if this is identity. If so, return 0 since we are not simplifying
// anything.
if (DemandedElts == ((1ULL << VWidth) -1))
return 0;
const Type *EltTy = cast<VectorType>(V->getType())->getElementType();
Constant *Zero = Constant::getNullValue(EltTy);
Constant *Undef = UndefValue::get(EltTy);