[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / GlobalISel / select-extract-vec256.mir
blob36a9244fe542882c82e40371ebd1f1f4e4614ff5
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
4 --- |
5   define void @test_extract_128_idx0() {
6     ret void
7   }
9   define void @test_extract_128_idx1() {
10     ret void
11   }
13 ...
14 ---
15 name:            test_extract_128_idx0
16 # ALL-LABEL: name:  test_extract_128_idx0
17 alignment:       16
18 legalized:       true
19 regBankSelected: true
20 # AVX:           registers:
21 # AVX-NEXT:        - { id: 0, class: vr256, preferred-register: '' }
22 # AVX-NEXT:        - { id: 1, class: vr128, preferred-register: '' }
24 # AVX512VL:      registers:
25 # AVX512VL-NEXT:   - { id: 0, class: vr256x, preferred-register: '' }
26 # AVX512VL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
27 registers:
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
36 body:             |
37   bb.1 (%ir-block.0):
38     liveins: $ymm1
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
45 ...
46 ---
47 name:            test_extract_128_idx1
48 # ALL-LABEL: name:  test_extract_128_idx1
49 alignment:       16
50 legalized:       true
51 regBankSelected: true
52 # AVX:           registers:
53 # AVX-NEXT:        - { id: 0, class: vr256, preferred-register: '' }
54 # AVX-NEXT:        - { id: 1, class: vr128, preferred-register: '' }
56 # AVX512VL:      registers:
57 # AVX512VL-NEXT:   - { id: 0, class: vr256x, preferred-register: '' }
58 # AVX512VL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
59 registers:
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
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
71 body:             |
72   bb.1 (%ir-block.0):
73     liveins: $ymm1
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
80 ...