brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · d5aa758 Raw
168 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X644 5declare <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double>, <4 x i64>, <4 x double>) #16 7define <4 x double> @concat_vpermv3_ops_vpermv_v4f64(ptr %p0, <4 x i64> %m) {8; X86-LABEL: concat_vpermv3_ops_vpermv_v4f64:9; X86:       # %bb.0:10; X86-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm011; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax12; X86-NEXT:    vpermpd (%eax), %zmm0, %zmm013; X86-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm014; X86-NEXT:    retl15;16; X64-LABEL: concat_vpermv3_ops_vpermv_v4f64:17; X64:       # %bb.0:18; X64-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm019; X64-NEXT:    vpermpd (%rdi), %zmm0, %zmm020; X64-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm021; X64-NEXT:    retq22  %p1 = getelementptr inbounds nuw i8, ptr %p0, i64 3223  %lo = load <4 x double>, ptr %p0, align 3224  %hi = load <4 x double>, ptr %p1, align 3225  %res = tail call noundef <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %lo, <4 x i64> %m, <4 x double> %hi)26  ret <4 x double> %res27}28 29define <4 x double> @concat_vpermv3_ops_vpermv_swap_v4f64(ptr %p0, <4 x i64> %m) {30; X86-LABEL: concat_vpermv3_ops_vpermv_swap_v4f64:31; X86:       # %bb.0:32; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax33; X86-NEXT:    vmovapd 32(%eax), %ymm134; X86-NEXT:    vpermi2pd (%eax), %ymm1, %ymm035; X86-NEXT:    retl36;37; X64-LABEL: concat_vpermv3_ops_vpermv_swap_v4f64:38; X64:       # %bb.0:39; X64-NEXT:    vmovapd 32(%rdi), %ymm140; X64-NEXT:    vpermi2pd (%rdi), %ymm1, %ymm041; X64-NEXT:    retq42  %p1 = getelementptr inbounds nuw i8, ptr %p0, i64 3243  %lo = load <4 x double>, ptr %p1, align 3244  %hi = load <4 x double>, ptr %p0, align 3245  %res = tail call noundef <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %lo, <4 x i64> %m, <4 x double> %hi)46  ret <4 x double> %res47}48 49define void @PR142995(ptr %p0, ptr %p1, ptr %p2) nounwind #0 {50; X86-LABEL: PR142995:51; X86:       # %bb.0:52; X86-NEXT:    pushl %ebx53; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax54; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx55; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx56; X86-NEXT:    movb $17, %bl57; X86-NEXT:    kmovw %ebx, %k158; X86-NEXT:    vmovdqu32 (%edx), %ymm0 {%k1} {z}59; X86-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero60; X86-NEXT:    movw $6144, %dx # imm = 0x180061; X86-NEXT:    kmovw %edx, %k162; X86-NEXT:    vmovdqu32 128(%ecx), %zmm2 {%k1} {z}63; X86-NEXT:    movw $1031, %dx # imm = 0x40764; X86-NEXT:    kmovw %edx, %k165; X86-NEXT:    vmovdqu32 (%ecx), %zmm3 {%k1} {z}66; X86-NEXT:    vpbroadcastd 252(%ecx), %zmm467; X86-NEXT:    vpbroadcastd %xmm1, %xmm568; X86-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm5[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero69; X86-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]70; X86-NEXT:    vpunpckldq {{.*#+}} zmm2 = zmm4[0],zmm2[0],zmm4[1],zmm2[1],zmm4[4],zmm2[4],zmm4[5],zmm2[5],zmm4[8],zmm2[8],zmm4[9],zmm2[9],zmm4[12],zmm2[12],zmm4[13],zmm2[13]71; X86-NEXT:    vextracti32x4 $3, %zmm2, %xmm272; X86-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3]73; X86-NEXT:    vpaddd %xmm1, %xmm5, %xmm174; X86-NEXT:    vmovdqu %xmm1, (%eax)75; X86-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [4,0,10,0,4,4,14,0]76; X86-NEXT:    vpxor %xmm2, %xmm2, %xmm277; X86-NEXT:    vpermi2d %ymm2, %ymm0, %ymm178; X86-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0],ymm4[1],ymm1[2,3,4,5,6,7]79; X86-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2],ymm2[3],ymm0[4,5,6,7]80; X86-NEXT:    vmovdqu %ymm0, (%eax)81; X86-NEXT:    popl %ebx82; X86-NEXT:    vzeroupper83; X86-NEXT:    retl84;85; X64-LABEL: PR142995:86; X64:       # %bb.0:87; X64-NEXT:    movb $17, %al88; X64-NEXT:    kmovw %eax, %k189; X64-NEXT:    vmovdqu32 (%rdi), %ymm0 {%k1} {z}90; X64-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero91; X64-NEXT:    movw $6144, %ax # imm = 0x180092; X64-NEXT:    kmovw %eax, %k193; X64-NEXT:    vmovdqu32 128(%rsi), %zmm2 {%k1} {z}94; X64-NEXT:    movw $1031, %ax # imm = 0x40795; X64-NEXT:    kmovw %eax, %k196; X64-NEXT:    vmovdqu32 (%rsi), %zmm3 {%k1} {z}97; X64-NEXT:    vpbroadcastd 252(%rsi), %zmm498; X64-NEXT:    vpbroadcastd %xmm1, %xmm599; X64-NEXT:    vpsrldq {{.*#+}} xmm5 = xmm5[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero100; X64-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]101; X64-NEXT:    vpunpckldq {{.*#+}} zmm2 = zmm4[0],zmm2[0],zmm4[1],zmm2[1],zmm4[4],zmm2[4],zmm4[5],zmm2[5],zmm4[8],zmm2[8],zmm4[9],zmm2[9],zmm4[12],zmm2[12],zmm4[13],zmm2[13]102; X64-NEXT:    vextracti32x4 $3, %zmm2, %xmm2103; X64-NEXT:    vpblendd {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3]104; X64-NEXT:    vpaddd %xmm1, %xmm5, %xmm1105; X64-NEXT:    vmovdqu %xmm1, (%rax)106; X64-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [4,0,10,0,4,4,14,0]107; X64-NEXT:    vpxor %xmm2, %xmm2, %xmm2108; X64-NEXT:    vpermi2d %ymm2, %ymm0, %ymm1109; X64-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0],ymm4[1],ymm1[2,3,4,5,6,7]110; X64-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2],ymm2[3],ymm0[4,5,6,7]111; X64-NEXT:    vmovdqu %ymm0, (%rdx)112; X64-NEXT:    vzeroupper113; X64-NEXT:    retq114  %i = tail call <5 x i32> @llvm.masked.load.v5i32.p0(ptr %p0, i32 4, <5 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true>, <5 x i32> poison)115  %i1 = load <2 x i32>, ptr poison, align 4116  %i2 = tail call <64 x i32> @llvm.masked.load.v64i32.p0(ptr %p1, i32 4, <64 x i1> <i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <64 x i32> poison)117  %i3 = shufflevector <2 x i32> %i1, <2 x i32> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>118  %i4 = shufflevector <4 x i32> zeroinitializer, <4 x i32> %i3, <4 x i32> <i32 poison, i32 poison, i32 4, i32 3>119  %i5 = shufflevector <4 x i32> poison, <4 x i32> %i4, <4 x i32> <i32 0, i32 1, i32 6, i32 7>120  %i6 = add <4 x i32> zeroinitializer, %i5121  %i7 = shufflevector <2 x i32> %i1, <2 x i32> poison, <64 x i32> <i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>122  %i8 = shufflevector <64 x i32> %i2, <64 x i32> %i7, <4 x i32> <i32 63, i32 44, i32 1, i32 65>123  %i9 = add <4 x i32> %i6, %i8124  %i10 = add <4 x i32> %i9, zeroinitializer125  store <4 x i32> %i10, ptr poison, align 4126  %i11 = shufflevector <5 x i32> %i, <5 x i32> poison, <6 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 4, i32 poison>127  %i12 = shufflevector <6 x i32> %i11, <6 x i32> zeroinitializer, <8 x i32> <i32 4, i32 poison, i32 6, i32 poison, i32 poison, i32 poison, i32 10, i32 0>128  %i13 = shufflevector <8 x i32> %i12, <8 x i32> poison, <64 x i32> <i32 0, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>129  %i14 = shufflevector <64 x i32> %i13, <64 x i32> %i2, <8 x i32> <i32 0, i32 127, i32 2, i32 poison, i32 poison, i32 poison, i32 6, i32 7>130  %i15 = shufflevector <8 x i32> %i14, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 10, i32 poison, i32 poison, i32 6, i32 7>131  %i16 = shufflevector <8 x i32> %i15, <8 x i32> poison, <19 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 poison, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>132  %i17 = shufflevector <19 x i32> %i16, <19 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 19, i32 6, i32 7>133  %i18 = add <8 x i32> zeroinitializer, %i17134  %i19 = add <8 x i32> %i18, zeroinitializer135  store <8 x i32> %i19, ptr %p2, align 4136  ret void137}138declare <5 x i32> @llvm.masked.load.v5i32.p0(ptr captures(none), i32 immarg, <5 x i1>, <5 x i32>)139declare <64 x i32> @llvm.masked.load.v64i32.p0(ptr captures(none), i32 immarg, <64 x i1>, <64 x i32>)140 141define <8 x double> @PR143606(ptr %px, ptr %py) {142; X86-LABEL: PR143606:143; X86:       # %bb.0:144; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax145; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx146; X86-NEXT:    vmovapd (%ecx), %ymm0147; X86-NEXT:    vblendpd {{.*#+}} ymm1 = ymm0[0],mem[1,2],ymm0[3]148; X86-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],mem[0],ymm0[2],mem[3]149; X86-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0150; X86-NEXT:    retl151;152; X64-LABEL: PR143606:153; X64:       # %bb.0:154; X64-NEXT:    vmovapd (%rdi), %ymm0155; X64-NEXT:    vblendpd {{.*#+}} ymm1 = ymm0[0],mem[1,2],ymm0[3]156; X64-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],mem[0],ymm0[2],mem[3]157; X64-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0158; X64-NEXT:    retq159  %x = load <4 x double>, ptr %px, align 32160  %y.lo = load <4 x double>, ptr %py, align 32161  %py.hi = getelementptr inbounds nuw i8, ptr %py, i64 32162  %y.hi = load <4 x double>, ptr %py.hi, align 32163  %lo = shufflevector <4 x double> %x, <4 x double> %y.lo, <4 x i32> <i32 0, i32 5, i32 6, i32 3>164  %hi = call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %x, <4 x i64> <i64 1, i64 4, i64 2, i64 7>, <4 x double> %y.hi)165  %res = shufflevector <4 x double> %lo, <4 x double> %hi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>166  ret <8 x double> %res167}168