mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 06:25:18 +00:00
Fix PR2977: LegalizeTypes support for expanding
VAARG. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58379 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -575,6 +575,7 @@ void DAGTypeLegalizer::ExpandFloatResult(SDNode *N, unsigned ResNo) {
|
|||||||
case ISD::BUILD_PAIR: ExpandRes_BUILD_PAIR(N, Lo, Hi); break;
|
case ISD::BUILD_PAIR: ExpandRes_BUILD_PAIR(N, Lo, Hi); break;
|
||||||
case ISD::EXTRACT_ELEMENT: ExpandRes_EXTRACT_ELEMENT(N, Lo, Hi); break;
|
case ISD::EXTRACT_ELEMENT: ExpandRes_EXTRACT_ELEMENT(N, Lo, Hi); break;
|
||||||
case ISD::EXTRACT_VECTOR_ELT: ExpandRes_EXTRACT_VECTOR_ELT(N, Lo, Hi); break;
|
case ISD::EXTRACT_VECTOR_ELT: ExpandRes_EXTRACT_VECTOR_ELT(N, Lo, Hi); break;
|
||||||
|
case ISD::VAARG: ExpandRes_VAARG(N, Lo, Hi); break;
|
||||||
|
|
||||||
case ISD::ConstantFP: ExpandFloatRes_ConstantFP(N, Lo, Hi); break;
|
case ISD::ConstantFP: ExpandFloatRes_ConstantFP(N, Lo, Hi); break;
|
||||||
case ISD::FABS: ExpandFloatRes_FABS(N, Lo, Hi); break;
|
case ISD::FABS: ExpandFloatRes_FABS(N, Lo, Hi); break;
|
||||||
|
@@ -960,6 +960,7 @@ void DAGTypeLegalizer::ExpandIntegerResult(SDNode *N, unsigned ResNo) {
|
|||||||
case ISD::BUILD_PAIR: ExpandRes_BUILD_PAIR(N, Lo, Hi); break;
|
case ISD::BUILD_PAIR: ExpandRes_BUILD_PAIR(N, Lo, Hi); break;
|
||||||
case ISD::EXTRACT_ELEMENT: ExpandRes_EXTRACT_ELEMENT(N, Lo, Hi); break;
|
case ISD::EXTRACT_ELEMENT: ExpandRes_EXTRACT_ELEMENT(N, Lo, Hi); break;
|
||||||
case ISD::EXTRACT_VECTOR_ELT: ExpandRes_EXTRACT_VECTOR_ELT(N, Lo, Hi); break;
|
case ISD::EXTRACT_VECTOR_ELT: ExpandRes_EXTRACT_VECTOR_ELT(N, Lo, Hi); break;
|
||||||
|
case ISD::VAARG: ExpandRes_VAARG(N, Lo, Hi); break;
|
||||||
|
|
||||||
case ISD::ANY_EXTEND: ExpandIntRes_ANY_EXTEND(N, Lo, Hi); break;
|
case ISD::ANY_EXTEND: ExpandIntRes_ANY_EXTEND(N, Lo, Hi); break;
|
||||||
case ISD::AssertSext: ExpandIntRes_AssertSext(N, Lo, Hi); break;
|
case ISD::AssertSext: ExpandIntRes_AssertSext(N, Lo, Hi); break;
|
||||||
|
@@ -516,6 +516,7 @@ private:
|
|||||||
void ExpandRes_EXTRACT_ELEMENT (SDNode *N, SDValue &Lo, SDValue &Hi);
|
void ExpandRes_EXTRACT_ELEMENT (SDNode *N, SDValue &Lo, SDValue &Hi);
|
||||||
void ExpandRes_EXTRACT_VECTOR_ELT(SDNode *N, SDValue &Lo, SDValue &Hi);
|
void ExpandRes_EXTRACT_VECTOR_ELT(SDNode *N, SDValue &Lo, SDValue &Hi);
|
||||||
void ExpandRes_NormalLoad (SDNode *N, SDValue &Lo, SDValue &Hi);
|
void ExpandRes_NormalLoad (SDNode *N, SDValue &Lo, SDValue &Hi);
|
||||||
|
void ExpandRes_VAARG (SDNode *N, SDValue &Lo, SDValue &Hi);
|
||||||
|
|
||||||
// Generic Operand Expansion.
|
// Generic Operand Expansion.
|
||||||
SDValue ExpandOp_BIT_CONVERT (SDNode *N);
|
SDValue ExpandOp_BIT_CONVERT (SDNode *N);
|
||||||
|
@@ -171,6 +171,23 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
|||||||
ReplaceValueWith(SDValue(N, 1), Chain);
|
ReplaceValueWith(SDValue(N, 1), Chain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DAGTypeLegalizer::ExpandRes_VAARG(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||||
|
MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||||
|
SDValue Chain = N->getOperand(0);
|
||||||
|
SDValue Ptr = N->getOperand(1);
|
||||||
|
|
||||||
|
Lo = DAG.getVAArg(NVT, Chain, Ptr, N->getOperand(2));
|
||||||
|
Hi = DAG.getVAArg(NVT, Lo.getValue(1), Ptr, N->getOperand(2));
|
||||||
|
|
||||||
|
// Handle endianness of the load.
|
||||||
|
if (TLI.isBigEndian())
|
||||||
|
std::swap(Lo, Hi);
|
||||||
|
|
||||||
|
// Modified the chain - switch anything that used the old chain to use
|
||||||
|
// the new one.
|
||||||
|
ReplaceValueWith(SDValue(N, 1), Hi.getValue(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
// Generic Operand Expansion.
|
// Generic Operand Expansion.
|
||||||
|
10
test/CodeGen/X86/2008-10-29-ExpandVAARG.ll
Normal file
10
test/CodeGen/X86/2008-10-29-ExpandVAARG.ll
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
; RUN: llvm-as < %s | llc -march=x86
|
||||||
|
; PR2977
|
||||||
|
define i8* @ap_php_conv_p2(){
|
||||||
|
entry:
|
||||||
|
%ap.addr = alloca i8* ; <i8**> [#uses=36]
|
||||||
|
br label %sw.bb301
|
||||||
|
sw.bb301:
|
||||||
|
%0 = va_arg i8** %ap.addr, i64 ; <i64> [#uses=1]
|
||||||
|
br label %sw.bb301
|
||||||
|
}
|
Reference in New Issue
Block a user