mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
implement vector.ll:test_undef
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26845 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1e4af78b95
commit
23d564c11f
@ -730,12 +730,16 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
std::vector<Constant*> CV;
|
||||
if (MVT::isFloatingPoint(VT)) {
|
||||
for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
|
||||
double V = cast<ConstantFPSDNode>(Node->getOperand(i))->getValue();
|
||||
double V = 0;
|
||||
if (Node->getOperand(i).getOpcode() != ISD::UNDEF)
|
||||
V = cast<ConstantFPSDNode>(Node->getOperand(i))->getValue();
|
||||
CV.push_back(ConstantFP::get(OpNTy, V));
|
||||
}
|
||||
} else {
|
||||
for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
|
||||
uint64_t V = cast<ConstantSDNode>(Node->getOperand(i))->getValue();
|
||||
uint64_t V = 0;
|
||||
if (Node->getOperand(i).getOpcode() != ISD::UNDEF)
|
||||
V = cast<ConstantSDNode>(Node->getOperand(i))->getValue();
|
||||
CV.push_back(ConstantUInt::get(OpNTy, V));
|
||||
}
|
||||
}
|
||||
|
@ -516,13 +516,26 @@ SDOperand SelectionDAGLowering::getValue(const Value *V) {
|
||||
} else if (isa<ConstantPointerNull>(C)) {
|
||||
return N = DAG.getConstant(0, TLI.getPointerTy());
|
||||
} else if (isa<UndefValue>(C)) {
|
||||
return N = DAG.getNode(ISD::UNDEF, VT);
|
||||
if (!isa<PackedType>(VTy))
|
||||
return N = DAG.getNode(ISD::UNDEF, VT);
|
||||
|
||||
// Create a VConstant of undef nodes.
|
||||
const PackedType *PTy = cast<PackedType>(VTy);
|
||||
unsigned NumElements = PTy->getNumElements();
|
||||
MVT::ValueType PVT = TLI.getValueType(PTy->getElementType());
|
||||
|
||||
std::vector<SDOperand> Ops;
|
||||
Ops.assign(NumElements, DAG.getNode(ISD::UNDEF, PVT));
|
||||
|
||||
// Create a VConstant node with generic Vector type.
|
||||
Ops.push_back(DAG.getConstant(NumElements, MVT::i32));
|
||||
Ops.push_back(DAG.getValueType(PVT));
|
||||
return N = DAG.getNode(ISD::VConstant, MVT::Vector, Ops);
|
||||
} else if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
|
||||
return N = DAG.getConstantFP(CFP->getValue(), VT);
|
||||
} else if (const PackedType *PTy = dyn_cast<PackedType>(VTy)) {
|
||||
unsigned NumElements = PTy->getNumElements();
|
||||
MVT::ValueType PVT = TLI.getValueType(PTy->getElementType());
|
||||
MVT::ValueType TVT = MVT::getVectorType(PVT, NumElements);
|
||||
|
||||
// Now that we know the number and type of the elements, push a
|
||||
// Constant or ConstantFP node onto the ops list for each element of
|
||||
@ -551,11 +564,9 @@ SDOperand SelectionDAGLowering::getValue(const Value *V) {
|
||||
Ops.assign(NumElements, Op);
|
||||
}
|
||||
|
||||
// Create a ConstantVec node with generic Vector type.
|
||||
SDOperand Num = DAG.getConstant(NumElements, MVT::i32);
|
||||
SDOperand Typ = DAG.getValueType(PVT);
|
||||
Ops.push_back(Num);
|
||||
Ops.push_back(Typ);
|
||||
// Create a VConstant node with generic Vector type.
|
||||
Ops.push_back(DAG.getConstant(NumElements, MVT::i32));
|
||||
Ops.push_back(DAG.getValueType(PVT));
|
||||
return N = DAG.getNode(ISD::VConstant, MVT::Vector, Ops);
|
||||
} else {
|
||||
// Canonicalize all constant ints to be unsigned.
|
||||
|
Loading…
Reference in New Issue
Block a user