55define <2 x i64 > @test1_vpmadd52l (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 ) {
66; AVX512-LABEL: test1_vpmadd52l:
77; AVX512: # %bb.0:
8- ; AVX512-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1
98; AVX512-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0
109; AVX512-NEXT: retq
1110;
1211; AVX-LABEL: test1_vpmadd52l:
1312; AVX: # %bb.0:
14- ; AVX-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1513; AVX-NEXT: {vex} vpmadd52luq %xmm2, %xmm1, %xmm0
1614; AVX-NEXT: retq
15+
1716 %and = and <2 x i64 > %x1 , splat (i64 4503599627370495 ) ; (1LL << 52) - 1
1817 %1 = call <2 x i64 > @llvm.x86.avx512.vpmadd52l.uq.128 (<2 x i64 > %x0 , <2 x i64 > %and , <2 x i64 > %x2 )
1918 ret <2 x i64 > %1
@@ -22,13 +21,11 @@ define <2 x i64> @test1_vpmadd52l(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2) {
2221define <2 x i64 > @test2_vpmadd52l (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 ) {
2322; AVX512-LABEL: test2_vpmadd52l:
2423; AVX512: # %bb.0:
25- ; AVX512-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm2, %xmm2
2624; AVX512-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0
2725; AVX512-NEXT: retq
2826;
2927; AVX-LABEL: test2_vpmadd52l:
3028; AVX: # %bb.0:
31- ; AVX-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
3229; AVX-NEXT: {vex} vpmadd52luq %xmm2, %xmm1, %xmm0
3330; AVX-NEXT: retq
3431 %and = and <2 x i64 > %x2 , splat (i64 4503599627370495 ) ; (1LL << 52) - 1
@@ -39,15 +36,11 @@ define <2 x i64> @test2_vpmadd52l(<2 x i64> %x0, <2 x i64> %x1, <2 x i64> %x2) {
3936define <2 x i64 > @test3_vpmadd52l (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 ) {
4037; AVX512-LABEL: test3_vpmadd52l:
4138; AVX512: # %bb.0:
42- ; AVX512-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1
43- ; AVX512-NEXT: vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm2, %xmm2
4439; AVX512-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0
4540; AVX512-NEXT: retq
4641;
4742; AVX-LABEL: test3_vpmadd52l:
4843; AVX: # %bb.0:
49- ; AVX-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
50- ; AVX-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
5144; AVX-NEXT: {vex} vpmadd52luq %xmm2, %xmm1, %xmm0
5245; AVX-NEXT: retq
5346 %and = and <2 x i64 > %x1 , splat (i64 4503599627370495 ) ; (1LL << 52) - 1
@@ -96,17 +89,14 @@ define <2 x i64> @test_vpmadd52l_wrong_op(<2 x i64> %x0, <2 x i64> %x1, <2 x i64
9689define <2 x i64 > @test_vpmadd52h (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 ) {
9790; AVX512-LABEL: test_vpmadd52h:
9891; AVX512: # %bb.0:
99- ; AVX512-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1
100- ; AVX512-NEXT: vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm2, %xmm2
10192; AVX512-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm0
10293; AVX512-NEXT: retq
10394;
10495; AVX-LABEL: test_vpmadd52h:
10596; AVX: # %bb.0:
106- ; AVX-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
107- ; AVX-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
10897; AVX-NEXT: {vex} vpmadd52huq %xmm2, %xmm1, %xmm0
10998; AVX-NEXT: retq
99+
110100 %and = and <2 x i64 > %x1 , splat (i64 4503599627370495 ) ; (1LL << 52) - 1
111101 %or = or <2 x i64 > %x2 , splat (i64 4503599627370496 ) ; 1LL << 52
112102 %1 = call <2 x i64 > @llvm.x86.avx512.vpmadd52h.uq.128 (<2 x i64 > %x0 , <2 x i64 > %and , <2 x i64 > %or )
0 commit comments