diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/GlobalISel')
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 + +... |

