mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
Truncate the arguments of llvm.frameaddress / llvm.returnaddress intrinsics from i32 to platform's largest native type
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90741 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06ccca5f70
commit
1c3436a67a
@ -1996,7 +1996,9 @@ bool DAGTypeLegalizer::ExpandIntegerOperand(SDNode *N, unsigned OpNo) {
|
||||
case ISD::SRA:
|
||||
case ISD::SRL:
|
||||
case ISD::ROTL:
|
||||
case ISD::ROTR: Res = ExpandIntOp_Shift(N); break;
|
||||
case ISD::ROTR: Res = ExpandIntOp_Shift(N); break;
|
||||
case ISD::RETURNADDR:
|
||||
case ISD::FRAMEADDR: Res = ExpandIntOp_RETURNADDR(N); break;
|
||||
}
|
||||
|
||||
// If the result is null, the sub-method took care of registering results etc.
|
||||
@ -2180,6 +2182,15 @@ SDValue DAGTypeLegalizer::ExpandIntOp_Shift(SDNode *N) {
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0), Lo);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_RETURNADDR(SDNode *N) {
|
||||
// The argument of RETURNADDR / FRAMEADDR builtin is 32 bit contant. This
|
||||
// surely makes pretty nice problems on 8/16 bit targets. Just truncate this
|
||||
// constant to valid type.
|
||||
SDValue Lo, Hi;
|
||||
GetExpandedInteger(N->getOperand(0), Lo, Hi);
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), Lo);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_SINT_TO_FP(SDNode *N) {
|
||||
SDValue Op = N->getOperand(0);
|
||||
EVT DstVT = N->getValueType(0);
|
||||
|
@ -362,6 +362,7 @@ private:
|
||||
SDValue ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo);
|
||||
SDValue ExpandIntOp_TRUNCATE(SDNode *N);
|
||||
SDValue ExpandIntOp_UINT_TO_FP(SDNode *N);
|
||||
SDValue ExpandIntOp_RETURNADDR(SDNode *N);
|
||||
|
||||
void IntegerExpandSetCCOperands(SDValue &NewLHS, SDValue &NewRHS,
|
||||
ISD::CondCode &CCCode, DebugLoc dl);
|
||||
|
Loading…
x
Reference in New Issue
Block a user