@@ -10,7 +10,7 @@ define void @add_r_i8(i8 signext %0, i8 signext %1) {
10
10
; CHECK-NEXT: mov r24, r22
11
11
; CHECK-NEXT: add r24, r20
12
12
; CHECK-NEXT: ;NO_APP
13
- ; CHECK-NEXT: call foo8
13
+ ; CHECK-NEXT: rcall foo8
14
14
; CHECK-NEXT: ret
15
15
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=r,r,r" (i8 %0 , i8 %1 )
16
16
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -32,7 +32,7 @@ define void @add_r_i16(i16 signext %0, i16 signext %1) {
32
32
; CHECK-NEXT: add r24, r20
33
33
; CHECK-NEXT: adc r25, r21
34
34
; CHECK-NEXT: ;NO_APP
35
- ; CHECK-NEXT: call foo16
35
+ ; CHECK-NEXT: rcall foo16
36
36
; CHECK-NEXT: ret
37
37
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=r,r,r" (i16 %0 , i16 %1 )
38
38
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -51,7 +51,7 @@ define void @add_a_i8(i8 signext %0, i8 signext %1) {
51
51
; CHECK-NEXT: add r23, r20
52
52
; CHECK-NEXT: ;NO_APP
53
53
; CHECK-NEXT: mov r24, r23
54
- ; CHECK-NEXT: call foo8
54
+ ; CHECK-NEXT: rcall foo8
55
55
; CHECK-NEXT: ret
56
56
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=a,a,a" (i8 %0 , i8 %1 )
57
57
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -73,7 +73,7 @@ define void @add_a_i16(i16 signext %0, i16 signext %1) {
73
73
; CHECK-NEXT: ;NO_APP
74
74
; CHECK-NEXT: mov r24, r18
75
75
; CHECK-NEXT: mov r25, r19
76
- ; CHECK-NEXT: call foo16
76
+ ; CHECK-NEXT: rcall foo16
77
77
; CHECK-NEXT: ret
78
78
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=a,a,a" (i16 %0 , i16 %1 )
79
79
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -89,7 +89,7 @@ define void @add_d_i8(i8 signext %0, i8 signext %1) {
89
89
; CHECK-NEXT: mov r24, r22
90
90
; CHECK-NEXT: add r24, r20
91
91
; CHECK-NEXT: ;NO_APP
92
- ; CHECK-NEXT: call foo8
92
+ ; CHECK-NEXT: rcall foo8
93
93
; CHECK-NEXT: ret
94
94
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=d,d,d" (i8 %0 , i8 %1 )
95
95
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -109,7 +109,7 @@ define void @add_d_i16(i16 signext %0, i16 signext %1) {
109
109
; CHECK-NEXT: add r24, r20
110
110
; CHECK-NEXT: adc r25, r21
111
111
; CHECK-NEXT: ;NO_APP
112
- ; CHECK-NEXT: call foo16
112
+ ; CHECK-NEXT: rcall foo16
113
113
; CHECK-NEXT: ret
114
114
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=d,d,d" (i16 %0 , i16 %1 )
115
115
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -131,7 +131,7 @@ define void @add_l_i8(i8 signext %0, i8 signext %1) {
131
131
; CHECK-NEXT: mov r24, r13
132
132
; CHECK-NEXT: mov r22, r14
133
133
; CHECK-NEXT: mov r20, r15
134
- ; CHECK-NEXT: call foo8
134
+ ; CHECK-NEXT: rcall foo8
135
135
; CHECK-NEXT: pop r15
136
136
; CHECK-NEXT: pop r14
137
137
; CHECK-NEXT: pop r13
@@ -166,7 +166,7 @@ define void @add_l_i16(i16 signext %0, i16 signext %1) {
166
166
; CHECK-NEXT: mov r23, r13
167
167
; CHECK-NEXT: mov r20, r14
168
168
; CHECK-NEXT: mov r21, r15
169
- ; CHECK-NEXT: call foo16
169
+ ; CHECK-NEXT: rcall foo16
170
170
; CHECK-NEXT: pop r15
171
171
; CHECK-NEXT: pop r14
172
172
; CHECK-NEXT: pop r13
@@ -190,7 +190,7 @@ define void @add_b_i8(i8 signext %0, i8 signext %1) {
190
190
; CHECK-NEXT: add r30, r20
191
191
; CHECK-NEXT: ;NO_APP
192
192
; CHECK-NEXT: mov r24, r30
193
- ; CHECK-NEXT: call foo8
193
+ ; CHECK-NEXT: rcall foo8
194
194
; CHECK-NEXT: ret
195
195
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=b,b,r" (i8 %0 , i8 %1 )
196
196
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -214,7 +214,7 @@ define void @add_b_i16(i16 signext %0, i16 signext %1) {
214
214
; CHECK-NEXT: ;NO_APP
215
215
; CHECK-NEXT: mov r24, r30
216
216
; CHECK-NEXT: mov r25, r31
217
- ; CHECK-NEXT: call foo16
217
+ ; CHECK-NEXT: rcall foo16
218
218
; CHECK-NEXT: ret
219
219
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=b,b,r" (i16 %0 , i16 %1 )
220
220
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -235,7 +235,7 @@ define void @add_e_i8(i8 signext %0, i8 signext %1) {
235
235
; CHECK-NEXT: mov r24, r26
236
236
; CHECK-NEXT: ; kill: def $r22 killed $r22 killed $r23r22
237
237
; CHECK-NEXT: mov r20, r30
238
- ; CHECK-NEXT: call foo8
238
+ ; CHECK-NEXT: rcall foo8
239
239
; CHECK-NEXT: ret
240
240
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=e,e,e" (i8 %0 , i8 %1 )
241
241
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -261,7 +261,7 @@ define void @add_e_i16(i16 signext %0, i16 signext %1) {
261
261
; CHECK-NEXT: mov r25, r27
262
262
; CHECK-NEXT: mov r20, r30
263
263
; CHECK-NEXT: mov r21, r31
264
- ; CHECK-NEXT: call foo16
264
+ ; CHECK-NEXT: rcall foo16
265
265
; CHECK-NEXT: ret
266
266
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=e,e,e" (i16 %0 , i16 %1 )
267
267
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -278,7 +278,7 @@ define void @add_t_i8(i8 signext %0, i8 signext %1) {
278
278
; CHECK-NEXT: add r0, r20
279
279
; CHECK-NEXT: ;NO_APP
280
280
; CHECK-NEXT: mov r24, r0
281
- ; CHECK-NEXT: call foo8
281
+ ; CHECK-NEXT: rcall foo8
282
282
; CHECK-NEXT: ret
283
283
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=t,r,r" (i8 %0 , i8 %1 )
284
284
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -297,7 +297,7 @@ define void @add_w_i8(i8 signext %0, i8 signext %1) {
297
297
; CHECK-NEXT: ; kill: def $r24 killed $r24 killed $r25r24
298
298
; CHECK-NEXT: mov r22, r30
299
299
; CHECK-NEXT: mov r20, r26
300
- ; CHECK-NEXT: call foo8
300
+ ; CHECK-NEXT: rcall foo8
301
301
; CHECK-NEXT: ret
302
302
%3 = tail call i8 asm sideeffect "mov $0, $1\0A add $0, $2" , "=w,w,w" (i8 %0 , i8 %1 )
303
303
tail call void @foo8 (i8 signext %3 , i8 signext %0 , i8 signext %1 )
@@ -321,7 +321,7 @@ define void @add_w_i16(i16 signext %0, i16 signext %1) {
321
321
; CHECK-NEXT: mov r23, r31
322
322
; CHECK-NEXT: mov r20, r26
323
323
; CHECK-NEXT: mov r21, r27
324
- ; CHECK-NEXT: call foo16
324
+ ; CHECK-NEXT: rcall foo16
325
325
; CHECK-NEXT: ret
326
326
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=w,w,w" (i16 %0 , i16 %1 )
327
327
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
@@ -348,7 +348,7 @@ define void @add_xyz_i8(i8 signext %0, i8 signext %1) {
348
348
; CHECK-NEXT: ; kill: def $r24 killed $r24 killed $r25r24
349
349
; CHECK-NEXT: ; kill: def $r22 killed $r22 killed $r23r22
350
350
; CHECK-NEXT: ; kill: def $r20 killed $r20 killed $r21r20
351
- ; CHECK-NEXT: call foo8
351
+ ; CHECK-NEXT: rcall foo8
352
352
; CHECK-NEXT: pop r29
353
353
; CHECK-NEXT: pop r28
354
354
; CHECK-NEXT: ret
@@ -378,11 +378,37 @@ define void @add_xyz_i16(i16 signext %0, i16 signext %1) {
378
378
; CHECK-NEXT: ;NO_APP
379
379
; CHECK-NEXT: mov r24, r30
380
380
; CHECK-NEXT: mov r25, r31
381
- ; CHECK-NEXT: call foo16
381
+ ; CHECK-NEXT: rcall foo16
382
382
; CHECK-NEXT: pop r29
383
383
; CHECK-NEXT: pop r28
384
384
; CHECK-NEXT: ret
385
385
%3 = tail call i16 asm sideeffect "mov ${0:A}, ${1:A}\0A mov ${0:B}, ${1:B}\0A add ${0:A}, ${2:A}\0A adc ${0:B}, ${2:B}" , "=z,y,x" (i16 %0 , i16 %1 )
386
386
tail call void @foo16 (i16 signext %3 , i16 signext %0 , i16 signext %1 )
387
387
ret void
388
388
}
389
+
390
+ @gvar = global i16 0
391
+
392
+ define i16* @ldi_dreg_symbol () {
393
+ ; CHECK-LABEL: ldi_dreg_symbol:
394
+ ; CHECK: ; %bb.0:
395
+ ; CHECK-NEXT: ;APP
396
+ ; CHECK-NEXT: ldi r25, hi8(gvar)
397
+ ; CHECK-NEXT: ldi r24, lo8(gvar)
398
+ ; CHECK-NEXT: ;NO_APP
399
+ ; CHECK-NEXT: ret
400
+ %1 = tail call i16* asm sideeffect "ldi ${0:B}, hi8($1)\0A\09 ldi ${0:A}, lo8($1)" , "=d,i" (i16* @gvar )
401
+ ret i16* %1
402
+ }
403
+
404
+ define i16* @ldi_dreg_imm () {
405
+ ; CHECK-LABEL: ldi_dreg_imm:
406
+ ; CHECK: ; %bb.0:
407
+ ; CHECK-NEXT: ;APP
408
+ ; CHECK-NEXT: ldi r25, hi8(2345)
409
+ ; CHECK-NEXT: ldi r24, lo8(2345)
410
+ ; CHECK-NEXT: ;NO_APP
411
+ ; CHECK-NEXT: ret
412
+ %1 = tail call i16* asm sideeffect "ldi ${0:B}, hi8($1)\0A\09 ldi ${0:A}, lo8($1)" , "=d,i" (i16 2345 )
413
+ ret i16* %1
414
+ }
0 commit comments