590 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=sapphirerapids -mattr=+false-deps-getmant -mtriple=x86_64-unknown-unknown < %s | FileCheck %s --check-prefixes=ENABLE3; RUN: llc -verify-machineinstrs -mcpu=sapphirerapids -mattr=-false-deps-getmant -mtriple=x86_64-unknown-unknown < %s | FileCheck %s --check-prefixes=DISABLE4 5define <4 x float> @getmantps_mem_128(ptr %p0) {6; ENABLE-LABEL: getmantps_mem_128:7; ENABLE: # %bb.0:8; ENABLE-NEXT: #APP9; ENABLE-NEXT: nop10; ENABLE-NEXT: #NO_APP11; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm012; ENABLE-NEXT: vgetmantps $88, (%rdi), %xmm013; ENABLE-NEXT: retq14;15; DISABLE-LABEL: getmantps_mem_128:16; DISABLE: # %bb.0:17; DISABLE-NEXT: #APP18; DISABLE-NEXT: nop19; DISABLE-NEXT: #NO_APP20; DISABLE-NEXT: vgetmantps $88, (%rdi), %xmm021; DISABLE-NEXT: retq22 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()23 %a0 = load <4 x float>, ptr %p0, align 6424 %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float> %a0, i32 88, <4 x float> undef, i8 -1)25 ret <4 x float> %226}27 28define <4 x float> @getmantps_broadcast_128(ptr %p0) {29; ENABLE-LABEL: getmantps_broadcast_128:30; ENABLE: # %bb.0:31; ENABLE-NEXT: #APP32; ENABLE-NEXT: nop33; ENABLE-NEXT: #NO_APP34; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm035; ENABLE-NEXT: vgetmantps $88, (%rdi){1to4}, %xmm036; ENABLE-NEXT: retq37;38; DISABLE-LABEL: getmantps_broadcast_128:39; DISABLE: # %bb.0:40; DISABLE-NEXT: #APP41; DISABLE-NEXT: nop42; DISABLE-NEXT: #NO_APP43; DISABLE-NEXT: vgetmantps $88, (%rdi){1to4}, %xmm044; DISABLE-NEXT: retq45 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()46 %v0 = load float, ptr %p0, align 447 %t0 = insertelement <4 x float> undef, float %v0, i64 048 %a0 = shufflevector <4 x float> %t0, <4 x float> undef, <4 x i32> zeroinitializer49 %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float> %a0, i32 88, <4 x float> undef, i8 -1)50 ret <4 x float> %251}52 53declare <4 x float> @llvm.x86.avx512.mask.getmant.ps.128(<4 x float>, i32, <4 x float>, i8)54 55define <8 x float> @getmantps_mem_256(ptr %p0) {56; ENABLE-LABEL: getmantps_mem_256:57; ENABLE: # %bb.0:58; ENABLE-NEXT: #APP59; ENABLE-NEXT: nop60; ENABLE-NEXT: #NO_APP61; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm062; ENABLE-NEXT: vgetmantps $88, (%rdi), %ymm063; ENABLE-NEXT: retq64;65; DISABLE-LABEL: getmantps_mem_256:66; DISABLE: # %bb.0:67; DISABLE-NEXT: #APP68; DISABLE-NEXT: nop69; DISABLE-NEXT: #NO_APP70; DISABLE-NEXT: vgetmantps $88, (%rdi), %ymm071; DISABLE-NEXT: retq72 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()73 %a0 = load <8 x float>, ptr %p0, align 6474 %2 = call <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float> %a0, i32 88, <8 x float> undef, i8 -1)75 ret <8 x float> %276}77 78define <8 x float> @getmantps_broadcast_256(ptr %p0) {79; ENABLE-LABEL: getmantps_broadcast_256:80; ENABLE: # %bb.0:81; ENABLE-NEXT: #APP82; ENABLE-NEXT: nop83; ENABLE-NEXT: #NO_APP84; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm085; ENABLE-NEXT: vgetmantps $88, (%rdi){1to8}, %ymm086; ENABLE-NEXT: retq87;88; DISABLE-LABEL: getmantps_broadcast_256:89; DISABLE: # %bb.0:90; DISABLE-NEXT: #APP91; DISABLE-NEXT: nop92; DISABLE-NEXT: #NO_APP93; DISABLE-NEXT: vgetmantps $88, (%rdi){1to8}, %ymm094; DISABLE-NEXT: retq95 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()96 %v0 = load float, ptr %p0, align 497 %t0 = insertelement <8 x float> undef, float %v0, i64 098 %a0 = shufflevector <8 x float> %t0, <8 x float> undef, <8 x i32> zeroinitializer99 %2 = call <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float> %a0, i32 88, <8 x float> undef, i8 -1)100 ret <8 x float> %2101}102 103declare <8 x float> @llvm.x86.avx512.mask.getmant.ps.256(<8 x float>, i32, <8 x float>, i8)104 105define <16 x float> @getmantps_mem_512(ptr %p0) {106; ENABLE-LABEL: getmantps_mem_512:107; ENABLE: # %bb.0:108; ENABLE-NEXT: #APP109; ENABLE-NEXT: nop110; ENABLE-NEXT: #NO_APP111; ENABLE-NEXT: vpxor %xmm0, %xmm0, %xmm0112; ENABLE-NEXT: vgetmantps $88, (%rdi), %zmm0113; ENABLE-NEXT: retq114;115; DISABLE-LABEL: getmantps_mem_512:116; DISABLE: # %bb.0:117; DISABLE-NEXT: #APP118; DISABLE-NEXT: nop119; DISABLE-NEXT: #NO_APP120; DISABLE-NEXT: vgetmantps $88, (%rdi), %zmm0121; DISABLE-NEXT: retq122 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()123 %a0 = load <16 x float>, ptr %p0, align 64124 %2 = call <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float> %a0, i32 88, <16 x float> undef, i16 -1, i32 4)125 ret <16 x float> %2126}127 128define <16 x float> @getmantps_broadcast_512(ptr %p0) {129; ENABLE-LABEL: getmantps_broadcast_512:130; ENABLE: # %bb.0:131; ENABLE-NEXT: #APP132; ENABLE-NEXT: nop133; ENABLE-NEXT: #NO_APP134; ENABLE-NEXT: vpxor %xmm0, %xmm0, %xmm0135; ENABLE-NEXT: vgetmantps $88, (%rdi){1to16}, %zmm0136; ENABLE-NEXT: retq137;138; DISABLE-LABEL: getmantps_broadcast_512:139; DISABLE: # %bb.0:140; DISABLE-NEXT: #APP141; DISABLE-NEXT: nop142; DISABLE-NEXT: #NO_APP143; DISABLE-NEXT: vgetmantps $88, (%rdi){1to16}, %zmm0144; DISABLE-NEXT: retq145 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()146 %v0 = load float, ptr %p0, align 4147 %t0 = insertelement <16 x float> undef, float %v0, i64 0148 %a0 = shufflevector <16 x float> %t0, <16 x float> undef, <16 x i32> zeroinitializer149 %2 = call <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float> %a0, i32 88, <16 x float> undef, i16 -1, i32 4)150 ret <16 x float> %2151}152 153declare <16 x float> @llvm.x86.avx512.mask.getmant.ps.512(<16 x float>, i32, <16 x float>, i16, i32)154 155 156define <2 x double> @getmantpd_mem_128(ptr %p0) {157; ENABLE-LABEL: getmantpd_mem_128:158; ENABLE: # %bb.0:159; ENABLE-NEXT: #APP160; ENABLE-NEXT: nop161; ENABLE-NEXT: #NO_APP162; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0163; ENABLE-NEXT: vgetmantpd $88, (%rdi), %xmm0164; ENABLE-NEXT: retq165;166; DISABLE-LABEL: getmantpd_mem_128:167; DISABLE: # %bb.0:168; DISABLE-NEXT: #APP169; DISABLE-NEXT: nop170; DISABLE-NEXT: #NO_APP171; DISABLE-NEXT: vgetmantpd $88, (%rdi), %xmm0172; DISABLE-NEXT: retq173 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()174 %a0 = load <2 x double>, ptr %p0, align 64175 %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double> %a0, i32 88, <2 x double> undef, i8 -1)176 ret <2 x double> %2177}178 179define <2 x double> @getmantpd_broadcast_128(ptr %p0) {180; ENABLE-LABEL: getmantpd_broadcast_128:181; ENABLE: # %bb.0:182; ENABLE-NEXT: #APP183; ENABLE-NEXT: nop184; ENABLE-NEXT: #NO_APP185; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0186; ENABLE-NEXT: vgetmantpd $88, (%rdi){1to2}, %xmm0187; ENABLE-NEXT: retq188;189; DISABLE-LABEL: getmantpd_broadcast_128:190; DISABLE: # %bb.0:191; DISABLE-NEXT: #APP192; DISABLE-NEXT: nop193; DISABLE-NEXT: #NO_APP194; DISABLE-NEXT: vgetmantpd $88, (%rdi){1to2}, %xmm0195; DISABLE-NEXT: retq196 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()197 %v0 = load double, ptr %p0, align 4198 %t0 = insertelement <2 x double> undef, double %v0, i64 0199 %a0 = shufflevector <2 x double> %t0, <2 x double> undef, <2 x i32> zeroinitializer200 %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double> %a0, i32 88, <2 x double> undef, i8 -1)201 ret <2 x double> %2202}203 204declare <2 x double> @llvm.x86.avx512.mask.getmant.pd.128(<2 x double>, i32, <2 x double>, i8)205 206define <4 x double> @getmantpd_mem_256(ptr %p0) {207; ENABLE-LABEL: getmantpd_mem_256:208; ENABLE: # %bb.0:209; ENABLE-NEXT: #APP210; ENABLE-NEXT: nop211; ENABLE-NEXT: #NO_APP212; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0213; ENABLE-NEXT: vgetmantpd $88, (%rdi), %ymm0214; ENABLE-NEXT: retq215;216; DISABLE-LABEL: getmantpd_mem_256:217; DISABLE: # %bb.0:218; DISABLE-NEXT: #APP219; DISABLE-NEXT: nop220; DISABLE-NEXT: #NO_APP221; DISABLE-NEXT: vgetmantpd $88, (%rdi), %ymm0222; DISABLE-NEXT: retq223 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()224 %a0 = load <4 x double>, ptr %p0, align 64225 %2 = call <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double> %a0, i32 88, <4 x double> undef, i8 -1)226 ret <4 x double> %2227}228 229define <4 x double> @getmantpd_broadcast_256(ptr %p0) {230; ENABLE-LABEL: getmantpd_broadcast_256:231; ENABLE: # %bb.0:232; ENABLE-NEXT: #APP233; ENABLE-NEXT: nop234; ENABLE-NEXT: #NO_APP235; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0236; ENABLE-NEXT: vgetmantpd $88, (%rdi){1to4}, %ymm0237; ENABLE-NEXT: retq238;239; DISABLE-LABEL: getmantpd_broadcast_256:240; DISABLE: # %bb.0:241; DISABLE-NEXT: #APP242; DISABLE-NEXT: nop243; DISABLE-NEXT: #NO_APP244; DISABLE-NEXT: vgetmantpd $88, (%rdi){1to4}, %ymm0245; DISABLE-NEXT: retq246 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()247 %v0 = load double, ptr %p0, align 4248 %t0 = insertelement <4 x double> undef, double %v0, i64 0249 %a0 = shufflevector <4 x double> %t0, <4 x double> undef, <4 x i32> zeroinitializer250 %2 = call <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double> %a0, i32 88, <4 x double> undef, i8 -1)251 ret <4 x double> %2252}253 254declare <4 x double> @llvm.x86.avx512.mask.getmant.pd.256(<4 x double>, i32, <4 x double>, i8)255 256define <8 x double> @getmantpd_mem_512(ptr %p0) {257; ENABLE-LABEL: getmantpd_mem_512:258; ENABLE: # %bb.0:259; ENABLE-NEXT: #APP260; ENABLE-NEXT: nop261; ENABLE-NEXT: #NO_APP262; ENABLE-NEXT: vpxor %xmm0, %xmm0, %xmm0263; ENABLE-NEXT: vgetmantpd $88, (%rdi), %zmm0264; ENABLE-NEXT: retq265;266; DISABLE-LABEL: getmantpd_mem_512:267; DISABLE: # %bb.0:268; DISABLE-NEXT: #APP269; DISABLE-NEXT: nop270; DISABLE-NEXT: #NO_APP271; DISABLE-NEXT: vgetmantpd $88, (%rdi), %zmm0272; DISABLE-NEXT: retq273 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()274 %a0 = load <8 x double>, ptr %p0, align 64275 %2 = call <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double> %a0, i32 88, <8 x double> undef, i8 -1, i32 4)276 ret <8 x double> %2277}278 279define <8 x double> @getmantpd_broadcast_512(ptr %p0) {280; ENABLE-LABEL: getmantpd_broadcast_512:281; ENABLE: # %bb.0:282; ENABLE-NEXT: #APP283; ENABLE-NEXT: nop284; ENABLE-NEXT: #NO_APP285; ENABLE-NEXT: vpxor %xmm0, %xmm0, %xmm0286; ENABLE-NEXT: vgetmantpd $88, (%rdi){1to8}, %zmm0287; ENABLE-NEXT: retq288;289; DISABLE-LABEL: getmantpd_broadcast_512:290; DISABLE: # %bb.0:291; DISABLE-NEXT: #APP292; DISABLE-NEXT: nop293; DISABLE-NEXT: #NO_APP294; DISABLE-NEXT: vgetmantpd $88, (%rdi){1to8}, %zmm0295; DISABLE-NEXT: retq296 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()297 %v0 = load double, ptr %p0, align 4298 %t0 = insertelement <8 x double> undef, double %v0, i64 0299 %a0 = shufflevector <8 x double> %t0, <8 x double> undef, <8 x i32> zeroinitializer300 %2 = call <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double> %a0, i32 88, <8 x double> undef, i8 -1, i32 4)301 ret <8 x double> %2302}303 304declare <8 x double> @llvm.x86.avx512.mask.getmant.pd.512(<8 x double>, i32, <8 x double>, i8, i32)305 306define <8 x half> @getmantsh(<8 x half> %a0, <8 x half> %a1) {307; ENABLE-LABEL: getmantsh:308; ENABLE: # %bb.0:309; ENABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill310; ENABLE-NEXT: #APP311; ENABLE-NEXT: nop312; ENABLE-NEXT: #NO_APP313; ENABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload314; ENABLE-NEXT: vxorps %xmm1, %xmm1, %xmm1315; ENABLE-NEXT: vgetmantsh $11, %xmm2, %xmm0, %xmm1316; ENABLE-NEXT: vaddph %xmm2, %xmm0, %xmm0317; ENABLE-NEXT: vaddph %xmm0, %xmm1, %xmm0318; ENABLE-NEXT: retq319;320; DISABLE-LABEL: getmantsh:321; DISABLE: # %bb.0:322; DISABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill323; DISABLE-NEXT: #APP324; DISABLE-NEXT: nop325; DISABLE-NEXT: #NO_APP326; DISABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload327; DISABLE-NEXT: vgetmantsh $11, %xmm2, %xmm0, %xmm1328; DISABLE-NEXT: vaddph %xmm2, %xmm0, %xmm0329; DISABLE-NEXT: vaddph %xmm0, %xmm1, %xmm0330; DISABLE-NEXT: retq331 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()332 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> undef, i8 -1, i32 4)333 %t = fadd <8 x half> %a0, %a1334 %res = fadd <8 x half> %2, %t335 ret <8 x half> %res336}337 338define <8 x half> @getmantsh_mem(<8 x half> %a0, ptr %p1) {339; ENABLE-LABEL: getmantsh_mem:340; ENABLE: # %bb.0:341; ENABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill342; ENABLE-NEXT: #APP343; ENABLE-NEXT: nop344; ENABLE-NEXT: #NO_APP345; ENABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload346; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0347; ENABLE-NEXT: vgetmantsh $11, (%rdi), %xmm1, %xmm0348; ENABLE-NEXT: vaddph %xmm1, %xmm0, %xmm0349; ENABLE-NEXT: retq350;351; DISABLE-LABEL: getmantsh_mem:352; DISABLE: # %bb.0:353; DISABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill354; DISABLE-NEXT: #APP355; DISABLE-NEXT: nop356; DISABLE-NEXT: #NO_APP357; DISABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload358; DISABLE-NEXT: vgetmantsh $11, (%rdi), %xmm1, %xmm0359; DISABLE-NEXT: vaddph %xmm1, %xmm0, %xmm0360; DISABLE-NEXT: retq361 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()362 %a1 = load <8 x half>, ptr %p1, align 64363 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> undef, i8 -1, i32 4)364 %res = fadd <8 x half> %2, %a0365 ret <8 x half> %res366}367 368define <8 x half> @getmantsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {369; ENABLE-LABEL: getmantsh_maskz:370; ENABLE: # %bb.0:371; ENABLE-NEXT: #APP372; ENABLE-NEXT: nop373; ENABLE-NEXT: #NO_APP374; ENABLE-NEXT: kmovb (%rdi), %k1375; ENABLE-NEXT: vxorps %xmm2, %xmm2, %xmm2376; ENABLE-NEXT: vgetmantsh $11, %xmm1, %xmm0, %xmm2 {%k1} {z}377; ENABLE-NEXT: vaddph %xmm1, %xmm0, %xmm0378; ENABLE-NEXT: vaddph %xmm0, %xmm2, %xmm0379; ENABLE-NEXT: retq380;381; DISABLE-LABEL: getmantsh_maskz:382; DISABLE: # %bb.0:383; DISABLE-NEXT: #APP384; DISABLE-NEXT: nop385; DISABLE-NEXT: #NO_APP386; DISABLE-NEXT: kmovb (%rdi), %k1387; DISABLE-NEXT: vgetmantsh $11, %xmm1, %xmm0, %xmm2 {%k1} {z}388; DISABLE-NEXT: vaddph %xmm1, %xmm0, %xmm0389; DISABLE-NEXT: vaddph %xmm0, %xmm2, %xmm0390; DISABLE-NEXT: retq391 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()392 %2 = load i8, ptr %mask393 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 11, <8 x half> zeroinitializer, i8 %2, i32 4)394 %t = fadd <8 x half> %a0, %a1395 %res = fadd <8 x half> %3, %t396 ret <8 x half> %res397}398 399declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half>, <8 x half>, i32, <8 x half>, i8, i32)400 401define <4 x float> @getmantss(<4 x float> %a0, <4 x float> %a1) {402; ENABLE-LABEL: getmantss:403; ENABLE: # %bb.0:404; ENABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill405; ENABLE-NEXT: #APP406; ENABLE-NEXT: nop407; ENABLE-NEXT: #NO_APP408; ENABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload409; ENABLE-NEXT: vxorps %xmm1, %xmm1, %xmm1410; ENABLE-NEXT: vgetmantss $11, %xmm2, %xmm0, %xmm1411; ENABLE-NEXT: vaddps %xmm2, %xmm0, %xmm0412; ENABLE-NEXT: vaddps %xmm0, %xmm1, %xmm0413; ENABLE-NEXT: retq414;415; DISABLE-LABEL: getmantss:416; DISABLE: # %bb.0:417; DISABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill418; DISABLE-NEXT: #APP419; DISABLE-NEXT: nop420; DISABLE-NEXT: #NO_APP421; DISABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload422; DISABLE-NEXT: vgetmantss $11, %xmm2, %xmm0, %xmm1423; DISABLE-NEXT: vaddps %xmm2, %xmm0, %xmm0424; DISABLE-NEXT: vaddps %xmm0, %xmm1, %xmm0425; DISABLE-NEXT: retq426 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()427 %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> undef, i8 -1, i32 4)428 %t = fadd <4 x float> %a0, %a1429 %res = fadd <4 x float> %2, %t430 ret <4 x float> %res431}432 433define <4 x float> @getmantss_mem(<4 x float> %a0, ptr %p1) {434; ENABLE-LABEL: getmantss_mem:435; ENABLE: # %bb.0:436; ENABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill437; ENABLE-NEXT: #APP438; ENABLE-NEXT: nop439; ENABLE-NEXT: #NO_APP440; ENABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload441; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0442; ENABLE-NEXT: vgetmantss $11, (%rdi), %xmm1, %xmm0443; ENABLE-NEXT: vaddps %xmm1, %xmm0, %xmm0444; ENABLE-NEXT: retq445;446; DISABLE-LABEL: getmantss_mem:447; DISABLE: # %bb.0:448; DISABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill449; DISABLE-NEXT: #APP450; DISABLE-NEXT: nop451; DISABLE-NEXT: #NO_APP452; DISABLE-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload453; DISABLE-NEXT: vgetmantss $11, (%rdi), %xmm1, %xmm0454; DISABLE-NEXT: vaddps %xmm1, %xmm0, %xmm0455; DISABLE-NEXT: retq456 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()457 %a1 = load <4 x float>, ptr %p1, align 64458 %2 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> undef, i8 -1, i32 4)459 %res = fadd <4 x float> %2, %a0460 ret <4 x float> %res461}462 463define <4 x float> @getmantss_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {464; ENABLE-LABEL: getmantss_maskz:465; ENABLE: # %bb.0:466; ENABLE-NEXT: #APP467; ENABLE-NEXT: nop468; ENABLE-NEXT: #NO_APP469; ENABLE-NEXT: kmovb (%rdi), %k1470; ENABLE-NEXT: vxorps %xmm2, %xmm2, %xmm2471; ENABLE-NEXT: vgetmantss $11, %xmm1, %xmm0, %xmm2 {%k1} {z}472; ENABLE-NEXT: vaddps %xmm1, %xmm0, %xmm0473; ENABLE-NEXT: vaddps %xmm0, %xmm2, %xmm0474; ENABLE-NEXT: retq475;476; DISABLE-LABEL: getmantss_maskz:477; DISABLE: # %bb.0:478; DISABLE-NEXT: #APP479; DISABLE-NEXT: nop480; DISABLE-NEXT: #NO_APP481; DISABLE-NEXT: kmovb (%rdi), %k1482; DISABLE-NEXT: vgetmantss $11, %xmm1, %xmm0, %xmm2 {%k1} {z}483; DISABLE-NEXT: vaddps %xmm1, %xmm0, %xmm0484; DISABLE-NEXT: vaddps %xmm0, %xmm2, %xmm0485; DISABLE-NEXT: retq486 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()487 %2 = load i8, ptr %mask488 %3 = call <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float> %a0, <4 x float> %a1, i32 11, <4 x float> zeroinitializer, i8 %2, i32 4)489 %t = fadd <4 x float> %a0, %a1490 %res = fadd <4 x float> %3, %t491 ret <4 x float> %res492}493 494declare <4 x float> @llvm.x86.avx512.mask.getmant.ss(<4 x float>, <4 x float>, i32, <4 x float>, i8, i32)495 496define <2 x double> @getmantsd(<2 x double> %a0, <2 x double> %a1) {497; ENABLE-LABEL: getmantsd:498; ENABLE: # %bb.0:499; ENABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill500; ENABLE-NEXT: #APP501; ENABLE-NEXT: nop502; ENABLE-NEXT: #NO_APP503; ENABLE-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload504; ENABLE-NEXT: vxorps %xmm1, %xmm1, %xmm1505; ENABLE-NEXT: vgetmantsd $11, %xmm2, %xmm0, %xmm1506; ENABLE-NEXT: vaddpd %xmm2, %xmm0, %xmm0507; ENABLE-NEXT: vaddpd %xmm0, %xmm1, %xmm0508; ENABLE-NEXT: retq509;510; DISABLE-LABEL: getmantsd:511; DISABLE: # %bb.0:512; DISABLE-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill513; DISABLE-NEXT: #APP514; DISABLE-NEXT: nop515; DISABLE-NEXT: #NO_APP516; DISABLE-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload517; DISABLE-NEXT: vgetmantsd $11, %xmm2, %xmm0, %xmm1518; DISABLE-NEXT: vaddpd %xmm2, %xmm0, %xmm0519; DISABLE-NEXT: vaddpd %xmm0, %xmm1, %xmm0520; DISABLE-NEXT: retq521 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()522 %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> undef, i8 -1, i32 4)523 %t = fadd <2 x double> %a0, %a1524 %res = fadd <2 x double> %2, %t525 ret <2 x double> %res526}527 528define <2 x double> @getmantsd_mem(<2 x double> %a0, ptr %p1) {529; ENABLE-LABEL: getmantsd_mem:530; ENABLE: # %bb.0:531; ENABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill532; ENABLE-NEXT: #APP533; ENABLE-NEXT: nop534; ENABLE-NEXT: #NO_APP535; ENABLE-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload536; ENABLE-NEXT: vxorps %xmm0, %xmm0, %xmm0537; ENABLE-NEXT: vgetmantsd $11, (%rdi), %xmm1, %xmm0538; ENABLE-NEXT: vaddpd %xmm1, %xmm0, %xmm0539; ENABLE-NEXT: retq540;541; DISABLE-LABEL: getmantsd_mem:542; DISABLE: # %bb.0:543; DISABLE-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill544; DISABLE-NEXT: #APP545; DISABLE-NEXT: nop546; DISABLE-NEXT: #NO_APP547; DISABLE-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload548; DISABLE-NEXT: vgetmantsd $11, (%rdi), %xmm1, %xmm0549; DISABLE-NEXT: vaddpd %xmm1, %xmm0, %xmm0550; DISABLE-NEXT: retq551 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()552 %a1 = load <2 x double>, ptr %p1, align 64553 %2 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> undef, i8 -1, i32 4)554 %res = fadd <2 x double> %2, %a0555 ret <2 x double> %res556}557 558define <2 x double> @getmantsd_maskz(<2 x double> %a0, <2 x double> %a1, ptr %mask) {559; ENABLE-LABEL: getmantsd_maskz:560; ENABLE: # %bb.0:561; ENABLE-NEXT: #APP562; ENABLE-NEXT: nop563; ENABLE-NEXT: #NO_APP564; ENABLE-NEXT: kmovb (%rdi), %k1565; ENABLE-NEXT: vxorps %xmm2, %xmm2, %xmm2566; ENABLE-NEXT: vgetmantsd $11, %xmm1, %xmm0, %xmm2 {%k1} {z}567; ENABLE-NEXT: vaddpd %xmm1, %xmm0, %xmm0568; ENABLE-NEXT: vaddpd %xmm0, %xmm2, %xmm0569; ENABLE-NEXT: retq570;571; DISABLE-LABEL: getmantsd_maskz:572; DISABLE: # %bb.0:573; DISABLE-NEXT: #APP574; DISABLE-NEXT: nop575; DISABLE-NEXT: #NO_APP576; DISABLE-NEXT: kmovb (%rdi), %k1577; DISABLE-NEXT: vgetmantsd $11, %xmm1, %xmm0, %xmm2 {%k1} {z}578; DISABLE-NEXT: vaddpd %xmm1, %xmm0, %xmm0579; DISABLE-NEXT: vaddpd %xmm0, %xmm2, %xmm0580; DISABLE-NEXT: retq581 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()582 %2 = load i8, ptr %mask583 %3 = call <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double> %a0, <2 x double> %a1, i32 11, <2 x double> zeroinitializer, i8 %2, i32 4)584 %t = fadd <2 x double> %a0, %a1585 %res = fadd <2 x double> %3, %t586 ret <2 x double> %res587}588 589declare <2 x double> @llvm.x86.avx512.mask.getmant.sd(<2 x double>, <2 x double>, i32, <2 x double>, i8, i32)590