1830 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=avx | FileCheck %s3 4; PR38527 - https://bugs.llvm.org/show_bug.cgi?id=385275 6; Use an AVX target to show that the potential problem7; is not limited to 128-bit types/registers. Ie, widening8; up to 256-bits may also result in bogus libcalls.9 10; Use fsin as the representative test for various data types.11 12declare <1 x float> @llvm.sin.v1f32(<1 x float>)13declare <2 x float> @llvm.sin.v2f32(<2 x float>)14declare <3 x float> @llvm.sin.v3f32(<3 x float>)15declare <4 x float> @llvm.sin.v4f32(<4 x float>)16declare <5 x float> @llvm.sin.v5f32(<5 x float>)17declare <6 x float> @llvm.sin.v6f32(<6 x float>)18declare <3 x double> @llvm.sin.v3f64(<3 x double>)19 20declare <1 x float> @llvm.tan.v1f32(<1 x float>)21declare <2 x float> @llvm.tan.v2f32(<2 x float>)22declare <3 x float> @llvm.tan.v3f32(<3 x float>)23declare <4 x float> @llvm.tan.v4f32(<4 x float>)24declare <5 x float> @llvm.tan.v5f32(<5 x float>)25declare <6 x float> @llvm.tan.v6f32(<6 x float>)26declare <3 x double> @llvm.tan.v3f64(<3 x double>)27 28declare <1 x float> @llvm.acos.v1f32(<1 x float>)29declare <2 x float> @llvm.acos.v2f32(<2 x float>)30declare <3 x float> @llvm.acos.v3f32(<3 x float>)31declare <4 x float> @llvm.acos.v4f32(<4 x float>)32declare <5 x float> @llvm.acos.v5f32(<5 x float>)33declare <6 x float> @llvm.acos.v6f32(<6 x float>)34declare <3 x double> @llvm.acos.v3f64(<3 x double35>)36declare <1 x float> @llvm.asin.v1f32(<1 x float>)37declare <2 x float> @llvm.asin.v2f32(<2 x float>)38declare <3 x float> @llvm.asin.v3f32(<3 x float>)39declare <4 x float> @llvm.asin.v4f32(<4 x float>)40declare <5 x float> @llvm.asin.v5f32(<5 x float>)41declare <6 x float> @llvm.asin.v6f32(<6 x float>)42declare <3 x double> @llvm.asin.v3f64(<3 x double>)43 44declare <1 x float> @llvm.atan.v1f32(<1 x float>)45declare <2 x float> @llvm.atan.v2f32(<2 x float>)46declare <3 x float> @llvm.atan.v3f32(<3 x float>)47declare <4 x float> @llvm.atan.v4f32(<4 x float>)48declare <5 x float> @llvm.atan.v5f32(<5 x float>)49declare <6 x float> @llvm.atan.v6f32(<6 x float>)50declare <3 x double> @llvm.atan.v3f64(<3 x double>)51 52declare <1 x float> @llvm.cosh.v1f32(<1 x float>)53declare <2 x float> @llvm.cosh.v2f32(<2 x float>)54declare <3 x float> @llvm.cosh.v3f32(<3 x float>)55declare <4 x float> @llvm.cosh.v4f32(<4 x float>)56declare <5 x float> @llvm.cosh.v5f32(<5 x float>)57declare <6 x float> @llvm.cosh.v6f32(<6 x float>)58declare <3 x double> @llvm.cosh.v3f64(<3 x double>)59 60declare <1 x float> @llvm.sinh.v1f32(<1 x float>)61declare <2 x float> @llvm.sinh.v2f32(<2 x float>)62declare <3 x float> @llvm.sinh.v3f32(<3 x float>)63declare <4 x float> @llvm.sinh.v4f32(<4 x float>)64declare <5 x float> @llvm.sinh.v5f32(<5 x float>)65declare <6 x float> @llvm.sinh.v6f32(<6 x float>)66declare <3 x double> @llvm.sinh.v3f64(<3 x double>)67 68declare <1 x float> @llvm.tanh.v1f32(<1 x float>)69declare <2 x float> @llvm.tanh.v2f32(<2 x float>)70declare <3 x float> @llvm.tanh.v3f32(<3 x float>)71declare <4 x float> @llvm.tanh.v4f32(<4 x float>)72declare <5 x float> @llvm.tanh.v5f32(<5 x float>)73declare <6 x float> @llvm.tanh.v6f32(<6 x float>)74declare <3 x double> @llvm.tanh.v3f64(<3 x double>)75 76; Verify that all of the potential libcall candidates are handled.77; Some of these have custom lowering, so those cases won't have78; libcalls.79 80declare <2 x float> @llvm.fabs.v2f32(<2 x float>)81declare <2 x float> @llvm.ceil.v2f32(<2 x float>)82declare <2 x float> @llvm.cos.v2f32(<2 x float>)83declare <2 x float> @llvm.exp.v2f32(<2 x float>)84declare <2 x float> @llvm.exp2.v2f32(<2 x float>)85declare <2 x float> @llvm.floor.v2f32(<2 x float>)86declare <2 x float> @llvm.log.v2f32(<2 x float>)87declare <2 x float> @llvm.log10.v2f32(<2 x float>)88declare <2 x float> @llvm.log2.v2f32(<2 x float>)89declare <2 x float> @llvm.nearbyint.v2f32(<2 x float>)90declare <2 x float> @llvm.rint.v2f32(<2 x float>)91declare <2 x float> @llvm.round.v2f32(<2 x float>)92declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)93declare <2 x float> @llvm.trunc.v2f32(<2 x float>)94 95define <1 x float> @sin_v1f32(<1 x float> %x) nounwind {96; CHECK-LABEL: sin_v1f32:97; CHECK: # %bb.0:98; CHECK-NEXT: pushq %rax99; CHECK-NEXT: callq sinf@PLT100; CHECK-NEXT: popq %rax101; CHECK-NEXT: retq102 %r = call <1 x float> @llvm.sin.v1f32(<1 x float> %x)103 ret <1 x float> %r104}105 106define <2 x float> @sin_v2f32(<2 x float> %x) nounwind {107; CHECK-LABEL: sin_v2f32:108; CHECK: # %bb.0:109; CHECK-NEXT: subq $40, %rsp110; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill111; CHECK-NEXT: callq sinf@PLT112; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill113; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload114; CHECK-NEXT: # xmm0 = mem[1,1,3,3]115; CHECK-NEXT: callq sinf@PLT116; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload117; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]118; CHECK-NEXT: addq $40, %rsp119; CHECK-NEXT: retq120 %r = call <2 x float> @llvm.sin.v2f32(<2 x float> %x)121 ret <2 x float> %r122}123 124define <3 x float> @sin_v3f32(<3 x float> %x) nounwind {125; CHECK-LABEL: sin_v3f32:126; CHECK: # %bb.0:127; CHECK-NEXT: subq $40, %rsp128; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill129; CHECK-NEXT: callq sinf@PLT130; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill131; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload132; CHECK-NEXT: # xmm0 = mem[1,1,3,3]133; CHECK-NEXT: callq sinf@PLT134; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload135; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]136; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill137; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload138; CHECK-NEXT: # xmm0 = mem[1,0]139; CHECK-NEXT: callq sinf@PLT140; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload141; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]142; CHECK-NEXT: addq $40, %rsp143; CHECK-NEXT: retq144 %r = call <3 x float> @llvm.sin.v3f32(<3 x float> %x)145 ret <3 x float> %r146}147 148define <4 x float> @sin_v4f32(<4 x float> %x) nounwind {149; CHECK-LABEL: sin_v4f32:150; CHECK: # %bb.0:151; CHECK-NEXT: subq $40, %rsp152; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill153; CHECK-NEXT: callq sinf@PLT154; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill155; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload156; CHECK-NEXT: # xmm0 = mem[1,1,3,3]157; CHECK-NEXT: callq sinf@PLT158; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload159; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]160; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill161; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload162; CHECK-NEXT: # xmm0 = mem[1,0]163; CHECK-NEXT: callq sinf@PLT164; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload165; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]166; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill167; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload168; CHECK-NEXT: # xmm0 = mem[3,3,3,3]169; CHECK-NEXT: callq sinf@PLT170; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload171; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]172; CHECK-NEXT: addq $40, %rsp173; CHECK-NEXT: retq174 %r = call <4 x float> @llvm.sin.v4f32(<4 x float> %x)175 ret <4 x float> %r176}177 178define <5 x float> @sin_v5f32(<5 x float> %x) nounwind {179; CHECK-LABEL: sin_v5f32:180; CHECK: # %bb.0:181; CHECK-NEXT: subq $72, %rsp182; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill183; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0184; CHECK-NEXT: vzeroupper185; CHECK-NEXT: callq sinf@PLT186; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill187; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload188; CHECK-NEXT: # xmm0 = mem[1,1,3,3]189; CHECK-NEXT: callq sinf@PLT190; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload191; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]192; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill193; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload194; CHECK-NEXT: # xmm0 = mem[1,0]195; CHECK-NEXT: callq sinf@PLT196; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload197; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]198; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill199; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload200; CHECK-NEXT: # xmm0 = mem[3,3,3,3]201; CHECK-NEXT: callq sinf@PLT202; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload203; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]204; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill205; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload206; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0207; CHECK-NEXT: vzeroupper208; CHECK-NEXT: callq sinf@PLT209; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload210; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0211; CHECK-NEXT: addq $72, %rsp212; CHECK-NEXT: retq213 %r = call <5 x float> @llvm.sin.v5f32(<5 x float> %x)214 ret <5 x float> %r215}216 217define <6 x float> @sin_v6f32(<6 x float> %x) nounwind {218; CHECK-LABEL: sin_v6f32:219; CHECK: # %bb.0:220; CHECK-NEXT: subq $72, %rsp221; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill222; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0223; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill224; CHECK-NEXT: vzeroupper225; CHECK-NEXT: callq sinf@PLT226; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill227; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload228; CHECK-NEXT: # xmm0 = mem[1,1,3,3]229; CHECK-NEXT: callq sinf@PLT230; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload231; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]232; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill233; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload234; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0235; CHECK-NEXT: vzeroupper236; CHECK-NEXT: callq sinf@PLT237; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill238; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload239; CHECK-NEXT: # xmm0 = mem[1,1,3,3]240; CHECK-NEXT: callq sinf@PLT241; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload242; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]243; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill244; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload245; CHECK-NEXT: # xmm0 = mem[1,0]246; CHECK-NEXT: callq sinf@PLT247; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload248; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]249; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill250; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload251; CHECK-NEXT: # xmm0 = mem[3,3,3,3]252; CHECK-NEXT: callq sinf@PLT253; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload254; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]255; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload256; CHECK-NEXT: addq $72, %rsp257; CHECK-NEXT: retq258 %r = call <6 x float> @llvm.sin.v6f32(<6 x float> %x)259 ret <6 x float> %r260}261 262define <3 x double> @sin_v3f64(<3 x double> %x) nounwind {263; CHECK-LABEL: sin_v3f64:264; CHECK: # %bb.0:265; CHECK-NEXT: subq $72, %rsp266; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill267; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0268; CHECK-NEXT: vzeroupper269; CHECK-NEXT: callq sin@PLT270; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill271; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload272; CHECK-NEXT: # xmm0 = mem[1,0]273; CHECK-NEXT: callq sin@PLT274; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload275; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]276; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill277; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload278; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0279; CHECK-NEXT: vzeroupper280; CHECK-NEXT: callq sin@PLT281; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload282; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0283; CHECK-NEXT: addq $72, %rsp284; CHECK-NEXT: retq285 %r = call <3 x double> @llvm.sin.v3f64(<3 x double> %x)286 ret <3 x double> %r287}288 289define <1 x float> @tan_v1f32(<1 x float> %x) nounwind {290; CHECK-LABEL: tan_v1f32:291; CHECK: # %bb.0:292; CHECK-NEXT: pushq %rax293; CHECK-NEXT: callq tanf@PLT294; CHECK-NEXT: popq %rax295; CHECK-NEXT: retq296 %r = call <1 x float> @llvm.tan.v1f32(<1 x float> %x)297 ret <1 x float> %r298}299 300define <2 x float> @tan_v2f32(<2 x float> %x) nounwind {301; CHECK-LABEL: tan_v2f32:302; CHECK: # %bb.0:303; CHECK-NEXT: subq $40, %rsp304; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill305; CHECK-NEXT: callq tanf@PLT306; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill307; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload308; CHECK-NEXT: # xmm0 = mem[1,1,3,3]309; CHECK-NEXT: callq tanf@PLT310; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload311; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]312; CHECK-NEXT: addq $40, %rsp313; CHECK-NEXT: retq314 %r = call <2 x float> @llvm.tan.v2f32(<2 x float> %x)315 ret <2 x float> %r316}317 318define <3 x float> @tan_v3f32(<3 x float> %x) nounwind {319; CHECK-LABEL: tan_v3f32:320; CHECK: # %bb.0:321; CHECK-NEXT: subq $40, %rsp322; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill323; CHECK-NEXT: callq tanf@PLT324; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill325; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload326; CHECK-NEXT: # xmm0 = mem[1,1,3,3]327; CHECK-NEXT: callq tanf@PLT328; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload329; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]330; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill331; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload332; CHECK-NEXT: # xmm0 = mem[1,0]333; CHECK-NEXT: callq tanf@PLT334; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload335; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]336; CHECK-NEXT: addq $40, %rsp337; CHECK-NEXT: retq338 %r = call <3 x float> @llvm.tan.v3f32(<3 x float> %x)339 ret <3 x float> %r340}341 342define <4 x float> @tan_v4f32(<4 x float> %x) nounwind {343; CHECK-LABEL: tan_v4f32:344; CHECK: # %bb.0:345; CHECK-NEXT: subq $40, %rsp346; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill347; CHECK-NEXT: callq tanf@PLT348; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill349; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload350; CHECK-NEXT: # xmm0 = mem[1,1,3,3]351; CHECK-NEXT: callq tanf@PLT352; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload353; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]354; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill355; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload356; CHECK-NEXT: # xmm0 = mem[1,0]357; CHECK-NEXT: callq tanf@PLT358; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload359; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]360; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill361; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload362; CHECK-NEXT: # xmm0 = mem[3,3,3,3]363; CHECK-NEXT: callq tanf@PLT364; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload365; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]366; CHECK-NEXT: addq $40, %rsp367; CHECK-NEXT: retq368 %r = call <4 x float> @llvm.tan.v4f32(<4 x float> %x)369 ret <4 x float> %r370}371 372define <5 x float> @tan_v5f32(<5 x float> %x) nounwind {373; CHECK-LABEL: tan_v5f32:374; CHECK: # %bb.0:375; CHECK-NEXT: subq $72, %rsp376; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill377; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0378; CHECK-NEXT: vzeroupper379; CHECK-NEXT: callq tanf@PLT380; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill381; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload382; CHECK-NEXT: # xmm0 = mem[1,1,3,3]383; CHECK-NEXT: callq tanf@PLT384; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload385; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]386; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill387; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload388; CHECK-NEXT: # xmm0 = mem[1,0]389; CHECK-NEXT: callq tanf@PLT390; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload391; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]392; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill393; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload394; CHECK-NEXT: # xmm0 = mem[3,3,3,3]395; CHECK-NEXT: callq tanf@PLT396; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload397; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]398; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill399; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload400; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0401; CHECK-NEXT: vzeroupper402; CHECK-NEXT: callq tanf@PLT403; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload404; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0405; CHECK-NEXT: addq $72, %rsp406; CHECK-NEXT: retq407 %r = call <5 x float> @llvm.tan.v5f32(<5 x float> %x)408 ret <5 x float> %r409}410 411define <6 x float> @tan_v6f32(<6 x float> %x) nounwind {412; CHECK-LABEL: tan_v6f32:413; CHECK: # %bb.0:414; CHECK-NEXT: subq $72, %rsp415; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill416; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0417; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill418; CHECK-NEXT: vzeroupper419; CHECK-NEXT: callq tanf@PLT420; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill421; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload422; CHECK-NEXT: # xmm0 = mem[1,1,3,3]423; CHECK-NEXT: callq tanf@PLT424; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload425; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]426; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill427; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload428; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0429; CHECK-NEXT: vzeroupper430; CHECK-NEXT: callq tanf@PLT431; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill432; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload433; CHECK-NEXT: # xmm0 = mem[1,1,3,3]434; CHECK-NEXT: callq tanf@PLT435; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload436; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]437; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill438; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload439; CHECK-NEXT: # xmm0 = mem[1,0]440; CHECK-NEXT: callq tanf@PLT441; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload442; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]443; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill444; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload445; CHECK-NEXT: # xmm0 = mem[3,3,3,3]446; CHECK-NEXT: callq tanf@PLT447; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload448; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]449; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload450; CHECK-NEXT: addq $72, %rsp451; CHECK-NEXT: retq452 %r = call <6 x float> @llvm.tan.v6f32(<6 x float> %x)453 ret <6 x float> %r454}455 456define <3 x double> @tan_v3f64(<3 x double> %x) nounwind {457; CHECK-LABEL: tan_v3f64:458; CHECK: # %bb.0:459; CHECK-NEXT: subq $72, %rsp460; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill461; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0462; CHECK-NEXT: vzeroupper463; CHECK-NEXT: callq tan@PLT464; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill465; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload466; CHECK-NEXT: # xmm0 = mem[1,0]467; CHECK-NEXT: callq tan@PLT468; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload469; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]470; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill471; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload472; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0473; CHECK-NEXT: vzeroupper474; CHECK-NEXT: callq tan@PLT475; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload476; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0477; CHECK-NEXT: addq $72, %rsp478; CHECK-NEXT: retq479 %r = call <3 x double> @llvm.tan.v3f64(<3 x double> %x)480 ret <3 x double> %r481}482 483define <1 x float> @acos_v1f32(<1 x float> %x) nounwind {484; CHECK-LABEL: acos_v1f32:485; CHECK: # %bb.0:486; CHECK-NEXT: pushq %rax487; CHECK-NEXT: callq acosf@PLT488; CHECK-NEXT: popq %rax489; CHECK-NEXT: retq490 %r = call <1 x float> @llvm.acos.v1f32(<1 x float> %x)491 ret <1 x float> %r492}493 494define <2 x float> @acos_v2f32(<2 x float> %x) nounwind {495; CHECK-LABEL: acos_v2f32:496; CHECK: # %bb.0:497; CHECK-NEXT: subq $40, %rsp498; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill499; CHECK-NEXT: callq acosf@PLT500; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill501; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload502; CHECK-NEXT: # xmm0 = mem[1,1,3,3]503; CHECK-NEXT: callq acosf@PLT504; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload505; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]506; CHECK-NEXT: addq $40, %rsp507; CHECK-NEXT: retq508 %r = call <2 x float> @llvm.acos.v2f32(<2 x float> %x)509 ret <2 x float> %r510}511 512define <3 x float> @acos_v3f32(<3 x float> %x) nounwind {513; CHECK-LABEL: acos_v3f32:514; CHECK: # %bb.0:515; CHECK-NEXT: subq $40, %rsp516; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill517; CHECK-NEXT: callq acosf@PLT518; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill519; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload520; CHECK-NEXT: # xmm0 = mem[1,1,3,3]521; CHECK-NEXT: callq acosf@PLT522; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload523; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]524; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill525; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload526; CHECK-NEXT: # xmm0 = mem[1,0]527; CHECK-NEXT: callq acosf@PLT528; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload529; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]530; CHECK-NEXT: addq $40, %rsp531; CHECK-NEXT: retq532 %r = call <3 x float> @llvm.acos.v3f32(<3 x float> %x)533 ret <3 x float> %r534}535 536define <4 x float> @acos_v4f32(<4 x float> %x) nounwind {537; CHECK-LABEL: acos_v4f32:538; CHECK: # %bb.0:539; CHECK-NEXT: subq $40, %rsp540; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill541; CHECK-NEXT: callq acosf@PLT542; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill543; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload544; CHECK-NEXT: # xmm0 = mem[1,1,3,3]545; CHECK-NEXT: callq acosf@PLT546; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload547; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]548; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill549; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload550; CHECK-NEXT: # xmm0 = mem[1,0]551; CHECK-NEXT: callq acosf@PLT552; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload553; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]554; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill555; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload556; CHECK-NEXT: # xmm0 = mem[3,3,3,3]557; CHECK-NEXT: callq acosf@PLT558; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload559; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]560; CHECK-NEXT: addq $40, %rsp561; CHECK-NEXT: retq562 %r = call <4 x float> @llvm.acos.v4f32(<4 x float> %x)563 ret <4 x float> %r564}565 566define <5 x float> @acos_v5f32(<5 x float> %x) nounwind {567; CHECK-LABEL: acos_v5f32:568; CHECK: # %bb.0:569; CHECK-NEXT: subq $72, %rsp570; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill571; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0572; CHECK-NEXT: vzeroupper573; CHECK-NEXT: callq acosf@PLT574; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill575; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload576; CHECK-NEXT: # xmm0 = mem[1,1,3,3]577; CHECK-NEXT: callq acosf@PLT578; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload579; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]580; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill581; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload582; CHECK-NEXT: # xmm0 = mem[1,0]583; CHECK-NEXT: callq acosf@PLT584; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload585; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]586; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill587; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload588; CHECK-NEXT: # xmm0 = mem[3,3,3,3]589; CHECK-NEXT: callq acosf@PLT590; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload591; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]592; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill593; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload594; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0595; CHECK-NEXT: vzeroupper596; CHECK-NEXT: callq acosf@PLT597; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload598; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0599; CHECK-NEXT: addq $72, %rsp600; CHECK-NEXT: retq601 %r = call <5 x float> @llvm.acos.v5f32(<5 x float> %x)602 ret <5 x float> %r603}604 605define <6 x float> @acos_v6f32(<6 x float> %x) nounwind {606; CHECK-LABEL: acos_v6f32:607; CHECK: # %bb.0:608; CHECK-NEXT: subq $72, %rsp609; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill610; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0611; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill612; CHECK-NEXT: vzeroupper613; CHECK-NEXT: callq acosf@PLT614; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill615; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload616; CHECK-NEXT: # xmm0 = mem[1,1,3,3]617; CHECK-NEXT: callq acosf@PLT618; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload619; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]620; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill621; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload622; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0623; CHECK-NEXT: vzeroupper624; CHECK-NEXT: callq acosf@PLT625; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill626; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload627; CHECK-NEXT: # xmm0 = mem[1,1,3,3]628; CHECK-NEXT: callq acosf@PLT629; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload630; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]631; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill632; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload633; CHECK-NEXT: # xmm0 = mem[1,0]634; CHECK-NEXT: callq acosf@PLT635; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload636; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]637; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill638; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload639; CHECK-NEXT: # xmm0 = mem[3,3,3,3]640; CHECK-NEXT: callq acosf@PLT641; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload642; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]643; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload644; CHECK-NEXT: addq $72, %rsp645; CHECK-NEXT: retq646 %r = call <6 x float> @llvm.acos.v6f32(<6 x float> %x)647 ret <6 x float> %r648}649 650define <3 x double> @acos_v3f64(<3 x double> %x) nounwind {651; CHECK-LABEL: acos_v3f64:652; CHECK: # %bb.0:653; CHECK-NEXT: subq $72, %rsp654; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill655; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0656; CHECK-NEXT: vzeroupper657; CHECK-NEXT: callq acos@PLT658; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill659; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload660; CHECK-NEXT: # xmm0 = mem[1,0]661; CHECK-NEXT: callq acos@PLT662; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload663; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]664; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill665; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload666; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0667; CHECK-NEXT: vzeroupper668; CHECK-NEXT: callq acos@PLT669; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload670; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0671; CHECK-NEXT: addq $72, %rsp672; CHECK-NEXT: retq673 %r = call <3 x double> @llvm.acos.v3f64(<3 x double> %x)674 ret <3 x double> %r675}676 677define <1 x float> @asin_v1f32(<1 x float> %x) nounwind {678; CHECK-LABEL: asin_v1f32:679; CHECK: # %bb.0:680; CHECK-NEXT: pushq %rax681; CHECK-NEXT: callq asinf@PLT682; CHECK-NEXT: popq %rax683; CHECK-NEXT: retq684 %r = call <1 x float> @llvm.asin.v1f32(<1 x float> %x)685 ret <1 x float> %r686}687 688define <2 x float> @asin_v2f32(<2 x float> %x) nounwind {689; CHECK-LABEL: asin_v2f32:690; CHECK: # %bb.0:691; CHECK-NEXT: subq $40, %rsp692; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill693; CHECK-NEXT: callq asinf@PLT694; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill695; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload696; CHECK-NEXT: # xmm0 = mem[1,1,3,3]697; CHECK-NEXT: callq asinf@PLT698; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload699; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]700; CHECK-NEXT: addq $40, %rsp701; CHECK-NEXT: retq702 %r = call <2 x float> @llvm.asin.v2f32(<2 x float> %x)703 ret <2 x float> %r704}705 706define <3 x float> @asin_v3f32(<3 x float> %x) nounwind {707; CHECK-LABEL: asin_v3f32:708; CHECK: # %bb.0:709; CHECK-NEXT: subq $40, %rsp710; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill711; CHECK-NEXT: callq asinf@PLT712; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill713; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload714; CHECK-NEXT: # xmm0 = mem[1,1,3,3]715; CHECK-NEXT: callq asinf@PLT716; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload717; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]718; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill719; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload720; CHECK-NEXT: # xmm0 = mem[1,0]721; CHECK-NEXT: callq asinf@PLT722; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload723; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]724; CHECK-NEXT: addq $40, %rsp725; CHECK-NEXT: retq726 %r = call <3 x float> @llvm.asin.v3f32(<3 x float> %x)727 ret <3 x float> %r728}729 730define <4 x float> @asin_v4f32(<4 x float> %x) nounwind {731; CHECK-LABEL: asin_v4f32:732; CHECK: # %bb.0:733; CHECK-NEXT: subq $40, %rsp734; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill735; CHECK-NEXT: callq asinf@PLT736; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill737; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload738; CHECK-NEXT: # xmm0 = mem[1,1,3,3]739; CHECK-NEXT: callq asinf@PLT740; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload741; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]742; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill743; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload744; CHECK-NEXT: # xmm0 = mem[1,0]745; CHECK-NEXT: callq asinf@PLT746; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload747; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]748; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill749; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload750; CHECK-NEXT: # xmm0 = mem[3,3,3,3]751; CHECK-NEXT: callq asinf@PLT752; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload753; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]754; CHECK-NEXT: addq $40, %rsp755; CHECK-NEXT: retq756 %r = call <4 x float> @llvm.asin.v4f32(<4 x float> %x)757 ret <4 x float> %r758}759 760define <5 x float> @asin_v5f32(<5 x float> %x) nounwind {761; CHECK-LABEL: asin_v5f32:762; CHECK: # %bb.0:763; CHECK-NEXT: subq $72, %rsp764; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill765; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0766; CHECK-NEXT: vzeroupper767; CHECK-NEXT: callq asinf@PLT768; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill769; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload770; CHECK-NEXT: # xmm0 = mem[1,1,3,3]771; CHECK-NEXT: callq asinf@PLT772; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload773; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]774; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill775; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload776; CHECK-NEXT: # xmm0 = mem[1,0]777; CHECK-NEXT: callq asinf@PLT778; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload779; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]780; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill781; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload782; CHECK-NEXT: # xmm0 = mem[3,3,3,3]783; CHECK-NEXT: callq asinf@PLT784; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload785; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]786; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill787; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload788; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0789; CHECK-NEXT: vzeroupper790; CHECK-NEXT: callq asinf@PLT791; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload792; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0793; CHECK-NEXT: addq $72, %rsp794; CHECK-NEXT: retq795 %r = call <5 x float> @llvm.asin.v5f32(<5 x float> %x)796 ret <5 x float> %r797}798 799define <6 x float> @asin_v6f32(<6 x float> %x) nounwind {800; CHECK-LABEL: asin_v6f32:801; CHECK: # %bb.0:802; CHECK-NEXT: subq $72, %rsp803; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill804; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0805; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill806; CHECK-NEXT: vzeroupper807; CHECK-NEXT: callq asinf@PLT808; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill809; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload810; CHECK-NEXT: # xmm0 = mem[1,1,3,3]811; CHECK-NEXT: callq asinf@PLT812; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload813; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]814; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill815; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload816; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0817; CHECK-NEXT: vzeroupper818; CHECK-NEXT: callq asinf@PLT819; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill820; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload821; CHECK-NEXT: # xmm0 = mem[1,1,3,3]822; CHECK-NEXT: callq asinf@PLT823; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload824; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]825; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill826; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload827; CHECK-NEXT: # xmm0 = mem[1,0]828; CHECK-NEXT: callq asinf@PLT829; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload830; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]831; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill832; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload833; CHECK-NEXT: # xmm0 = mem[3,3,3,3]834; CHECK-NEXT: callq asinf@PLT835; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload836; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]837; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload838; CHECK-NEXT: addq $72, %rsp839; CHECK-NEXT: retq840 %r = call <6 x float> @llvm.asin.v6f32(<6 x float> %x)841 ret <6 x float> %r842}843 844define <3 x double> @asin_v3f64(<3 x double> %x) nounwind {845; CHECK-LABEL: asin_v3f64:846; CHECK: # %bb.0:847; CHECK-NEXT: subq $72, %rsp848; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill849; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0850; CHECK-NEXT: vzeroupper851; CHECK-NEXT: callq asin@PLT852; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill853; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload854; CHECK-NEXT: # xmm0 = mem[1,0]855; CHECK-NEXT: callq asin@PLT856; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload857; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]858; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill859; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload860; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0861; CHECK-NEXT: vzeroupper862; CHECK-NEXT: callq asin@PLT863; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload864; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0865; CHECK-NEXT: addq $72, %rsp866; CHECK-NEXT: retq867 %r = call <3 x double> @llvm.asin.v3f64(<3 x double> %x)868 ret <3 x double> %r869}870 871define <1 x float> @atan_v1f32(<1 x float> %x) nounwind {872; CHECK-LABEL: atan_v1f32:873; CHECK: # %bb.0:874; CHECK-NEXT: pushq %rax875; CHECK-NEXT: callq atanf@PLT876; CHECK-NEXT: popq %rax877; CHECK-NEXT: retq878 %r = call <1 x float> @llvm.atan.v1f32(<1 x float> %x)879 ret <1 x float> %r880}881 882define <2 x float> @atan_v2f32(<2 x float> %x) nounwind {883; CHECK-LABEL: atan_v2f32:884; CHECK: # %bb.0:885; CHECK-NEXT: subq $40, %rsp886; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill887; CHECK-NEXT: callq atanf@PLT888; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill889; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload890; CHECK-NEXT: # xmm0 = mem[1,1,3,3]891; CHECK-NEXT: callq atanf@PLT892; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload893; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]894; CHECK-NEXT: addq $40, %rsp895; CHECK-NEXT: retq896 %r = call <2 x float> @llvm.atan.v2f32(<2 x float> %x)897 ret <2 x float> %r898}899 900define <3 x float> @atan_v3f32(<3 x float> %x) nounwind {901; CHECK-LABEL: atan_v3f32:902; CHECK: # %bb.0:903; CHECK-NEXT: subq $40, %rsp904; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill905; CHECK-NEXT: callq atanf@PLT906; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill907; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload908; CHECK-NEXT: # xmm0 = mem[1,1,3,3]909; CHECK-NEXT: callq atanf@PLT910; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload911; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]912; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill913; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload914; CHECK-NEXT: # xmm0 = mem[1,0]915; CHECK-NEXT: callq atanf@PLT916; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload917; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]918; CHECK-NEXT: addq $40, %rsp919; CHECK-NEXT: retq920 %r = call <3 x float> @llvm.atan.v3f32(<3 x float> %x)921 ret <3 x float> %r922}923 924define <4 x float> @atan_v4f32(<4 x float> %x) nounwind {925; CHECK-LABEL: atan_v4f32:926; CHECK: # %bb.0:927; CHECK-NEXT: subq $40, %rsp928; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill929; CHECK-NEXT: callq atanf@PLT930; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill931; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload932; CHECK-NEXT: # xmm0 = mem[1,1,3,3]933; CHECK-NEXT: callq atanf@PLT934; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload935; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]936; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill937; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload938; CHECK-NEXT: # xmm0 = mem[1,0]939; CHECK-NEXT: callq atanf@PLT940; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload941; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]942; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill943; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload944; CHECK-NEXT: # xmm0 = mem[3,3,3,3]945; CHECK-NEXT: callq atanf@PLT946; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload947; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]948; CHECK-NEXT: addq $40, %rsp949; CHECK-NEXT: retq950 %r = call <4 x float> @llvm.atan.v4f32(<4 x float> %x)951 ret <4 x float> %r952}953 954define <5 x float> @atan_v5f32(<5 x float> %x) nounwind {955; CHECK-LABEL: atan_v5f32:956; CHECK: # %bb.0:957; CHECK-NEXT: subq $72, %rsp958; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill959; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0960; CHECK-NEXT: vzeroupper961; CHECK-NEXT: callq atanf@PLT962; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill963; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload964; CHECK-NEXT: # xmm0 = mem[1,1,3,3]965; CHECK-NEXT: callq atanf@PLT966; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload967; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]968; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill969; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload970; CHECK-NEXT: # xmm0 = mem[1,0]971; CHECK-NEXT: callq atanf@PLT972; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload973; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]974; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill975; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload976; CHECK-NEXT: # xmm0 = mem[3,3,3,3]977; CHECK-NEXT: callq atanf@PLT978; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload979; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]980; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill981; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload982; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0983; CHECK-NEXT: vzeroupper984; CHECK-NEXT: callq atanf@PLT985; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload986; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0987; CHECK-NEXT: addq $72, %rsp988; CHECK-NEXT: retq989 %r = call <5 x float> @llvm.atan.v5f32(<5 x float> %x)990 ret <5 x float> %r991}992 993define <6 x float> @atan_v6f32(<6 x float> %x) nounwind {994; CHECK-LABEL: atan_v6f32:995; CHECK: # %bb.0:996; CHECK-NEXT: subq $72, %rsp997; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill998; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0999; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1000; CHECK-NEXT: vzeroupper1001; CHECK-NEXT: callq atanf@PLT1002; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1003; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1004; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1005; CHECK-NEXT: callq atanf@PLT1006; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1007; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1008; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1009; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1010; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01011; CHECK-NEXT: vzeroupper1012; CHECK-NEXT: callq atanf@PLT1013; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1014; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1015; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1016; CHECK-NEXT: callq atanf@PLT1017; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1018; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1019; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1020; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1021; CHECK-NEXT: # xmm0 = mem[1,0]1022; CHECK-NEXT: callq atanf@PLT1023; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1024; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1025; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1026; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1027; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1028; CHECK-NEXT: callq atanf@PLT1029; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1030; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1031; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1032; CHECK-NEXT: addq $72, %rsp1033; CHECK-NEXT: retq1034 %r = call <6 x float> @llvm.atan.v6f32(<6 x float> %x)1035 ret <6 x float> %r1036}1037 1038define <3 x double> @atan_v3f64(<3 x double> %x) nounwind {1039; CHECK-LABEL: atan_v3f64:1040; CHECK: # %bb.0:1041; CHECK-NEXT: subq $72, %rsp1042; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1043; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01044; CHECK-NEXT: vzeroupper1045; CHECK-NEXT: callq atan@PLT1046; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1047; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1048; CHECK-NEXT: # xmm0 = mem[1,0]1049; CHECK-NEXT: callq atan@PLT1050; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload1051; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]1052; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill1053; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1054; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01055; CHECK-NEXT: vzeroupper1056; CHECK-NEXT: callq atan@PLT1057; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1058; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01059; CHECK-NEXT: addq $72, %rsp1060; CHECK-NEXT: retq1061 %r = call <3 x double> @llvm.atan.v3f64(<3 x double> %x)1062 ret <3 x double> %r1063}1064 1065define <1 x float> @cosh_v1f32(<1 x float> %x) nounwind {1066; CHECK-LABEL: cosh_v1f32:1067; CHECK: # %bb.0:1068; CHECK-NEXT: pushq %rax1069; CHECK-NEXT: callq coshf@PLT1070; CHECK-NEXT: popq %rax1071; CHECK-NEXT: retq1072 %r = call <1 x float> @llvm.cosh.v1f32(<1 x float> %x)1073 ret <1 x float> %r1074}1075 1076define <2 x float> @cosh_v2f32(<2 x float> %x) nounwind {1077; CHECK-LABEL: cosh_v2f32:1078; CHECK: # %bb.0:1079; CHECK-NEXT: subq $40, %rsp1080; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1081; CHECK-NEXT: callq coshf@PLT1082; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1083; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1084; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1085; CHECK-NEXT: callq coshf@PLT1086; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1087; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1088; CHECK-NEXT: addq $40, %rsp1089; CHECK-NEXT: retq1090 %r = call <2 x float> @llvm.cosh.v2f32(<2 x float> %x)1091 ret <2 x float> %r1092}1093 1094define <3 x float> @cosh_v3f32(<3 x float> %x) nounwind {1095; CHECK-LABEL: cosh_v3f32:1096; CHECK: # %bb.0:1097; CHECK-NEXT: subq $40, %rsp1098; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1099; CHECK-NEXT: callq coshf@PLT1100; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1101; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1102; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1103; CHECK-NEXT: callq coshf@PLT1104; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1105; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1106; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1107; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1108; CHECK-NEXT: # xmm0 = mem[1,0]1109; CHECK-NEXT: callq coshf@PLT1110; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1111; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1112; CHECK-NEXT: addq $40, %rsp1113; CHECK-NEXT: retq1114 %r = call <3 x float> @llvm.cosh.v3f32(<3 x float> %x)1115 ret <3 x float> %r1116}1117 1118define <4 x float> @cosh_v4f32(<4 x float> %x) nounwind {1119; CHECK-LABEL: cosh_v4f32:1120; CHECK: # %bb.0:1121; CHECK-NEXT: subq $40, %rsp1122; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1123; CHECK-NEXT: callq coshf@PLT1124; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1125; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1126; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1127; CHECK-NEXT: callq coshf@PLT1128; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1129; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1130; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1131; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1132; CHECK-NEXT: # xmm0 = mem[1,0]1133; CHECK-NEXT: callq coshf@PLT1134; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1135; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1136; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1137; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1138; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1139; CHECK-NEXT: callq coshf@PLT1140; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1141; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1142; CHECK-NEXT: addq $40, %rsp1143; CHECK-NEXT: retq1144 %r = call <4 x float> @llvm.cosh.v4f32(<4 x float> %x)1145 ret <4 x float> %r1146}1147 1148define <5 x float> @cosh_v5f32(<5 x float> %x) nounwind {1149; CHECK-LABEL: cosh_v5f32:1150; CHECK: # %bb.0:1151; CHECK-NEXT: subq $72, %rsp1152; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1153; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01154; CHECK-NEXT: vzeroupper1155; CHECK-NEXT: callq coshf@PLT1156; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1157; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1158; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1159; CHECK-NEXT: callq coshf@PLT1160; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1161; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1162; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1163; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1164; CHECK-NEXT: # xmm0 = mem[1,0]1165; CHECK-NEXT: callq coshf@PLT1166; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1167; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1168; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1169; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1170; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1171; CHECK-NEXT: callq coshf@PLT1172; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1173; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1174; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill1175; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1176; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01177; CHECK-NEXT: vzeroupper1178; CHECK-NEXT: callq coshf@PLT1179; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1180; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01181; CHECK-NEXT: addq $72, %rsp1182; CHECK-NEXT: retq1183 %r = call <5 x float> @llvm.cosh.v5f32(<5 x float> %x)1184 ret <5 x float> %r1185}1186 1187define <6 x float> @cosh_v6f32(<6 x float> %x) nounwind {1188; CHECK-LABEL: cosh_v6f32:1189; CHECK: # %bb.0:1190; CHECK-NEXT: subq $72, %rsp1191; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1192; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01193; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1194; CHECK-NEXT: vzeroupper1195; CHECK-NEXT: callq coshf@PLT1196; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1197; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1198; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1199; CHECK-NEXT: callq coshf@PLT1200; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1201; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1202; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1203; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1204; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01205; CHECK-NEXT: vzeroupper1206; CHECK-NEXT: callq coshf@PLT1207; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1208; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1209; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1210; CHECK-NEXT: callq coshf@PLT1211; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1212; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1213; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1214; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1215; CHECK-NEXT: # xmm0 = mem[1,0]1216; CHECK-NEXT: callq coshf@PLT1217; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1218; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1219; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1220; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1221; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1222; CHECK-NEXT: callq coshf@PLT1223; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1224; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1225; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1226; CHECK-NEXT: addq $72, %rsp1227; CHECK-NEXT: retq1228 %r = call <6 x float> @llvm.cosh.v6f32(<6 x float> %x)1229 ret <6 x float> %r1230}1231 1232define <3 x double> @cosh_v3f64(<3 x double> %x) nounwind {1233; CHECK-LABEL: cosh_v3f64:1234; CHECK: # %bb.0:1235; CHECK-NEXT: subq $72, %rsp1236; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1237; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01238; CHECK-NEXT: vzeroupper1239; CHECK-NEXT: callq cosh@PLT1240; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1241; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1242; CHECK-NEXT: # xmm0 = mem[1,0]1243; CHECK-NEXT: callq cosh@PLT1244; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload1245; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]1246; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill1247; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1248; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01249; CHECK-NEXT: vzeroupper1250; CHECK-NEXT: callq cosh@PLT1251; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1252; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01253; CHECK-NEXT: addq $72, %rsp1254; CHECK-NEXT: retq1255 %r = call <3 x double> @llvm.cosh.v3f64(<3 x double> %x)1256 ret <3 x double> %r1257}1258 1259define <1 x float> @sinh_v1f32(<1 x float> %x) nounwind {1260; CHECK-LABEL: sinh_v1f32:1261; CHECK: # %bb.0:1262; CHECK-NEXT: pushq %rax1263; CHECK-NEXT: callq sinhf@PLT1264; CHECK-NEXT: popq %rax1265; CHECK-NEXT: retq1266 %r = call <1 x float> @llvm.sinh.v1f32(<1 x float> %x)1267 ret <1 x float> %r1268}1269 1270define <2 x float> @sinh_v2f32(<2 x float> %x) nounwind {1271; CHECK-LABEL: sinh_v2f32:1272; CHECK: # %bb.0:1273; CHECK-NEXT: subq $40, %rsp1274; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1275; CHECK-NEXT: callq sinhf@PLT1276; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1277; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1278; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1279; CHECK-NEXT: callq sinhf@PLT1280; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1281; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1282; CHECK-NEXT: addq $40, %rsp1283; CHECK-NEXT: retq1284 %r = call <2 x float> @llvm.sinh.v2f32(<2 x float> %x)1285 ret <2 x float> %r1286}1287 1288define <3 x float> @sinh_v3f32(<3 x float> %x) nounwind {1289; CHECK-LABEL: sinh_v3f32:1290; CHECK: # %bb.0:1291; CHECK-NEXT: subq $40, %rsp1292; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1293; CHECK-NEXT: callq sinhf@PLT1294; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1295; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1296; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1297; CHECK-NEXT: callq sinhf@PLT1298; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1299; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1300; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1301; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1302; CHECK-NEXT: # xmm0 = mem[1,0]1303; CHECK-NEXT: callq sinhf@PLT1304; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1305; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1306; CHECK-NEXT: addq $40, %rsp1307; CHECK-NEXT: retq1308 %r = call <3 x float> @llvm.sinh.v3f32(<3 x float> %x)1309 ret <3 x float> %r1310}1311 1312define <4 x float> @sinh_v4f32(<4 x float> %x) nounwind {1313; CHECK-LABEL: sinh_v4f32:1314; CHECK: # %bb.0:1315; CHECK-NEXT: subq $40, %rsp1316; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1317; CHECK-NEXT: callq sinhf@PLT1318; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1319; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1320; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1321; CHECK-NEXT: callq sinhf@PLT1322; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1323; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1324; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1325; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1326; CHECK-NEXT: # xmm0 = mem[1,0]1327; CHECK-NEXT: callq sinhf@PLT1328; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1329; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1330; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1331; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1332; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1333; CHECK-NEXT: callq sinhf@PLT1334; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1335; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1336; CHECK-NEXT: addq $40, %rsp1337; CHECK-NEXT: retq1338 %r = call <4 x float> @llvm.sinh.v4f32(<4 x float> %x)1339 ret <4 x float> %r1340}1341 1342define <5 x float> @sinh_v5f32(<5 x float> %x) nounwind {1343; CHECK-LABEL: sinh_v5f32:1344; CHECK: # %bb.0:1345; CHECK-NEXT: subq $72, %rsp1346; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1347; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01348; CHECK-NEXT: vzeroupper1349; CHECK-NEXT: callq sinhf@PLT1350; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1351; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1352; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1353; CHECK-NEXT: callq sinhf@PLT1354; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1355; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1356; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1357; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1358; CHECK-NEXT: # xmm0 = mem[1,0]1359; CHECK-NEXT: callq sinhf@PLT1360; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1361; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1362; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1363; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1364; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1365; CHECK-NEXT: callq sinhf@PLT1366; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1367; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1368; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill1369; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1370; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01371; CHECK-NEXT: vzeroupper1372; CHECK-NEXT: callq sinhf@PLT1373; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1374; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01375; CHECK-NEXT: addq $72, %rsp1376; CHECK-NEXT: retq1377 %r = call <5 x float> @llvm.sinh.v5f32(<5 x float> %x)1378 ret <5 x float> %r1379}1380 1381define <6 x float> @sinh_v6f32(<6 x float> %x) nounwind {1382; CHECK-LABEL: sinh_v6f32:1383; CHECK: # %bb.0:1384; CHECK-NEXT: subq $72, %rsp1385; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1386; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01387; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1388; CHECK-NEXT: vzeroupper1389; CHECK-NEXT: callq sinhf@PLT1390; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1391; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1392; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1393; CHECK-NEXT: callq sinhf@PLT1394; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1395; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1396; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1397; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1398; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01399; CHECK-NEXT: vzeroupper1400; CHECK-NEXT: callq sinhf@PLT1401; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1402; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1403; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1404; CHECK-NEXT: callq sinhf@PLT1405; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1406; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1407; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1408; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1409; CHECK-NEXT: # xmm0 = mem[1,0]1410; CHECK-NEXT: callq sinhf@PLT1411; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1412; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1413; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1414; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1415; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1416; CHECK-NEXT: callq sinhf@PLT1417; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1418; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1419; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1420; CHECK-NEXT: addq $72, %rsp1421; CHECK-NEXT: retq1422 %r = call <6 x float> @llvm.sinh.v6f32(<6 x float> %x)1423 ret <6 x float> %r1424}1425 1426define <3 x double> @sinh_v3f64(<3 x double> %x) nounwind {1427; CHECK-LABEL: sinh_v3f64:1428; CHECK: # %bb.0:1429; CHECK-NEXT: subq $72, %rsp1430; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1431; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01432; CHECK-NEXT: vzeroupper1433; CHECK-NEXT: callq sinh@PLT1434; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1435; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1436; CHECK-NEXT: # xmm0 = mem[1,0]1437; CHECK-NEXT: callq sinh@PLT1438; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload1439; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]1440; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill1441; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1442; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01443; CHECK-NEXT: vzeroupper1444; CHECK-NEXT: callq sinh@PLT1445; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1446; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01447; CHECK-NEXT: addq $72, %rsp1448; CHECK-NEXT: retq1449 %r = call <3 x double> @llvm.sinh.v3f64(<3 x double> %x)1450 ret <3 x double> %r1451}1452 1453define <1 x float> @tanh_v1f32(<1 x float> %x) nounwind {1454; CHECK-LABEL: tanh_v1f32:1455; CHECK: # %bb.0:1456; CHECK-NEXT: pushq %rax1457; CHECK-NEXT: callq tanhf@PLT1458; CHECK-NEXT: popq %rax1459; CHECK-NEXT: retq1460 %r = call <1 x float> @llvm.tanh.v1f32(<1 x float> %x)1461 ret <1 x float> %r1462}1463 1464define <2 x float> @tanh_v2f32(<2 x float> %x) nounwind {1465; CHECK-LABEL: tanh_v2f32:1466; CHECK: # %bb.0:1467; CHECK-NEXT: subq $40, %rsp1468; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1469; CHECK-NEXT: callq tanhf@PLT1470; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1471; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1472; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1473; CHECK-NEXT: callq tanhf@PLT1474; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1475; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1476; CHECK-NEXT: addq $40, %rsp1477; CHECK-NEXT: retq1478 %r = call <2 x float> @llvm.tanh.v2f32(<2 x float> %x)1479 ret <2 x float> %r1480}1481 1482define <3 x float> @tanh_v3f32(<3 x float> %x) nounwind {1483; CHECK-LABEL: tanh_v3f32:1484; CHECK: # %bb.0:1485; CHECK-NEXT: subq $40, %rsp1486; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1487; CHECK-NEXT: callq tanhf@PLT1488; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1489; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1490; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1491; CHECK-NEXT: callq tanhf@PLT1492; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1493; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1494; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1495; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1496; CHECK-NEXT: # xmm0 = mem[1,0]1497; CHECK-NEXT: callq tanhf@PLT1498; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1499; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1500; CHECK-NEXT: addq $40, %rsp1501; CHECK-NEXT: retq1502 %r = call <3 x float> @llvm.tanh.v3f32(<3 x float> %x)1503 ret <3 x float> %r1504}1505 1506define <4 x float> @tanh_v4f32(<4 x float> %x) nounwind {1507; CHECK-LABEL: tanh_v4f32:1508; CHECK: # %bb.0:1509; CHECK-NEXT: subq $40, %rsp1510; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1511; CHECK-NEXT: callq tanhf@PLT1512; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1513; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1514; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1515; CHECK-NEXT: callq tanhf@PLT1516; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1517; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1518; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1519; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1520; CHECK-NEXT: # xmm0 = mem[1,0]1521; CHECK-NEXT: callq tanhf@PLT1522; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1523; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1524; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1525; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1526; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1527; CHECK-NEXT: callq tanhf@PLT1528; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1529; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1530; CHECK-NEXT: addq $40, %rsp1531; CHECK-NEXT: retq1532 %r = call <4 x float> @llvm.tanh.v4f32(<4 x float> %x)1533 ret <4 x float> %r1534}1535 1536define <5 x float> @tanh_v5f32(<5 x float> %x) nounwind {1537; CHECK-LABEL: tanh_v5f32:1538; CHECK: # %bb.0:1539; CHECK-NEXT: subq $72, %rsp1540; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1541; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01542; CHECK-NEXT: vzeroupper1543; CHECK-NEXT: callq tanhf@PLT1544; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1545; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1546; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1547; CHECK-NEXT: callq tanhf@PLT1548; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1549; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1550; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1551; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1552; CHECK-NEXT: # xmm0 = mem[1,0]1553; CHECK-NEXT: callq tanhf@PLT1554; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1555; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1556; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1557; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1558; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1559; CHECK-NEXT: callq tanhf@PLT1560; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1561; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1562; CHECK-NEXT: vmovups %ymm0, (%rsp) # 32-byte Spill1563; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1564; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01565; CHECK-NEXT: vzeroupper1566; CHECK-NEXT: callq tanhf@PLT1567; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1568; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01569; CHECK-NEXT: addq $72, %rsp1570; CHECK-NEXT: retq1571 %r = call <5 x float> @llvm.tanh.v5f32(<5 x float> %x)1572 ret <5 x float> %r1573}1574 1575define <6 x float> @tanh_v6f32(<6 x float> %x) nounwind {1576; CHECK-LABEL: tanh_v6f32:1577; CHECK: # %bb.0:1578; CHECK-NEXT: subq $72, %rsp1579; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1580; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01581; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1582; CHECK-NEXT: vzeroupper1583; CHECK-NEXT: callq tanhf@PLT1584; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1585; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1586; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1587; CHECK-NEXT: callq tanhf@PLT1588; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1589; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1590; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1591; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1592; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01593; CHECK-NEXT: vzeroupper1594; CHECK-NEXT: callq tanhf@PLT1595; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1596; CHECK-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1597; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1598; CHECK-NEXT: callq tanhf@PLT1599; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1600; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1601; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1602; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1603; CHECK-NEXT: # xmm0 = mem[1,0]1604; CHECK-NEXT: callq tanhf@PLT1605; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1606; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1607; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1608; CHECK-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1609; CHECK-NEXT: # xmm0 = mem[3,3,3,3]1610; CHECK-NEXT: callq tanhf@PLT1611; CHECK-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload1612; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1613; CHECK-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1614; CHECK-NEXT: addq $72, %rsp1615; CHECK-NEXT: retq1616 %r = call <6 x float> @llvm.tanh.v6f32(<6 x float> %x)1617 ret <6 x float> %r1618}1619 1620define <3 x double> @tanh_v3f64(<3 x double> %x) nounwind {1621; CHECK-LABEL: tanh_v3f64:1622; CHECK: # %bb.0:1623; CHECK-NEXT: subq $72, %rsp1624; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1625; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm01626; CHECK-NEXT: vzeroupper1627; CHECK-NEXT: callq tanh@PLT1628; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1629; CHECK-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1630; CHECK-NEXT: # xmm0 = mem[1,0]1631; CHECK-NEXT: callq tanh@PLT1632; CHECK-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload1633; CHECK-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]1634; CHECK-NEXT: vmovupd %ymm0, (%rsp) # 32-byte Spill1635; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1636; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm01637; CHECK-NEXT: vzeroupper1638; CHECK-NEXT: callq tanh@PLT1639; CHECK-NEXT: vmovups (%rsp), %ymm1 # 32-byte Reload1640; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01641; CHECK-NEXT: addq $72, %rsp1642; CHECK-NEXT: retq1643 %r = call <3 x double> @llvm.tanh.v3f64(<3 x double> %x)1644 ret <3 x double> %r1645}1646 1647define <2 x float> @fabs_v2f32(<2 x float> %x) nounwind {1648; CHECK-LABEL: fabs_v2f32:1649; CHECK: # %bb.0:1650; CHECK-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01651; CHECK-NEXT: retq1652 %r = call <2 x float> @llvm.fabs.v2f32(<2 x float> %x)1653 ret <2 x float> %r1654}1655 1656define <2 x float> @ceil_v2f32(<2 x float> %x) nounwind {1657; CHECK-LABEL: ceil_v2f32:1658; CHECK: # %bb.0:1659; CHECK-NEXT: vroundps $10, %xmm0, %xmm01660; CHECK-NEXT: retq1661 %r = call <2 x float> @llvm.ceil.v2f32(<2 x float> %x)1662 ret <2 x float> %r1663}1664 1665define <2 x float> @cos_v2f32(<2 x float> %x) nounwind {1666; CHECK-LABEL: cos_v2f32:1667; CHECK: # %bb.0:1668; CHECK-NEXT: subq $40, %rsp1669; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1670; CHECK-NEXT: callq cosf@PLT1671; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1672; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1673; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1674; CHECK-NEXT: callq cosf@PLT1675; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1676; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1677; CHECK-NEXT: addq $40, %rsp1678; CHECK-NEXT: retq1679 %r = call <2 x float> @llvm.cos.v2f32(<2 x float> %x)1680 ret <2 x float> %r1681}1682 1683define <2 x float> @exp_v2f32(<2 x float> %x) nounwind {1684; CHECK-LABEL: exp_v2f32:1685; CHECK: # %bb.0:1686; CHECK-NEXT: subq $40, %rsp1687; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1688; CHECK-NEXT: callq expf@PLT1689; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1690; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1691; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1692; CHECK-NEXT: callq expf@PLT1693; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1694; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1695; CHECK-NEXT: addq $40, %rsp1696; CHECK-NEXT: retq1697 %r = call <2 x float> @llvm.exp.v2f32(<2 x float> %x)1698 ret <2 x float> %r1699}1700 1701define <2 x float> @exp2_v2f32(<2 x float> %x) nounwind {1702; CHECK-LABEL: exp2_v2f32:1703; CHECK: # %bb.0:1704; CHECK-NEXT: subq $40, %rsp1705; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1706; CHECK-NEXT: callq exp2f@PLT1707; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1708; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1709; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1710; CHECK-NEXT: callq exp2f@PLT1711; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1712; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1713; CHECK-NEXT: addq $40, %rsp1714; CHECK-NEXT: retq1715 %r = call <2 x float> @llvm.exp2.v2f32(<2 x float> %x)1716 ret <2 x float> %r1717}1718 1719define <2 x float> @floor_v2f32(<2 x float> %x) nounwind {1720; CHECK-LABEL: floor_v2f32:1721; CHECK: # %bb.0:1722; CHECK-NEXT: vroundps $9, %xmm0, %xmm01723; CHECK-NEXT: retq1724 %r = call <2 x float> @llvm.floor.v2f32(<2 x float> %x)1725 ret <2 x float> %r1726}1727 1728define <2 x float> @log_v2f32(<2 x float> %x) nounwind {1729; CHECK-LABEL: log_v2f32:1730; CHECK: # %bb.0:1731; CHECK-NEXT: subq $40, %rsp1732; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1733; CHECK-NEXT: callq logf@PLT1734; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1735; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1736; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1737; CHECK-NEXT: callq logf@PLT1738; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1739; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1740; CHECK-NEXT: addq $40, %rsp1741; CHECK-NEXT: retq1742 %r = call <2 x float> @llvm.log.v2f32(<2 x float> %x)1743 ret <2 x float> %r1744}1745 1746define <2 x float> @log10_v2f32(<2 x float> %x) nounwind {1747; CHECK-LABEL: log10_v2f32:1748; CHECK: # %bb.0:1749; CHECK-NEXT: subq $40, %rsp1750; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1751; CHECK-NEXT: callq log10f@PLT1752; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1753; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1754; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1755; CHECK-NEXT: callq log10f@PLT1756; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1757; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1758; CHECK-NEXT: addq $40, %rsp1759; CHECK-NEXT: retq1760 %r = call <2 x float> @llvm.log10.v2f32(<2 x float> %x)1761 ret <2 x float> %r1762}1763 1764define <2 x float> @log2_v2f32(<2 x float> %x) nounwind {1765; CHECK-LABEL: log2_v2f32:1766; CHECK: # %bb.0:1767; CHECK-NEXT: subq $40, %rsp1768; CHECK-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1769; CHECK-NEXT: callq log2f@PLT1770; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1771; CHECK-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload1772; CHECK-NEXT: # xmm0 = mem[1,1,3,3]1773; CHECK-NEXT: callq log2f@PLT1774; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1775; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1776; CHECK-NEXT: addq $40, %rsp1777; CHECK-NEXT: retq1778 %r = call <2 x float> @llvm.log2.v2f32(<2 x float> %x)1779 ret <2 x float> %r1780}1781 1782define <2 x float> @nearbyint__v2f32(<2 x float> %x) nounwind {1783; CHECK-LABEL: nearbyint__v2f32:1784; CHECK: # %bb.0:1785; CHECK-NEXT: vroundps $12, %xmm0, %xmm01786; CHECK-NEXT: retq1787 %r = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %x)1788 ret <2 x float> %r1789}1790 1791define <2 x float> @rint_v2f32(<2 x float> %x) nounwind {1792; CHECK-LABEL: rint_v2f32:1793; CHECK: # %bb.0:1794; CHECK-NEXT: vroundps $4, %xmm0, %xmm01795; CHECK-NEXT: retq1796 %r = call <2 x float> @llvm.rint.v2f32(<2 x float> %x)1797 ret <2 x float> %r1798}1799 1800define <2 x float> @round_v2f32(<2 x float> %x) nounwind {1801; CHECK-LABEL: round_v2f32:1802; CHECK: # %bb.0:1803; CHECK-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11804; CHECK-NEXT: vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm11805; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm01806; CHECK-NEXT: vroundps $11, %xmm0, %xmm01807; CHECK-NEXT: retq1808 %r = call <2 x float> @llvm.round.v2f32(<2 x float> %x)1809 ret <2 x float> %r1810}1811 1812define <2 x float> @sqrt_v2f32(<2 x float> %x) nounwind {1813; CHECK-LABEL: sqrt_v2f32:1814; CHECK: # %bb.0:1815; CHECK-NEXT: vsqrtps %xmm0, %xmm01816; CHECK-NEXT: retq1817 %r = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)1818 ret <2 x float> %r1819}1820 1821define <2 x float> @trunc_v2f32(<2 x float> %x) nounwind {1822; CHECK-LABEL: trunc_v2f32:1823; CHECK: # %bb.0:1824; CHECK-NEXT: vroundps $11, %xmm0, %xmm01825; CHECK-NEXT: retq1826 %r = call <2 x float> @llvm.trunc.v2f32(<2 x float> %x)1827 ret <2 x float> %r1828}1829 1830