diff options
author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-09-03 04:11:59 +0000 |
---|---|---|
committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-09-03 04:11:59 +0000 |
commit | 75ddb2bb34f96c2bda48d0e86331fb52b55b8d03 (patch) | |
tree | 53fdaf0dde28d1df45506ab73509c997ed494786 /test | |
parent | 4ccfbedaedc35920dc437aec501ec2bc4f8a4a2a (diff) | |
download | llvm-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')
-rw-r--r-- | test/CodeGen/SPARC/fp128.ll | 74 |
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 +} |