@@ -442,3 +442,21 @@ define <4 x float> @test_perfectshuffle_dupext_v4f32(<4 x float> %a, <4 x float>
442
442
%r = shufflevector <4 x float > %a , <4 x float > %b , <4 x i32 > <i32 0 , i32 0 , i32 4 , i32 5 >
443
443
ret <4 x float > %r
444
444
}
445
+
446
+ define void @disguised_dup (<4 x float > %x , <4 x float >* %p1 , <4 x float >* %p2 ) {
447
+ ; CHECK-LABEL: disguised_dup:
448
+ ; CHECK: // %bb.0:
449
+ ; CHECK-NEXT: dup.4s v1, v0[0]
450
+ ; CHECK-NEXT: ext.16b v0, v0, v0, #12
451
+ ; CHECK-NEXT: ext.16b v0, v0, v1, #8
452
+ ; CHECK-NEXT: zip2.4s v1, v0, v0
453
+ ; CHECK-NEXT: ext.16b v1, v0, v1, #12
454
+ ; CHECK-NEXT: str q0, [x0]
455
+ ; CHECK-NEXT: str q1, [x1]
456
+ ; CHECK-NEXT: ret
457
+ %shuf = shufflevector <4 x float > %x , <4 x float > undef , <4 x i32 > <i32 1 , i32 2 , i32 0 , i32 0 >
458
+ %dup = shufflevector <4 x float > %shuf , <4 x float > undef , <4 x i32 > <i32 3 , i32 2 , i32 2 , i32 3 >
459
+ store <4 x float > %shuf , <4 x float >* %p1 , align 8
460
+ store <4 x float > %dup , <4 x float >* %p2 , align 8
461
+ ret void
462
+ }
0 commit comments