@@ -206,6 +206,64 @@ define <vscale x 2 x i32> @vwop_vscale_sext_i1i32_multiple_users(ptr %x, ptr %y,
206
206
ret <vscale x 2 x i32 > %i
207
207
}
208
208
209
+ define <vscale x 2 x i8 > @vwop_vscale_sext_i1i8_multiple_users (ptr %x , ptr %y , ptr %z ) {
210
+ ; NO_FOLDING-LABEL: vwop_vscale_sext_i1i8_multiple_users:
211
+ ; NO_FOLDING: # %bb.0:
212
+ ; NO_FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
213
+ ; NO_FOLDING-NEXT: vlm.v v8, (a0)
214
+ ; NO_FOLDING-NEXT: vlm.v v9, (a1)
215
+ ; NO_FOLDING-NEXT: vlm.v v10, (a2)
216
+ ; NO_FOLDING-NEXT: vmv.v.i v11, 0
217
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v8
218
+ ; NO_FOLDING-NEXT: vmerge.vim v12, v11, -1, v0
219
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v9
220
+ ; NO_FOLDING-NEXT: vmerge.vim v9, v11, -1, v0
221
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v10
222
+ ; NO_FOLDING-NEXT: vmerge.vim v10, v11, -1, v0
223
+ ; NO_FOLDING-NEXT: vmul.vv v9, v12, v9
224
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v8
225
+ ; NO_FOLDING-NEXT: vmerge.vim v8, v11, 1, v0
226
+ ; NO_FOLDING-NEXT: vsub.vv v8, v10, v8
227
+ ; NO_FOLDING-NEXT: vsub.vv v10, v12, v10
228
+ ; NO_FOLDING-NEXT: vor.vv v8, v9, v8
229
+ ; NO_FOLDING-NEXT: vor.vv v8, v8, v10
230
+ ; NO_FOLDING-NEXT: ret
231
+ ;
232
+ ; FOLDING-LABEL: vwop_vscale_sext_i1i8_multiple_users:
233
+ ; FOLDING: # %bb.0:
234
+ ; FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
235
+ ; FOLDING-NEXT: vlm.v v8, (a0)
236
+ ; FOLDING-NEXT: vlm.v v9, (a1)
237
+ ; FOLDING-NEXT: vlm.v v10, (a2)
238
+ ; FOLDING-NEXT: vmv.v.i v11, 0
239
+ ; FOLDING-NEXT: vmv1r.v v0, v8
240
+ ; FOLDING-NEXT: vmerge.vim v12, v11, -1, v0
241
+ ; FOLDING-NEXT: vmv1r.v v0, v9
242
+ ; FOLDING-NEXT: vmerge.vim v9, v11, -1, v0
243
+ ; FOLDING-NEXT: vmv1r.v v0, v10
244
+ ; FOLDING-NEXT: vmerge.vim v10, v11, -1, v0
245
+ ; FOLDING-NEXT: vmul.vv v9, v12, v9
246
+ ; FOLDING-NEXT: vmv1r.v v0, v8
247
+ ; FOLDING-NEXT: vmerge.vim v8, v11, 1, v0
248
+ ; FOLDING-NEXT: vsub.vv v8, v10, v8
249
+ ; FOLDING-NEXT: vsub.vv v10, v12, v10
250
+ ; FOLDING-NEXT: vor.vv v8, v9, v8
251
+ ; FOLDING-NEXT: vor.vv v8, v8, v10
252
+ ; FOLDING-NEXT: ret
253
+ %a = load <vscale x 2 x i1 >, ptr %x
254
+ %b = load <vscale x 2 x i1 >, ptr %y
255
+ %b2 = load <vscale x 2 x i1 >, ptr %z
256
+ %c = sext <vscale x 2 x i1 > %a to <vscale x 2 x i8 >
257
+ %d = sext <vscale x 2 x i1 > %b to <vscale x 2 x i8 >
258
+ %d2 = sext <vscale x 2 x i1 > %b2 to <vscale x 2 x i8 >
259
+ %e = mul <vscale x 2 x i8 > %c , %d
260
+ %f = add <vscale x 2 x i8 > %c , %d2
261
+ %g = sub <vscale x 2 x i8 > %c , %d2
262
+ %h = or <vscale x 2 x i8 > %e , %f
263
+ %i = or <vscale x 2 x i8 > %h , %g
264
+ ret <vscale x 2 x i8 > %i
265
+ }
266
+
209
267
define <vscale x 2 x i32 > @vwop_vscale_sext_i8i32_multiple_users (ptr %x , ptr %y , ptr %z ) {
210
268
; NO_FOLDING-LABEL: vwop_vscale_sext_i8i32_multiple_users:
211
269
; NO_FOLDING: # %bb.0:
@@ -434,6 +492,58 @@ define <vscale x 2 x i32> @vwop_vscale_zext_i1i32_multiple_users(ptr %x, ptr %y,
434
492
ret <vscale x 2 x i32 > %i
435
493
}
436
494
495
+ define <vscale x 2 x i8 > @vwop_vscale_zext_i1i8_multiple_users (ptr %x , ptr %y , ptr %z ) {
496
+ ; NO_FOLDING-LABEL: vwop_vscale_zext_i1i8_multiple_users:
497
+ ; NO_FOLDING: # %bb.0:
498
+ ; NO_FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
499
+ ; NO_FOLDING-NEXT: vlm.v v0, (a0)
500
+ ; NO_FOLDING-NEXT: vlm.v v8, (a1)
501
+ ; NO_FOLDING-NEXT: vlm.v v9, (a2)
502
+ ; NO_FOLDING-NEXT: vmv.v.i v10, 0
503
+ ; NO_FOLDING-NEXT: vmerge.vim v11, v10, 1, v0
504
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v8
505
+ ; NO_FOLDING-NEXT: vmerge.vim v8, v10, 1, v0
506
+ ; NO_FOLDING-NEXT: vmv1r.v v0, v9
507
+ ; NO_FOLDING-NEXT: vmerge.vim v9, v10, 1, v0
508
+ ; NO_FOLDING-NEXT: vmul.vv v8, v11, v8
509
+ ; NO_FOLDING-NEXT: vadd.vv v10, v11, v9
510
+ ; NO_FOLDING-NEXT: vsub.vv v9, v11, v9
511
+ ; NO_FOLDING-NEXT: vor.vv v8, v8, v10
512
+ ; NO_FOLDING-NEXT: vor.vv v8, v8, v9
513
+ ; NO_FOLDING-NEXT: ret
514
+ ;
515
+ ; FOLDING-LABEL: vwop_vscale_zext_i1i8_multiple_users:
516
+ ; FOLDING: # %bb.0:
517
+ ; FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, ma
518
+ ; FOLDING-NEXT: vlm.v v0, (a0)
519
+ ; FOLDING-NEXT: vlm.v v8, (a1)
520
+ ; FOLDING-NEXT: vlm.v v9, (a2)
521
+ ; FOLDING-NEXT: vmv.v.i v10, 0
522
+ ; FOLDING-NEXT: vmerge.vim v11, v10, 1, v0
523
+ ; FOLDING-NEXT: vmv1r.v v0, v8
524
+ ; FOLDING-NEXT: vmerge.vim v8, v10, 1, v0
525
+ ; FOLDING-NEXT: vmv1r.v v0, v9
526
+ ; FOLDING-NEXT: vmerge.vim v9, v10, 1, v0
527
+ ; FOLDING-NEXT: vmul.vv v8, v11, v8
528
+ ; FOLDING-NEXT: vadd.vv v10, v11, v9
529
+ ; FOLDING-NEXT: vsub.vv v9, v11, v9
530
+ ; FOLDING-NEXT: vor.vv v8, v8, v10
531
+ ; FOLDING-NEXT: vor.vv v8, v8, v9
532
+ ; FOLDING-NEXT: ret
533
+ %a = load <vscale x 2 x i1 >, ptr %x
534
+ %b = load <vscale x 2 x i1 >, ptr %y
535
+ %b2 = load <vscale x 2 x i1 >, ptr %z
536
+ %c = zext <vscale x 2 x i1 > %a to <vscale x 2 x i8 >
537
+ %d = zext <vscale x 2 x i1 > %b to <vscale x 2 x i8 >
538
+ %d2 = zext <vscale x 2 x i1 > %b2 to <vscale x 2 x i8 >
539
+ %e = mul <vscale x 2 x i8 > %c , %d
540
+ %f = add <vscale x 2 x i8 > %c , %d2
541
+ %g = sub <vscale x 2 x i8 > %c , %d2
542
+ %h = or <vscale x 2 x i8 > %e , %f
543
+ %i = or <vscale x 2 x i8 > %h , %g
544
+ ret <vscale x 2 x i8 > %i
545
+ }
546
+
437
547
define <vscale x 2 x i32 > @vwop_vscale_zext_i8i32_multiple_users (ptr %x , ptr %y , ptr %z ) {
438
548
; NO_FOLDING-LABEL: vwop_vscale_zext_i8i32_multiple_users:
439
549
; NO_FOLDING: # %bb.0:
@@ -479,3 +589,6 @@ define <vscale x 2 x i32> @vwop_vscale_zext_i8i32_multiple_users(ptr %x, ptr %y,
479
589
%i = or <vscale x 2 x i32 > %h , %g
480
590
ret <vscale x 2 x i32 > %i
481
591
}
592
+
593
+
594
+
0 commit comments