diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-03-06 00:45:19 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-03-06 00:45:19 +0000 |
commit | 7f908e8ef410c0ac567e26cbefb80bf5a00781f9 (patch) | |
tree | 58defdb05d74e0a7db03d72684d61659fe3a4daf | |
parent | 193084979f240d620da9a575258007f1b8eb31cf (diff) | |
download | bcm5719-llvm-7f908e8ef410c0ac567e26cbefb80bf5a00781f9.tar.gz bcm5719-llvm-7f908e8ef410c0ac567e26cbefb80bf5a00781f9.zip |
Fixup PPC Darwin i1 argument handling
Like on other targets, we need to zero_extend/truncate i1 args before copying
them to GPRs.
llvm-svn: 203045
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index dce6051b182..680112da9a8 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -2777,6 +2777,10 @@ PPCTargetLowering::LowerFormalArguments_Darwin( if (GPR_idx != Num_GPR_Regs) { unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass); ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32); + + if (ObjectVT == MVT::i1) + ArgVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, ArgVal); + ++GPR_idx; } else { needsLoad = true; @@ -4414,6 +4418,9 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee, case MVT::i32: case MVT::i64: if (GPR_idx != NumGPRs) { + if (Arg.getValueType() == MVT::i1) + Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, PtrVT, Arg); + RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg)); } else { LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, diff --git a/llvm/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll b/llvm/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll index 096ea384f05..6e0aec27b7c 100644 --- a/llvm/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll +++ b/llvm/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -march=ppc32 -mcpu=ppc32 | FileCheck %s +; RUN: llc < %s -march=ppc32 -mcpu=ppc32 -mtriple=powerpc-darwin | FileCheck %s -check-prefix=CHECK-D target triple = "powerpc-unknown-linux-gnu" declare void @printf(i8*, ...) @@ -13,3 +14,7 @@ define void @main() { ; CHECK-DAG: crxor 6, 6, 6 ; CHECK: bl printf +; CHECK-D-LABEL: @main +; CHECK-D: li r4, 0 +; CHECK-D: bl L_printf$stub + |