X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86InstrAVX512.td;h=3fd18de6537ded160eda2284896f710a1b491676;hp=04dc681432a88397304ca255c8ba201914fb2ce5;hb=9371efbcdbbc35debb067c67336f33adc67e9c53;hpb=59cb03d3298bc830dfda5b4ca4981d179c31b0fe diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 04dc681432a..3fd18de6537 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -4273,32 +4273,24 @@ def : Pat <(v8f64 (int_x86_avx512_rcp28_pd (v8f64 VR512:$src), (bc_v8f64 (v16i32 immAllZerosV)), (i8 -1), FROUND_NO_EXC)), (VRCP28PDZrb VR512:$src)>; -multiclass avx512_sqrt_packed opc, string OpcodeStr, SDNode OpNode, - OpndItins itins_s, OpndItins itins_d> { - def PSZrr :AVX512PSI, - EVEX, EVEX_V512; - - let mayLoad = 1 in - def PSZrm : AVX512PSI, EVEX, EVEX_V512, EVEX_CD8<32, CD8VF>; - - def PDZrr : AVX512PDI, - EVEX, EVEX_V512; - - let mayLoad = 1 in - def PDZrm : AVX512PDI, EVEX, EVEX_V512, EVEX_CD8<64, CD8VF>; +multiclass avx512_sqrt_packed opc, string OpcodeStr, + SDNode OpNode, X86VectorVTInfo _>{ + defm rr: AVX512_maskable, EVEX; + let mayLoad = 1 in { + defm rm: AVX512_maskable, EVEX; + defm rmb: AVX512_maskable, + EVEX, EVEX_B; + } } multiclass avx512_sqrt_scalar opc, string OpcodeStr, @@ -4362,12 +4354,36 @@ multiclass avx512_sqrt_scalar opc, string OpcodeStr, } } +multiclass avx512_sqrt_packed_all opc, string OpcodeStr, + SDNode OpNode> { + defm PSZ : avx512_sqrt_packed, + EVEX_V512, PS, EVEX_CD8<32, CD8VF>; + defm PDZ : avx512_sqrt_packed, + EVEX_V512, VEX_W, PD, EVEX_CD8<64, CD8VF>; + // Define only if AVX512VL feature is present. + let Predicates = [HasVLX] in { + defm PSZ128 : avx512_sqrt_packed, + EVEX_V128, PS, EVEX_CD8<32, CD8VF>; + defm PSZ256 : avx512_sqrt_packed, + EVEX_V256, PS, EVEX_CD8<32, CD8VF>; + defm PDZ128 : avx512_sqrt_packed, + EVEX_V128, VEX_W, PD, EVEX_CD8<64, CD8VF>; + defm PDZ256 : avx512_sqrt_packed, + EVEX_V256, VEX_W, PD, EVEX_CD8<64, CD8VF>; + } +} + +defm VSQRT : avx512_sqrt_packed_all<0x51, "vsqrt", fsqrt>; defm VSQRT : avx512_sqrt_scalar<0x51, "sqrt", int_x86_avx512_sqrt_ss, int_x86_avx512_sqrt_sd, - SSE_SQRTSS, SSE_SQRTSD>, - avx512_sqrt_packed<0x51, "vsqrt", fsqrt, - SSE_SQRTPS, SSE_SQRTPD>; + SSE_SQRTSS, SSE_SQRTSD>; let Predicates = [HasAVX512] in { def : Pat<(v16f32 (int_x86_avx512_sqrt_ps_512 (v16f32 VR512:$src1),