@@ -108,11 +108,12 @@ define void @vararg_fixed_1(i32 %a1, ...) nounwind {
108
108
; CHECK-NEXT: s32i.n a5, a1, 12
109
109
; CHECK-NEXT: s32i.n a4, a1, 8
110
110
; CHECK-NEXT: s32i.n a3, a1, 4
111
- ; CHECK-NEXT: addi a10, a1, 4
112
- ; CHECK-NEXT: s32i.n a10, a1, 4
113
111
; CHECK-NEXT: addi a8, a1, 64
114
112
; CHECK-NEXT: addi a8, a8, -32
115
113
; CHECK-NEXT: s32i.n a8, a1, 0
114
+ ; CHECK-NEXT: addi a9, a1, 4
115
+ ; CHECK-NEXT: addi a10, a9, -4
116
+ ; CHECK-NEXT: s32i.n a10, a1, 4
116
117
; CHECK-NEXT: movi.n a9, 8
117
118
; CHECK-NEXT: movi.n a7, 24
118
119
; CHECK-NEXT: blt a7, a9, .LBB2_2
@@ -185,11 +186,12 @@ define void @vararg_fixed_4(i32 %a1, i32 %a2, i32 %a3, i32 %a4, ...) nounwind {
185
186
; CHECK-NEXT: entry a1, 48
186
187
; CHECK-NEXT: s32i.n a7, a1, 8
187
188
; CHECK-NEXT: s32i.n a6, a1, 4
188
- ; CHECK-NEXT: addi a10, a1, 4
189
- ; CHECK-NEXT: s32i.n a10, a1, 4
190
189
; CHECK-NEXT: addi a8, a1, 48
191
190
; CHECK-NEXT: addi a8, a8, -32
192
191
; CHECK-NEXT: s32i.n a8, a1, 0
192
+ ; CHECK-NEXT: addi a9, a1, 4
193
+ ; CHECK-NEXT: addi a10, a9, -16
194
+ ; CHECK-NEXT: s32i.n a10, a1, 4
193
195
; CHECK-NEXT: movi.n a9, 20
194
196
; CHECK-NEXT: movi.n a7, 24
195
197
; CHECK-NEXT: blt a7, a9, .LBB3_2
@@ -261,11 +263,12 @@ define void @vararg_fixed_5(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, ...) no
261
263
; CHECK: # %bb.0: # %entry
262
264
; CHECK-NEXT: entry a1, 48
263
265
; CHECK-NEXT: s32i.n a7, a1, 4
264
- ; CHECK-NEXT: addi a9, a1, 4
265
- ; CHECK-NEXT: s32i.n a9, a1, 4
266
266
; CHECK-NEXT: addi a8, a1, 48
267
267
; CHECK-NEXT: addi a8, a8, -32
268
268
; CHECK-NEXT: s32i.n a8, a1, 0
269
+ ; CHECK-NEXT: addi a9, a1, 4
270
+ ; CHECK-NEXT: addi a9, a9, -20
271
+ ; CHECK-NEXT: s32i.n a9, a1, 4
269
272
; CHECK-NEXT: movi.n a7, 24
270
273
; CHECK-NEXT: blt a7, a7, .LBB4_2
271
274
; CHECK-NEXT: # %bb.1: # %entry
@@ -338,23 +341,28 @@ define void @vararg_fixed_6(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6
338
341
; CHECK-LABEL: vararg_fixed_6:
339
342
; CHECK: # %bb.0: # %entry
340
343
; CHECK-NEXT: entry a1, 48
341
- ; CHECK-NEXT: addi a10, a1, 48
342
- ; CHECK-NEXT: s32i.n a10, a1, 4
343
- ; CHECK-NEXT: addi a8, a1, 48
344
- ; CHECK-NEXT: addi a8, a8, -32
345
- ; CHECK-NEXT: s32i.n a8, a1, 0
346
- ; CHECK-NEXT: movi.n a9, 36
344
+ ; CHECK-NEXT: movi.n a8, 12
345
+ ; CHECK-NEXT: addi a9, a1, 48
346
+ ; CHECK-NEXT: and a10, a9, a8
347
+ ; CHECK-NEXT: addi a8, a10, 36
348
+ ; CHECK-NEXT: movi.n a11, 32
349
+ ; CHECK-NEXT: or a11, a10, a11
350
+ ; CHECK-NEXT: sub a9, a9, a11
351
+ ; CHECK-NEXT: s32i.n a9, a1, 0
352
+ ; CHECK-NEXT: addi a11, a1, 48
353
+ ; CHECK-NEXT: addi a11, a11, -24
354
+ ; CHECK-NEXT: s32i.n a11, a1, 4
347
355
; CHECK-NEXT: movi.n a7, 24
348
- ; CHECK-NEXT: blt a7, a9 , .LBB5_2
356
+ ; CHECK-NEXT: blt a7, a8 , .LBB5_2
349
357
; CHECK-NEXT: # %bb.1: # %entry
350
- ; CHECK-NEXT: mov.n a8, a10
358
+ ; CHECK-NEXT: mov.n a9, a11
351
359
; CHECK-NEXT: .LBB5_2: # %entry
352
- ; CHECK-NEXT: bge a7, a9 , .LBB5_4
360
+ ; CHECK-NEXT: bge a7, a8 , .LBB5_4
353
361
; CHECK-NEXT: # %bb.3:
354
- ; CHECK-NEXT: movi.n a9 , 72
362
+ ; CHECK-NEXT: addi a8, a10 , 72
355
363
; CHECK-NEXT: .LBB5_4: # %entry
356
- ; CHECK-NEXT: s32i.n a9 , a1, 8
357
- ; CHECK-NEXT: add.n a8, a9, a8
364
+ ; CHECK-NEXT: s32i.n a8 , a1, 8
365
+ ; CHECK-NEXT: add.n a8, a8, a9
358
366
; CHECK-NEXT: addi a8, a8, -4
359
367
; CHECK-NEXT: l32i.n a8, a8, 0
360
368
; CHECK-NEXT: add.n a10, a8, a2
@@ -413,23 +421,28 @@ define void @vararg_fixed_7(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6
413
421
; CHECK-LABEL: vararg_fixed_7:
414
422
; CHECK: # %bb.0: # %entry
415
423
; CHECK-NEXT: entry a1, 48
416
- ; CHECK-NEXT: addi a10, a1, 52
417
- ; CHECK-NEXT: s32i.n a10, a1, 4
418
- ; CHECK-NEXT: addi a8, a1, 52
419
- ; CHECK-NEXT: addi a8, a8, -32
420
- ; CHECK-NEXT: s32i.n a8, a1, 0
421
- ; CHECK-NEXT: movi.n a9, 36
424
+ ; CHECK-NEXT: movi.n a8, 12
425
+ ; CHECK-NEXT: addi a9, a1, 52
426
+ ; CHECK-NEXT: and a10, a9, a8
427
+ ; CHECK-NEXT: addi a8, a10, 36
428
+ ; CHECK-NEXT: movi.n a11, 32
429
+ ; CHECK-NEXT: or a11, a10, a11
430
+ ; CHECK-NEXT: sub a9, a9, a11
431
+ ; CHECK-NEXT: s32i.n a9, a1, 0
432
+ ; CHECK-NEXT: addi a11, a1, 52
433
+ ; CHECK-NEXT: addi a11, a11, -24
434
+ ; CHECK-NEXT: s32i.n a11, a1, 4
422
435
; CHECK-NEXT: movi.n a7, 24
423
- ; CHECK-NEXT: blt a7, a9 , .LBB6_2
436
+ ; CHECK-NEXT: blt a7, a8 , .LBB6_2
424
437
; CHECK-NEXT: # %bb.1: # %entry
425
- ; CHECK-NEXT: mov.n a8, a10
438
+ ; CHECK-NEXT: mov.n a9, a11
426
439
; CHECK-NEXT: .LBB6_2: # %entry
427
- ; CHECK-NEXT: bge a7, a9 , .LBB6_4
440
+ ; CHECK-NEXT: bge a7, a8 , .LBB6_4
428
441
; CHECK-NEXT: # %bb.3:
429
- ; CHECK-NEXT: movi.n a9 , 72
442
+ ; CHECK-NEXT: addi a8, a10 , 72
430
443
; CHECK-NEXT: .LBB6_4: # %entry
431
- ; CHECK-NEXT: s32i.n a9 , a1, 8
432
- ; CHECK-NEXT: add.n a8, a9, a8
444
+ ; CHECK-NEXT: s32i.n a8 , a1, 8
445
+ ; CHECK-NEXT: add.n a8, a8, a9
433
446
; CHECK-NEXT: addi a8, a8, -4
434
447
; CHECK-NEXT: l32i.n a8, a8, 0
435
448
; CHECK-NEXT: add.n a10, a8, a2
0 commit comments