summaryrefslogtreecommitdiff
path: root/test/CodeGen/SPARC/fp128.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/SPARC/fp128.ll')
-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
+}