summaryrefslogtreecommitdiff
path: root/test/CodeGen/SPARC
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-09-03 04:11:59 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-09-03 04:11:59 +0000
commit75ddb2bb34f96c2bda48d0e86331fb52b55b8d03 (patch)
tree53fdaf0dde28d1df45506ab73509c997ed494786 /test/CodeGen/SPARC
parent4ccfbedaedc35920dc437aec501ec2bc4f8a4a2a (diff)
downloadllvm-75ddb2bb34f96c2bda48d0e86331fb52b55b8d03.tar.gz
llvm-75ddb2bb34f96c2bda48d0e86331fb52b55b8d03.tar.bz2
llvm-75ddb2bb34f96c2bda48d0e86331fb52b55b8d03.tar.xz
[Sparc] Add support for soft long double (fp128).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189780 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/SPARC')
-rw-r--r--test/CodeGen/SPARC/fp128.ll74
1 files changed, 55 insertions, 19 deletions
diff --git a/test/CodeGen/SPARC/fp128.ll b/test/CodeGen/SPARC/fp128.ll
index 1cc194b065..31ce6059f6 100644
--- a/test/CodeGen/SPARC/fp128.ll
+++ b/test/CodeGen/SPARC/fp128.ll
@@ -1,16 +1,30 @@
-; RUN: llc < %s -march=sparc -mattr=hard-quad-float | FileCheck %s
-
-; CHECK-LABEL: f128_ops
-; CHECK: ldd
-; CHECK: ldd
-; CHECK: ldd
-; CHECK: ldd
-; CHECK: faddq [[R0:.+]], [[R1:.+]], [[R2:.+]]
-; CHECK: fsubq [[R2]], [[R3:.+]], [[R4:.+]]
-; CHECK: fmulq [[R4]], [[R5:.+]], [[R6:.+]]
-; CHECK: fdivq [[R6]], [[R2]]
-; CHECK: std
-; CHECK: std
+; RUN: llc < %s -march=sparc -mattr=hard-quad-float | FileCheck %s --check-prefix=HARD
+; RUN: llc < %s -march=sparc -mattr=-hard-quad-float | FileCheck %s --check-prefix=SOFT
+
+
+; HARD-LABEL: f128_ops
+; HARD: ldd
+; HARD: ldd
+; HARD: ldd
+; HARD: ldd
+; HARD: faddq [[R0:.+]], [[R1:.+]], [[R2:.+]]
+; HARD: fsubq [[R2]], [[R3:.+]], [[R4:.+]]
+; HARD: fmulq [[R4]], [[R5:.+]], [[R6:.+]]
+; HARD: fdivq [[R6]], [[R2]]
+; HARD: std
+; HARD: std
+
+; SOFT-LABEL: f128_ops
+; SOFT: ldd
+; SOFT: ldd
+; SOFT: ldd
+; SOFT: ldd
+; SOFT: call _Q_add
+; SOFT: call _Q_sub
+; SOFT: call _Q_mul
+; SOFT: call _Q_div
+; SOFT: std
+; SOFT: std
define void @f128_ops(fp128* noalias sret %scalar.result, fp128* byval %a, fp128* byval %b, fp128* byval %c, fp128* byval %d) {
entry:
@@ -26,12 +40,19 @@ entry:
ret void
}
-; CHECK-LABEL: f128_spill
-; CHECK: std %f{{.+}}, [%[[S0:.+]]]
-; CHECK: std %f{{.+}}, [%[[S1:.+]]]
-; CHECK-DAG: ldd [%[[S0]]], %f{{.+}}
-; CHECK-DAG: ldd [%[[S1]]], %f{{.+}}
-; CHECK: jmp
+; HARD-LABEL: f128_spill
+; HARD: std %f{{.+}}, [%[[S0:.+]]]
+; HARD: std %f{{.+}}, [%[[S1:.+]]]
+; HARD-DAG: ldd [%[[S0]]], %f{{.+}}
+; HARD-DAG: ldd [%[[S1]]], %f{{.+}}
+; HARD: jmp
+
+; SOFT-LABEL: f128_spill
+; SOFT: std %f{{.+}}, [%[[S0:.+]]]
+; SOFT: std %f{{.+}}, [%[[S1:.+]]]
+; SOFT-DAG: ldd [%[[S0]]], %f{{.+}}
+; SOFT-DAG: ldd [%[[S1]]], %f{{.+}}
+; SOFT: jmp
define void @f128_spill(fp128* noalias sret %scalar.result, fp128* byval %a) {
entry:
@@ -40,3 +61,18 @@ entry:
store fp128 %0, fp128* %scalar.result, align 8
ret void
}
+
+; HARD-LABEL: f128_compare
+; HARD: fcmpq
+
+; SOFT-LABEL: f128_compare
+; SOFT: _Q_cmp
+
+define i32 @f128_compare(fp128* byval %f0, fp128* byval %f1, i32 %a, i32 %b) {
+entry:
+ %0 = load fp128* %f0, align 8
+ %1 = load fp128* %f1, align 8
+ %cond = fcmp ult fp128 %0, %1
+ %ret = select i1 %cond, i32 %a, i32 %b
+ ret i32 %ret
+}