[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / MC / Mips / rotations64.s
blobf25b48ad87fdfa390cdd1d2e4fb170d6efd3f92a
1 # RUN: llvm-mc %s -arch=mips -mcpu=mips64 -show-encoding | FileCheck %s -check-prefix=CHECK-64
2 # RUN: llvm-mc %s -arch=mips -mcpu=mips64r2 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
3 # RUN: llvm-mc %s -arch=mips -mcpu=mips64r3 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
4 # RUN: llvm-mc %s -arch=mips -mcpu=mips64r5 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
5 # RUN: llvm-mc %s -arch=mips -mcpu=mips64r6 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
7 .text
8 foo:
9 rol $4,$5
10 # CHECK-64: subu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x23]
11 # CHECK-64: srlv $1, $4, $1 # encoding: [0x00,0x24,0x08,0x06]
12 # CHECK-64: sllv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x04]
13 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
14 # CHECK-64R: subu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x23]
15 # CHECK-64R: rotrv $4, $4, $1 # encoding: [0x00,0x24,0x20,0x46]
16 rol $4,$5,$6
17 # CHECK-64: subu $1, $zero, $6 # encoding: [0x00,0x06,0x08,0x23]
18 # CHECK-64: srlv $1, $5, $1 # encoding: [0x00,0x25,0x08,0x06]
19 # CHECK-64: sllv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x04]
20 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
21 # CHECK-64R: negu $4, $6 # encoding: [0x00,0x06,0x20,0x23]
22 # CHECK-64R: rotrv $4, $5, $4 # encoding: [0x00,0x85,0x20,0x46]
23 rol $4,0
24 # CHECK-64: srl $4, $4, 0 # encoding: [0x00,0x04,0x20,0x02]
25 # CHECK-64R: rotr $4, $4, 0 # encoding: [0x00,0x24,0x20,0x02]
26 rol $4,$5,0
27 # CHECK-64: srl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x02]
28 # CHECK-64R: rotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x02]
29 rol $4,1
30 # CHECK-64: sll $1, $4, 1 # encoding: [0x00,0x04,0x08,0x40]
31 # CHECK-64: srl $4, $4, 31 # encoding: [0x00,0x04,0x27,0xc2]
32 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
33 # CHECK-64R: rotr $4, $4, 31 # encoding: [0x00,0x24,0x27,0xc2]
34 rol $4,$5,1
35 # CHECK-64: sll $1, $5, 1 # encoding: [0x00,0x05,0x08,0x40]
36 # CHECK-64: srl $4, $5, 31 # encoding: [0x00,0x05,0x27,0xc2]
37 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
38 # CHECK-64R: rotr $4, $5, 31 # encoding: [0x00,0x25,0x27,0xc2]
39 rol $4,2
40 # CHECK-64: sll $1, $4, 2 # encoding: [0x00,0x04,0x08,0x80]
41 # CHECK-64: srl $4, $4, 30 # encoding: [0x00,0x04,0x27,0x82]
42 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
43 # CHECK-64R: rotr $4, $4, 30 # encoding: [0x00,0x24,0x27,0x82]
44 rol $4,$5,2
45 # CHECK-64: sll $1, $5, 2 # encoding: [0x00,0x05,0x08,0x80]
46 # CHECK-64: srl $4, $5, 30 # encoding: [0x00,0x05,0x27,0x82]
47 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
48 # CHECK-64R: rotr $4, $5, 30 # encoding: [0x00,0x25,0x27,0x82]
50 ror $4,$5
51 # CHECK-64: subu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x23]
52 # CHECK-64: sllv $1, $4, $1 # encoding: [0x00,0x24,0x08,0x04]
53 # CHECK-64: srlv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x06]
54 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
55 # CHECK-64R: rotrv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x46]
56 ror $4,$5,$6
57 # CHECK-64: subu $1, $zero, $6 # encoding: [0x00,0x06,0x08,0x23]
58 # CHECK-64: sllv $1, $5, $1 # encoding: [0x00,0x25,0x08,0x04]
59 # CHECK-64: srlv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x06]
60 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
61 # CHECK-64R: rotrv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x46]
62 ror $4,0
63 # CHECK-64: srl $4, $4, 0 # encoding: [0x00,0x04,0x20,0x02]
64 # CHECK-64R: rotr $4, $4, 0 # encoding: [0x00,0x24,0x20,0x02]
65 ror $4,$5,0
66 # CHECK-64: srl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x02]
67 # CHECK-64R: rotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x02]
68 ror $4,1
69 # CHECK-64: srl $1, $4, 1 # encoding: [0x00,0x04,0x08,0x42]
70 # CHECK-64: sll $4, $4, 31 # encoding: [0x00,0x04,0x27,0xc0]
71 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
72 # CHECK-64R: rotr $4, $4, 1 # encoding: [0x00,0x24,0x20,0x42]
73 ror $4,$5,1
74 # CHECK-64: srl $1, $5, 1 # encoding: [0x00,0x05,0x08,0x42]
75 # CHECK-64: sll $4, $5, 31 # encoding: [0x00,0x05,0x27,0xc0]
76 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
77 # CHECK-64R: rotr $4, $5, 1 # encoding: [0x00,0x25,0x20,0x42]
78 ror $4,2
79 # CHECK-64: srl $1, $4, 2 # encoding: [0x00,0x04,0x08,0x82]
80 # CHECK-64: sll $4, $4, 30 # encoding: [0x00,0x04,0x27,0x80]
81 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
82 # CHECK-64R: rotr $4, $4, 2 # encoding: [0x00,0x24,0x20,0x82]
83 ror $4,$5,2
84 # CHECK-64: srl $1, $5, 2 # encoding: [0x00,0x05,0x08,0x82]
85 # CHECK-64: sll $4, $5, 30 # encoding: [0x00,0x05,0x27,0x80]
86 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
87 # CHECK-64R: rotr $4, $5, 2 # encoding: [0x00,0x25,0x20,0x82]
89 drol $4,$5
90 # CHECK-64: dsubu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x2f]
91 # CHECK-64: dsrlv $1, $4, $1 # encoding: [0x00,0x24,0x08,0x16]
92 # CHECK-64: dsllv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x14]
93 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
94 # CHECK-64R: dsubu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x2f]
95 # CHECK-64R: drotrv $4, $4, $1 # encoding: [0x00,0x24,0x20,0x56]
96 drol $4,$5,$6
97 # CHECK-64: dsubu $1, $zero, $6 # encoding: [0x00,0x06,0x08,0x2f]
98 # CHECK-64: dsrlv $1, $5, $1 # encoding: [0x00,0x25,0x08,0x16]
99 # CHECK-64: dsllv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x14]
100 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
101 # CHECK-64R: dsubu $4, $zero, $6 # encoding: [0x00,0x06,0x20,0x2f]
102 # CHECK-64R: drotrv $4, $5, $4 # encoding: [0x00,0x85,0x20,0x56]
104 drol $4,1
105 # CHECK-64: dsll $1, $4, 1 # encoding: [0x00,0x04,0x08,0x78]
106 # CHECK-64: dsrl32 $4, $4, 31 # encoding: [0x00,0x04,0x27,0xfe]
107 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
108 # CHECK-64R: drotr32 $4, $4, 31 # encoding: [0x00,0x24,0x27,0xfe]
109 drol $4,$5,0
110 # CHECK-64: dsrl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3a]
111 # CHECK-64R: drotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3a]
112 drol $4,$5,1
113 # CHECK-64: dsll $1, $5, 1 # encoding: [0x00,0x05,0x08,0x78]
114 # CHECK-64: dsrl32 $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfe]
115 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
116 # CHECK-64R: drotr32 $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfe]
117 drol $4,$5,31
118 # CHECK-64: dsll $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xf8]
119 # CHECK-64: dsrl32 $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7e]
120 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
121 # CHECK-64R: drotr32 $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7e]
122 drol $4,$5,32
123 # CHECK-64: dsll32 $1, $5, 0 # encoding: [0x00,0x05,0x08,0x3c]
124 # CHECK-64: dsrl32 $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3e]
125 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
126 # CHECK-64R: drotr32 $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3e]
127 drol $4,$5,33
128 # CHECK-64: dsll32 $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7c]
129 # CHECK-64: dsrl $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfa]
130 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
131 # CHECK-64R: drotr $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfa]
132 drol $4,$5,63
133 # CHECK-64: dsll32 $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfc]
134 # CHECK-64: dsrl $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7a]
135 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
136 # CHECK-64R: drotr $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7a]
137 drol $4,$5,64
138 # CHECK-64: dsrl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3a]
139 # CHECK-64R: drotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3a]
140 drol $4,$5,65
141 # CHECK-64: dsll $1, $5, 1 # encoding: [0x00,0x05,0x08,0x78]
142 # CHECK-64: dsrl32 $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfe]
143 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
144 # CHECK-64R: drotr32 $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfe]
145 drol $4,$5,95
146 # CHECK-64: dsll $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xf8]
147 # CHECK-64: dsrl32 $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7e]
148 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
149 # CHECK-64R: drotr32 $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7e]
150 drol $4,$5,96
151 # CHECK-64: dsll32 $1, $5, 0 # encoding: [0x00,0x05,0x08,0x3c]
152 # CHECK-64: dsrl32 $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3e]
153 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
154 # CHECK-64R: drotr32 $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3e]
155 drol $4,$5,97
156 # CHECK-64: dsll32 $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7c]
157 # CHECK-64: dsrl $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfa]
158 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
159 # CHECK-64R: drotr $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfa]
160 drol $4,$5,127
161 # CHECK-64: dsll32 $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfc]
162 # CHECK-64: dsrl $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7a]
163 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
164 # CHECK-64R: drotr $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7a]
166 dror $4,$5
167 # CHECK-64: dsubu $1, $zero, $5 # encoding: [0x00,0x05,0x08,0x2f]
168 # CHECK-64: dsllv $1, $4, $1 # encoding: [0x00,0x24,0x08,0x14]
169 # CHECK-64: dsrlv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x16]
170 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
171 # CHECK-64R: drotrv $4, $4, $5 # encoding: [0x00,0xa4,0x20,0x56]
172 dror $4,$5,$6
173 # CHECK-64: dsubu $1, $zero, $6 # encoding: [0x00,0x06,0x08,0x2f]
174 # CHECK-64: dsllv $1, $5, $1 # encoding: [0x00,0x25,0x08,0x14]
175 # CHECK-64: dsrlv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x16]
176 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
177 # CHECK-64R: drotrv $4, $5, $6 # encoding: [0x00,0xc5,0x20,0x56]
178 dror $4,1
179 # CHECK-64: dsrl $1, $4, 1 # encoding: [0x00,0x04,0x08,0x7a]
180 # CHECK-64: dsll32 $4, $4, 31 # encoding: [0x00,0x04,0x27,0xfc]
181 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
182 # CHECK-64R: drotr $4, $4, 1 # encoding: [0x00,0x24,0x20,0x7a]
183 dror $4,$5,0
184 # CHECK-64: dsrl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3a]
185 # CHECK-64R: drotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3a]
186 dror $4,$5,1
187 # CHECK-64: dsrl $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7a]
188 # CHECK-64: dsll32 $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfc]
189 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
190 # CHECK-64R: drotr $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7a]
191 dror $4,$5,31
192 # CHECK-64: dsrl $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfa]
193 # CHECK-64: dsll32 $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7c]
194 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
195 # CHECK-64R: drotr $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfa]
196 dror $4,$5,32
197 # CHECK-64: dsrl32 $1, $5, 0 # encoding: [0x00,0x05,0x08,0x3e]
198 # CHECK-64: dsll32 $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3c]
199 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
200 # CHECK-64R: drotr32 $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3e]
201 dror $4,$5,33
202 # CHECK-64: dsrl32 $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7e]
203 # CHECK-64: dsll $4, $5, 31 # encoding: [0x00,0x05,0x27,0xf8]
204 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
205 # CHECK-64R: drotr32 $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7e]
206 dror $4,$5,63
207 # CHECK-64: dsrl32 $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfe]
208 # CHECK-64: dsll $4, $5, 1 # encoding: [0x00,0x05,0x20,0x78]
209 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
210 # CHECK-64R: drotr32 $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfe]
211 dror $4,$5,64
212 # CHECK-64: dsrl $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3a]
213 # CHECK-64R: drotr $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3a]
214 dror $4,$5,65
215 # CHECK-64: dsrl $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7a]
216 # CHECK-64: dsll32 $4, $5, 31 # encoding: [0x00,0x05,0x27,0xfc]
217 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
218 # CHECK-64R: drotr $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7a]
219 dror $4,$5,95
220 # CHECK-64: dsrl $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfa]
221 # CHECK-64: dsll32 $4, $5, 1 # encoding: [0x00,0x05,0x20,0x7c]
222 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
223 # CHECK-64R: drotr $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfa]
224 dror $4,$5,96
225 # CHECK-64: dsrl32 $1, $5, 0 # encoding: [0x00,0x05,0x08,0x3e]
226 # CHECK-64: dsll32 $4, $5, 0 # encoding: [0x00,0x05,0x20,0x3c]
227 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
228 # CHECK-64R: drotr32 $4, $5, 0 # encoding: [0x00,0x25,0x20,0x3e]
229 dror $4,$5,97
230 # CHECK-64: dsrl32 $1, $5, 1 # encoding: [0x00,0x05,0x08,0x7e]
231 # CHECK-64: dsll $4, $5, 31 # encoding: [0x00,0x05,0x27,0xf8]
232 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
233 # CHECK-64R: drotr32 $4, $5, 1 # encoding: [0x00,0x25,0x20,0x7e]
234 dror $4,$5,127
235 # CHECK-64: dsrl32 $1, $5, 31 # encoding: [0x00,0x05,0x0f,0xfe]
236 # CHECK-64: dsll $4, $5, 1 # encoding: [0x00,0x05,0x20,0x78]
237 # CHECK-64: or $4, $4, $1 # encoding: [0x00,0x81,0x20,0x25]
238 # CHECK-64R: drotr32 $4, $5, 31 # encoding: [0x00,0x25,0x27,0xfe]