@@ -302,16 +302,20 @@ define void @and_v3i8(ptr %p1, ptr %p2) {
302302;
303303; CHECK-GI-LABEL: and_v3i8:
304304; CHECK-GI: // %bb.0: // %entry
305- ; CHECK-GI-NEXT: ldrb w8, [x0]
306- ; CHECK-GI-NEXT: ldrb w9, [x1]
307- ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
308- ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
305+ ; CHECK-GI-NEXT: ldr w8, [x0]
306+ ; CHECK-GI-NEXT: ldr w9, [x1]
309307; CHECK-GI-NEXT: fmov s0, w8
310308; CHECK-GI-NEXT: fmov s1, w9
311- ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
312- ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
313- ; CHECK-GI-NEXT: mov v0.h[1], w10
314- ; CHECK-GI-NEXT: mov v1.h[1], w11
309+ ; CHECK-GI-NEXT: mov b2, v0.b[1]
310+ ; CHECK-GI-NEXT: mov b3, v1.b[1]
311+ ; CHECK-GI-NEXT: mov b4, v0.b[2]
312+ ; CHECK-GI-NEXT: mov b5, v1.b[2]
313+ ; CHECK-GI-NEXT: fmov w8, s2
314+ ; CHECK-GI-NEXT: fmov w9, s3
315+ ; CHECK-GI-NEXT: mov v0.h[1], w8
316+ ; CHECK-GI-NEXT: mov v1.h[1], w9
317+ ; CHECK-GI-NEXT: fmov w8, s4
318+ ; CHECK-GI-NEXT: fmov w9, s5
315319; CHECK-GI-NEXT: mov v0.h[2], w8
316320; CHECK-GI-NEXT: mov v1.h[2], w9
317321; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
@@ -350,16 +354,20 @@ define void @or_v3i8(ptr %p1, ptr %p2) {
350354;
351355; CHECK-GI-LABEL: or_v3i8:
352356; CHECK-GI: // %bb.0: // %entry
353- ; CHECK-GI-NEXT: ldrb w8, [x0]
354- ; CHECK-GI-NEXT: ldrb w9, [x1]
355- ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
356- ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
357+ ; CHECK-GI-NEXT: ldr w8, [x0]
358+ ; CHECK-GI-NEXT: ldr w9, [x1]
357359; CHECK-GI-NEXT: fmov s0, w8
358360; CHECK-GI-NEXT: fmov s1, w9
359- ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
360- ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
361- ; CHECK-GI-NEXT: mov v0.h[1], w10
362- ; CHECK-GI-NEXT: mov v1.h[1], w11
361+ ; CHECK-GI-NEXT: mov b2, v0.b[1]
362+ ; CHECK-GI-NEXT: mov b3, v1.b[1]
363+ ; CHECK-GI-NEXT: mov b4, v0.b[2]
364+ ; CHECK-GI-NEXT: mov b5, v1.b[2]
365+ ; CHECK-GI-NEXT: fmov w8, s2
366+ ; CHECK-GI-NEXT: fmov w9, s3
367+ ; CHECK-GI-NEXT: mov v0.h[1], w8
368+ ; CHECK-GI-NEXT: mov v1.h[1], w9
369+ ; CHECK-GI-NEXT: fmov w8, s4
370+ ; CHECK-GI-NEXT: fmov w9, s5
363371; CHECK-GI-NEXT: mov v0.h[2], w8
364372; CHECK-GI-NEXT: mov v1.h[2], w9
365373; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
@@ -398,16 +406,20 @@ define void @xor_v3i8(ptr %p1, ptr %p2) {
398406;
399407; CHECK-GI-LABEL: xor_v3i8:
400408; CHECK-GI: // %bb.0: // %entry
401- ; CHECK-GI-NEXT: ldrb w8, [x0]
402- ; CHECK-GI-NEXT: ldrb w9, [x1]
403- ; CHECK-GI-NEXT: ldrb w10, [x0, #1]
404- ; CHECK-GI-NEXT: ldrb w11, [x1, #1]
409+ ; CHECK-GI-NEXT: ldr w8, [x0]
410+ ; CHECK-GI-NEXT: ldr w9, [x1]
405411; CHECK-GI-NEXT: fmov s0, w8
406412; CHECK-GI-NEXT: fmov s1, w9
407- ; CHECK-GI-NEXT: ldrb w8, [x0, #2]
408- ; CHECK-GI-NEXT: ldrb w9, [x1, #2]
409- ; CHECK-GI-NEXT: mov v0.h[1], w10
410- ; CHECK-GI-NEXT: mov v1.h[1], w11
413+ ; CHECK-GI-NEXT: mov b2, v0.b[1]
414+ ; CHECK-GI-NEXT: mov b3, v1.b[1]
415+ ; CHECK-GI-NEXT: mov b4, v0.b[2]
416+ ; CHECK-GI-NEXT: mov b5, v1.b[2]
417+ ; CHECK-GI-NEXT: fmov w8, s2
418+ ; CHECK-GI-NEXT: fmov w9, s3
419+ ; CHECK-GI-NEXT: mov v0.h[1], w8
420+ ; CHECK-GI-NEXT: mov v1.h[1], w9
421+ ; CHECK-GI-NEXT: fmov w8, s4
422+ ; CHECK-GI-NEXT: fmov w9, s5
411423; CHECK-GI-NEXT: mov v0.h[2], w8
412424; CHECK-GI-NEXT: mov v1.h[2], w9
413425; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
@@ -805,16 +817,10 @@ define void @and_v3i16(ptr %p1, ptr %p2) {
805817;
806818; CHECK-GI-LABEL: and_v3i16:
807819; CHECK-GI: // %bb.0: // %entry
808- ; CHECK-GI-NEXT: ldr h0 , [x0]
809- ; CHECK-GI-NEXT: ldr h1 , [x1]
820+ ; CHECK-GI-NEXT: ldr d0 , [x0]
821+ ; CHECK-GI-NEXT: ldr d1 , [x1]
810822; CHECK-GI-NEXT: add x8, x0, #2
811- ; CHECK-GI-NEXT: add x9, x1, #2
812- ; CHECK-GI-NEXT: add x10, x1, #4
813- ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
814- ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
815823; CHECK-GI-NEXT: add x9, x0, #4
816- ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
817- ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
818824; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
819825; CHECK-GI-NEXT: str h0, [x0]
820826; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
@@ -842,16 +848,10 @@ define void @or_v3i16(ptr %p1, ptr %p2) {
842848;
843849; CHECK-GI-LABEL: or_v3i16:
844850; CHECK-GI: // %bb.0: // %entry
845- ; CHECK-GI-NEXT: ldr h0 , [x0]
846- ; CHECK-GI-NEXT: ldr h1 , [x1]
851+ ; CHECK-GI-NEXT: ldr d0 , [x0]
852+ ; CHECK-GI-NEXT: ldr d1 , [x1]
847853; CHECK-GI-NEXT: add x8, x0, #2
848- ; CHECK-GI-NEXT: add x9, x1, #2
849- ; CHECK-GI-NEXT: add x10, x1, #4
850- ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
851- ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
852854; CHECK-GI-NEXT: add x9, x0, #4
853- ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
854- ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
855855; CHECK-GI-NEXT: orr v0.8b, v0.8b, v1.8b
856856; CHECK-GI-NEXT: str h0, [x0]
857857; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
@@ -879,16 +879,10 @@ define void @xor_v3i16(ptr %p1, ptr %p2) {
879879;
880880; CHECK-GI-LABEL: xor_v3i16:
881881; CHECK-GI: // %bb.0: // %entry
882- ; CHECK-GI-NEXT: ldr h0 , [x0]
883- ; CHECK-GI-NEXT: ldr h1 , [x1]
882+ ; CHECK-GI-NEXT: ldr d0 , [x0]
883+ ; CHECK-GI-NEXT: ldr d1 , [x1]
884884; CHECK-GI-NEXT: add x8, x0, #2
885- ; CHECK-GI-NEXT: add x9, x1, #2
886- ; CHECK-GI-NEXT: add x10, x1, #4
887- ; CHECK-GI-NEXT: ld1 { v0.h }[1], [x8]
888- ; CHECK-GI-NEXT: ld1 { v1.h }[1], [x9]
889885; CHECK-GI-NEXT: add x9, x0, #4
890- ; CHECK-GI-NEXT: ld1 { v0.h }[2], [x9]
891- ; CHECK-GI-NEXT: ld1 { v1.h }[2], [x10]
892886; CHECK-GI-NEXT: eor v0.8b, v0.8b, v1.8b
893887; CHECK-GI-NEXT: str h0, [x0]
894888; CHECK-GI-NEXT: st1 { v0.h }[1], [x8]
0 commit comments