diff options
| author | Jessica Paquette <jpaquette@apple.com> | 2019-05-01 22:39:43 +0000 |
|---|---|---|
| committer | Jessica Paquette <jpaquette@apple.com> | 2019-05-01 22:39:43 +0000 |
| commit | a3843fe6f4619fe2e8690405eee61fba5510355b (patch) | |
| tree | f3f2728d36158d72fde23c0f1b943f9eda2e68cb /llvm/test | |
| parent | 50721b27c42399d828e1b11cb57010e2139525eb (diff) | |
| download | bcm5719-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.mir | 10 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-fast-isel-materialize.ll | 11 |
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 } |

