[llvm] r203045 - Fixup PPC Darwin i1 argument handling

Hal Finkel hfinkel at anl.gov
Wed Mar 5 16:45:19 PST 2014


Author: hfinkel
Date: Wed Mar  5 18:45:19 2014
New Revision: 203045

URL: http://llvm.org/viewvc/llvm-project?rev=203045&view=rev
Log:
Fixup PPC Darwin i1 argument handling

Like on other targets, we need to zero_extend/truncate i1 args before copying
them to GPRs.

Modified:
    llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
    llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=203045&r1=203044&r2=203045&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Wed Mar  5 18:45:19 2014
@@ -2777,6 +2777,10 @@ PPCTargetLowering::LowerFormalArguments_
         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(SDVa
     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,

Modified: llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll?rev=203045&r1=203044&r2=203045&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll Wed Mar  5 18:45:19 2014
@@ -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
+





More information about the llvm-commits mailing list