summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen
diff options
context:
space:
mode:
authorStefan Maksimovic <stefan.maksimovic@mips.com>2018-01-23 10:09:39 +0000
committerStefan Maksimovic <stefan.maksimovic@mips.com>2018-01-23 10:09:39 +0000
commit98749e0249892886dcbdf1c972b762660dc09029 (patch)
treedebaae0bad82fba699608af77ee2153791e45565 /llvm/test/CodeGen
parent007b425b776a50b3b8d3caa482bb8ca96c48a80d (diff)
downloadbcm5719-llvm-98749e0249892886dcbdf1c972b762660dc09029.tar.gz
bcm5719-llvm-98749e0249892886dcbdf1c972b762660dc09029.zip
[mips] Properly select abs and sqrt instructions
- Alter abs for micromips to have both AFGR64 and FGR64 variants, same as sqrt - Remove sqrt and abs from MicroMips32r6InstrInfo.td, use micromips FGR64 variants - Restrict non-micromips abs/sqrt with NotInMicroMips predicate Differential revision: https://reviews.llvm.org/D41439 llvm-svn: 323184
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r--llvm/test/CodeGen/Mips/llvm-ir/abs.ll28
-rw-r--r--llvm/test/CodeGen/Mips/llvm-ir/sqrt.ll29
2 files changed, 57 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/abs.ll b/llvm/test/CodeGen/Mips/llvm-ir/abs.ll
new file mode 100644
index 00000000000..3ae8525ec18
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/llvm-ir/abs.ll
@@ -0,0 +1,28 @@
+; RUN: llc -march=mips -mcpu=mips32 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32
+; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32FP64
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MM
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MMFP64
+; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MMR6
+
+define float @abs_s(float %a) {
+; MIPS32: abs.s {{.*}} # <MCInst #{{[0-9]+}} FABS_S
+; MIPS32FP64: abs.s {{.*}} # <MCInst #{{[0-9]+}} FABS_S
+; MM: abs.s {{.*}} # <MCInst #{{[0-9]+}} FABS_S_MM
+; MMFP64: abs.s {{.*}} # <MCInst #{{[0-9]+}} FABS_S_MM
+; MMR6: abs.s {{.*}} # <MCInst #{{[0-9]+}} FABS_S_MM
+ %ret = call float @llvm.fabs.f32(float %a)
+ ret float %ret
+}
+
+define double @abs_d(double %a) {
+; MIPS32: abs.d {{.*}} # <MCInst #{{[0-9]+}} FABS_D32
+; MIPS32FP64: abs.d {{.*}} # <MCInst #{{[0-9]+}} FABS_D64
+; MM: abs.d {{.*}} # <MCInst #{{[0-9]+}} FABS_D32_MM
+; MMFP64: abs.d {{.*}} # <MCInst #{{[0-9]+}} FABS_D64_MM
+; MMR6: abs.d {{.*}} # <MCInst #{{[0-9]+}} FABS_D64_MM
+ %ret = call double @llvm.fabs.f64(double %a)
+ ret double %ret
+}
+
+declare float @llvm.fabs.f32(float %a)
+declare double @llvm.fabs.f64(double %a)
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/sqrt.ll b/llvm/test/CodeGen/Mips/llvm-ir/sqrt.ll
index 1a8892de0ee..05776886dd9 100644
--- a/llvm/test/CodeGen/Mips/llvm-ir/sqrt.ll
+++ b/llvm/test/CodeGen/Mips/llvm-ir/sqrt.ll
@@ -1,6 +1,11 @@
; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -mattr=+micromips | FileCheck %s
; RUN: llc < %s -march=mips -mcpu=mips32r2 -mattr=+micromips | FileCheck %s
; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s
+; RUN: llc -march=mips -mcpu=mips32 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32
+; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32FP64
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MM
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MMFP64
+; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MMR6
define float @sqrt_fn(float %value) #0 {
entry:
@@ -11,3 +16,27 @@ entry:
declare float @sqrtf(float)
; CHECK: sqrt.s $f0, $f12
+
+
+define float @sqrt_s(float %a) {
+; MIPS32: sqrt.s {{.*}} # <MCInst #{{[0-9]+}} FSQRT_S
+; MIPS32FP64: sqrt.s {{.*}} # <MCInst #{{[0-9]+}} FSQRT_S
+; MM: sqrt.s {{.*}} # <MCInst #{{[0-9]+}} FSQRT_S_MM
+; MMFP64: sqrt.s {{.*}} # <MCInst #{{[0-9]+}} FSQRT_S_MM
+; MMR6: sqrt.s {{.*}} # <MCInst #{{[0-9]+}} FSQRT_S_MM
+ %ret = call float @llvm.sqrt.f32(float %a)
+ ret float %ret
+}
+
+define double @sqrt_d(double %a) {
+; MIPS32: sqrt.d {{.*}} # <MCInst #{{[0-9]+}} FSQRT_D32
+; MIPS32FP64: sqrt.d {{.*}} # <MCInst #{{[0-9]+}} FSQRT_D64
+; MM: sqrt.d {{.*}} # <MCInst #{{[0-9]+}} FSQRT_D32_MM
+; MMFP64: sqrt.d {{.*}} # <MCInst #{{[0-9]+}} FSQRT_D64_MM
+; MMR6: sqrt.d {{.*}} # <MCInst #{{[0-9]+}} FSQRT_D64_MM
+ %ret = call double @llvm.sqrt.f64(double %a)
+ ret double %ret
+}
+
+declare float @llvm.sqrt.f32(float %a)
+declare double @llvm.sqrt.f64(double %a)
OpenPOWER on IntegriCloud