brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.0 KiB · 8595b63 Raw
718 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE414; RUN: llc < %s -mtriple=x86_64-unknown-freebsd -mattr=+avx | FileCheck %s --check-prefixes=AVX15; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512F6; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512fp16,+avx512vl | FileCheck %s --check-prefixes=AVX512FP167 8define half @round_f16(half %h) {9; SSE2-LABEL: round_f16:10; SSE2:       # %bb.0: # %entry11; SSE2-NEXT:    pushq %rax12; SSE2-NEXT:    .cfi_def_cfa_offset 1613; SSE2-NEXT:    callq __extendhfsf2@PLT14; SSE2-NEXT:    callq roundf@PLT15; SSE2-NEXT:    callq __truncsfhf2@PLT16; SSE2-NEXT:    popq %rax17; SSE2-NEXT:    .cfi_def_cfa_offset 818; SSE2-NEXT:    retq19;20; SSE41-LABEL: round_f16:21; SSE41:       # %bb.0: # %entry22; SSE41-NEXT:    pushq %rax23; SSE41-NEXT:    .cfi_def_cfa_offset 1624; SSE41-NEXT:    callq __extendhfsf2@PLT25; SSE41-NEXT:    movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]26; SSE41-NEXT:    andps %xmm0, %xmm127; SSE41-NEXT:    orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm128; SSE41-NEXT:    addss %xmm0, %xmm129; SSE41-NEXT:    xorps %xmm0, %xmm030; SSE41-NEXT:    roundss $11, %xmm1, %xmm031; SSE41-NEXT:    callq __truncsfhf2@PLT32; SSE41-NEXT:    popq %rax33; SSE41-NEXT:    .cfi_def_cfa_offset 834; SSE41-NEXT:    retq35;36; AVX1-LABEL: round_f16:37; AVX1:       # %bb.0: # %entry38; AVX1-NEXT:    pushq %rax39; AVX1-NEXT:    .cfi_def_cfa_offset 1640; AVX1-NEXT:    callq __extendhfsf2@PLT41; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm142; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]43; AVX1-NEXT:    vorps %xmm2, %xmm1, %xmm144; AVX1-NEXT:    vaddss %xmm1, %xmm0, %xmm045; AVX1-NEXT:    vroundss $11, %xmm0, %xmm0, %xmm046; AVX1-NEXT:    callq __truncsfhf2@PLT47; AVX1-NEXT:    popq %rax48; AVX1-NEXT:    .cfi_def_cfa_offset 849; AVX1-NEXT:    retq50;51; AVX512F-LABEL: round_f16:52; AVX512F:       # %bb.0: # %entry53; AVX512F-NEXT:    vcvtph2ps %xmm0, %xmm054; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]55; AVX512F-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & m32bcst)56; AVX512F-NEXT:    vaddss %xmm1, %xmm0, %xmm057; AVX512F-NEXT:    vroundss $11, %xmm0, %xmm0, %xmm058; AVX512F-NEXT:    vcvtps2ph $4, %xmm0, %xmm059; AVX512F-NEXT:    retq60;61; AVX512FP16-LABEL: round_f16:62; AVX512FP16:       ## %bb.0: ## %entry63; AVX512FP16-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]64; AVX512FP16-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1,4.9976E-1]65; AVX512FP16-NEXT:    vpternlogq {{.*#+}} xmm2 = xmm2 | (xmm0 & xmm1)66; AVX512FP16-NEXT:    vaddsh %xmm2, %xmm0, %xmm067; AVX512FP16-NEXT:    vrndscalesh $11, %xmm0, %xmm0, %xmm068; AVX512FP16-NEXT:    retq69entry:70  %a = call half @llvm.round.f16(half %h)71  ret half %a72}73 74define float @round_f32(float %x) {75; SSE2-LABEL: round_f32:76; SSE2:       # %bb.0:77; SSE2-NEXT:    jmp roundf@PLT # TAILCALL78;79; SSE41-LABEL: round_f32:80; SSE41:       # %bb.0:81; SSE41-NEXT:    movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]82; SSE41-NEXT:    andps %xmm0, %xmm183; SSE41-NEXT:    orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm184; SSE41-NEXT:    addss %xmm0, %xmm185; SSE41-NEXT:    xorps %xmm0, %xmm086; SSE41-NEXT:    roundss $11, %xmm1, %xmm087; SSE41-NEXT:    retq88;89; AVX1-LABEL: round_f32:90; AVX1:       # %bb.0:91; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm192; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]93; AVX1-NEXT:    vorps %xmm2, %xmm1, %xmm194; AVX1-NEXT:    vaddss %xmm1, %xmm0, %xmm095; AVX1-NEXT:    vroundss $11, %xmm0, %xmm0, %xmm096; AVX1-NEXT:    retq97;98; AVX512F-LABEL: round_f32:99; AVX512F:       # %bb.0:100; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]101; AVX512F-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & m32bcst)102; AVX512F-NEXT:    vaddss %xmm1, %xmm0, %xmm0103; AVX512F-NEXT:    vroundss $11, %xmm0, %xmm0, %xmm0104; AVX512F-NEXT:    retq105;106; AVX512FP16-LABEL: round_f32:107; AVX512FP16:       ## %bb.0:108; AVX512FP16-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]109; AVX512FP16-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & m32bcst)110; AVX512FP16-NEXT:    vaddss %xmm1, %xmm0, %xmm0111; AVX512FP16-NEXT:    vroundss $11, %xmm0, %xmm0, %xmm0112; AVX512FP16-NEXT:    retq113  %a = call float @llvm.round.f32(float %x)114  ret float %a115}116 117define double @round_f64(double %x) {118; SSE2-LABEL: round_f64:119; SSE2:       # %bb.0:120; SSE2-NEXT:    jmp round@PLT # TAILCALL121;122; SSE41-LABEL: round_f64:123; SSE41:       # %bb.0:124; SSE41-NEXT:    movapd {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0]125; SSE41-NEXT:    andpd %xmm0, %xmm1126; SSE41-NEXT:    orpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1127; SSE41-NEXT:    addsd %xmm0, %xmm1128; SSE41-NEXT:    xorps %xmm0, %xmm0129; SSE41-NEXT:    roundsd $11, %xmm1, %xmm0130; SSE41-NEXT:    retq131;132; AVX1-LABEL: round_f64:133; AVX1:       # %bb.0:134; AVX1-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1135; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [4.9999999999999994E-1,4.9999999999999994E-1]136; AVX1-NEXT:    # xmm2 = mem[0,0]137; AVX1-NEXT:    vorpd %xmm2, %xmm1, %xmm1138; AVX1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0139; AVX1-NEXT:    vroundsd $11, %xmm0, %xmm0, %xmm0140; AVX1-NEXT:    retq141;142; AVX512F-LABEL: round_f64:143; AVX512F:       # %bb.0:144; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.9999999999999994E-1,4.9999999999999994E-1]145; AVX512F-NEXT:    vpternlogq {{.*#+}} xmm1 = xmm1 | (xmm0 & m64bcst)146; AVX512F-NEXT:    vaddsd %xmm1, %xmm0, %xmm0147; AVX512F-NEXT:    vroundsd $11, %xmm0, %xmm0, %xmm0148; AVX512F-NEXT:    retq149;150; AVX512FP16-LABEL: round_f64:151; AVX512FP16:       ## %bb.0:152; AVX512FP16-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.9999999999999994E-1,4.9999999999999994E-1]153; AVX512FP16-NEXT:    vpternlogq {{.*#+}} xmm1 = xmm1 | (xmm0 & m64bcst)154; AVX512FP16-NEXT:    vaddsd %xmm1, %xmm0, %xmm0155; AVX512FP16-NEXT:    vroundsd $11, %xmm0, %xmm0, %xmm0156; AVX512FP16-NEXT:    retq157  %a = call double @llvm.round.f64(double %x)158  ret double %a159}160 161define <4 x float> @round_v4f32(<4 x float> %x) {162; SSE2-LABEL: round_v4f32:163; SSE2:       # %bb.0:164; SSE2-NEXT:    subq $56, %rsp165; SSE2-NEXT:    .cfi_def_cfa_offset 64166; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill167; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]168; SSE2-NEXT:    callq roundf@PLT169; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill170; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload171; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]172; SSE2-NEXT:    callq roundf@PLT173; SSE2-NEXT:    unpcklps (%rsp), %xmm0 # 16-byte Folded Reload174; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]175; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill176; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload177; SSE2-NEXT:    callq roundf@PLT178; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill179; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload180; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]181; SSE2-NEXT:    callq roundf@PLT182; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload183; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]184; SSE2-NEXT:    unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload185; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]186; SSE2-NEXT:    movaps %xmm1, %xmm0187; SSE2-NEXT:    addq $56, %rsp188; SSE2-NEXT:    .cfi_def_cfa_offset 8189; SSE2-NEXT:    retq190;191; SSE41-LABEL: round_v4f32:192; SSE41:       # %bb.0:193; SSE41-NEXT:    movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]194; SSE41-NEXT:    andps %xmm0, %xmm1195; SSE41-NEXT:    orps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1196; SSE41-NEXT:    addps %xmm0, %xmm1197; SSE41-NEXT:    roundps $11, %xmm1, %xmm0198; SSE41-NEXT:    retq199;200; AVX1-LABEL: round_v4f32:201; AVX1:       # %bb.0:202; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1203; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1204; AVX1-NEXT:    vaddps %xmm1, %xmm0, %xmm0205; AVX1-NEXT:    vroundps $11, %xmm0, %xmm0206; AVX1-NEXT:    retq207;208; AVX512F-LABEL: round_v4f32:209; AVX512F:       # %bb.0:210; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]211; AVX512F-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & m32bcst)212; AVX512F-NEXT:    vaddps %xmm1, %xmm0, %xmm0213; AVX512F-NEXT:    vroundps $11, %xmm0, %xmm0214; AVX512F-NEXT:    retq215;216; AVX512FP16-LABEL: round_v4f32:217; AVX512FP16:       ## %bb.0:218; AVX512FP16-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]219; AVX512FP16-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm1 | (xmm0 & m32bcst)220; AVX512FP16-NEXT:    vaddps %xmm1, %xmm0, %xmm0221; AVX512FP16-NEXT:    vroundps $11, %xmm0, %xmm0222; AVX512FP16-NEXT:    retq223  %a = call <4 x float> @llvm.round.v4f32(<4 x float> %x)224  ret <4 x float> %a225}226 227define <2 x double> @round_v2f64(<2 x double> %x) {228; SSE2-LABEL: round_v2f64:229; SSE2:       # %bb.0:230; SSE2-NEXT:    subq $40, %rsp231; SSE2-NEXT:    .cfi_def_cfa_offset 48232; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill233; SSE2-NEXT:    callq round@PLT234; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill235; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload236; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]237; SSE2-NEXT:    callq round@PLT238; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload239; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]240; SSE2-NEXT:    movaps %xmm1, %xmm0241; SSE2-NEXT:    addq $40, %rsp242; SSE2-NEXT:    .cfi_def_cfa_offset 8243; SSE2-NEXT:    retq244;245; SSE41-LABEL: round_v2f64:246; SSE41:       # %bb.0:247; SSE41-NEXT:    movapd {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0]248; SSE41-NEXT:    andpd %xmm0, %xmm1249; SSE41-NEXT:    orpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1250; SSE41-NEXT:    addpd %xmm0, %xmm1251; SSE41-NEXT:    roundpd $11, %xmm1, %xmm0252; SSE41-NEXT:    retq253;254; AVX1-LABEL: round_v2f64:255; AVX1:       # %bb.0:256; AVX1-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1257; AVX1-NEXT:    vorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1258; AVX1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0259; AVX1-NEXT:    vroundpd $11, %xmm0, %xmm0260; AVX1-NEXT:    retq261;262; AVX512F-LABEL: round_v2f64:263; AVX512F:       # %bb.0:264; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.9999999999999994E-1,4.9999999999999994E-1]265; AVX512F-NEXT:    vpternlogq {{.*#+}} xmm1 = xmm1 | (xmm0 & m64bcst)266; AVX512F-NEXT:    vaddpd %xmm1, %xmm0, %xmm0267; AVX512F-NEXT:    vroundpd $11, %xmm0, %xmm0268; AVX512F-NEXT:    retq269;270; AVX512FP16-LABEL: round_v2f64:271; AVX512FP16:       ## %bb.0:272; AVX512FP16-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.9999999999999994E-1,4.9999999999999994E-1]273; AVX512FP16-NEXT:    vpternlogq {{.*#+}} xmm1 = xmm1 | (xmm0 & m64bcst)274; AVX512FP16-NEXT:    vaddpd %xmm1, %xmm0, %xmm0275; AVX512FP16-NEXT:    vroundpd $11, %xmm0, %xmm0276; AVX512FP16-NEXT:    retq277  %a = call <2 x double> @llvm.round.v2f64(<2 x double> %x)278  ret <2 x double> %a279}280 281define <8 x float> @round_v8f32(<8 x float> %x) {282; SSE2-LABEL: round_v8f32:283; SSE2:       # %bb.0:284; SSE2-NEXT:    subq $72, %rsp285; SSE2-NEXT:    .cfi_def_cfa_offset 80286; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill287; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill288; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]289; SSE2-NEXT:    callq roundf@PLT290; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill291; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload292; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]293; SSE2-NEXT:    callq roundf@PLT294; SSE2-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload295; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]296; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill297; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload298; SSE2-NEXT:    callq roundf@PLT299; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill300; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload301; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]302; SSE2-NEXT:    callq roundf@PLT303; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload304; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]305; SSE2-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload306; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]307; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill308; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload309; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]310; SSE2-NEXT:    callq roundf@PLT311; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill312; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload313; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]314; SSE2-NEXT:    callq roundf@PLT315; SSE2-NEXT:    unpcklps (%rsp), %xmm0 # 16-byte Folded Reload316; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]317; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill318; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload319; SSE2-NEXT:    callq roundf@PLT320; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill321; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload322; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]323; SSE2-NEXT:    callq roundf@PLT324; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload325; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]326; SSE2-NEXT:    unpcklpd (%rsp), %xmm1 # 16-byte Folded Reload327; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]328; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload329; SSE2-NEXT:    addq $72, %rsp330; SSE2-NEXT:    .cfi_def_cfa_offset 8331; SSE2-NEXT:    retq332;333; SSE41-LABEL: round_v8f32:334; SSE41:       # %bb.0:335; SSE41-NEXT:    movaps {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]336; SSE41-NEXT:    movaps %xmm0, %xmm3337; SSE41-NEXT:    andps %xmm2, %xmm3338; SSE41-NEXT:    movaps {{.*#+}} xmm4 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]339; SSE41-NEXT:    orps %xmm4, %xmm3340; SSE41-NEXT:    addps %xmm0, %xmm3341; SSE41-NEXT:    roundps $11, %xmm3, %xmm0342; SSE41-NEXT:    andps %xmm1, %xmm2343; SSE41-NEXT:    orps %xmm4, %xmm2344; SSE41-NEXT:    addps %xmm1, %xmm2345; SSE41-NEXT:    roundps $11, %xmm2, %xmm1346; SSE41-NEXT:    retq347;348; AVX1-LABEL: round_v8f32:349; AVX1:       # %bb.0:350; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1351; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1352; AVX1-NEXT:    vaddps %ymm1, %ymm0, %ymm0353; AVX1-NEXT:    vroundps $11, %ymm0, %ymm0354; AVX1-NEXT:    retq355;356; AVX512F-LABEL: round_v8f32:357; AVX512F:       # %bb.0:358; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]359; AVX512F-NEXT:    vpternlogd {{.*#+}} ymm1 = ymm1 | (ymm0 & m32bcst)360; AVX512F-NEXT:    vaddps %ymm1, %ymm0, %ymm0361; AVX512F-NEXT:    vroundps $11, %ymm0, %ymm0362; AVX512F-NEXT:    retq363;364; AVX512FP16-LABEL: round_v8f32:365; AVX512FP16:       ## %bb.0:366; AVX512FP16-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]367; AVX512FP16-NEXT:    vpternlogd {{.*#+}} ymm1 = ymm1 | (ymm0 & m32bcst)368; AVX512FP16-NEXT:    vaddps %ymm1, %ymm0, %ymm0369; AVX512FP16-NEXT:    vroundps $11, %ymm0, %ymm0370; AVX512FP16-NEXT:    retq371  %a = call <8 x float> @llvm.round.v8f32(<8 x float> %x)372  ret <8 x float> %a373}374 375define <4 x double> @round_v4f64(<4 x double> %x) {376; SSE2-LABEL: round_v4f64:377; SSE2:       # %bb.0:378; SSE2-NEXT:    subq $56, %rsp379; SSE2-NEXT:    .cfi_def_cfa_offset 64380; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill381; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill382; SSE2-NEXT:    callq round@PLT383; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill384; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload385; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]386; SSE2-NEXT:    callq round@PLT387; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload388; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]389; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill390; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload391; SSE2-NEXT:    callq round@PLT392; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill393; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload394; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]395; SSE2-NEXT:    callq round@PLT396; SSE2-NEXT:    movaps (%rsp), %xmm1 # 16-byte Reload397; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]398; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload399; SSE2-NEXT:    addq $56, %rsp400; SSE2-NEXT:    .cfi_def_cfa_offset 8401; SSE2-NEXT:    retq402;403; SSE41-LABEL: round_v4f64:404; SSE41:       # %bb.0:405; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]406; SSE41-NEXT:    movapd %xmm0, %xmm3407; SSE41-NEXT:    andpd %xmm2, %xmm3408; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [4.9999999999999994E-1,4.9999999999999994E-1]409; SSE41-NEXT:    orpd %xmm4, %xmm3410; SSE41-NEXT:    addpd %xmm0, %xmm3411; SSE41-NEXT:    roundpd $11, %xmm3, %xmm0412; SSE41-NEXT:    andpd %xmm1, %xmm2413; SSE41-NEXT:    orpd %xmm4, %xmm2414; SSE41-NEXT:    addpd %xmm1, %xmm2415; SSE41-NEXT:    roundpd $11, %xmm2, %xmm1416; SSE41-NEXT:    retq417;418; AVX1-LABEL: round_v4f64:419; AVX1:       # %bb.0:420; AVX1-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1421; AVX1-NEXT:    vorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1422; AVX1-NEXT:    vaddpd %ymm1, %ymm0, %ymm0423; AVX1-NEXT:    vroundpd $11, %ymm0, %ymm0424; AVX1-NEXT:    retq425;426; AVX512F-LABEL: round_v4f64:427; AVX512F:       # %bb.0:428; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1]429; AVX512F-NEXT:    vpternlogq {{.*#+}} ymm1 = ymm1 | (ymm0 & m64bcst)430; AVX512F-NEXT:    vaddpd %ymm1, %ymm0, %ymm0431; AVX512F-NEXT:    vroundpd $11, %ymm0, %ymm0432; AVX512F-NEXT:    retq433;434; AVX512FP16-LABEL: round_v4f64:435; AVX512FP16:       ## %bb.0:436; AVX512FP16-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1]437; AVX512FP16-NEXT:    vpternlogq {{.*#+}} ymm1 = ymm1 | (ymm0 & m64bcst)438; AVX512FP16-NEXT:    vaddpd %ymm1, %ymm0, %ymm0439; AVX512FP16-NEXT:    vroundpd $11, %ymm0, %ymm0440; AVX512FP16-NEXT:    retq441  %a = call <4 x double> @llvm.round.v4f64(<4 x double> %x)442  ret <4 x double> %a443}444 445define <16 x float> @round_v16f32(<16 x float> %x) {446; SSE2-LABEL: round_v16f32:447; SSE2:       # %bb.0:448; SSE2-NEXT:    subq $104, %rsp449; SSE2-NEXT:    .cfi_def_cfa_offset 112450; SSE2-NEXT:    movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill451; SSE2-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill452; SSE2-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill453; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill454; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]455; SSE2-NEXT:    callq roundf@PLT456; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill457; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload458; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]459; SSE2-NEXT:    callq roundf@PLT460; SSE2-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload461; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]462; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill463; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload464; SSE2-NEXT:    callq roundf@PLT465; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill466; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload467; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]468; SSE2-NEXT:    callq roundf@PLT469; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload470; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]471; SSE2-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload472; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]473; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill474; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload475; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]476; SSE2-NEXT:    callq roundf@PLT477; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill478; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload479; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]480; SSE2-NEXT:    callq roundf@PLT481; SSE2-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload482; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]483; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill484; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload485; SSE2-NEXT:    callq roundf@PLT486; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill487; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload488; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]489; SSE2-NEXT:    callq roundf@PLT490; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload491; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]492; SSE2-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload493; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]494; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill495; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload496; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]497; SSE2-NEXT:    callq roundf@PLT498; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill499; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload500; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]501; SSE2-NEXT:    callq roundf@PLT502; SSE2-NEXT:    unpcklps (%rsp), %xmm0 # 16-byte Folded Reload503; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]504; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill505; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload506; SSE2-NEXT:    callq roundf@PLT507; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill508; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload509; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]510; SSE2-NEXT:    callq roundf@PLT511; SSE2-NEXT:    movaps (%rsp), %xmm1 # 16-byte Reload512; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]513; SSE2-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload514; SSE2-NEXT:    # xmm1 = xmm1[0],mem[0]515; SSE2-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill516; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload517; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]518; SSE2-NEXT:    callq roundf@PLT519; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill520; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload521; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]522; SSE2-NEXT:    callq roundf@PLT523; SSE2-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload524; SSE2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]525; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill526; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload527; SSE2-NEXT:    callq roundf@PLT528; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill529; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload530; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]531; SSE2-NEXT:    callq roundf@PLT532; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload533; SSE2-NEXT:    unpcklps {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]534; SSE2-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Folded Reload535; SSE2-NEXT:    # xmm3 = xmm3[0],mem[0]536; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload537; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload538; SSE2-NEXT:    movaps (%rsp), %xmm2 # 16-byte Reload539; SSE2-NEXT:    addq $104, %rsp540; SSE2-NEXT:    .cfi_def_cfa_offset 8541; SSE2-NEXT:    retq542;543; SSE41-LABEL: round_v16f32:544; SSE41:       # %bb.0:545; SSE41-NEXT:    movaps {{.*#+}} xmm4 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]546; SSE41-NEXT:    movaps %xmm0, %xmm5547; SSE41-NEXT:    andps %xmm4, %xmm5548; SSE41-NEXT:    movaps {{.*#+}} xmm6 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]549; SSE41-NEXT:    orps %xmm6, %xmm5550; SSE41-NEXT:    addps %xmm0, %xmm5551; SSE41-NEXT:    roundps $11, %xmm5, %xmm0552; SSE41-NEXT:    movaps %xmm1, %xmm5553; SSE41-NEXT:    andps %xmm4, %xmm5554; SSE41-NEXT:    orps %xmm6, %xmm5555; SSE41-NEXT:    addps %xmm1, %xmm5556; SSE41-NEXT:    roundps $11, %xmm5, %xmm1557; SSE41-NEXT:    movaps %xmm2, %xmm5558; SSE41-NEXT:    andps %xmm4, %xmm5559; SSE41-NEXT:    orps %xmm6, %xmm5560; SSE41-NEXT:    addps %xmm2, %xmm5561; SSE41-NEXT:    roundps $11, %xmm5, %xmm2562; SSE41-NEXT:    andps %xmm3, %xmm4563; SSE41-NEXT:    orps %xmm6, %xmm4564; SSE41-NEXT:    addps %xmm3, %xmm4565; SSE41-NEXT:    roundps $11, %xmm4, %xmm3566; SSE41-NEXT:    retq567;568; AVX1-LABEL: round_v16f32:569; AVX1:       # %bb.0:570; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]571; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm3572; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm4 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]573; AVX1-NEXT:    vorps %ymm4, %ymm3, %ymm3574; AVX1-NEXT:    vaddps %ymm3, %ymm0, %ymm0575; AVX1-NEXT:    vroundps $11, %ymm0, %ymm0576; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm2577; AVX1-NEXT:    vorps %ymm4, %ymm2, %ymm2578; AVX1-NEXT:    vaddps %ymm2, %ymm1, %ymm1579; AVX1-NEXT:    vroundps $11, %ymm1, %ymm1580; AVX1-NEXT:    retq581;582; AVX512F-LABEL: round_v16f32:583; AVX512F:       # %bb.0:584; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]585; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm1 = zmm1 | (zmm0 & m32bcst)586; AVX512F-NEXT:    vaddps %zmm1, %zmm0, %zmm0587; AVX512F-NEXT:    vrndscaleps $11, %zmm0, %zmm0588; AVX512F-NEXT:    retq589;590; AVX512FP16-LABEL: round_v16f32:591; AVX512FP16:       ## %bb.0:592; AVX512FP16-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1,4.9999997E-1]593; AVX512FP16-NEXT:    vpternlogd {{.*#+}} zmm1 = zmm1 | (zmm0 & m32bcst)594; AVX512FP16-NEXT:    vaddps %zmm1, %zmm0, %zmm0595; AVX512FP16-NEXT:    vrndscaleps $11, %zmm0, %zmm0596; AVX512FP16-NEXT:    retq597  %a = call <16 x float> @llvm.round.v16f32(<16 x float> %x)598  ret <16 x float> %a599}600 601define <8 x double> @round_v8f64(<8 x double> %x) {602; SSE2-LABEL: round_v8f64:603; SSE2:       # %bb.0:604; SSE2-NEXT:    subq $88, %rsp605; SSE2-NEXT:    .cfi_def_cfa_offset 96606; SSE2-NEXT:    movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill607; SSE2-NEXT:    movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill608; SSE2-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill609; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill610; SSE2-NEXT:    callq round@PLT611; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill612; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload613; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]614; SSE2-NEXT:    callq round@PLT615; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload616; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]617; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill618; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload619; SSE2-NEXT:    callq round@PLT620; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill621; SSE2-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload622; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]623; SSE2-NEXT:    callq round@PLT624; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload625; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]626; SSE2-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill627; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload628; SSE2-NEXT:    callq round@PLT629; SSE2-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill630; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload631; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]632; SSE2-NEXT:    callq round@PLT633; SSE2-NEXT:    movaps (%rsp), %xmm1 # 16-byte Reload634; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]635; SSE2-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill636; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload637; SSE2-NEXT:    callq round@PLT638; SSE2-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill639; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload640; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]641; SSE2-NEXT:    callq round@PLT642; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload643; SSE2-NEXT:    movlhps {{.*#+}} xmm3 = xmm3[0],xmm0[0]644; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload645; SSE2-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload646; SSE2-NEXT:    movaps (%rsp), %xmm2 # 16-byte Reload647; SSE2-NEXT:    addq $88, %rsp648; SSE2-NEXT:    .cfi_def_cfa_offset 8649; SSE2-NEXT:    retq650;651; SSE41-LABEL: round_v8f64:652; SSE41:       # %bb.0:653; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [-0.0E+0,-0.0E+0]654; SSE41-NEXT:    movapd %xmm0, %xmm5655; SSE41-NEXT:    andpd %xmm4, %xmm5656; SSE41-NEXT:    movapd {{.*#+}} xmm6 = [4.9999999999999994E-1,4.9999999999999994E-1]657; SSE41-NEXT:    orpd %xmm6, %xmm5658; SSE41-NEXT:    addpd %xmm0, %xmm5659; SSE41-NEXT:    roundpd $11, %xmm5, %xmm0660; SSE41-NEXT:    movapd %xmm1, %xmm5661; SSE41-NEXT:    andpd %xmm4, %xmm5662; SSE41-NEXT:    orpd %xmm6, %xmm5663; SSE41-NEXT:    addpd %xmm1, %xmm5664; SSE41-NEXT:    roundpd $11, %xmm5, %xmm1665; SSE41-NEXT:    movapd %xmm2, %xmm5666; SSE41-NEXT:    andpd %xmm4, %xmm5667; SSE41-NEXT:    orpd %xmm6, %xmm5668; SSE41-NEXT:    addpd %xmm2, %xmm5669; SSE41-NEXT:    roundpd $11, %xmm5, %xmm2670; SSE41-NEXT:    andpd %xmm3, %xmm4671; SSE41-NEXT:    orpd %xmm6, %xmm4672; SSE41-NEXT:    addpd %xmm3, %xmm4673; SSE41-NEXT:    roundpd $11, %xmm4, %xmm3674; SSE41-NEXT:    retq675;676; AVX1-LABEL: round_v8f64:677; AVX1:       # %bb.0:678; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]679; AVX1-NEXT:    vandpd %ymm2, %ymm0, %ymm3680; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1]681; AVX1-NEXT:    vorpd %ymm4, %ymm3, %ymm3682; AVX1-NEXT:    vaddpd %ymm3, %ymm0, %ymm0683; AVX1-NEXT:    vroundpd $11, %ymm0, %ymm0684; AVX1-NEXT:    vandpd %ymm2, %ymm1, %ymm2685; AVX1-NEXT:    vorpd %ymm4, %ymm2, %ymm2686; AVX1-NEXT:    vaddpd %ymm2, %ymm1, %ymm1687; AVX1-NEXT:    vroundpd $11, %ymm1, %ymm1688; AVX1-NEXT:    retq689;690; AVX512F-LABEL: round_v8f64:691; AVX512F:       # %bb.0:692; AVX512F-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1]693; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm1 = zmm1 | (zmm0 & m64bcst)694; AVX512F-NEXT:    vaddpd %zmm1, %zmm0, %zmm0695; AVX512F-NEXT:    vrndscalepd $11, %zmm0, %zmm0696; AVX512F-NEXT:    retq697;698; AVX512FP16-LABEL: round_v8f64:699; AVX512FP16:       ## %bb.0:700; AVX512FP16-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1,4.9999999999999994E-1]701; AVX512FP16-NEXT:    vpternlogq {{.*#+}} zmm1 = zmm1 | (zmm0 & m64bcst)702; AVX512FP16-NEXT:    vaddpd %zmm1, %zmm0, %zmm0703; AVX512FP16-NEXT:    vrndscalepd $11, %zmm0, %zmm0704; AVX512FP16-NEXT:    retq705  %a = call <8 x double> @llvm.round.v8f64(<8 x double> %x)706  ret <8 x double> %a707}708 709declare half @llvm.round.f16(half)710declare float @llvm.round.f32(float)711declare double @llvm.round.f64(double)712declare <4 x float> @llvm.round.v4f32(<4 x float>)713declare <2 x double> @llvm.round.v2f64(<2 x double>)714declare <8 x float> @llvm.round.v8f32(<8 x float>)715declare <4 x double> @llvm.round.v4f64(<4 x double>)716declare <16 x float> @llvm.round.v16f32(<16 x float>)717declare <8 x double> @llvm.round.v8f64(<8 x double>)718