summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorIgor Breger <igor.breger@intel.com>2017-09-17 08:08:13 +0000
committerIgor Breger <igor.breger@intel.com>2017-09-17 08:08:13 +0000
commit21200ed7afbaf3c295658a61b579878ce91daa2f (patch)
treef4f6dc81e617bdc448a95d0c46bc491ad5f3e253 /llvm/test
parentbef5d24449f50015316371f502daefdb9dfc9d2f (diff)
downloadbcm5719-llvm-21200ed7afbaf3c295658a61b579878ce91daa2f.tar.gz
bcm5719-llvm-21200ed7afbaf3c295658a61b579878ce91daa2f.zip
[GlobalISel][X86] G_FCONSTANT support.
Summary: G_FCONSTANT support, port the implementation from X86FastIsel. Reviewers: zvi, delena, guyblank Reviewed By: delena Subscribers: rovka, llvm-commits, kristof.beyls Differential Revision: https://reviews.llvm.org/D37734 llvm-svn: 313478
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/GlobalISel/fconstant.ll40
-rw-r--r--llvm/test/CodeGen/X86/GlobalISel/legalize-constant.mir27
-rw-r--r--llvm/test/CodeGen/X86/GlobalISel/regbankselect-X86_64.mir19
-rw-r--r--llvm/test/CodeGen/X86/GlobalISel/select-fconstant.mir94
4 files changed, 173 insertions, 7 deletions
diff --git a/llvm/test/CodeGen/X86/GlobalISel/fconstant.ll b/llvm/test/CodeGen/X86/GlobalISel/fconstant.ll
new file mode 100644
index 00000000000..2df013a1ed7
--- /dev/null
+++ b/llvm/test/CodeGen/X86/GlobalISel/fconstant.ll
@@ -0,0 +1,40 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL64 --check-prefix=CHECK_NOPIC64
+; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -code-model=large -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_LARGE --check-prefix=CHECK_LARGE64
+; RUN: llc -mtriple=i386-linux-gnu -mattr=+sse2 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK32 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL32
+; RUN: llc -mtriple=i386-linux-gnu -mattr=+sse2 -global-isel -code-model=large -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK32 --check-prefix=CHECK_LARGE --check-prefix=CHECK_LARGE32
+; RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -relocation-model=pic -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL64 --check-prefix=CHECK_PIC64
+
+define void @test_float(float* %a , float %b) {
+; CHECK_SMALL64-LABEL: test_float:
+; CHECK_SMALL64: # BB#0: # %entry
+; CHECK_SMALL64-NEXT: movss .LCPI0_0(%rip), %xmm1 # xmm1 = mem[0],zero,zero,zero
+; CHECK_SMALL64-NEXT: addss %xmm0, %xmm1
+; CHECK_SMALL64-NEXT: movd %xmm1, %eax
+; CHECK_SMALL64-NEXT: movl %eax, (%rdi)
+; CHECK_SMALL64-NEXT: retq
+;
+; CHECK_LARGE64-LABEL: test_float:
+; CHECK_LARGE64: # BB#0: # %entry
+; CHECK_LARGE64-NEXT: movabsq $.LCPI0_0, %rax
+; CHECK_LARGE64-NEXT: addss (%rax), %xmm0
+; CHECK_LARGE64-NEXT: movd %xmm0, %eax
+; CHECK_LARGE64-NEXT: movl %eax, (%rdi)
+; CHECK_LARGE64-NEXT: retq
+;
+; CHECK32-LABEL: test_float:
+; CHECK32: # BB#0: # %entry
+; CHECK32-NEXT: movl 4(%esp), %eax
+; CHECK32-NEXT: movl 8(%esp), %ecx
+; CHECK32-NEXT: movss .LCPI0_0, %xmm0 # xmm0 = mem[0],zero,zero,zero
+; CHECK32-NEXT: movd %ecx, %xmm1
+; CHECK32-NEXT: addss %xmm0, %xmm1
+; CHECK32-NEXT: movd %xmm1, %ecx
+; CHECK32-NEXT: movl %ecx, (%eax)
+; CHECK32-NEXT: retl
+entry:
+ %aa = fadd float 5.500000e+00, %b
+ store float %aa, float* %a
+ ret void
+}
+
diff --git a/llvm/test/CodeGen/X86/GlobalISel/legalize-constant.mir b/llvm/test/CodeGen/X86/GlobalISel/legalize-constant.mir
index 612d33a77fc..fd88fc69ed0 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/legalize-constant.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/legalize-constant.mir
@@ -1,15 +1,14 @@
-# RUN: llc -mtriple=i386-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X32
-# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X64
+# RUN: llc -mtriple=i386-linux-gnu -mattr=+sse2 -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X32
+# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X64
--- |
- define void @constInt_check() {
- ret void
- }
+ define void @test_constant() { ret void }
+ define void @test_fconstant() { ret void }
...
---
-name: constInt_check
-# ALL-LABEL: name: constInt_check
+name: test_constant
+# ALL-LABEL: name: test_constant
registers:
- { id: 0, class: _ }
- { id: 1, class: _ }
@@ -40,4 +39,18 @@ body: |
RET 0
...
+---
+name: test_fconstant
+# ALL-LABEL: name: test_fconstant
+registers:
+ - { id: 0, class: _ }
+ - { id: 1, class: _ }
+body: |
+ bb.0:
+ ; ALL: %0(s32) = G_FCONSTANT float 1.000000e+00
+ ; ALL: %1(s64) = G_FCONSTANT double 2.000000e+00
+
+ %0(s32) = G_FCONSTANT float 1.0
+ %1(s64) = G_FCONSTANT double 2.0
+...
diff --git a/llvm/test/CodeGen/X86/GlobalISel/regbankselect-X86_64.mir b/llvm/test/CodeGen/X86/GlobalISel/regbankselect-X86_64.mir
index f7d4198f76b..5d792df83d0 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/regbankselect-X86_64.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/regbankselect-X86_64.mir
@@ -236,6 +236,10 @@
%conv = fpext float %a to double
ret double %conv
}
+
+ define void @test_fconstant() {
+ ret void
+ }
...
---
@@ -1411,4 +1415,19 @@ body: |
RET 0, implicit %xmm0
...
+---
+name: test_fconstant
+# ALL-LABEL: name: test_fconstant
+legalized: true
+# CHECK: registers:
+# CHECK-NEXT: - { id: 0, class: vecr, preferred-register: '' }
+# CHECK-NEXT: - { id: 1, class: vecr, preferred-register: '' }
+registers:
+ - { id: 0, class: _ }
+ - { id: 1, class: _ }
+body: |
+ bb.0:
+ %0(s32) = G_FCONSTANT float 1.0
+ %1(s64) = G_FCONSTANT double 2.0
+...
diff --git a/llvm/test/CodeGen/X86/GlobalISel/select-fconstant.mir b/llvm/test/CodeGen/X86/GlobalISel/select-fconstant.mir
new file mode 100644
index 00000000000..44e37765f69
--- /dev/null
+++ b/llvm/test/CodeGen/X86/GlobalISel/select-fconstant.mir
@@ -0,0 +1,94 @@
+#RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL64 --check-prefix=CHECK_NOPIC64
+#RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -code-model=large -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_LARGE --check-prefix=CHECK_LARGE64
+#RUN: llc -mtriple=i386-linux-gnu -mattr=+sse2 -global-isel -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK32 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL32
+#RUN: llc -mtriple=i386-linux-gnu -mattr=+sse2 -global-isel -code-model=large -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK32 --check-prefix=CHECK_LARGE --check-prefix=CHECK_LARGE32
+#RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -global-isel -relocation-model=pic -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK64 --check-prefix=CHECK_SMALL --check-prefix=CHECK_SMALL64 --check-prefix=CHECK_PIC64
+
+--- |
+ define float @test_float() {
+ entry:
+ ret float 5.500000e+00
+ }
+
+ define double @test_double() {
+ entry:
+ ret double 5.500000e+00
+ }
+---
+name: test_float
+# CHECK64-LABEL: name: test_float
+#
+# CHECK32-LABEL: name: test_float
+alignment: 4
+legalized: true
+regBankSelected: true
+tracksRegLiveness: true
+# CHECK_SMALL64: registers:
+# CHECK_SMALL64-NEXT: - { id: 0, class: fr32, preferred-register: '' }
+#
+# CHECK_LARGE64: registers:
+# CHECK_LARGE64-NEXT: - { id: 0, class: fr32, preferred-register: '' }
+# CHECK_LARGE64-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+#
+# CHECK32: registers:
+# CHECK32-NEXT: - { id: 0, class: fr32, preferred-register: '' }
+registers:
+ - { id: 0, class: vecr, preferred-register: '' }
+# CHECK_SMALL64: %0 = MOVSSrm %rip, 1, _, %const.0, _
+# CHECK_SMALL64-NEXT: %xmm0 = COPY %0
+# CHECK_SMALL64-NEXT: RET 0, implicit %xmm0
+#
+# CHECK_LARGE64: %1 = MOV64ri %const.0
+# CHECK_LARGE64-NEXT: %0 = MOVSSrm %1, 1, _, 0, _ :: (load 8 from constant-pool, align 32)
+# CHECK_LARGE64-NEXT: %xmm0 = COPY %0
+# CHECK_LARGE64-NEXT: RET 0, implicit %xmm0
+#
+# CHECK32: %0 = MOVSSrm _, 1, _, %const.0, _
+# CHECK32-NEXT: %xmm0 = COPY %0
+# CHECK32-NEXT: RET 0, implicit %xmm0
+body: |
+ bb.1.entry:
+ %0(s32) = G_FCONSTANT float 5.500000e+00
+ %xmm0 = COPY %0(s32)
+ RET 0, implicit %xmm0
+
+...
+---
+name: test_double
+# CHECK64-LABEL: name: test_double
+#
+# CHECK32-LABEL: name: test_double
+alignment: 4
+legalized: true
+regBankSelected: true
+tracksRegLiveness: true
+# CHECK_SMALL64: registers:
+# CHECK_SMALL64-NEXT: - { id: 0, class: fr64, preferred-register: '' }
+#
+# CHECK_LARGE64: registers:
+# CHECK_LARGE64-NEXT: - { id: 0, class: fr64, preferred-register: '' }
+# CHECK_LARGE64-NEXT: - { id: 1, class: gr64, preferred-register: '' }
+#
+# CHECK32: registers:
+# CHECK32-NEXT: - { id: 0, class: fr64, preferred-register: '' }
+registers:
+ - { id: 0, class: vecr, preferred-register: '' }
+# CHECK_SMALL64: %0 = MOVSDrm %rip, 1, _, %const.0, _
+# CHECK_SMALL64-NEXT: %xmm0 = COPY %0
+# CHECK_SMALL64-NEXT: RET 0, implicit %xmm0
+#
+# CHECK_LARGE64: %1 = MOV64ri %const.0
+# CHECK_LARGE64-NEXT: %0 = MOVSDrm %1, 1, _, 0, _ :: (load 8 from constant-pool, align 64)
+# CHECK_LARGE64-NEXT: %xmm0 = COPY %0
+# CHECK_LARGE64-NEXT: RET 0, implicit %xmm0
+#
+# CHECK32: %0 = MOVSDrm _, 1, _, %const.0, _
+# CHECK32-NEXT: %xmm0 = COPY %0
+# CHECK32-NEXT: RET 0, implicit %xmm0
+body: |
+ bb.1.entry:
+ %0(s64) = G_FCONSTANT double 5.500000e+00
+ %xmm0 = COPY %0(s64)
+ RET 0, implicit %xmm0
+
+...
OpenPOWER on IntegriCloud