brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.4 KiB · 67213b3 Raw
1003 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --default-march x86_64-unknown-linux-gnu --version 52; RUN: llc -mtriple=i686-- < %s | FileCheck %s -check-prefixes=X873; RUN: llc -mattr=+sse2 -mtriple=i686-- < %s | FileCheck %s -check-prefixes=X86-SSE4; RUN: llc -mattr=+avx -mtriple=i686-- < %s | FileCheck %s -check-prefixes=X86-AVX5; RUN: llc -mattr=+sse2 -mtriple=x86_64 < %s | FileCheck %s -check-prefixes=SSE6; RUN: llc -mattr=+avx -mtriple=x86_64 < %s | FileCheck %s -check-prefixes=AVX,AVX17; RUN: llc -mattr=+avx2 -mtriple=x86_64 < %s | FileCheck %s -check-prefixes=AVX,AVX28; RUN: llc -mattr=+avx512f -mtriple=x86_64 < %s | FileCheck %s -check-prefixes=AVX,AVX512F9 10define float @canon_fp32_varargsf32(float %a) {11; X87-LABEL: canon_fp32_varargsf32:12; X87:       # %bb.0:13; X87-NEXT:    fld114; X87-NEXT:    fmuls {{[0-9]+}}(%esp)15; X87-NEXT:    retl16;17; X86-SSE-LABEL: canon_fp32_varargsf32:18; X86-SSE:       # %bb.0:19; X86-SSE-NEXT:    pushl %eax20; X86-SSE-NEXT:    .cfi_def_cfa_offset 821; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero22; X86-SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm023; X86-SSE-NEXT:    movss %xmm0, (%esp)24; X86-SSE-NEXT:    flds (%esp)25; X86-SSE-NEXT:    popl %eax26; X86-SSE-NEXT:    .cfi_def_cfa_offset 427; X86-SSE-NEXT:    retl28;29; X86-AVX-LABEL: canon_fp32_varargsf32:30; X86-AVX:       # %bb.0:31; X86-AVX-NEXT:    pushl %eax32; X86-AVX-NEXT:    .cfi_def_cfa_offset 833; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero34; X86-AVX-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm035; X86-AVX-NEXT:    vmovss %xmm0, (%esp)36; X86-AVX-NEXT:    flds (%esp)37; X86-AVX-NEXT:    popl %eax38; X86-AVX-NEXT:    .cfi_def_cfa_offset 439; X86-AVX-NEXT:    retl40;41; SSE-LABEL: canon_fp32_varargsf32:42; SSE:       # %bb.0:43; SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm044; SSE-NEXT:    retq45;46; AVX-LABEL: canon_fp32_varargsf32:47; AVX:       # %bb.0:48; AVX-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm049; AVX-NEXT:    retq50  %canonicalized = call float @llvm.canonicalize.f32(float %a)51  ret float %canonicalized52}53 54define x86_fp80 @canon_fp32_varargsf80(x86_fp80 %a) {55; X87-LABEL: canon_fp32_varargsf80:56; X87:       # %bb.0:57; X87-NEXT:    fldt {{[0-9]+}}(%esp)58; X87-NEXT:    fld159; X87-NEXT:    fmulp %st, %st(1)60; X87-NEXT:    retl61;62; X86-SSE-LABEL: canon_fp32_varargsf80:63; X86-SSE:       # %bb.0:64; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)65; X86-SSE-NEXT:    fld166; X86-SSE-NEXT:    fmulp %st, %st(1)67; X86-SSE-NEXT:    retl68;69; X86-AVX-LABEL: canon_fp32_varargsf80:70; X86-AVX:       # %bb.0:71; X86-AVX-NEXT:    fldt {{[0-9]+}}(%esp)72; X86-AVX-NEXT:    fld173; X86-AVX-NEXT:    fmulp %st, %st(1)74; X86-AVX-NEXT:    retl75;76; SSE-LABEL: canon_fp32_varargsf80:77; SSE:       # %bb.0:78; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)79; SSE-NEXT:    fld180; SSE-NEXT:    fmulp %st, %st(1)81; SSE-NEXT:    retq82;83; AVX-LABEL: canon_fp32_varargsf80:84; AVX:       # %bb.0:85; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)86; AVX-NEXT:    fld187; AVX-NEXT:    fmulp %st, %st(1)88; AVX-NEXT:    retq89  %canonicalized = call x86_fp80 @llvm.canonicalize.f80(x86_fp80 %a)90  ret x86_fp80 %canonicalized91}92 93define x86_fp80 @complex_canonicalize_fmul_x86_fp80(x86_fp80 %a, x86_fp80 %b) {94; X87-LABEL: complex_canonicalize_fmul_x86_fp80:95; X87:       # %bb.0: # %entry96; X87-NEXT:    fldt {{[0-9]+}}(%esp)97; X87-NEXT:    fldt {{[0-9]+}}(%esp)98; X87-NEXT:    fsub %st(1), %st99; X87-NEXT:    fld %st(0)100; X87-NEXT:    fadd %st(2), %st101; X87-NEXT:    fsubp %st, %st(1)102; X87-NEXT:    fld1103; X87-NEXT:    fmulp %st, %st(1)104; X87-NEXT:    fsubp %st, %st(1)105; X87-NEXT:    retl106;107; X86-SSE-LABEL: complex_canonicalize_fmul_x86_fp80:108; X86-SSE:       # %bb.0: # %entry109; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)110; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)111; X86-SSE-NEXT:    fsub %st(1), %st112; X86-SSE-NEXT:    fld %st(0)113; X86-SSE-NEXT:    fadd %st(2), %st114; X86-SSE-NEXT:    fsubp %st, %st(1)115; X86-SSE-NEXT:    fld1116; X86-SSE-NEXT:    fmulp %st, %st(1)117; X86-SSE-NEXT:    fsubp %st, %st(1)118; X86-SSE-NEXT:    retl119;120; X86-AVX-LABEL: complex_canonicalize_fmul_x86_fp80:121; X86-AVX:       # %bb.0: # %entry122; X86-AVX-NEXT:    fldt {{[0-9]+}}(%esp)123; X86-AVX-NEXT:    fldt {{[0-9]+}}(%esp)124; X86-AVX-NEXT:    fsub %st(1), %st125; X86-AVX-NEXT:    fld %st(0)126; X86-AVX-NEXT:    fadd %st(2), %st127; X86-AVX-NEXT:    fsubp %st, %st(1)128; X86-AVX-NEXT:    fld1129; X86-AVX-NEXT:    fmulp %st, %st(1)130; X86-AVX-NEXT:    fsubp %st, %st(1)131; X86-AVX-NEXT:    retl132;133; SSE-LABEL: complex_canonicalize_fmul_x86_fp80:134; SSE:       # %bb.0: # %entry135; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)136; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)137; SSE-NEXT:    fsub %st(1), %st138; SSE-NEXT:    fld %st(0)139; SSE-NEXT:    fadd %st(2), %st140; SSE-NEXT:    fsubp %st, %st(1)141; SSE-NEXT:    fld1142; SSE-NEXT:    fmulp %st, %st(1)143; SSE-NEXT:    fsubp %st, %st(1)144; SSE-NEXT:    retq145;146; AVX-LABEL: complex_canonicalize_fmul_x86_fp80:147; AVX:       # %bb.0: # %entry148; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)149; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)150; AVX-NEXT:    fsub %st(1), %st151; AVX-NEXT:    fld %st(0)152; AVX-NEXT:    fadd %st(2), %st153; AVX-NEXT:    fsubp %st, %st(1)154; AVX-NEXT:    fld1155; AVX-NEXT:    fmulp %st, %st(1)156; AVX-NEXT:    fsubp %st, %st(1)157; AVX-NEXT:    retq158entry:159  %mul1 = fsub x86_fp80 %a, %b160  %add = fadd x86_fp80 %mul1, %b161  %mul2 = fsub x86_fp80 %add, %mul1162  %canonicalized = call x86_fp80 @llvm.canonicalize.f80(x86_fp80 %mul2)163  %result = fsub x86_fp80 %canonicalized, %b164  ret x86_fp80 %result165}166 167define double @canonicalize_fp64(double %a, double %b) unnamed_addr #0 {168; X87-LABEL: canonicalize_fp64:169; X87:       # %bb.0: # %start170; X87-NEXT:    fldl {{[0-9]+}}(%esp)171; X87-NEXT:    fldl {{[0-9]+}}(%esp)172; X87-NEXT:    fucom %st(1)173; X87-NEXT:    fnstsw %ax174; X87-NEXT:    # kill: def $ah killed $ah killed $ax175; X87-NEXT:    sahf176; X87-NEXT:    fxch %st(1)177; X87-NEXT:    fucom %st(0)178; X87-NEXT:    fnstsw %ax179; X87-NEXT:    fld %st(1)180; X87-NEXT:    ja .LBB3_2181; X87-NEXT:  # %bb.1: # %start182; X87-NEXT:    fstp %st(0)183; X87-NEXT:    fldz184; X87-NEXT:    fxch %st(1)185; X87-NEXT:  .LBB3_2: # %start186; X87-NEXT:    fstp %st(1)187; X87-NEXT:    # kill: def $ah killed $ah killed $ax188; X87-NEXT:    sahf189; X87-NEXT:    jp .LBB3_4190; X87-NEXT:  # %bb.3: # %start191; X87-NEXT:    fstp %st(1)192; X87-NEXT:    fldz193; X87-NEXT:  .LBB3_4: # %start194; X87-NEXT:    fstp %st(0)195; X87-NEXT:    fld1196; X87-NEXT:    fmulp %st, %st(1)197; X87-NEXT:    retl198;199; X86-SSE-LABEL: canonicalize_fp64:200; X86-SSE:       # %bb.0: # %start201; X86-SSE-NEXT:    pushl %ebp202; X86-SSE-NEXT:    .cfi_def_cfa_offset 8203; X86-SSE-NEXT:    .cfi_offset %ebp, -8204; X86-SSE-NEXT:    movl %esp, %ebp205; X86-SSE-NEXT:    .cfi_def_cfa_register %ebp206; X86-SSE-NEXT:    andl $-8, %esp207; X86-SSE-NEXT:    subl $8, %esp208; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero209; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero210; X86-SSE-NEXT:    movapd %xmm0, %xmm2211; X86-SSE-NEXT:    cmpunordsd %xmm0, %xmm2212; X86-SSE-NEXT:    movapd %xmm2, %xmm3213; X86-SSE-NEXT:    andpd %xmm1, %xmm3214; X86-SSE-NEXT:    maxsd %xmm0, %xmm1215; X86-SSE-NEXT:    andnpd %xmm1, %xmm2216; X86-SSE-NEXT:    orpd %xmm3, %xmm2217; X86-SSE-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2218; X86-SSE-NEXT:    movsd %xmm2, (%esp)219; X86-SSE-NEXT:    fldl (%esp)220; X86-SSE-NEXT:    movl %ebp, %esp221; X86-SSE-NEXT:    popl %ebp222; X86-SSE-NEXT:    .cfi_def_cfa %esp, 4223; X86-SSE-NEXT:    retl224;225; X86-AVX-LABEL: canonicalize_fp64:226; X86-AVX:       # %bb.0: # %start227; X86-AVX-NEXT:    pushl %ebp228; X86-AVX-NEXT:    .cfi_def_cfa_offset 8229; X86-AVX-NEXT:    .cfi_offset %ebp, -8230; X86-AVX-NEXT:    movl %esp, %ebp231; X86-AVX-NEXT:    .cfi_def_cfa_register %ebp232; X86-AVX-NEXT:    andl $-8, %esp233; X86-AVX-NEXT:    subl $8, %esp234; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero235; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero236; X86-AVX-NEXT:    vmaxsd %xmm0, %xmm1, %xmm2237; X86-AVX-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm0238; X86-AVX-NEXT:    vblendvpd %xmm0, %xmm1, %xmm2, %xmm0239; X86-AVX-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0240; X86-AVX-NEXT:    vmovsd %xmm0, (%esp)241; X86-AVX-NEXT:    fldl (%esp)242; X86-AVX-NEXT:    movl %ebp, %esp243; X86-AVX-NEXT:    popl %ebp244; X86-AVX-NEXT:    .cfi_def_cfa %esp, 4245; X86-AVX-NEXT:    retl246;247; SSE-LABEL: canonicalize_fp64:248; SSE:       # %bb.0: # %start249; SSE-NEXT:    movapd %xmm0, %xmm2250; SSE-NEXT:    cmpunordsd %xmm0, %xmm2251; SSE-NEXT:    movapd %xmm2, %xmm3252; SSE-NEXT:    andpd %xmm1, %xmm3253; SSE-NEXT:    maxsd %xmm0, %xmm1254; SSE-NEXT:    andnpd %xmm1, %xmm2255; SSE-NEXT:    orpd %xmm3, %xmm2256; SSE-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2257; SSE-NEXT:    movapd %xmm2, %xmm0258; SSE-NEXT:    retq259;260; AVX1-LABEL: canonicalize_fp64:261; AVX1:       # %bb.0: # %start262; AVX1-NEXT:    vmaxsd %xmm0, %xmm1, %xmm2263; AVX1-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm0264; AVX1-NEXT:    vblendvpd %xmm0, %xmm1, %xmm2, %xmm0265; AVX1-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0266; AVX1-NEXT:    retq267;268; AVX2-LABEL: canonicalize_fp64:269; AVX2:       # %bb.0: # %start270; AVX2-NEXT:    vmaxsd %xmm0, %xmm1, %xmm2271; AVX2-NEXT:    vcmpunordsd %xmm0, %xmm0, %xmm0272; AVX2-NEXT:    vblendvpd %xmm0, %xmm1, %xmm2, %xmm0273; AVX2-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0274; AVX2-NEXT:    retq275;276; AVX512F-LABEL: canonicalize_fp64:277; AVX512F:       # %bb.0: # %start278; AVX512F-NEXT:    vmaxsd %xmm0, %xmm1, %xmm2279; AVX512F-NEXT:    vcmpunordsd %xmm0, %xmm0, %k1280; AVX512F-NEXT:    vmovsd %xmm1, %xmm2, %xmm2 {%k1}281; AVX512F-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm0282; AVX512F-NEXT:    retq283start:284  %c = fcmp olt double %a, %b285  %d = fcmp uno double %a, 0.000000e+00286  %or.cond.i.i = or i1 %d, %c287  %e = select i1 %or.cond.i.i, double %b, double %a288  %f = tail call double @llvm.canonicalize.f64(double %e) #2289  ret double %f290}291 292define float @canonicalize_fp32(float %aa, float %bb) unnamed_addr #0 {293; X87-LABEL: canonicalize_fp32:294; X87:       # %bb.0: # %start295; X87-NEXT:    flds {{[0-9]+}}(%esp)296; X87-NEXT:    flds {{[0-9]+}}(%esp)297; X87-NEXT:    fucom %st(1)298; X87-NEXT:    fnstsw %ax299; X87-NEXT:    # kill: def $ah killed $ah killed $ax300; X87-NEXT:    sahf301; X87-NEXT:    fxch %st(1)302; X87-NEXT:    fucom %st(0)303; X87-NEXT:    fnstsw %ax304; X87-NEXT:    fld %st(1)305; X87-NEXT:    ja .LBB4_2306; X87-NEXT:  # %bb.1: # %start307; X87-NEXT:    fstp %st(0)308; X87-NEXT:    fldz309; X87-NEXT:    fxch %st(1)310; X87-NEXT:  .LBB4_2: # %start311; X87-NEXT:    fstp %st(1)312; X87-NEXT:    # kill: def $ah killed $ah killed $ax313; X87-NEXT:    sahf314; X87-NEXT:    jp .LBB4_4315; X87-NEXT:  # %bb.3: # %start316; X87-NEXT:    fstp %st(1)317; X87-NEXT:    fldz318; X87-NEXT:  .LBB4_4: # %start319; X87-NEXT:    fstp %st(0)320; X87-NEXT:    fld1321; X87-NEXT:    fmulp %st, %st(1)322; X87-NEXT:    retl323;324; X86-SSE-LABEL: canonicalize_fp32:325; X86-SSE:       # %bb.0: # %start326; X86-SSE-NEXT:    pushl %eax327; X86-SSE-NEXT:    .cfi_def_cfa_offset 8328; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero329; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero330; X86-SSE-NEXT:    movaps %xmm0, %xmm2331; X86-SSE-NEXT:    cmpunordss %xmm0, %xmm2332; X86-SSE-NEXT:    movaps %xmm2, %xmm3333; X86-SSE-NEXT:    andps %xmm1, %xmm3334; X86-SSE-NEXT:    maxss %xmm0, %xmm1335; X86-SSE-NEXT:    andnps %xmm1, %xmm2336; X86-SSE-NEXT:    orps %xmm3, %xmm2337; X86-SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2338; X86-SSE-NEXT:    movss %xmm2, (%esp)339; X86-SSE-NEXT:    flds (%esp)340; X86-SSE-NEXT:    popl %eax341; X86-SSE-NEXT:    .cfi_def_cfa_offset 4342; X86-SSE-NEXT:    retl343;344; X86-AVX-LABEL: canonicalize_fp32:345; X86-AVX:       # %bb.0: # %start346; X86-AVX-NEXT:    pushl %eax347; X86-AVX-NEXT:    .cfi_def_cfa_offset 8348; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero349; X86-AVX-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero350; X86-AVX-NEXT:    vmaxss %xmm0, %xmm1, %xmm2351; X86-AVX-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm0352; X86-AVX-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0353; X86-AVX-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0354; X86-AVX-NEXT:    vmovss %xmm0, (%esp)355; X86-AVX-NEXT:    flds (%esp)356; X86-AVX-NEXT:    popl %eax357; X86-AVX-NEXT:    .cfi_def_cfa_offset 4358; X86-AVX-NEXT:    retl359;360; SSE-LABEL: canonicalize_fp32:361; SSE:       # %bb.0: # %start362; SSE-NEXT:    movaps %xmm0, %xmm2363; SSE-NEXT:    cmpunordss %xmm0, %xmm2364; SSE-NEXT:    movaps %xmm2, %xmm3365; SSE-NEXT:    andps %xmm1, %xmm3366; SSE-NEXT:    maxss %xmm0, %xmm1367; SSE-NEXT:    andnps %xmm1, %xmm2368; SSE-NEXT:    orps %xmm3, %xmm2369; SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2370; SSE-NEXT:    movaps %xmm2, %xmm0371; SSE-NEXT:    retq372;373; AVX1-LABEL: canonicalize_fp32:374; AVX1:       # %bb.0: # %start375; AVX1-NEXT:    vmaxss %xmm0, %xmm1, %xmm2376; AVX1-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm0377; AVX1-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0378; AVX1-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0379; AVX1-NEXT:    retq380;381; AVX2-LABEL: canonicalize_fp32:382; AVX2:       # %bb.0: # %start383; AVX2-NEXT:    vmaxss %xmm0, %xmm1, %xmm2384; AVX2-NEXT:    vcmpunordss %xmm0, %xmm0, %xmm0385; AVX2-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0386; AVX2-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0387; AVX2-NEXT:    retq388;389; AVX512F-LABEL: canonicalize_fp32:390; AVX512F:       # %bb.0: # %start391; AVX512F-NEXT:    vmaxss %xmm0, %xmm1, %xmm2392; AVX512F-NEXT:    vcmpunordss %xmm0, %xmm0, %k1393; AVX512F-NEXT:    vmovss %xmm1, %xmm2, %xmm2 {%k1}394; AVX512F-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm0395; AVX512F-NEXT:    retq396start:397  %cc = fcmp olt float %aa, %bb398  %dd = fcmp uno float %aa, 0.000000e+00399  %or.cond.i.i.x = or i1 %dd, %cc400  %ee = select i1 %or.cond.i.i.x, float %bb, float %aa401  %ff = tail call float @llvm.canonicalize.f32(float %ee) #2402  ret float %ff403}404 405define void @v_test_canonicalize_var_f32(float addrspace(1)* %out) #1 {406; X87-LABEL: v_test_canonicalize_var_f32:407; X87:       # %bb.0:408; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax409; X87-NEXT:    fld1410; X87-NEXT:    fmuls (%eax)411; X87-NEXT:    fstps (%eax)412; X87-NEXT:    retl413;414; X86-SSE-LABEL: v_test_canonicalize_var_f32:415; X86-SSE:       # %bb.0:416; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax417; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero418; X86-SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0419; X86-SSE-NEXT:    movss %xmm0, (%eax)420; X86-SSE-NEXT:    retl421;422; X86-AVX-LABEL: v_test_canonicalize_var_f32:423; X86-AVX:       # %bb.0:424; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax425; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero426; X86-AVX-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0427; X86-AVX-NEXT:    vmovss %xmm0, (%eax)428; X86-AVX-NEXT:    retl429;430; SSE-LABEL: v_test_canonicalize_var_f32:431; SSE:       # %bb.0:432; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero433; SSE-NEXT:    mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0434; SSE-NEXT:    movss %xmm0, (%rdi)435; SSE-NEXT:    retq436;437; AVX-LABEL: v_test_canonicalize_var_f32:438; AVX:       # %bb.0:439; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero440; AVX-NEXT:    vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0441; AVX-NEXT:    vmovss %xmm0, (%rdi)442; AVX-NEXT:    retq443  %val = load float, float addrspace(1)* %out444  %canonicalized = call float @llvm.canonicalize.f32(float %val)445  store float %canonicalized, float addrspace(1)* %out446  ret void447}448 449define void @v_test_canonicalize_x86_fp80(x86_fp80 addrspace(1)* %out) #1 {450; X87-LABEL: v_test_canonicalize_x86_fp80:451; X87:       # %bb.0:452; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax453; X87-NEXT:    fldt (%eax)454; X87-NEXT:    fld1455; X87-NEXT:    fmulp %st, %st(1)456; X87-NEXT:    fstpt (%eax)457; X87-NEXT:    retl458;459; X86-SSE-LABEL: v_test_canonicalize_x86_fp80:460; X86-SSE:       # %bb.0:461; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax462; X86-SSE-NEXT:    fldt (%eax)463; X86-SSE-NEXT:    fld1464; X86-SSE-NEXT:    fmulp %st, %st(1)465; X86-SSE-NEXT:    fstpt (%eax)466; X86-SSE-NEXT:    retl467;468; X86-AVX-LABEL: v_test_canonicalize_x86_fp80:469; X86-AVX:       # %bb.0:470; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax471; X86-AVX-NEXT:    fldt (%eax)472; X86-AVX-NEXT:    fld1473; X86-AVX-NEXT:    fmulp %st, %st(1)474; X86-AVX-NEXT:    fstpt (%eax)475; X86-AVX-NEXT:    retl476;477; SSE-LABEL: v_test_canonicalize_x86_fp80:478; SSE:       # %bb.0:479; SSE-NEXT:    fldt (%rdi)480; SSE-NEXT:    fld1481; SSE-NEXT:    fmulp %st, %st(1)482; SSE-NEXT:    fstpt (%rdi)483; SSE-NEXT:    retq484;485; AVX-LABEL: v_test_canonicalize_x86_fp80:486; AVX:       # %bb.0:487; AVX-NEXT:    fldt (%rdi)488; AVX-NEXT:    fld1489; AVX-NEXT:    fmulp %st, %st(1)490; AVX-NEXT:    fstpt (%rdi)491; AVX-NEXT:    retq492  %val = load x86_fp80, x86_fp80 addrspace(1)* %out493  %canonicalized = call x86_fp80 @llvm.canonicalize.f80(x86_fp80 %val)494  store x86_fp80 %canonicalized, x86_fp80 addrspace(1)* %out495  ret void496}497 498define void @v_test_canonicalize_var_f64(double addrspace(1)* %out) #1 {499; X87-LABEL: v_test_canonicalize_var_f64:500; X87:       # %bb.0:501; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax502; X87-NEXT:    fld1503; X87-NEXT:    fmull (%eax)504; X87-NEXT:    fstpl (%eax)505; X87-NEXT:    retl506;507; X86-SSE-LABEL: v_test_canonicalize_var_f64:508; X86-SSE:       # %bb.0:509; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax510; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero511; X86-SSE-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0512; X86-SSE-NEXT:    movsd %xmm0, (%eax)513; X86-SSE-NEXT:    retl514;515; X86-AVX-LABEL: v_test_canonicalize_var_f64:516; X86-AVX:       # %bb.0:517; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax518; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero519; X86-AVX-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0520; X86-AVX-NEXT:    vmovsd %xmm0, (%eax)521; X86-AVX-NEXT:    retl522;523; SSE-LABEL: v_test_canonicalize_var_f64:524; SSE:       # %bb.0:525; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero526; SSE-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0527; SSE-NEXT:    movsd %xmm0, (%rdi)528; SSE-NEXT:    retq529;530; AVX-LABEL: v_test_canonicalize_var_f64:531; AVX:       # %bb.0:532; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero533; AVX-NEXT:    vmulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0534; AVX-NEXT:    vmovsd %xmm0, (%rdi)535; AVX-NEXT:    retq536  %val = load double, double addrspace(1)* %out537  %canonicalized = call double @llvm.canonicalize.f64(double %val)538  store double %canonicalized, double addrspace(1)* %out539  ret void540}541 542define void @canonicalize_undef(double addrspace(1)* %out) {543; X87-LABEL: canonicalize_undef:544; X87:       # %bb.0:545; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax546; X87-NEXT:    movl $2146959360, 4(%eax) # imm = 0x7FF80000547; X87-NEXT:    movl $0, (%eax)548; X87-NEXT:    retl549;550; X86-SSE-LABEL: canonicalize_undef:551; X86-SSE:       # %bb.0:552; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax553; X86-SSE-NEXT:    movl $2146959360, 4(%eax) # imm = 0x7FF80000554; X86-SSE-NEXT:    movl $0, (%eax)555; X86-SSE-NEXT:    retl556;557; X86-AVX-LABEL: canonicalize_undef:558; X86-AVX:       # %bb.0:559; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax560; X86-AVX-NEXT:    movl $2146959360, 4(%eax) # imm = 0x7FF80000561; X86-AVX-NEXT:    movl $0, (%eax)562; X86-AVX-NEXT:    retl563;564; SSE-LABEL: canonicalize_undef:565; SSE:       # %bb.0:566; SSE-NEXT:    movabsq $9221120237041090560, %rax # imm = 0x7FF8000000000000567; SSE-NEXT:    movq %rax, (%rdi)568; SSE-NEXT:    retq569;570; AVX-LABEL: canonicalize_undef:571; AVX:       # %bb.0:572; AVX-NEXT:    movabsq $9221120237041090560, %rax # imm = 0x7FF8000000000000573; AVX-NEXT:    movq %rax, (%rdi)574; AVX-NEXT:    retq575  %canonicalized = call double @llvm.canonicalize.f64(double undef)576  store double %canonicalized, double addrspace(1)* %out577  ret void578}579 580define <4 x float> @canon_fp32_varargsv4f32(<4 x float> %a) {581; X87-LABEL: canon_fp32_varargsv4f32:582; X87:       # %bb.0:583; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax584; X87-NEXT:    fld1585; X87-NEXT:    fld %st(0)586; X87-NEXT:    fmuls {{[0-9]+}}(%esp)587; X87-NEXT:    fld %st(1)588; X87-NEXT:    fmuls {{[0-9]+}}(%esp)589; X87-NEXT:    fld %st(2)590; X87-NEXT:    fmuls {{[0-9]+}}(%esp)591; X87-NEXT:    fxch %st(3)592; X87-NEXT:    fmuls {{[0-9]+}}(%esp)593; X87-NEXT:    fstps 12(%eax)594; X87-NEXT:    fxch %st(2)595; X87-NEXT:    fstps 8(%eax)596; X87-NEXT:    fxch %st(1)597; X87-NEXT:    fstps 4(%eax)598; X87-NEXT:    fstps (%eax)599; X87-NEXT:    retl $4600;601; X86-SSE-LABEL: canon_fp32_varargsv4f32:602; X86-SSE:       # %bb.0:603; X86-SSE-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0604; X86-SSE-NEXT:    retl605;606; X86-AVX-LABEL: canon_fp32_varargsv4f32:607; X86-AVX:       # %bb.0:608; X86-AVX-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0609; X86-AVX-NEXT:    retl610;611; SSE-LABEL: canon_fp32_varargsv4f32:612; SSE:       # %bb.0:613; SSE-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0614; SSE-NEXT:    retq615;616; AVX1-LABEL: canon_fp32_varargsv4f32:617; AVX1:       # %bb.0:618; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0619; AVX1-NEXT:    retq620;621; AVX2-LABEL: canon_fp32_varargsv4f32:622; AVX2:       # %bb.0:623; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]624; AVX2-NEXT:    vmulps %xmm1, %xmm0, %xmm0625; AVX2-NEXT:    retq626;627; AVX512F-LABEL: canon_fp32_varargsv4f32:628; AVX512F:       # %bb.0:629; AVX512F-NEXT:    vbroadcastss {{.*#+}} xmm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]630; AVX512F-NEXT:    vmulps %xmm1, %xmm0, %xmm0631; AVX512F-NEXT:    retq632  %canonicalized = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %a)633  ret <4 x float> %canonicalized634}635 636define <4 x double> @canon_fp64_varargsv4f64(<4 x double> %a) {637; X87-LABEL: canon_fp64_varargsv4f64:638; X87:       # %bb.0:639; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax640; X87-NEXT:    fld1641; X87-NEXT:    fld %st(0)642; X87-NEXT:    fmull {{[0-9]+}}(%esp)643; X87-NEXT:    fld %st(1)644; X87-NEXT:    fmull {{[0-9]+}}(%esp)645; X87-NEXT:    fld %st(2)646; X87-NEXT:    fmull {{[0-9]+}}(%esp)647; X87-NEXT:    fxch %st(3)648; X87-NEXT:    fmull {{[0-9]+}}(%esp)649; X87-NEXT:    fstpl 24(%eax)650; X87-NEXT:    fxch %st(2)651; X87-NEXT:    fstpl 16(%eax)652; X87-NEXT:    fxch %st(1)653; X87-NEXT:    fstpl 8(%eax)654; X87-NEXT:    fstpl (%eax)655; X87-NEXT:    retl $4656;657; X86-SSE-LABEL: canon_fp64_varargsv4f64:658; X86-SSE:       # %bb.0:659; X86-SSE-NEXT:    movapd {{.*#+}} xmm2 = [1.0E+0,1.0E+0]660; X86-SSE-NEXT:    mulpd %xmm2, %xmm0661; X86-SSE-NEXT:    mulpd %xmm2, %xmm1662; X86-SSE-NEXT:    retl663;664; X86-AVX-LABEL: canon_fp64_varargsv4f64:665; X86-AVX:       # %bb.0:666; X86-AVX-NEXT:    vmulpd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0667; X86-AVX-NEXT:    retl668;669; SSE-LABEL: canon_fp64_varargsv4f64:670; SSE:       # %bb.0:671; SSE-NEXT:    movapd {{.*#+}} xmm2 = [1.0E+0,1.0E+0]672; SSE-NEXT:    mulpd %xmm2, %xmm0673; SSE-NEXT:    mulpd %xmm2, %xmm1674; SSE-NEXT:    retq675;676; AVX1-LABEL: canon_fp64_varargsv4f64:677; AVX1:       # %bb.0:678; AVX1-NEXT:    vmulpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0679; AVX1-NEXT:    retq680;681; AVX2-LABEL: canon_fp64_varargsv4f64:682; AVX2:       # %bb.0:683; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]684; AVX2-NEXT:    vmulpd %ymm1, %ymm0, %ymm0685; AVX2-NEXT:    retq686;687; AVX512F-LABEL: canon_fp64_varargsv4f64:688; AVX512F:       # %bb.0:689; AVX512F-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]690; AVX512F-NEXT:    vmulpd %ymm1, %ymm0, %ymm0691; AVX512F-NEXT:    retq692  %canonicalized = call <4 x double> @llvm.canonicalize.v4f32(<4 x double> %a)693  ret <4 x double> %canonicalized694}695 696define <2 x x86_fp80> @canon_fp80_varargsv2fp80(<2 x x86_fp80> %a) {697; X87-LABEL: canon_fp80_varargsv2fp80:698; X87:       # %bb.0:699; X87-NEXT:    fldt {{[0-9]+}}(%esp)700; X87-NEXT:    fldt {{[0-9]+}}(%esp)701; X87-NEXT:    fld1702; X87-NEXT:    fmul %st, %st(1)703; X87-NEXT:    fmulp %st, %st(2)704; X87-NEXT:    fxch %st(1)705; X87-NEXT:    retl706;707; X86-SSE-LABEL: canon_fp80_varargsv2fp80:708; X86-SSE:       # %bb.0:709; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)710; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)711; X86-SSE-NEXT:    fld1712; X86-SSE-NEXT:    fmul %st, %st(1)713; X86-SSE-NEXT:    fmulp %st, %st(2)714; X86-SSE-NEXT:    fxch %st(1)715; X86-SSE-NEXT:    retl716;717; X86-AVX-LABEL: canon_fp80_varargsv2fp80:718; X86-AVX:       # %bb.0:719; X86-AVX-NEXT:    fldt {{[0-9]+}}(%esp)720; X86-AVX-NEXT:    fldt {{[0-9]+}}(%esp)721; X86-AVX-NEXT:    fld1722; X86-AVX-NEXT:    fmul %st, %st(1)723; X86-AVX-NEXT:    fmulp %st, %st(2)724; X86-AVX-NEXT:    fxch %st(1)725; X86-AVX-NEXT:    retl726;727; SSE-LABEL: canon_fp80_varargsv2fp80:728; SSE:       # %bb.0:729; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)730; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)731; SSE-NEXT:    fld1732; SSE-NEXT:    fmul %st, %st(1)733; SSE-NEXT:    fmulp %st, %st(2)734; SSE-NEXT:    fxch %st(1)735; SSE-NEXT:    retq736;737; AVX-LABEL: canon_fp80_varargsv2fp80:738; AVX:       # %bb.0:739; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)740; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)741; AVX-NEXT:    fld1742; AVX-NEXT:    fmul %st, %st(1)743; AVX-NEXT:    fmulp %st, %st(2)744; AVX-NEXT:    fxch %st(1)745; AVX-NEXT:    retq746  %canonicalized = call <2 x x86_fp80> @llvm.canonicalize.v2f80(<2 x x86_fp80> %a)747  ret <2 x x86_fp80> %canonicalized748}749 750define void @vec_canonicalize_var_v4f32(<4 x float> addrspace(1)* %out) #1 {751; X87-LABEL: vec_canonicalize_var_v4f32:752; X87:       # %bb.0:753; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax754; X87-NEXT:    fld1755; X87-NEXT:    fld %st(0)756; X87-NEXT:    fmuls (%eax)757; X87-NEXT:    fld %st(1)758; X87-NEXT:    fmuls 4(%eax)759; X87-NEXT:    fld %st(2)760; X87-NEXT:    fmuls 8(%eax)761; X87-NEXT:    fxch %st(3)762; X87-NEXT:    fmuls 12(%eax)763; X87-NEXT:    fstps 12(%eax)764; X87-NEXT:    fxch %st(2)765; X87-NEXT:    fstps 8(%eax)766; X87-NEXT:    fxch %st(1)767; X87-NEXT:    fstps 4(%eax)768; X87-NEXT:    fstps (%eax)769; X87-NEXT:    retl770;771; X86-SSE-LABEL: vec_canonicalize_var_v4f32:772; X86-SSE:       # %bb.0:773; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax774; X86-SSE-NEXT:    movaps (%eax), %xmm0775; X86-SSE-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0776; X86-SSE-NEXT:    movaps %xmm0, (%eax)777; X86-SSE-NEXT:    retl778;779; X86-AVX-LABEL: vec_canonicalize_var_v4f32:780; X86-AVX:       # %bb.0:781; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax782; X86-AVX-NEXT:    vmovaps (%eax), %xmm0783; X86-AVX-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0784; X86-AVX-NEXT:    vmovaps %xmm0, (%eax)785; X86-AVX-NEXT:    retl786;787; SSE-LABEL: vec_canonicalize_var_v4f32:788; SSE:       # %bb.0:789; SSE-NEXT:    movaps (%rdi), %xmm0790; SSE-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0791; SSE-NEXT:    movaps %xmm0, (%rdi)792; SSE-NEXT:    retq793;794; AVX1-LABEL: vec_canonicalize_var_v4f32:795; AVX1:       # %bb.0:796; AVX1-NEXT:    vmovaps (%rdi), %xmm0797; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0798; AVX1-NEXT:    vmovaps %xmm0, (%rdi)799; AVX1-NEXT:    retq800;801; AVX2-LABEL: vec_canonicalize_var_v4f32:802; AVX2:       # %bb.0:803; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]804; AVX2-NEXT:    vmulps (%rdi), %xmm0, %xmm0805; AVX2-NEXT:    vmovaps %xmm0, (%rdi)806; AVX2-NEXT:    retq807;808; AVX512F-LABEL: vec_canonicalize_var_v4f32:809; AVX512F:       # %bb.0:810; AVX512F-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]811; AVX512F-NEXT:    vmulps (%rdi), %xmm0, %xmm0812; AVX512F-NEXT:    vmovaps %xmm0, (%rdi)813; AVX512F-NEXT:    retq814  %val = load <4 x float>, <4 x float> addrspace(1)* %out815  %canonicalized = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %val)816  store <4 x float> %canonicalized, <4 x float> addrspace(1)* %out817  ret void818}819 820define void @vec_canonicalize_var_v4f64(<4 x double> addrspace(1)* %out) #1 {821; X87-LABEL: vec_canonicalize_var_v4f64:822; X87:       # %bb.0:823; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax824; X87-NEXT:    fld1825; X87-NEXT:    fld %st(0)826; X87-NEXT:    fmull (%eax)827; X87-NEXT:    fld %st(1)828; X87-NEXT:    fmull 8(%eax)829; X87-NEXT:    fld %st(2)830; X87-NEXT:    fmull 16(%eax)831; X87-NEXT:    fxch %st(3)832; X87-NEXT:    fmull 24(%eax)833; X87-NEXT:    fstpl 24(%eax)834; X87-NEXT:    fxch %st(2)835; X87-NEXT:    fstpl 16(%eax)836; X87-NEXT:    fxch %st(1)837; X87-NEXT:    fstpl 8(%eax)838; X87-NEXT:    fstpl (%eax)839; X87-NEXT:    retl840;841; X86-SSE-LABEL: vec_canonicalize_var_v4f64:842; X86-SSE:       # %bb.0:843; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax844; X86-SSE-NEXT:    movapd {{.*#+}} xmm0 = [1.0E+0,1.0E+0]845; X86-SSE-NEXT:    movapd 16(%eax), %xmm1846; X86-SSE-NEXT:    mulpd %xmm0, %xmm1847; X86-SSE-NEXT:    mulpd (%eax), %xmm0848; X86-SSE-NEXT:    movapd %xmm0, (%eax)849; X86-SSE-NEXT:    movapd %xmm1, 16(%eax)850; X86-SSE-NEXT:    retl851;852; X86-AVX-LABEL: vec_canonicalize_var_v4f64:853; X86-AVX:       # %bb.0:854; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax855; X86-AVX-NEXT:    vmovapd (%eax), %ymm0856; X86-AVX-NEXT:    vmulpd {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0857; X86-AVX-NEXT:    vmovapd %ymm0, (%eax)858; X86-AVX-NEXT:    vzeroupper859; X86-AVX-NEXT:    retl860;861; SSE-LABEL: vec_canonicalize_var_v4f64:862; SSE:       # %bb.0:863; SSE-NEXT:    movapd {{.*#+}} xmm0 = [1.0E+0,1.0E+0]864; SSE-NEXT:    movapd 16(%rdi), %xmm1865; SSE-NEXT:    mulpd %xmm0, %xmm1866; SSE-NEXT:    mulpd (%rdi), %xmm0867; SSE-NEXT:    movapd %xmm0, (%rdi)868; SSE-NEXT:    movapd %xmm1, 16(%rdi)869; SSE-NEXT:    retq870;871; AVX1-LABEL: vec_canonicalize_var_v4f64:872; AVX1:       # %bb.0:873; AVX1-NEXT:    vmovapd (%rdi), %ymm0874; AVX1-NEXT:    vmulpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0875; AVX1-NEXT:    vmovapd %ymm0, (%rdi)876; AVX1-NEXT:    vzeroupper877; AVX1-NEXT:    retq878;879; AVX2-LABEL: vec_canonicalize_var_v4f64:880; AVX2:       # %bb.0:881; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]882; AVX2-NEXT:    vmulpd (%rdi), %ymm0, %ymm0883; AVX2-NEXT:    vmovapd %ymm0, (%rdi)884; AVX2-NEXT:    vzeroupper885; AVX2-NEXT:    retq886;887; AVX512F-LABEL: vec_canonicalize_var_v4f64:888; AVX512F:       # %bb.0:889; AVX512F-NEXT:    vbroadcastsd {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]890; AVX512F-NEXT:    vmulpd (%rdi), %ymm0, %ymm0891; AVX512F-NEXT:    vmovapd %ymm0, (%rdi)892; AVX512F-NEXT:    vzeroupper893; AVX512F-NEXT:    retq894  %val = load <4 x double>, <4 x double> addrspace(1)* %out895  %canonicalized = call <4 x double> @llvm.canonicalize.v4f32(<4 x double> %val)896  store <4 x double> %canonicalized, <4 x double> addrspace(1)* %out897  ret void898}899 900define void @vec_canonicalize_x86_fp80(<4 x x86_fp80> addrspace(1)* %out) #1 {901; X87-LABEL: vec_canonicalize_x86_fp80:902; X87:       # %bb.0:903; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax904; X87-NEXT:    fldt 30(%eax)905; X87-NEXT:    fldt 20(%eax)906; X87-NEXT:    fldt 10(%eax)907; X87-NEXT:    fldt (%eax)908; X87-NEXT:    fld1909; X87-NEXT:    fmul %st, %st(1)910; X87-NEXT:    fmul %st, %st(2)911; X87-NEXT:    fmul %st, %st(3)912; X87-NEXT:    fmulp %st, %st(4)913; X87-NEXT:    fxch %st(3)914; X87-NEXT:    fstpt 30(%eax)915; X87-NEXT:    fxch %st(1)916; X87-NEXT:    fstpt 20(%eax)917; X87-NEXT:    fstpt 10(%eax)918; X87-NEXT:    fstpt (%eax)919; X87-NEXT:    retl920;921; X86-SSE-LABEL: vec_canonicalize_x86_fp80:922; X86-SSE:       # %bb.0:923; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax924; X86-SSE-NEXT:    fldt 30(%eax)925; X86-SSE-NEXT:    fldt 20(%eax)926; X86-SSE-NEXT:    fldt 10(%eax)927; X86-SSE-NEXT:    fldt (%eax)928; X86-SSE-NEXT:    fld1929; X86-SSE-NEXT:    fmul %st, %st(1)930; X86-SSE-NEXT:    fmul %st, %st(2)931; X86-SSE-NEXT:    fmul %st, %st(3)932; X86-SSE-NEXT:    fmulp %st, %st(4)933; X86-SSE-NEXT:    fxch %st(3)934; X86-SSE-NEXT:    fstpt 30(%eax)935; X86-SSE-NEXT:    fxch %st(1)936; X86-SSE-NEXT:    fstpt 20(%eax)937; X86-SSE-NEXT:    fstpt 10(%eax)938; X86-SSE-NEXT:    fstpt (%eax)939; X86-SSE-NEXT:    retl940;941; X86-AVX-LABEL: vec_canonicalize_x86_fp80:942; X86-AVX:       # %bb.0:943; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax944; X86-AVX-NEXT:    fldt 30(%eax)945; X86-AVX-NEXT:    fldt 20(%eax)946; X86-AVX-NEXT:    fldt 10(%eax)947; X86-AVX-NEXT:    fldt (%eax)948; X86-AVX-NEXT:    fld1949; X86-AVX-NEXT:    fmul %st, %st(1)950; X86-AVX-NEXT:    fmul %st, %st(2)951; X86-AVX-NEXT:    fmul %st, %st(3)952; X86-AVX-NEXT:    fmulp %st, %st(4)953; X86-AVX-NEXT:    fxch %st(3)954; X86-AVX-NEXT:    fstpt 30(%eax)955; X86-AVX-NEXT:    fxch %st(1)956; X86-AVX-NEXT:    fstpt 20(%eax)957; X86-AVX-NEXT:    fstpt 10(%eax)958; X86-AVX-NEXT:    fstpt (%eax)959; X86-AVX-NEXT:    retl960;961; SSE-LABEL: vec_canonicalize_x86_fp80:962; SSE:       # %bb.0:963; SSE-NEXT:    fldt 30(%rdi)964; SSE-NEXT:    fldt 20(%rdi)965; SSE-NEXT:    fldt 10(%rdi)966; SSE-NEXT:    fldt (%rdi)967; SSE-NEXT:    fld1968; SSE-NEXT:    fmul %st, %st(1)969; SSE-NEXT:    fmul %st, %st(2)970; SSE-NEXT:    fmul %st, %st(3)971; SSE-NEXT:    fmulp %st, %st(4)972; SSE-NEXT:    fxch %st(3)973; SSE-NEXT:    fstpt 30(%rdi)974; SSE-NEXT:    fxch %st(1)975; SSE-NEXT:    fstpt 20(%rdi)976; SSE-NEXT:    fstpt 10(%rdi)977; SSE-NEXT:    fstpt (%rdi)978; SSE-NEXT:    retq979;980; AVX-LABEL: vec_canonicalize_x86_fp80:981; AVX:       # %bb.0:982; AVX-NEXT:    fldt 30(%rdi)983; AVX-NEXT:    fldt 20(%rdi)984; AVX-NEXT:    fldt 10(%rdi)985; AVX-NEXT:    fldt (%rdi)986; AVX-NEXT:    fld1987; AVX-NEXT:    fmul %st, %st(1)988; AVX-NEXT:    fmul %st, %st(2)989; AVX-NEXT:    fmul %st, %st(3)990; AVX-NEXT:    fmulp %st, %st(4)991; AVX-NEXT:    fxch %st(3)992; AVX-NEXT:    fstpt 30(%rdi)993; AVX-NEXT:    fxch %st(1)994; AVX-NEXT:    fstpt 20(%rdi)995; AVX-NEXT:    fstpt 10(%rdi)996; AVX-NEXT:    fstpt (%rdi)997; AVX-NEXT:    retq998  %val = load <4 x x86_fp80>, <4 x x86_fp80> addrspace(1)* %out999  %canonicalized = call <4 x x86_fp80> @llvm.canonicalize.f80(<4 x x86_fp80> %val)1000  store <4 x x86_fp80> %canonicalized, <4 x x86_fp80> addrspace(1)* %out1001  ret void1002}1003