[llvm] r203041 - When using CR bit registers on PPC32, handle the i1 vaarg case
Hal Finkel
hfinkel at anl.gov
Wed Mar 5 16:23:33 PST 2014
Author: hfinkel
Date: Wed Mar 5 18:23:33 2014
New Revision: 203041
URL: http://llvm.org/viewvc/llvm-project?rev=203041&view=rev
Log:
When using CR bit registers on PPC32, handle the i1 vaarg case
When copying an i1 value into a GPR for a vaarg call, we need to explicitly
zero-extend the i1 value (otherwise an invalid CRBIT -> GPR copy will be
generated).
Added:
llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll
Modified:
llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=203041&r1=203040&r2=203041&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Wed Mar 5 18:23:33 2014
@@ -3773,6 +3773,9 @@ PPCTargetLowering::LowerCall_32SVR4(SDVa
}
if (VA.isRegLoc()) {
+ if (Arg.getValueType() == MVT::i1)
+ Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg);
+
seenFloatArg |= VA.getLocVT().isFloatingPoint();
// Put argument in a physical register.
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
Added: 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=203041&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll (added)
+++ llvm/trunk/test/CodeGen/PowerPC/ppc32-i1-vaarg.ll Wed Mar 5 18:23:33 2014
@@ -0,0 +1,15 @@
+; RUN: llc < %s -march=ppc32 -mcpu=ppc32 | FileCheck %s
+target triple = "powerpc-unknown-linux-gnu"
+
+declare void @printf(i8*, ...)
+
+define void @main() {
+ call void (i8*, ...)* @printf(i8* undef, i1 false)
+ ret void
+}
+
+; CHECK-LABEL: @main
+; CHECK-DAG li 4, 0
+; CHECK-DAG: crxor 6, 6, 6
+; CHECK: bl printf
+
More information about the llvm-commits
mailing list