mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Return Expand from getOperationAction for all extended
types. This is needed for SIGN_EXTEND_INREG at least. It is not clear if this is correct for other operations. On the other hand, for the various load/store actions it seems to correct to return the type action, as is currently done. Also, it seems that SelectionDAG::getValueType can be called for extended value types; introduce a map for holding these, since we don't really want to extend the vector to be 2^32 pointers long! Generalize DAGTypeLegalizer::PromoteResult_TRUNCATE and DAGTypeLegalizer::PromoteResult_INT_EXTEND to handle the various funky possibilities that apints introduce, for example that you can promote to a type that needs to be expanded. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43071 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -527,10 +527,16 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
|
||||
Erased =
|
||||
TargetExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
|
||||
break;
|
||||
case ISD::VALUETYPE:
|
||||
Erased = ValueTypeNodes[cast<VTSDNode>(N)->getVT()] != 0;
|
||||
ValueTypeNodes[cast<VTSDNode>(N)->getVT()] = 0;
|
||||
case ISD::VALUETYPE: {
|
||||
MVT::ValueType VT = cast<VTSDNode>(N)->getVT();
|
||||
if (MVT::isExtendedVT(VT)) {
|
||||
Erased = ExtendedValueTypeNodes.erase(VT);
|
||||
} else {
|
||||
Erased = ValueTypeNodes[VT] != 0;
|
||||
ValueTypeNodes[VT] = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// Remove it from the CSE Map.
|
||||
Erased = CSEMap.RemoveNode(N);
|
||||
@@ -847,15 +853,16 @@ SDOperand SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
|
||||
}
|
||||
|
||||
SDOperand SelectionDAG::getValueType(MVT::ValueType VT) {
|
||||
assert(!MVT::isExtendedVT(VT) && "Expecting a simple value type!");
|
||||
if ((unsigned)VT >= ValueTypeNodes.size())
|
||||
if (!MVT::isExtendedVT(VT) && (unsigned)VT >= ValueTypeNodes.size())
|
||||
ValueTypeNodes.resize(VT+1);
|
||||
if (ValueTypeNodes[VT] == 0) {
|
||||
ValueTypeNodes[VT] = new VTSDNode(VT);
|
||||
AllNodes.push_back(ValueTypeNodes[VT]);
|
||||
}
|
||||
|
||||
return SDOperand(ValueTypeNodes[VT], 0);
|
||||
SDNode *&N = MVT::isExtendedVT(VT) ?
|
||||
ExtendedValueTypeNodes[VT] : ValueTypeNodes[VT];
|
||||
|
||||
if (N) return SDOperand(N, 0);
|
||||
N = new VTSDNode(VT);
|
||||
AllNodes.push_back(N);
|
||||
return SDOperand(N, 0);
|
||||
}
|
||||
|
||||
SDOperand SelectionDAG::getExternalSymbol(const char *Sym, MVT::ValueType VT) {
|
||||
|
Reference in New Issue
Block a user