diff options
| author | Jiangning Liu <jiangning.liu@arm.com> | 2014-06-03 03:25:09 +0000 |
|---|---|---|
| committer | Jiangning Liu <jiangning.liu@arm.com> | 2014-06-03 03:25:09 +0000 |
| commit | cc4f38bc280cd013b786f1a2d757f02fd8f71b50 (patch) | |
| tree | d0183da9f6532ce2c1135834fa833b9c8e9775f2 /llvm/lib | |
| parent | 9aee050a0cdcae535c8fd43b172df05f607948cd (diff) | |
| download | bcm5719-llvm-cc4f38bc280cd013b786f1a2d757f02fd8f71b50.tar.gz bcm5719-llvm-cc4f38bc280cd013b786f1a2d757f02fd8f71b50.zip | |
[AArch64] Correctly deal with VPR stack parameter passing.
llvm-svn: 210067
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index 7bb07ccef32..4bc22c338e5 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -1711,7 +1711,9 @@ SDValue AArch64TargetLowering::LowerFormalArguments( InVals.push_back(FrameIdxN); continue; - } if (VA.isRegLoc()) { + } + + if (VA.isRegLoc()) { // Arguments stored in registers. EVT RegVT = VA.getLocVT(); @@ -1772,25 +1774,30 @@ SDValue AArch64TargetLowering::LowerFormalArguments( SDValue FIN = DAG.getFrameIndex(FI, getPointerTy()); SDValue ArgValue; + // For NON_EXTLOAD, generic code in getLoad assert(ValVT == MemVT) ISD::LoadExtType ExtType = ISD::NON_EXTLOAD; + MVT MemVT = VA.getValVT(); + switch (VA.getLocInfo()) { default: break; case CCValAssign::SExt: ExtType = ISD::SEXTLOAD; + MemVT = VA.getLocVT(); break; case CCValAssign::ZExt: ExtType = ISD::ZEXTLOAD; + MemVT = VA.getLocVT(); break; case CCValAssign::AExt: ExtType = ISD::EXTLOAD; + MemVT = VA.getLocVT(); break; } ArgValue = DAG.getExtLoad(ExtType, DL, VA.getValVT(), Chain, FIN, MachinePointerInfo::getFixedStack(FI), - VA.getLocVT(), - false, false, false, 0); + MemVT, false, false, false, 0); InVals.push_back(ArgValue); } |

