170 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 4define <8 x half> @cvt_and_clamp2(<8 x float>) nounwind {5; CHECK-LABEL: cvt_and_clamp2:6; CHECK: # %bb.0:7; CHECK-NEXT: subq $104, %rsp8; CHECK-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill9; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill10; CHECK-NEXT: movaps %xmm1, %xmm011; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3],xmm1[3,3]12; CHECK-NEXT: callq __truncsfhf2@PLT13; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill14; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload15; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]16; CHECK-NEXT: callq __truncsfhf2@PLT17; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill18; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload19; CHECK-NEXT: callq __truncsfhf2@PLT20; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill21; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload22; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]23; CHECK-NEXT: callq __truncsfhf2@PLT24; CHECK-NEXT: movss %xmm0, (%rsp) # 4-byte Spill25; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload26; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]27; CHECK-NEXT: callq __truncsfhf2@PLT28; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill29; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload30; CHECK-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]31; CHECK-NEXT: callq __truncsfhf2@PLT32; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill33; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload34; CHECK-NEXT: callq __truncsfhf2@PLT35; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill36; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload37; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]38; CHECK-NEXT: callq __truncsfhf2@PLT39; CHECK-NEXT: callq __extendhfsf2@PLT40; CHECK-NEXT: xorps %xmm1, %xmm141; CHECK-NEXT: callq fmaxf@PLT42; CHECK-NEXT: callq __truncsfhf2@PLT43; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill44; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload45; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero46; CHECK-NEXT: callq __extendhfsf2@PLT47; CHECK-NEXT: xorps %xmm1, %xmm148; CHECK-NEXT: callq fmaxf@PLT49; CHECK-NEXT: callq __truncsfhf2@PLT50; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill51; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload52; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero53; CHECK-NEXT: callq __extendhfsf2@PLT54; CHECK-NEXT: xorps %xmm1, %xmm155; CHECK-NEXT: callq fmaxf@PLT56; CHECK-NEXT: callq __truncsfhf2@PLT57; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill58; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload59; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero60; CHECK-NEXT: callq __extendhfsf2@PLT61; CHECK-NEXT: xorps %xmm1, %xmm162; CHECK-NEXT: callq fmaxf@PLT63; CHECK-NEXT: callq __truncsfhf2@PLT64; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill65; CHECK-NEXT: movss (%rsp), %xmm0 # 4-byte Reload66; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero67; CHECK-NEXT: callq __extendhfsf2@PLT68; CHECK-NEXT: xorps %xmm1, %xmm169; CHECK-NEXT: callq fmaxf@PLT70; CHECK-NEXT: callq __truncsfhf2@PLT71; CHECK-NEXT: movss %xmm0, (%rsp) # 4-byte Spill72; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload73; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero74; CHECK-NEXT: callq __extendhfsf2@PLT75; CHECK-NEXT: xorps %xmm1, %xmm176; CHECK-NEXT: callq fmaxf@PLT77; CHECK-NEXT: callq __truncsfhf2@PLT78; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill79; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload80; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero81; CHECK-NEXT: callq __extendhfsf2@PLT82; CHECK-NEXT: xorps %xmm1, %xmm183; CHECK-NEXT: callq fmaxf@PLT84; CHECK-NEXT: callq __truncsfhf2@PLT85; CHECK-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill86; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload87; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero88; CHECK-NEXT: callq __extendhfsf2@PLT89; CHECK-NEXT: xorps %xmm1, %xmm190; CHECK-NEXT: callq fmaxf@PLT91; CHECK-NEXT: callq __truncsfhf2@PLT92; CHECK-NEXT: callq __extendhfsf2@PLT93; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]94; CHECK-NEXT: callq fminf@PLT95; CHECK-NEXT: callq __truncsfhf2@PLT96; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill97; CHECK-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload98; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero99; CHECK-NEXT: callq __extendhfsf2@PLT100; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]101; CHECK-NEXT: callq fminf@PLT102; CHECK-NEXT: callq __truncsfhf2@PLT103; CHECK-NEXT: punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload104; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]105; CHECK-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill106; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload107; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero108; CHECK-NEXT: callq __extendhfsf2@PLT109; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]110; CHECK-NEXT: callq fminf@PLT111; CHECK-NEXT: callq __truncsfhf2@PLT112; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill113; CHECK-NEXT: movd (%rsp), %xmm0 # 4-byte Folded Reload114; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero115; CHECK-NEXT: callq __extendhfsf2@PLT116; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]117; CHECK-NEXT: callq fminf@PLT118; CHECK-NEXT: callq __truncsfhf2@PLT119; CHECK-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload120; CHECK-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]121; CHECK-NEXT: punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload122; CHECK-NEXT: # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]123; CHECK-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill124; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload125; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero126; CHECK-NEXT: callq __extendhfsf2@PLT127; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]128; CHECK-NEXT: callq fminf@PLT129; CHECK-NEXT: callq __truncsfhf2@PLT130; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill131; CHECK-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload132; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero133; CHECK-NEXT: callq __extendhfsf2@PLT134; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]135; CHECK-NEXT: callq fminf@PLT136; CHECK-NEXT: callq __truncsfhf2@PLT137; CHECK-NEXT: punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload138; CHECK-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]139; CHECK-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill140; CHECK-NEXT: movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload141; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero142; CHECK-NEXT: callq __extendhfsf2@PLT143; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]144; CHECK-NEXT: callq fminf@PLT145; CHECK-NEXT: callq __truncsfhf2@PLT146; CHECK-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill147; CHECK-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload148; CHECK-NEXT: # xmm0 = mem[0],zero,zero,zero149; CHECK-NEXT: callq __extendhfsf2@PLT150; CHECK-NEXT: movss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]151; CHECK-NEXT: callq fminf@PLT152; CHECK-NEXT: callq __truncsfhf2@PLT153; CHECK-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload154; CHECK-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]155; CHECK-NEXT: punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload156; CHECK-NEXT: # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]157; CHECK-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload158; CHECK-NEXT: # xmm1 = xmm1[0],mem[0]159; CHECK-NEXT: movdqa %xmm1, %xmm0160; CHECK-NEXT: addq $104, %rsp161; CHECK-NEXT: retq162 %2 = fptrunc <8 x float> %0 to <8 x half>163 %3 = call <8 x half> @llvm.maxnum.v8f16(<8 x half> zeroinitializer, <8 x half> %2)164 %4 = call <8 x half> @llvm.minnum.v8f16(<8 x half> %3, <8 x half> <half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0, half 1.0>)165 ret <8 x half> %4166}167 168declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)169declare <8 x half> @llvm.minnum.v8f16(<8 x half>, <8 x half>)170