brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.9 KiB · 3c2ef21 Raw
318 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X644 5define double @f1(double %a) {6; X86-LABEL: f1:7; X86:       # %bb.0:8; X86-NEXT:    pushl %ebp9; X86-NEXT:    .cfi_def_cfa_offset 810; X86-NEXT:    .cfi_offset %ebp, -811; X86-NEXT:    movl %esp, %ebp12; X86-NEXT:    .cfi_def_cfa_register %ebp13; X86-NEXT:    andl $-8, %esp14; X86-NEXT:    subl $8, %esp15; X86-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero16; X86-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm017; X86-NEXT:    movsd %xmm0, (%esp)18; X86-NEXT:    fldl (%esp)19; X86-NEXT:    movl %ebp, %esp20; X86-NEXT:    popl %ebp21; X86-NEXT:    .cfi_def_cfa %esp, 422; X86-NEXT:    retl23;24; X64-LABEL: f1:25; X64:       # %bb.0:26; X64-NEXT:    mulsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm027; X64-NEXT:    retq28  %1 = fadd fast double %a, %a29  %2 = fadd fast double %a, %a30  %3 = fadd fast double %1, %231  ret double %332}33 34define double @f2(double %a) {35; X86-LABEL: f2:36; X86:       # %bb.0:37; X86-NEXT:    pushl %ebp38; X86-NEXT:    .cfi_def_cfa_offset 839; X86-NEXT:    .cfi_offset %ebp, -840; X86-NEXT:    movl %esp, %ebp41; X86-NEXT:    .cfi_def_cfa_register %ebp42; X86-NEXT:    andl $-8, %esp43; X86-NEXT:    subl $8, %esp44; X86-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero45; X86-NEXT:    addsd %xmm0, %xmm046; X86-NEXT:    movapd %xmm0, %xmm147; X86-NEXT:    #ARITH_FENCE48; X86-NEXT:    addsd %xmm0, %xmm149; X86-NEXT:    movsd %xmm1, (%esp)50; X86-NEXT:    fldl (%esp)51; X86-NEXT:    movl %ebp, %esp52; X86-NEXT:    popl %ebp53; X86-NEXT:    .cfi_def_cfa %esp, 454; X86-NEXT:    retl55;56; X64-LABEL: f2:57; X64:       # %bb.0:58; X64-NEXT:    addsd %xmm0, %xmm059; X64-NEXT:    movapd %xmm0, %xmm160; X64-NEXT:    #ARITH_FENCE61; X64-NEXT:    addsd %xmm1, %xmm062; X64-NEXT:    retq63  %1 = fadd fast double %a, %a64  %t = call double @llvm.arithmetic.fence.f64(double %1)65  %2 = fadd fast double %a, %a66  %3 = fadd fast double %t, %267  ret double %368}69 70define <2 x float> @f3(<2 x float> %a) {71; X86-LABEL: f3:72; X86:       # %bb.0:73; X86-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm074; X86-NEXT:    retl75;76; X64-LABEL: f3:77; X64:       # %bb.0:78; X64-NEXT:    mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm079; X64-NEXT:    retq80  %1 = fadd fast <2 x float> %a, %a81  %2 = fadd fast <2 x float> %a, %a82  %3 = fadd fast <2 x float> %1, %283  ret <2 x float> %384}85 86define <2 x float> @f4(<2 x float> %a) {87; X86-LABEL: f4:88; X86:       # %bb.0:89; X86-NEXT:    addps %xmm0, %xmm090; X86-NEXT:    movaps %xmm0, %xmm191; X86-NEXT:    #ARITH_FENCE92; X86-NEXT:    addps %xmm1, %xmm093; X86-NEXT:    retl94;95; X64-LABEL: f4:96; X64:       # %bb.0:97; X64-NEXT:    addps %xmm0, %xmm098; X64-NEXT:    movaps %xmm0, %xmm199; X64-NEXT:    #ARITH_FENCE100; X64-NEXT:    addps %xmm1, %xmm0101; X64-NEXT:    retq102  %1 = fadd fast <2 x float> %a, %a103  %t = call <2 x float> @llvm.arithmetic.fence.v2f32(<2 x float> %1)104  %2 = fadd fast <2 x float> %a, %a105  %3 = fadd fast <2 x float> %t, %2106  ret <2 x float> %3107}108 109define <8 x float> @f5(<8 x float> %a) {110; X86-LABEL: f5:111; X86:       # %bb.0:112; X86-NEXT:    movaps {{.*#+}} xmm2 = [4.0E+0,4.0E+0,4.0E+0,4.0E+0]113; X86-NEXT:    mulps %xmm2, %xmm0114; X86-NEXT:    mulps %xmm2, %xmm1115; X86-NEXT:    retl116;117; X64-LABEL: f5:118; X64:       # %bb.0:119; X64-NEXT:    movaps {{.*#+}} xmm2 = [4.0E+0,4.0E+0,4.0E+0,4.0E+0]120; X64-NEXT:    mulps %xmm2, %xmm0121; X64-NEXT:    mulps %xmm2, %xmm1122; X64-NEXT:    retq123  %1 = fadd fast <8 x float> %a, %a124  %2 = fadd fast <8 x float> %a, %a125  %3 = fadd fast <8 x float> %1, %2126  ret <8 x float> %3127}128 129define <8 x float> @f6(<8 x float> %a) {130; X86-LABEL: f6:131; X86:       # %bb.0:132; X86-NEXT:    addps %xmm0, %xmm0133; X86-NEXT:    addps %xmm1, %xmm1134; X86-NEXT:    movaps %xmm1, %xmm2135; X86-NEXT:    #ARITH_FENCE136; X86-NEXT:    movaps %xmm0, %xmm3137; X86-NEXT:    #ARITH_FENCE138; X86-NEXT:    addps %xmm3, %xmm0139; X86-NEXT:    addps %xmm2, %xmm1140; X86-NEXT:    retl141;142; X64-LABEL: f6:143; X64:       # %bb.0:144; X64-NEXT:    addps %xmm0, %xmm0145; X64-NEXT:    addps %xmm1, %xmm1146; X64-NEXT:    movaps %xmm1, %xmm2147; X64-NEXT:    #ARITH_FENCE148; X64-NEXT:    movaps %xmm0, %xmm3149; X64-NEXT:    #ARITH_FENCE150; X64-NEXT:    addps %xmm3, %xmm0151; X64-NEXT:    addps %xmm2, %xmm1152; X64-NEXT:    retq153  %1 = fadd fast <8 x float> %a, %a154  %t = call <8 x float> @llvm.arithmetic.fence.v8f32(<8 x float> %1)155  %2 = fadd fast <8 x float> %a, %a156  %3 = fadd fast <8 x float> %t, %2157  ret <8 x float> %3158}159 160define half @f7(half %a) nounwind {161; X86-LABEL: f7:162; X86:       # %bb.0:163; X86-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0164; X86-NEXT:    #ARITH_FENCE165; X86-NEXT:    retl166;167; X64-LABEL: f7:168; X64:       # %bb.0:169; X64-NEXT:    #ARITH_FENCE170; X64-NEXT:    retq171  %b = call half @llvm.arithmetic.fence.f16(half %a)172  ret half %b173}174 175define bfloat @f8(bfloat %a) nounwind {176; X86-LABEL: f8:177; X86:       # %bb.0:178; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax179; X86-NEXT:    #ARITH_FENCE180; X86-NEXT:    pinsrw $0, %eax, %xmm0181; X86-NEXT:    retl182;183; X64-LABEL: f8:184; X64:       # %bb.0:185; X64-NEXT:    pextrw $0, %xmm0, %eax186; X64-NEXT:    #ARITH_FENCE187; X64-NEXT:    pinsrw $0, %eax, %xmm0188; X64-NEXT:    retq189  %b = call bfloat @llvm.arithmetic.fence.bf16(bfloat %a)190  ret bfloat %b191}192 193define <2 x half> @f9(<2 x half> %a) nounwind {194; X86-LABEL: f9:195; X86:       # %bb.0:196; X86-NEXT:    movdqa %xmm0, %xmm1197; X86-NEXT:    psrld $16, %xmm1198; X86-NEXT:    #ARITH_FENCE199; X86-NEXT:    #ARITH_FENCE200; X86-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]201; X86-NEXT:    retl202;203; X64-LABEL: f9:204; X64:       # %bb.0:205; X64-NEXT:    movdqa %xmm0, %xmm1206; X64-NEXT:    psrld $16, %xmm1207; X64-NEXT:    #ARITH_FENCE208; X64-NEXT:    #ARITH_FENCE209; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]210; X64-NEXT:    retq211  %b = call <2 x half> @llvm.arithmetic.fence.v2f16(<2 x half> %a)212  ret <2 x half> %b213}214 215define <3 x bfloat> @f10(<3 x bfloat> %a) nounwind {216; X86-LABEL: f10:217; X86:       # %bb.0:218; X86-NEXT:    pextrw $0, %xmm0, %eax219; X86-NEXT:    movdqa %xmm0, %xmm1220; X86-NEXT:    psrld $16, %xmm1221; X86-NEXT:    pextrw $0, %xmm1, %ecx222; X86-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]223; X86-NEXT:    pextrw $0, %xmm0, %edx224; X86-NEXT:    #ARITH_FENCE225; X86-NEXT:    #ARITH_FENCE226; X86-NEXT:    #ARITH_FENCE227; X86-NEXT:    pinsrw $0, %eax, %xmm0228; X86-NEXT:    pinsrw $0, %ecx, %xmm1229; X86-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]230; X86-NEXT:    pinsrw $0, %edx, %xmm1231; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]232; X86-NEXT:    retl233;234; X64-LABEL: f10:235; X64:       # %bb.0:236; X64-NEXT:    pextrw $0, %xmm0, %eax237; X64-NEXT:    movdqa %xmm0, %xmm1238; X64-NEXT:    psrld $16, %xmm1239; X64-NEXT:    pextrw $0, %xmm1, %ecx240; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]241; X64-NEXT:    pextrw $0, %xmm0, %edx242; X64-NEXT:    #ARITH_FENCE243; X64-NEXT:    #ARITH_FENCE244; X64-NEXT:    #ARITH_FENCE245; X64-NEXT:    pinsrw $0, %eax, %xmm0246; X64-NEXT:    pinsrw $0, %ecx, %xmm1247; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]248; X64-NEXT:    pinsrw $0, %edx, %xmm1249; X64-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]250; X64-NEXT:    retq251  %b = call <3 x bfloat> @llvm.arithmetic.fence.v3bf16(<3 x bfloat> %a)252  ret <3 x bfloat> %b253}254 255define <4 x bfloat> @f11(<4 x bfloat> %a) nounwind {256; X86-LABEL: f11:257; X86:       # %bb.0:258; X86-NEXT:    pushl %esi259; X86-NEXT:    movdqa %xmm0, %xmm1260; X86-NEXT:    psrlq $48, %xmm1261; X86-NEXT:    pextrw $0, %xmm1, %eax262; X86-NEXT:    movdqa %xmm0, %xmm1263; X86-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]264; X86-NEXT:    pextrw $0, %xmm1, %edx265; X86-NEXT:    pextrw $0, %xmm0, %ecx266; X86-NEXT:    psrld $16, %xmm0267; X86-NEXT:    pextrw $0, %xmm0, %esi268; X86-NEXT:    #ARITH_FENCE269; X86-NEXT:    #ARITH_FENCE270; X86-NEXT:    #ARITH_FENCE271; X86-NEXT:    #ARITH_FENCE272; X86-NEXT:    pinsrw $0, %eax, %xmm0273; X86-NEXT:    pinsrw $0, %edx, %xmm1274; X86-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]275; X86-NEXT:    pinsrw $0, %ecx, %xmm0276; X86-NEXT:    pinsrw $0, %esi, %xmm2277; X86-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]278; X86-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]279; X86-NEXT:    popl %esi280; X86-NEXT:    retl281;282; X64-LABEL: f11:283; X64:       # %bb.0:284; X64-NEXT:    movdqa %xmm0, %xmm1285; X64-NEXT:    psrlq $48, %xmm1286; X64-NEXT:    pextrw $0, %xmm1, %eax287; X64-NEXT:    movdqa %xmm0, %xmm1288; X64-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]289; X64-NEXT:    pextrw $0, %xmm1, %ecx290; X64-NEXT:    pextrw $0, %xmm0, %edx291; X64-NEXT:    psrld $16, %xmm0292; X64-NEXT:    pextrw $0, %xmm0, %esi293; X64-NEXT:    #ARITH_FENCE294; X64-NEXT:    #ARITH_FENCE295; X64-NEXT:    #ARITH_FENCE296; X64-NEXT:    #ARITH_FENCE297; X64-NEXT:    pinsrw $0, %eax, %xmm0298; X64-NEXT:    pinsrw $0, %ecx, %xmm1299; X64-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]300; X64-NEXT:    pinsrw $0, %edx, %xmm0301; X64-NEXT:    pinsrw $0, %esi, %xmm2302; X64-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]303; X64-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]304; X64-NEXT:    retq305  %b = call <4 x bfloat> @llvm.arithmetic.fence.v4bf16(<4 x bfloat> %a)306  ret <4 x bfloat> %b307}308 309declare half @llvm.arithmetic.fence.f16(half)310declare bfloat @llvm.arithmetic.fence.bf16(bfloat)311declare <2 x half> @llvm.arithmetic.fence.v2f16(<2 x half>)312declare <3 x bfloat> @llvm.arithmetic.fence.v3bf16(<3 x bfloat>)313declare <4 x bfloat> @llvm.arithmetic.fence.v4bf16(<4 x bfloat>)314declare float @llvm.arithmetic.fence.f32(float)315declare double @llvm.arithmetic.fence.f64(double)316declare <2 x float> @llvm.arithmetic.fence.v2f32(<2 x float>)317declare <8 x float> @llvm.arithmetic.fence.v8f32(<8 x float>)318