[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / GlobalISel / select-extract-vec512.mir
blobf0491b6e0d80287538e013cf8751753d4639d5ef
1 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL
3 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL
5 --- |
6   define void @test_extract_128_idx0() {
7     ret void
8   }
10   define void @test_extract_128_idx1() {
11     ret void
12   }
14   define void @test_extract_256_idx0() {
15     ret void
16   }
18   define void @test_extract_256_idx1() {
19     ret void
20   }
22 ...
23 ---
24 name:            test_extract_128_idx0
25 # ALL-LABEL: name:  test_extract_128_idx0
26 alignment:       16
27 legalized:       true
28 regBankSelected: true
29 # ALL:      registers:
30 # ALL-NEXT:   - { id: 0, class: vr512, preferred-register: '' }
31 # ALL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
32 registers:
33   - { id: 0, class: vecr }
34   - { id: 1, class: vecr }
35 # ALL:          %0:vr512 = COPY $zmm1
36 # ALL-NEXT:     %1:vr128x = COPY %0.sub_xmm
37 # ALL-NEXT:     $xmm0 = COPY %1
38 # ALL-NEXT:     RET 0, implicit $xmm0
39 body:             |
40   bb.1 (%ir-block.0):
41     liveins: $zmm1
43     %0(<16 x s32>) = COPY $zmm1
44     %1(<4 x s32>) = G_EXTRACT %0(<16 x s32>), 0
45     $xmm0 = COPY %1(<4 x s32>)
46     RET 0, implicit $xmm0
48 ...
49 ---
50 name:            test_extract_128_idx1
51 # ALL-LABEL: name:  test_extract_128_idx1
52 alignment:       16
53 legalized:       true
54 regBankSelected: true
55 # ALL:      registers:
56 # ALL-NEXT:   - { id: 0, class: vr512, preferred-register: '' }
57 # ALL-NEXT:   - { id: 1, class: vr128x, preferred-register: '' }
58 registers:
59   - { id: 0, class: vecr }
60   - { id: 1, class: vecr }
61 # ALL:          %0:vr512 = COPY $zmm1
62 # ALL-NEXT:     %1:vr128x = VEXTRACTF32x4Zrr %0, 1
63 # ALL-NEXT:     $xmm0 = COPY %1
64 # ALL-NEXT:     RET 0, implicit $xmm0
65 body:             |
66   bb.1 (%ir-block.0):
67     liveins: $zmm1
69     %0(<16 x s32>) = COPY $zmm1
70     %1(<4 x s32>) = G_EXTRACT %0(<16 x s32>), 128
71     $xmm0 = COPY %1(<4 x s32>)
72     RET 0, implicit $xmm0
74 ...
75 ---
76 name:            test_extract_256_idx0
77 # ALL-LABEL: name:  test_extract_256_idx0
78 alignment:       16
79 legalized:       true
80 regBankSelected: true
81 # ALL:      registers:
82 # ALL-NEXT:   - { id: 0, class: vr512, preferred-register: '' }
83 # ALL-NEXT:   - { id: 1, class: vr256x, preferred-register: '' }
84 registers:
85   - { id: 0, class: vecr }
86   - { id: 1, class: vecr }
87 # ALL:          %0:vr512 = COPY $zmm1
88 # ALL-NEXT:     %1:vr256x = COPY %0.sub_ymm
89 # ALL-NEXT:     $ymm0 = COPY %1
90 # ALL-NEXT:     RET 0, implicit $ymm0
91 body:             |
92   bb.1 (%ir-block.0):
93     liveins: $zmm1
95     %0(<16 x s32>) = COPY $zmm1
96     %1(<8 x s32>) = G_EXTRACT %0(<16 x s32>), 0
97     $ymm0 = COPY %1(<8 x s32>)
98     RET 0, implicit $ymm0
102 name:            test_extract_256_idx1
103 # ALL-LABEL: name:  test_extract_256_idx1
104 alignment:       16
105 legalized:       true
106 regBankSelected: true
107 # ALL:      registers:
108 # ALL-NEXT:   - { id: 0, class: vr512, preferred-register: '' }
109 # ALL-NEXT:   - { id: 1, class: vr256x, preferred-register: '' }
110 registers:
111   - { id: 0, class: vecr }
112   - { id: 1, class: vecr }
113 # ALL:          %0:vr512 = COPY $zmm1
114 # ALL-NEXT:     %1:vr256x = VEXTRACTF64x4Zrr %0, 1
115 # ALL-NEXT:     $ymm0 = COPY %1
116 # ALL-NEXT:     RET 0, implicit $ymm0
117 body:             |
118   bb.1 (%ir-block.0):
119     liveins: $zmm1
121     %0(<16 x s32>) = COPY $zmm1
122     %1(<8 x s32>) = G_EXTRACT %0(<16 x s32>), 256
123     $ymm0 = COPY %1(<8 x s32>)
124     RET 0, implicit $ymm0