• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx                -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=AVX
2# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f,+avx512vl  -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL
3
4--- |
5  define void @test_extract_128_idx0() {
6    ret void
7  }
8
9  define void @test_extract_128_idx1() {
10    ret void
11  }
12
13...
14---
15name:            test_extract_128_idx0
16# ALL-LABEL: name:  test_extract_128_idx0
17alignment:       4
18legalized:       true
19regBankSelected: true
20# AVX:           registers:
21# AVX-NEXT:        - { id: 0, class: vr256, preferred-register: '' }
22# AVX-NEXT:        - { id: 1, class: vr128, preferred-register: '' }
23#
24# AVX512VL:      registers:
25# AVX512VL-NEXT:   - { id: 0, class: vr256x, preferred-register: '' }
26# AVX512VL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
27registers:
28  - { id: 0, class: vecr }
29  - { id: 1, class: vecr }
30# AVX:               %0:vr256 = COPY $ymm1
31# AVX-NEXT:          %1:vr128 = COPY %0.sub_xmm
32# AVX512VL:          %0:vr256x = COPY $ymm1
33# AVX512VL-NEXT:     %1:vr128x = COPY %0.sub_xmm
34# ALL-NEXT:          $xmm0 = COPY %1
35# ALL-NEXT:          RET 0, implicit $xmm0
36body:             |
37  bb.1 (%ir-block.0):
38    liveins: $ymm1
39
40    %0(<8 x s32>) = COPY $ymm1
41    %1(<4 x s32>) = G_EXTRACT %0(<8 x s32>), 0
42    $xmm0 = COPY %1(<4 x s32>)
43    RET 0, implicit $xmm0
44
45...
46---
47name:            test_extract_128_idx1
48# ALL-LABEL: name:  test_extract_128_idx1
49alignment:       4
50legalized:       true
51regBankSelected: true
52# AVX:           registers:
53# AVX-NEXT:        - { id: 0, class: vr256, preferred-register: '' }
54# AVX-NEXT:        - { id: 1, class: vr128, preferred-register: '' }
55#
56# AVX512VL:      registers:
57# AVX512VL-NEXT:   - { id: 0, class: vr256x, preferred-register: '' }
58# AVX512VL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
59registers:
60  - { id: 0, class: vecr }
61  - { id: 1, class: vecr }
62# AVX:               %0:vr256 = COPY $ymm1
63# AVX-NEXT:          %1:vr128 = VEXTRACTF128rr %0, 1
64# AVX-NEXT:          $xmm0 = COPY %1
65# AVX-NEXT:          RET 0, implicit $xmm0
66#
67# AVX512VL:          %0:vr256x = COPY $ymm1
68# AVX512VL-NEXT:     %1:vr128x = VEXTRACTF32x4Z256rr %0, 1
69# AVX512VL-NEXT:     $xmm0 = COPY %1
70# AVX512VL-NEXT:     RET 0, implicit $xmm0
71body:             |
72  bb.1 (%ir-block.0):
73    liveins: $ymm1
74
75    %0(<8 x s32>) = COPY $ymm1
76    %1(<4 x s32>) = G_EXTRACT %0(<8 x s32>), 128
77    $xmm0 = COPY %1(<4 x s32>)
78    RET 0, implicit $xmm0
79
80...
81