41
41
define void @anyext_on_fpr() { ret void }
42
42
define void @anyext_on_fpr8() { ret void }
43
43
44
- ...
44
+ define void @load_s32_gpr_LD1() { ret void }
45
+ define void @load_s32_gpr_GIM() { ret void }
45
46
47
+ ...
46
48
---
47
49
name : load_s64_gpr
48
50
legalized : true
@@ -57,7 +59,9 @@ body: |
57
59
liveins: $x0
58
60
59
61
; CHECK-LABEL: name: load_s64_gpr
60
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
62
+ ; CHECK: liveins: $x0
63
+ ; CHECK-NEXT: {{ $}}
64
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
61
65
; CHECK-NEXT: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[COPY]], 0 :: (load (s64) from %ir.addr)
62
66
; CHECK-NEXT: $x0 = COPY [[LDRXui]]
63
67
%0(p0) = COPY $x0
@@ -79,7 +83,9 @@ body: |
79
83
liveins: $x0
80
84
81
85
; CHECK-LABEL: name: load_s32_gpr
82
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
86
+ ; CHECK: liveins: $x0
87
+ ; CHECK-NEXT: {{ $}}
88
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
83
89
; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.addr)
84
90
; CHECK-NEXT: $w0 = COPY [[LDRWui]]
85
91
%0(p0) = COPY $x0
@@ -97,7 +103,9 @@ body: |
97
103
liveins: $x0
98
104
99
105
; CHECK-LABEL: name: load_s16_gpr_anyext
100
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
106
+ ; CHECK: liveins: $x0
107
+ ; CHECK-NEXT: {{ $}}
108
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
101
109
; CHECK-NEXT: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 0 :: (load (s16) from %ir.addr)
102
110
; CHECK-NEXT: $w0 = COPY [[LDRHHui]]
103
111
%0:gpr(p0) = COPY $x0
@@ -119,7 +127,9 @@ body: |
119
127
liveins: $x0
120
128
121
129
; CHECK-LABEL: name: load_s16_gpr
122
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
130
+ ; CHECK: liveins: $x0
131
+ ; CHECK-NEXT: {{ $}}
132
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
123
133
; CHECK-NEXT: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 0 :: (load (s16) from %ir.addr)
124
134
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[LDRHHui]]
125
135
; CHECK-NEXT: $w0 = COPY [[COPY1]]
@@ -139,7 +149,9 @@ body: |
139
149
liveins: $x0
140
150
141
151
; CHECK-LABEL: name: load_s8_gpr_anyext
142
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
152
+ ; CHECK: liveins: $x0
153
+ ; CHECK-NEXT: {{ $}}
154
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
143
155
; CHECK-NEXT: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load (s8) from %ir.addr)
144
156
; CHECK-NEXT: $w0 = COPY [[LDRBBui]]
145
157
%0:gpr(p0) = COPY $x0
@@ -161,7 +173,9 @@ body: |
161
173
liveins: $x0
162
174
163
175
; CHECK-LABEL: name: load_s8_gpr
164
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
176
+ ; CHECK: liveins: $x0
177
+ ; CHECK-NEXT: {{ $}}
178
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
165
179
; CHECK-NEXT: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load (s8) from %ir.addr)
166
180
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[LDRBBui]]
167
181
; CHECK-NEXT: $w0 = COPY [[COPY1]]
@@ -188,7 +202,9 @@ body: |
188
202
liveins: $x0
189
203
190
204
; CHECK-LABEL: name: load_fi_s64_gpr
191
- ; CHECK: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui %stack.0.ptr0, 0 :: (load (s64))
205
+ ; CHECK: liveins: $x0
206
+ ; CHECK-NEXT: {{ $}}
207
+ ; CHECK-NEXT: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui %stack.0.ptr0, 0 :: (load (s64))
192
208
; CHECK-NEXT: $x0 = COPY [[LDRXui]]
193
209
%0(p0) = G_FRAME_INDEX %stack.0.ptr0
194
210
%1(s64) = G_LOAD %0 :: (load (s64))
@@ -211,7 +227,9 @@ body: |
211
227
liveins: $x0
212
228
213
229
; CHECK-LABEL: name: load_gep_128_s64_gpr
214
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
230
+ ; CHECK: liveins: $x0
231
+ ; CHECK-NEXT: {{ $}}
232
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
215
233
; CHECK-NEXT: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[COPY]], 16 :: (load (s64) from %ir.addr)
216
234
; CHECK-NEXT: $x0 = COPY [[LDRXui]]
217
235
%0(p0) = COPY $x0
@@ -237,7 +255,9 @@ body: |
237
255
liveins: $x0
238
256
239
257
; CHECK-LABEL: name: load_gep_512_s32_gpr
240
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
258
+ ; CHECK: liveins: $x0
259
+ ; CHECK-NEXT: {{ $}}
260
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
241
261
; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 128 :: (load (s32) from %ir.addr)
242
262
; CHECK-NEXT: $w0 = COPY [[LDRWui]]
243
263
%0(p0) = COPY $x0
@@ -263,7 +283,9 @@ body: |
263
283
liveins: $x0
264
284
265
285
; CHECK-LABEL: name: load_gep_64_s16_gpr
266
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
286
+ ; CHECK: liveins: $x0
287
+ ; CHECK-NEXT: {{ $}}
288
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
267
289
; CHECK-NEXT: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 32 :: (load (s16) from %ir.addr)
268
290
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[LDRHHui]]
269
291
; CHECK-NEXT: $w0 = COPY [[COPY1]]
@@ -291,7 +313,9 @@ body: |
291
313
liveins: $x0
292
314
293
315
; CHECK-LABEL: name: load_gep_1_s8_gpr
294
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
316
+ ; CHECK: liveins: $x0
317
+ ; CHECK-NEXT: {{ $}}
318
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
295
319
; CHECK-NEXT: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 1 :: (load (s8) from %ir.addr)
296
320
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32all = COPY [[LDRBBui]]
297
321
; CHECK-NEXT: $w0 = COPY [[COPY1]]
@@ -317,7 +341,9 @@ body: |
317
341
liveins: $x0
318
342
319
343
; CHECK-LABEL: name: load_s64_fpr
320
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
344
+ ; CHECK: liveins: $x0
345
+ ; CHECK-NEXT: {{ $}}
346
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
321
347
; CHECK-NEXT: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 0 :: (load (s64) from %ir.addr)
322
348
; CHECK-NEXT: $d0 = COPY [[LDRDui]]
323
349
%0(p0) = COPY $x0
@@ -339,7 +365,9 @@ body: |
339
365
liveins: $x0
340
366
341
367
; CHECK-LABEL: name: load_s32_fpr
342
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
368
+ ; CHECK: liveins: $x0
369
+ ; CHECK-NEXT: {{ $}}
370
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
343
371
; CHECK-NEXT: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[COPY]], 0 :: (load (s32) from %ir.addr)
344
372
; CHECK-NEXT: $s0 = COPY [[LDRSui]]
345
373
%0(p0) = COPY $x0
@@ -361,7 +389,9 @@ body: |
361
389
liveins: $x0
362
390
363
391
; CHECK-LABEL: name: load_s16_fpr
364
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
392
+ ; CHECK: liveins: $x0
393
+ ; CHECK-NEXT: {{ $}}
394
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
365
395
; CHECK-NEXT: [[LDRHui:%[0-9]+]]:fpr16 = LDRHui [[COPY]], 0 :: (load (s16) from %ir.addr)
366
396
; CHECK-NEXT: $h0 = COPY [[LDRHui]]
367
397
%0(p0) = COPY $x0
@@ -383,7 +413,9 @@ body: |
383
413
liveins: $x0
384
414
385
415
; CHECK-LABEL: name: load_s8_fpr
386
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
416
+ ; CHECK: liveins: $x0
417
+ ; CHECK-NEXT: {{ $}}
418
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
387
419
; CHECK-NEXT: [[LDRBui:%[0-9]+]]:fpr8 = LDRBui [[COPY]], 0 :: (load (s8) from %ir.addr)
388
420
; CHECK-NEXT: $b0 = COPY [[LDRBui]]
389
421
%0(p0) = COPY $x0
@@ -407,7 +439,9 @@ body: |
407
439
liveins: $x0
408
440
409
441
; CHECK-LABEL: name: load_gep_8_s64_fpr
410
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
442
+ ; CHECK: liveins: $x0
443
+ ; CHECK-NEXT: {{ $}}
444
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
411
445
; CHECK-NEXT: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 1 :: (load (s64) from %ir.addr)
412
446
; CHECK-NEXT: $d0 = COPY [[LDRDui]]
413
447
%0(p0) = COPY $x0
@@ -433,7 +467,9 @@ body: |
433
467
liveins: $x0
434
468
435
469
; CHECK-LABEL: name: load_gep_16_s32_fpr
436
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
470
+ ; CHECK: liveins: $x0
471
+ ; CHECK-NEXT: {{ $}}
472
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
437
473
; CHECK-NEXT: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[COPY]], 4 :: (load (s32) from %ir.addr)
438
474
; CHECK-NEXT: $s0 = COPY [[LDRSui]]
439
475
%0(p0) = COPY $x0
@@ -459,7 +495,9 @@ body: |
459
495
liveins: $x0
460
496
461
497
; CHECK-LABEL: name: load_gep_64_s16_fpr
462
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
498
+ ; CHECK: liveins: $x0
499
+ ; CHECK-NEXT: {{ $}}
500
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
463
501
; CHECK-NEXT: [[LDRHui:%[0-9]+]]:fpr16 = LDRHui [[COPY]], 32 :: (load (s16) from %ir.addr)
464
502
; CHECK-NEXT: $h0 = COPY [[LDRHui]]
465
503
%0(p0) = COPY $x0
@@ -485,7 +523,9 @@ body: |
485
523
liveins: $x0
486
524
487
525
; CHECK-LABEL: name: load_gep_32_s8_fpr
488
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
526
+ ; CHECK: liveins: $x0
527
+ ; CHECK-NEXT: {{ $}}
528
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
489
529
; CHECK-NEXT: [[LDRBui:%[0-9]+]]:fpr8 = LDRBui [[COPY]], 32 :: (load (s8) from %ir.addr)
490
530
; CHECK-NEXT: $b0 = COPY [[LDRBui]]
491
531
%0(p0) = COPY $x0
@@ -508,7 +548,9 @@ body: |
508
548
liveins: $x0
509
549
510
550
; CHECK-LABEL: name: load_v2s32
511
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
551
+ ; CHECK: liveins: $x0
552
+ ; CHECK-NEXT: {{ $}}
553
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
512
554
; CHECK-NEXT: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 0 :: (load (<2 x s32>) from %ir.addr)
513
555
; CHECK-NEXT: $d0 = COPY [[LDRDui]]
514
556
%0(p0) = COPY $x0
@@ -529,7 +571,9 @@ body: |
529
571
liveins: $x0
530
572
531
573
; CHECK-LABEL: name: load_v2s64
532
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
574
+ ; CHECK: liveins: $x0
575
+ ; CHECK-NEXT: {{ $}}
576
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
533
577
; CHECK-NEXT: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY]], 0 :: (load (<2 x s64>) from %ir.addr)
534
578
; CHECK-NEXT: $q0 = COPY [[LDRQui]]
535
579
%0(p0) = COPY $x0
@@ -712,3 +756,63 @@ body: |
712
756
RET_ReallyLR
713
757
714
758
...
759
+ ---
760
+ name : load_s32_gpr_LD1
761
+ legalized : true
762
+ regBankSelected : true
763
+
764
+ body : |
765
+ bb.0:
766
+ liveins: $q0, $x0
767
+
768
+ ; CHECK-LABEL: name: load_s32_gpr_LD1
769
+ ; CHECK: liveins: $q0, $x0
770
+ ; CHECK-NEXT: {{ $}}
771
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
772
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
773
+ ; CHECK-NEXT: [[LD1i32_:%[0-9]+]]:fpr128 = LD1i32 [[COPY]], 0, [[COPY1]] :: (load (s32))
774
+ ; CHECK-NEXT: $q0 = COPY [[LD1i32_]]
775
+ ; CHECK-NEXT: RET_ReallyLR implicit $q0
776
+ %0:fpr(<4 x s32>) = COPY $q0
777
+ %1:gpr(p0) = COPY $x0
778
+ %2:fpr(s32) = G_LOAD %1(p0) :: (load (s32))
779
+ %3:gpr(s32) = G_CONSTANT i32 3
780
+ %5:gpr(s64) = G_CONSTANT i64 0
781
+ %4:fpr(<4 x s32>) = G_INSERT_VECTOR_ELT %0, %2(s32), %5(s64)
782
+ $q0 = COPY %4(<4 x s32>)
783
+ RET_ReallyLR implicit $q0
784
+
785
+ ...
786
+ ---
787
+
788
+ name : load_s32_gpr_GIM
789
+ legalized : true
790
+ regBankSelected : true
791
+
792
+ body : |
793
+ bb.0:
794
+ liveins: $q0, $x0
795
+ ;This test should not select an LD1 instruction as there is a store instruction between G_INSERT_VECTOR_ELT and G_LOAD
796
+ ; CHECK-LABEL: name: load_s32_gpr_GIM
797
+ ; CHECK: liveins: $q0, $x0
798
+ ; CHECK-NEXT: {{ $}}
799
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
800
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0
801
+ ; CHECK-NEXT: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[COPY1]], 0 :: (load (s32))
802
+ ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 3
803
+ ; CHECK-NEXT: STRWui [[MOVi32imm]], [[COPY1]], 0 :: (store (s32))
804
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
805
+ ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[LDRSui]], %subreg.ssub
806
+ ; CHECK-NEXT: [[INSvi32lane:%[0-9]+]]:fpr128 = INSvi32lane [[COPY]], 0, [[INSERT_SUBREG]], 0
807
+ ; CHECK-NEXT: $q0 = COPY [[INSvi32lane]]
808
+ ; CHECK-NEXT: RET_ReallyLR implicit $q0
809
+ %0:fpr(<4 x s32>) = COPY $q0
810
+ %1:gpr(p0) = COPY $x0
811
+ %2:fpr(s32) = G_LOAD %1(p0) :: (load (s32))
812
+ %3:gpr(s32) = G_CONSTANT i32 3
813
+ G_STORE %3(s32), %1(p0) :: (store (s32))
814
+ %5:gpr(s64) = G_CONSTANT i64 0
815
+ %4:fpr(<4 x s32>) = G_INSERT_VECTOR_ELT %0, %2(s32), %5(s64)
816
+ $q0 = COPY %4(<4 x s32>)
817
+ RET_ReallyLR implicit $q0
818
+ ...
0 commit comments