mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-20 02:31:37 +00:00
Add support for targets that have a legal ISD::TRAP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46014 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9a79de3d09
commit
41bab0beac
lib/CodeGen/SelectionDAG
@ -3734,24 +3734,29 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
case ISD::TRAP: {
|
||||
case ISD::TRAP: {
|
||||
MVT::ValueType VT = Node->getValueType(0);
|
||||
switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
|
||||
default: assert(0 && "This action not supported for this op yet!");
|
||||
case TargetLowering::Legal:
|
||||
Tmp1 = LegalizeOp(Node->getOperand(0));
|
||||
Result = DAG.UpdateNodeOperands(Result, Tmp1);
|
||||
break;
|
||||
case TargetLowering::Custom:
|
||||
Result = TLI.LowerOperation(Op, DAG);
|
||||
if (Result.Val) break;
|
||||
// Fall Thru
|
||||
case TargetLowering::Legal:
|
||||
case TargetLowering::Expand:
|
||||
// If this operation is not supported, lower it to 'abort()' call
|
||||
SDOperand Chain = LegalizeOp(Node->getOperand(0));
|
||||
Tmp1 = LegalizeOp(Node->getOperand(0));
|
||||
TargetLowering::ArgListTy Args;
|
||||
std::pair<SDOperand,SDOperand> CallResult =
|
||||
TLI.LowerCallTo(Chain, Type::VoidTy, false, false, CallingConv::C, false,
|
||||
TLI.LowerCallTo(Tmp1, Type::VoidTy, false, false, CallingConv::C, false,
|
||||
DAG.getExternalSymbol("abort", MVT::Other), Args, DAG);
|
||||
Result = CallResult.second;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,6 +175,9 @@ TargetLowering::TargetLowering(TargetMachine &tm)
|
||||
setOperationAction(ISD::FGETSIGN, (MVT::ValueType)VT, Expand);
|
||||
}
|
||||
|
||||
// Default ISD::TRAP to expand (which turns it into abort).
|
||||
setOperationAction(ISD::TRAP, MVT::Other, Expand);
|
||||
|
||||
IsLittleEndian = TD->isLittleEndian();
|
||||
UsesGlobalOffsetTable = false;
|
||||
ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType());
|
||||
|
Loading…
x
Reference in New Issue
Block a user