[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-vector-shift.mir
blobcf9925a9a8a518e3ce011e9604956c3000f0b716
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3 ---
4 name:            shl_v2i32
5 alignment:       4
6 legalized:       true
7 regBankSelected: true
8 tracksRegLiveness: true
9 registers:
10   - { id: 0, class: fpr }
11   - { id: 1, class: fpr }
12   - { id: 2, class: fpr }
13 machineFunctionInfo: {}
14 body:             |
15   bb.1:
16     liveins: $d0, $d1
18     ; CHECK-LABEL: name: shl_v2i32
19     ; CHECK: liveins: $d0, $d1
20     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
21     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
22     ; CHECK: [[USHLv2i32_:%[0-9]+]]:fpr64 = USHLv2i32 [[COPY]], [[COPY1]]
23     ; CHECK: $d0 = COPY [[USHLv2i32_]]
24     ; CHECK: RET_ReallyLR implicit $d0
25     %0:fpr(<2 x s32>) = COPY $d0
26     %1:fpr(<2 x s32>) = COPY $d1
27     %2:fpr(<2 x s32>) = G_SHL %0, %1(<2 x s32>)
28     $d0 = COPY %2(<2 x s32>)
29     RET_ReallyLR implicit $d0
31 ...
32 ---
33 name:            shl_v4i32
34 alignment:       4
35 legalized:       true
36 regBankSelected: true
37 tracksRegLiveness: true
38 registers:
39   - { id: 0, class: fpr }
40   - { id: 1, class: fpr }
41   - { id: 2, class: fpr }
42 machineFunctionInfo: {}
43 body:             |
44   bb.1:
45     liveins: $q0, $q1
47     ; CHECK-LABEL: name: shl_v4i32
48     ; CHECK: liveins: $q0, $q1
49     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
50     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
51     ; CHECK: [[USHLv4i32_:%[0-9]+]]:fpr128 = USHLv4i32 [[COPY]], [[COPY1]]
52     ; CHECK: $q0 = COPY [[USHLv4i32_]]
53     ; CHECK: RET_ReallyLR implicit $q0
54     %0:fpr(<4 x s32>) = COPY $q0
55     %1:fpr(<4 x s32>) = COPY $q1
56     %2:fpr(<4 x s32>) = G_SHL %0, %1(<4 x s32>)
57     $q0 = COPY %2(<4 x s32>)
58     RET_ReallyLR implicit $q0
60 ...
61 ---
62 name:            shl_v2i64
63 alignment:       4
64 legalized:       true
65 regBankSelected: true
66 tracksRegLiveness: true
67 registers:
68   - { id: 0, class: fpr }
69   - { id: 1, class: fpr }
70   - { id: 2, class: fpr }
71 machineFunctionInfo: {}
72 body:             |
73   bb.1:
74     liveins: $q0, $q1
76     ; CHECK-LABEL: name: shl_v2i64
77     ; CHECK: liveins: $q0, $q1
78     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
79     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
80     ; CHECK: [[USHLv2i64_:%[0-9]+]]:fpr128 = USHLv2i64 [[COPY]], [[COPY1]]
81     ; CHECK: $q0 = COPY [[USHLv2i64_]]
82     ; CHECK: RET_ReallyLR implicit $q0
83     %0:fpr(<2 x s64>) = COPY $q0
84     %1:fpr(<2 x s64>) = COPY $q1
85     %2:fpr(<2 x s64>) = G_SHL %0, %1(<2 x s64>)
86     $q0 = COPY %2(<2 x s64>)
87     RET_ReallyLR implicit $q0
89 ...
90 ---
91 name:            ashr_v2i32
92 alignment:       4
93 legalized:       true
94 regBankSelected: true
95 tracksRegLiveness: true
96 registers:
97   - { id: 0, class: fpr }
98   - { id: 1, class: fpr }
99   - { id: 2, class: fpr }
100 machineFunctionInfo: {}
101 body:             |
102   bb.1:
103     liveins: $d0, $d1
105     ; CHECK-LABEL: name: ashr_v2i32
106     ; CHECK: liveins: $d0, $d1
107     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
108     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
109     ; CHECK: [[NEGv2i32_:%[0-9]+]]:fpr64 = NEGv2i32 [[COPY1]]
110     ; CHECK: [[SSHLv2i32_:%[0-9]+]]:fpr64 = SSHLv2i32 [[COPY]], [[NEGv2i32_]]
111     ; CHECK: $d0 = COPY [[SSHLv2i32_]]
112     ; CHECK: RET_ReallyLR implicit $d0
113     %0:fpr(<2 x s32>) = COPY $d0
114     %1:fpr(<2 x s32>) = COPY $d1
115     %2:fpr(<2 x s32>) = G_ASHR %0, %1(<2 x s32>)
116     $d0 = COPY %2(<2 x s32>)
117     RET_ReallyLR implicit $d0
121 name:            ashr_v4i32
122 alignment:       4
123 legalized:       true
124 regBankSelected: true
125 tracksRegLiveness: true
126 registers:
127   - { id: 0, class: fpr }
128   - { id: 1, class: fpr }
129   - { id: 2, class: fpr }
130 machineFunctionInfo: {}
131 body:             |
132   bb.1:
133     liveins: $q0, $q1
135     ; CHECK-LABEL: name: ashr_v4i32
136     ; CHECK: liveins: $q0, $q1
137     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
138     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
139     ; CHECK: [[NEGv4i32_:%[0-9]+]]:fpr128 = NEGv4i32 [[COPY1]]
140     ; CHECK: [[SSHLv4i32_:%[0-9]+]]:fpr128 = SSHLv4i32 [[COPY]], [[NEGv4i32_]]
141     ; CHECK: $q0 = COPY [[SSHLv4i32_]]
142     ; CHECK: RET_ReallyLR implicit $q0
143     %0:fpr(<4 x s32>) = COPY $q0
144     %1:fpr(<4 x s32>) = COPY $q1
145     %2:fpr(<4 x s32>) = G_ASHR %0, %1(<4 x s32>)
146     $q0 = COPY %2(<4 x s32>)
147     RET_ReallyLR implicit $q0
151 name:            ashr_v4i64
152 alignment:       4
153 legalized:       true
154 regBankSelected: true
155 tracksRegLiveness: true
156 registers:
157   - { id: 0, class: fpr }
158   - { id: 1, class: fpr }
159   - { id: 2, class: fpr }
160 machineFunctionInfo: {}
161 body:             |
162   bb.1:
163     liveins: $q0, $q1
165     ; CHECK-LABEL: name: ashr_v4i64
166     ; CHECK: liveins: $q0, $q1
167     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
168     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
169     ; CHECK: [[NEGv2i64_:%[0-9]+]]:fpr128 = NEGv2i64 [[COPY1]]
170     ; CHECK: [[SSHLv2i64_:%[0-9]+]]:fpr128 = SSHLv2i64 [[COPY]], [[NEGv2i64_]]
171     ; CHECK: $q0 = COPY [[SSHLv2i64_]]
172     ; CHECK: RET_ReallyLR implicit $q0
173     %0:fpr(<2 x s64>) = COPY $q0
174     %1:fpr(<2 x s64>) = COPY $q1
175     %2:fpr(<2 x s64>) = G_ASHR %0, %1(<2 x s64>)
176     $q0 = COPY %2(<2 x s64>)
177     RET_ReallyLR implicit $q0