xref: /llvm-project/llvm/test/MC/RISCV/rv64i-aliases-valid.s (revision 4b3d439e7e7b4e794e523caea9863d67ff8cf85f)
1# RUN: llvm-mc %s -triple=riscv64 -M no-aliases \
2# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-INST,CHECK-ASM-NOALIAS %s
3# RUN: llvm-mc %s -triple=riscv64 \
4# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS,CHECK-ASM %s
5# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \
6# RUN:     | llvm-objdump --no-print-imm-hex -M no-aliases -d - \
7# RUN:     | FileCheck -check-prefixes=CHECK-OBJ-NOALIAS,CHECK-EXPAND,CHECK-INST %s
8# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \
9# RUN:     | llvm-objdump --no-print-imm-hex -d - \
10# RUN:     | FileCheck -check-prefixes=CHECK-EXPAND,CHECK-ALIAS %s
11
12# The following check prefixes are used in this test:
13# CHECK-INST.....Match the canonical instr (tests alias to instr. mapping)
14# CHECK-ALIAS....Match the alias (tests instr. to alias mapping)
15# CHECK-EXPAND...Match canonical instr. unconditionally (tests alias expansion)
16
17# TODO ld
18# TODO sd
19
20# Needed for testing valid %pcrel_lo expressions
21.Lpcrel_hi0: auipc a0, %pcrel_hi(foo)
22
23# Needed for testing li with a symbol difference
24.Lbuf: .skip 8
25.Lbuf_end:
26
27# CHECK-INST: addi a0, zero, 0
28# CHECK-ALIAS: li a0, 0
29li x10, 0
30# CHECK-INST: addi a0, zero, 1
31# CHECK-ALIAS: li a0, 1
32li x10, 1
33# CHECK-INST: addi a0, zero, -1
34# CHECK-ALIAS: li a0, -1
35li x10, -1
36# CHECK-INST: addi a0, zero, 2047
37# CHECK-ALIAS: li a0, 2047
38li x10, 2047
39# CHECK-INST: addi a0, zero, -2047
40# CHECK-ALIAS: li a0, -2047
41li x10, -2047
42# CHECK-INST: addi a1, zero, 1
43# CHECK-INST: slli a1, a1, 11
44# CHECK-ALIAS: li a1, 1
45# CHECK-ALIAS: slli a1, a1, 11
46li x11, 2048
47# CHECK-INST: addi a1, zero, -2048
48# CHECK-ALIAS: li a1, -2048
49li x11, -2048
50# CHECK-EXPAND: lui a1, 1
51# CHECK-EXPAND: addiw a1, a1, -2047
52li x11, 2049
53# CHECK-EXPAND: lui a1, 1048575
54# CHECK-EXPAND: addiw a1, a1, 2047
55li x11, -2049
56# CHECK-EXPAND: lui a1, 1
57# CHECK-EXPAND: addiw a1, a1, -1
58li x11, 4095
59# CHECK-EXPAND: lui a1, 1048575
60# CHECK-EXPAND: addiw a1, a1, 1
61li x11, -4095
62# CHECK-EXPAND: lui a2, 1
63li x12, 4096
64# CHECK-EXPAND: lui a2, 1048575
65li x12, -4096
66# CHECK-EXPAND: lui a2, 1
67# CHECK-EXPAND-NEXT: addiw a2, a2, 1
68li x12, 4097
69# CHECK-EXPAND: lui a2, 1048575
70# CHECK-EXPAND: addiw a2, a2, -1
71li x12, -4097
72# CHECK-EXPAND: lui a2, 524288
73# CHECK-EXPAND-NEXT: addiw a2, a2, -1
74li x12, 2147483647
75# CHECK-EXPAND: lui a2, 524288
76# CHECK-EXPAND-NEXT: addiw a2, a2, 1
77li x12, -2147483647
78# CHECK-EXPAND: lui a2, 524288
79li x12, -2147483648
80# CHECK-EXPAND: lui a2, 524288
81li x12, -0x80000000
82
83# CHECK-INST: addi a2, zero, 1
84# CHECK-INST-NEXT: slli a2, a2, 31
85# CHECK-ALIAS: li a2, 1
86# CHECK-ALIAS-NEXT: slli a2, a2, 31
87li x12, 0x80000000
88# CHECK-INST: addi a2, zero, -1
89# CHECK-INST-NEXT: srli a2, a2, 32
90# CHECK-ALIAS: li a2, -1
91# CHECK-ALIAS-NEXT: srli a2, a2, 32
92li x12, 0xFFFFFFFF
93
94# CHECK-INST: addi t0, zero, 1
95# CHECK-INST-NEXT: slli t0, t0, 32
96# CHECK-ALIAS: li t0, 1
97# CHECK-ALIAS-NEXT: slli t0, t0, 32
98li t0, 0x100000000
99# CHECK-INST: addi t1, zero, -1
100# CHECK-INST-NEXT: slli t1, t1, 63
101# CHECK-ALIAS: li t1, -1
102# CHECK-ALIAS-NEXT: slli t1, t1, 63
103li t1, 0x8000000000000000
104# CHECK-INST: addi t1, zero, -1
105# CHECK-INST-NEXT: slli t1, t1, 63
106# CHECK-ALIAS: li t1, -1
107# CHECK-ALIAS-NEXT: slli t1, t1, 63
108li t1, -0x8000000000000000
109# CHECK-EXPAND: lui t2, 9321
110# CHECK-EXPAND-NEXT: addiw t2, t2, -1329
111# CHECK-EXPAND-NEXT: slli t2, t2, 35
112li t2, 0x1234567800000000
113# CHECK-INST: addi t3, zero, 7
114# CHECK-INST-NEXT: slli t3, t3, 36
115# CHECK-INST-NEXT: addi t3, t3, 11
116# CHECK-INST-NEXT: slli t3, t3, 24
117# CHECK-INST-NEXT: addi t3, t3, 15
118# CHECK-ALIAS: li t3, 7
119# CHECK-ALIAS-NEXT: slli t3, t3, 36
120# CHECK-ALIAS-NEXT: addi t3, t3, 11
121# CHECK-ALIAS-NEXT: slli t3, t3, 24
122# CHECK-ALIAS-NEXT: addi t3, t3, 15
123li t3, 0x700000000B00000F
124# CHECK-EXPAND: lui t4, 583
125# CHECK-EXPAND-NEXT: addiw t4, t4, -1875
126# CHECK-EXPAND-NEXT: slli t4, t4, 14
127# CHECK-EXPAND-NEXT: addi t4, t4, -947
128# CHECK-EXPAND-NEXT: slli t4, t4, 12
129# CHECK-EXPAND-NEXT: addi t4, t4, 1511
130# CHECK-EXPAND-NEXT: slli t4, t4, 13
131# CHECK-EXPAND-NEXT: addi t4, t4, -272
132li t4, 0x123456789abcdef0
133# CHECK-INST: addi t5, zero, -1
134# CHECK-ALIAS: li t5, -1
135li t5, 0xFFFFFFFFFFFFFFFF
136# CHECK-EXPAND: lui t6, 262145
137# CHECK-EXPAND-NEXT: slli t6, t6, 1
138li t6, 0x80002000
139# CHECK-EXPAND: lui t0, 262145
140# CHECK-EXPAND-NEXT: slli t0, t0, 2
141li x5, 0x100004000
142# CHECK-EXPAND: lui t1, 4097
143# CHECK-EXPAND-NEXT: slli t1, t1, 20
144li x6, 0x100100000000
145# CHECK-EXPAND: lui t2, 983056
146# CHECK-EXPAND-NEXT: srli t2, t2, 16
147li x7, 0xFFFFFFFFF001
148# CHECK-EXPAND: lui s0, 1044481
149# CHECK-EXPAND-NEXT: slli s0, s0, 12
150# CHECK-EXPAND-NEXT: srli s0, s0, 24
151li x8, 0xFFFFFFF001
152# CHECK-EXPAND: lui s1, 4097
153# CHECK-EXPAND-NEXT: slli s1, s1, 20
154# CHECK-EXPAND-NEXT: addi s1, s1, -3
155li x9, 0x1000FFFFFFFD
156# CHECK-INST: lui a0, 983040
157# CHECK-INST-NEXT: srli a0, a0, 3
158# CHECK-INST-NEXT: xori a0, a0, -1
159# CHECK-ALIAS: lui a0, 983040
160# CHECK-ALIAS-NEXT: srli a0, a0, 3
161# CHECK-ALIAS-NEXT: not a0, a0
162li x10, 0xE000000001FFFFFF
163# CHECK-INST: addi a1, zero, -2047
164# CHECK-INST-NEXT: slli a1, a1, 39
165# CHECK-INST-NEXT: addi a1, a1, -2048
166# CHECK-INST-NEXT: addi a1, a1, -1
167# CHECK-ALIAS: li a1, -2047
168# CHECK-ALIAS-NEXT: slli a1, a1, 39
169# CHECK-ALIAS-NEXT: addi a1, a1, -2048
170# CHECK-ALIAS-NEXT: addi a1, a1, -1
171li x11, 0xFFFC007FFFFFF7FF
172
173# CHECK-INST: lui a2, 349525
174# CHECK-INST-NEXT: addiw a2, a2, 1365
175# CHECK-INST-NEXT: slli a2, a2, 1
176# CHECK-ALIAS: lui a2, 349525
177# CHECK-ALIAS-NEXT: addiw a2, a2, 1365
178# CHECK-ALIAS-NEXT: slli a2, a2, 1
179li x12, 0xaaaaaaaa
180
181# CHECK-INST: lui a3, 699051
182# CHECK-INST-NEXT: addiw a3, a3, -1365
183# CHECK-INST-NEXT: slli a3, a3, 1
184# CHECK-ALIAS: lui a3, 699051
185# CHECK-ALIAS-NEXT: addiw a3, a3, -1365
186# CHECK-ALIAS-NEXT: slli a3, a3, 1
187li x13, 0xffffffff55555556
188
189# CHECK-S-OBJ-NOALIAS: lui t0, 524288
190# CHECK-S-OBJ-NOALIAS-NEXT: addi t0, t0, -1365
191# CHECK-S-OBJ: lui t0, 524288
192# CHECK-S-OBJ-NEXT: addi t0, t0, -1365
193li x5, -2147485013
194
195# CHECK-INST: addi a0, zero, 1110
196# CHECK-ALIAS: li a0, 1110
197li a0, %lo(0x123456)
198
199# CHECK-OBJ-NOALIAS: addi a0, zero, 0
200# CHECK-OBJ: R_RISCV_LO12
201li a0, %lo(foo)
202# CHECK-OBJ-NOALIAS: addi a0, zero, 0
203# CHECK-OBJ: R_RISCV_PCREL_LO12
204li a0, %pcrel_lo(.Lpcrel_hi0)
205
206.equ CONST, 0x123456
207# CHECK-EXPAND: lui a0, 291
208# CHECK-EXPAND: addiw a0, a0, 1110
209li a0, CONST
210
211.equ CONST, 0x654321
212# CHECK-EXPAND: lui a0, 1620
213# CHECK-EXPAND: addiw a0, a0, 801
214li a0, CONST
215
216.equ CONST, .Lbuf_end - .Lbuf
217# CHECK-ASM: li a0, CONST
218# CHECK-ASM-NOALIAS: addi a0, zero, CONST
219# CHECK-OBJ-NOALIAS: addi a0, zero, 8
220li a0, CONST
221
222# CHECK-ASM: addi a0, zero, .Lbuf_end-.Lbuf
223# CHECK-ASM-NOALIAS: addi a0, zero, .Lbuf_end-.Lbuf
224# CHECK-OBJ-NOALIAS: addi a0, zero, 8
225li a0, .Lbuf_end - .Lbuf
226
227# CHECK-INST: addi a0, zero, 0
228# CHECK-ALIAS: li a0, 0
229la x10, 0
230lla x10, 0
231# CHECK-INST: addi a0, zero, 1
232# CHECK-ALIAS: li a0, 1
233la x10, 1
234lla x10, 1
235# CHECK-INST: addi a0, zero, -1
236# CHECK-ALIAS: li a0, -1
237la x10, -1
238lla x10, -1
239# CHECK-INST: addi a0, zero, 2047
240# CHECK-ALIAS: li a0, 2047
241la x10, 2047
242lla x10, 2047
243# CHECK-INST: addi a0, zero, -2047
244# CHECK-ALIAS: li a0, -2047
245la x10, -2047
246lla x10, -2047
247# CHECK-INST: addi a1, zero, 1
248# CHECK-INST: slli a1, a1, 11
249# CHECK-ALIAS: li a1, 1
250# CHECK-ALIAS: slli a1, a1, 11
251la x11, 2048
252lla x11, 2048
253# CHECK-INST: addi a1, zero, -2048
254# CHECK-ALIAS: li a1, -2048
255la x11, -2048
256lla x11, -2048
257# CHECK-EXPAND: lui a1, 1
258# CHECK-EXPAND: addiw a1, a1, -2047
259la x11, 2049
260lla x11, 2049
261# CHECK-EXPAND: lui a1, 1048575
262# CHECK-EXPAND: addiw a1, a1, 2047
263la x11, -2049
264lla x11, -2049
265# CHECK-EXPAND: lui a1, 1
266# CHECK-EXPAND: addiw a1, a1, -1
267la x11, 4095
268lla x11, 4095
269# CHECK-EXPAND: lui a1, 1048575
270# CHECK-EXPAND: addiw a1, a1, 1
271la x11, -4095
272lla x11, -4095
273# CHECK-EXPAND: lui a2, 1
274la x12, 4096
275lla x12, 4096
276# CHECK-EXPAND: lui a2, 1048575
277la x12, -4096
278lla x12, -4096
279# CHECK-EXPAND: lui a2, 1
280# CHECK-EXPAND: addiw a2, a2, 1
281la x12, 4097
282lla x12, 4097
283# CHECK-EXPAND: lui a2, 1048575
284# CHECK-EXPAND: addiw a2, a2, -1
285la x12, -4097
286lla x12, -4097
287# CHECK-EXPAND: lui a2, 524288
288# CHECK-EXPAND: addiw a2, a2, -1
289la x12, 2147483647
290lla x12, 2147483647
291# CHECK-EXPAND: lui a2, 524288
292# CHECK-EXPAND: addiw a2, a2, 1
293la x12, -2147483647
294lla x12, -2147483647
295# CHECK-EXPAND: lui a2, 524288
296la x12, -2147483648
297lla x12, -2147483648
298# CHECK-EXPAND: lui a2, 524288
299la x12, -0x80000000
300lla x12, -0x80000000
301
302# CHECK-INST: addi a2, zero, 1
303# CHECK-INST-NEXT: slli a2, a2, 31
304# CHECK-ALIAS: li a2, 1
305# CHECK-ALIAS-NEXT: slli a2, a2, 31
306la x12, 0x80000000
307lla x12, 0x80000000
308# CHECK-INST: addi a2, zero, -1
309# CHECK-INST-NEXT: srli a2, a2, 32
310# CHECK-ALIAS: li a2, -1
311# CHECK-ALIAS-NEXT: srli a2, a2, 32
312la x12, 0xFFFFFFFF
313lla x12, 0xFFFFFFFF
314
315# CHECK-INST: addi t0, zero, 1
316# CHECK-INST-NEXT: slli t0, t0, 32
317# CHECK-ALIAS: li t0, 1
318# CHECK-ALIAS-NEXT: slli t0, t0, 32
319la t0, 0x100000000
320lla t0, 0x100000000
321# CHECK-INST: addi t1, zero, -1
322# CHECK-INST-NEXT: slli t1, t1, 63
323# CHECK-ALIAS: li t1, -1
324# CHECK-ALIAS-NEXT: slli t1, t1, 63
325la t1, 0x8000000000000000
326lla t1, 0x8000000000000000
327# CHECK-INST: addi t1, zero, -1
328# CHECK-INST-NEXT: slli t1, t1, 63
329# CHECK-ALIAS: li t1, -1
330# CHECK-ALIAS-NEXT: slli t1, t1, 63
331la t1, -0x8000000000000000
332lla t1, -0x8000000000000000
333# CHECK-EXPAND: lui t2, 9321
334# CHECK-EXPAND-NEXT: addiw t2, t2, -1329
335# CHECK-EXPAND-NEXT: slli t2, t2, 35
336la t2, 0x1234567800000000
337lla t2, 0x1234567800000000
338# CHECK-INST: addi t3, zero, 7
339# CHECK-INST-NEXT: slli t3, t3, 36
340# CHECK-INST-NEXT: addi t3, t3, 11
341# CHECK-INST-NEXT: slli t3, t3, 24
342# CHECK-INST-NEXT: addi t3, t3, 15
343# CHECK-ALIAS: li t3, 7
344# CHECK-ALIAS-NEXT: slli t3, t3, 36
345# CHECK-ALIAS-NEXT: addi t3, t3, 11
346# CHECK-ALIAS-NEXT: slli t3, t3, 24
347# CHECK-ALIAS-NEXT: addi t3, t3, 15
348la t3, 0x700000000B00000F
349lla t3, 0x700000000B00000F
350# CHECK-EXPAND: lui t4, 583
351# CHECK-EXPAND-NEXT: addiw t4, t4, -1875
352# CHECK-EXPAND-NEXT: slli t4, t4, 14
353# CHECK-EXPAND-NEXT: addi t4, t4, -947
354# CHECK-EXPAND-NEXT: slli t4, t4, 12
355# CHECK-EXPAND-NEXT: addi t4, t4, 1511
356# CHECK-EXPAND-NEXT: slli t4, t4, 13
357# CHECK-EXPAND-NEXT: addi t4, t4, -272
358la t4, 0x123456789abcdef0
359lla t4, 0x123456789abcdef0
360# CHECK-INST: addi t5, zero, -1
361# CHECK-ALIAS: li t5, -1
362la t5, 0xFFFFFFFFFFFFFFFF
363lla t5, 0xFFFFFFFFFFFFFFFF
364# CHECK-EXPAND: lui t6, 262145
365# CHECK-EXPAND-NEXT: slli t6, t6, 1
366la t6, 0x80002000
367lla t6, 0x80002000
368# CHECK-EXPAND: lui t0, 262145
369# CHECK-EXPAND-NEXT: slli t0, t0, 2
370la x5, 0x100004000
371lla x5, 0x100004000
372# CHECK-EXPAND: lui t1, 4097
373# CHECK-EXPAND-NEXT: slli t1, t1, 20
374la x6, 0x100100000000
375lla x6, 0x100100000000
376# CHECK-EXPAND: lui t2, 983056
377# CHECK-EXPAND-NEXT: srli t2, t2, 16
378la x7, 0xFFFFFFFFF001
379lla x7, 0xFFFFFFFFF001
380# CHECK-EXPAND: lui s0, 1044481
381# CHECK-EXPAND-NEXT: slli s0, s0, 12
382# CHECK-EXPAND-NEXT: srli s0, s0, 24
383la x8, 0xFFFFFFF001
384lla x8, 0xFFFFFFF001
385# CHECK-EXPAND: lui s1, 4097
386# CHECK-EXPAND-NEXT: slli s1, s1, 20
387# CHECK-EXPAND-NEXT: addi s1, s1, -3
388la x9, 0x1000FFFFFFFD
389lla x9, 0x1000FFFFFFFD
390# CHECK-INST: lui a0, 983040
391# CHECK-INST-NEXT: srli a0, a0, 3
392# CHECK-INST-NEXT: xori a0, a0, -1
393# CHECK-ALIAS: lui a0, 983040
394# CHECK-ALIAS-NEXT: srli a0, a0, 3
395# CHECK-ALIAS-NEXT: not a0, a0
396la x10, 0xE000000001FFFFFF
397lla x10, 0xE000000001FFFFFF
398# CHECK-INST: addi a1, zero, -2047
399# CHECK-INST-NEXT: slli a1, a1, 39
400# CHECK-INST-NEXT: addi a1, a1, -2048
401# CHECK-INST-NEXT: addi a1, a1, -1
402# CHECK-ALIAS: li a1, -2047
403# CHECK-ALIAS-NEXT: slli a1, a1, 39
404# CHECK-ALIAS-NEXT: addi a1, a1, -2048
405# CHECK-ALIAS-NEXT: addi a1, a1, -1
406la x11, 0xFFFC007FFFFFF7FF
407lla x11, 0xFFFC007FFFFFF7FF
408
409# CHECK-INST: lui a2, 349525
410# CHECK-INST-NEXT: addiw a2, a2, 1365
411# CHECK-INST-NEXT: slli a2, a2, 1
412# CHECK-ALIAS: lui a2, 349525
413# CHECK-ALIAS-NEXT: addiw a2, a2, 1365
414# CHECK-ALIAS-NEXT: slli a2, a2, 1
415la x12, 0xaaaaaaaa
416lla x12, 0xaaaaaaaa
417
418# CHECK-INST: lui a3, 699051
419# CHECK-INST-NEXT: addiw a3, a3, -1365
420# CHECK-INST-NEXT: slli a3, a3, 1
421# CHECK-ALIAS: lui a3, 699051
422# CHECK-ALIAS-NEXT: addiw a3, a3, -1365
423# CHECK-ALIAS-NEXT: slli a3, a3, 1
424la x13, 0xffffffff55555556
425lla x13, 0xffffffff55555556
426
427# CHECK-S-OBJ-NOALIAS: lui t0, 524288
428# CHECK-S-OBJ-NOALIAS-NEXT: addi t0, t0, -1365
429# CHECK-S-OBJ: lui t0, 524288
430# CHECK-S-OBJ-NEXT: addi t0, t0, -1365
431la x5, -2147485013
432lla x5, -2147485013
433
434.equ CONSTANT, 0x123456
435# CHECK-EXPAND: lui a0, 291
436# CHECK-EXPAND: addiw a0, a0, 1110
437la a0, CONSTANT
438lla a0, CONSTANT
439
440.equ CONSTANT, 0x654321
441# CHECK-EXPAND: lui a0, 1620
442# CHECK-EXPAND: addiw a0, a0, 801
443la a0, CONSTANT
444lla a0, CONSTANT
445
446# CHECK-INST: subw t6, zero, ra
447# CHECK-ALIAS: negw t6, ra
448negw x31, x1
449# CHECK-INST: addiw t6, ra, 0
450# CHECK-ALIAS: sext.w t6, ra
451sext.w x31, x1
452
453# The following aliases are accepted as input but the canonical form
454# of the instruction will always be printed.
455# CHECK-INST: addiw a2, a3, 4
456# CHECK-ALIAS: addiw a2, a3, 4
457addw a2,a3,4
458
459# CHECK-INST: slliw a2, a3, 4
460# CHECK-ALIAS: slliw a2, a3, 4
461sllw a2,a3,4
462
463# CHECK-INST: srliw a2, a3, 4
464# CHECK-ALIAS: srliw a2, a3, 4
465srlw a2,a3,4
466
467# CHECK-INST: sraiw a2, a3, 4
468# CHECK-ALIAS: sraiw a2, a3, 4
469sraw a2,a3,4
470
471# CHECK-EXPAND: lwu a0, 0(a1)
472lwu x10, (x11)
473# CHECK-EXPAND: ld a0, 0(a1)
474ld x10, (x11)
475# CHECK-EXPAND: sd a0, 0(a1)
476sd x10, (x11)
477
478# CHECK-EXPAND: slli a0, a1, 56
479# CHECK-EXPAND: srai a0, a0, 56
480sext.b x10, x11
481
482# CHECK-EXPAND: slli a0, a1, 48
483# CHECK-EXPAND: srai a0, a0, 48
484sext.h x10, x11
485
486# CHECK-INST: andi a0, a1, 255
487# CHECK-ALIAS: andi a0, a1, 255
488zext.b x10, x11
489
490# CHECK-EXPAND: slli a0, a1, 48
491# CHECK-EXPAND: srli a0, a0, 48
492zext.h x10, x11
493
494# CHECK-EXPAND: slli a0, a1, 32
495# CHECK-EXPAND: srli a0, a0, 32
496zext.w x10, x11
497