summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorJessica Paquette <jpaquette@apple.com>2019-05-01 22:39:43 +0000
committerJessica Paquette <jpaquette@apple.com>2019-05-01 22:39:43 +0000
commita3843fe6f4619fe2e8690405eee61fba5510355b (patch)
treef3f2728d36158d72fde23c0f1b943f9eda2e68cb /llvm/test
parent50721b27c42399d828e1b11cb57010e2139525eb (diff)
downloadbcm5719-llvm-a3843fe6f4619fe2e8690405eee61fba5510355b.tar.gz
bcm5719-llvm-a3843fe6f4619fe2e8690405eee61fba5510355b.zip
[GlobalISel][AArch64] Use fmov for G_FCONSTANT when possible
This adds support for using fmov rather than a standard mov to materialize G_FCONSTANT when it's safe to do so. Update arm64-fast-isel-materialize.ll and select-constant.mir to show that the selection is correct. llvm-svn: 359734
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir10
-rw-r--r--llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll11
2 files changed, 15 insertions, 6 deletions
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
index e046aa290c1..234957a8f8e 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
@@ -55,9 +55,8 @@ registers:
body: |
bb.0:
; CHECK-LABEL: name: fconst_s32
- ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1080033280
- ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY [[MOVi32imm]]
- ; CHECK: $s0 = COPY [[COPY]]
+ ; CHECK: [[FMOVSi:%[0-9]+]]:fpr32 = FMOVSi 12
+ ; CHECK: $s0 = COPY [[FMOVSi]]
%0(s32) = G_FCONSTANT float 3.5
$s0 = COPY %0(s32)
...
@@ -72,9 +71,8 @@ registers:
body: |
bb.0:
; CHECK-LABEL: name: fconst_s64
- ; CHECK: [[MOVi64imm:%[0-9]+]]:gpr64 = MOVi64imm 4607182418800017408
- ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY [[MOVi64imm]]
- ; CHECK: $d0 = COPY [[COPY]]
+ ; CHECK: [[FMOVDi:%[0-9]+]]:fpr64 = FMOVDi 112
+ ; CHECK: $d0 = COPY [[FMOVDi]]
%0(s64) = G_FCONSTANT double 1.0
$d0 = COPY %0(s64)
...
diff --git a/llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll b/llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll
index 234731cfa24..3a8a31be152 100644
--- a/llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll
@@ -1,27 +1,38 @@
; RUN: llc -O0 -fast-isel -fast-isel-abort=1 -verify-machineinstrs -mtriple=arm64-apple-darwin < %s | FileCheck %s
+; RUN: llc -O0 -global-isel -fast-isel-abort=2 -pass-remarks-missed=gisel* -verify-machineinstrs -mtriple=arm64-apple-darwin %s -o - 2>&1 | FileCheck %s --check-prefixes=GISEL,FALLBACK
+
+; FALLBACK-NOT: remark:
; Materialize using fmov
define float @fmov_float1() {
; CHECK-LABEL: fmov_float1
; CHECK: fmov s0, #1.25000000
+; GISEL-LABEL: fmov_float1
+; GISEL: fmov s0, #1.25000000
ret float 1.250000e+00
}
define float @fmov_float2() {
; CHECK-LABEL: fmov_float2
; CHECK: fmov s0, wzr
+; GISEL-LABEL: fmov_float2
+; GISEL: fmov s0, wzr
ret float 0.0e+00
}
define double @fmov_double1() {
; CHECK-LABEL: fmov_double1
; CHECK: fmov d0, #1.25000000
+; GISEL-LABEL: fmov_double1
+; GISEL: fmov d0, #1.25000000
ret double 1.250000e+00
}
define double @fmov_double2() {
; CHECK-LABEL: fmov_double2
; CHECK: fmov d0, xzr
+; GISEL-LABEL: fmov_double2
+; GISEL: fmov d0, xzr
ret double 0.0e+00
}
OpenPOWER on IntegriCloud