summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorStrahinja Petrovic <strahinja.petrovic@rt-rk.com>2016-08-05 08:47:26 +0000
committerStrahinja Petrovic <strahinja.petrovic@rt-rk.com>2016-08-05 08:47:26 +0000
commit30e0ce8e9fc4598388fcd3c4d57894036cdd5903 (patch)
treeca5c55feadd0372d4ecc959e00f5213d96b8bc1d /llvm/test
parent928d7573ddace6e2bd0cd220d661c3e8cbae128e (diff)
downloadbcm5719-llvm-30e0ce8e9fc4598388fcd3c4d57894036cdd5903.tar.gz
bcm5719-llvm-30e0ce8e9fc4598388fcd3c4d57894036cdd5903.zip
[PowerPC] fix passing long double arguments to function (soft-float)
This patch fixes passing long double type arguments to function in soft float mode. If there is less than 4 argument registers free (long double type is mapped in 4 gpr registers in soft float mode) long double type argument must be passed through stack. Differential Revision: https://reviews.llvm.org/D20114. llvm-svn: 277804
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/PowerPC/ppc32-skip-regs.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/ppc32-skip-regs.ll b/llvm/test/CodeGen/PowerPC/ppc32-skip-regs.ll
new file mode 100644
index 00000000000..4acfd3c5ca0
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/ppc32-skip-regs.ll
@@ -0,0 +1,26 @@
+; RUN: llc -O2 -mtriple=powerpc-unknown-linux-gnu < %s | FileCheck %s
+
+target datalayout = "E-m:e-p:32:32-i64:64-n32"
+target triple = "powerpc-buildroot-linux-gnu"
+
+@x = global ppc_fp128 0xM3FF00000000000000000000000000000, align 16
+@.str = private unnamed_addr constant [9 x i8] c"%Lf %Lf\0A\00", align 1
+
+define void @foo() #0 {
+entry:
+ %0 = load ppc_fp128, ppc_fp128* @x, align 16
+ %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i32 0, i32 0), ppc_fp128 %0, ppc_fp128 %0)
+ ret void
+}
+; Do not put second argument of function in r8 register, because there is no enough registers
+; left for long double type (4 registers in soft float mode). Instead in r8 register this
+; argument put on stack.
+; CHECK-NOT: mr 8, 4
+; CHECK: stw 7, 20(1)
+; CHECK: stw 6, 16(1)
+; CHECK: stw 5, 12(1)
+; CHECK: stw 4, 8(1)
+
+declare i32 @printf(i8* nocapture readonly, ...)
+
+attributes #0 = { "use-soft-float"="true" }
OpenPOWER on IntegriCloud