brintos

brintos / llvm-project-archived public Read only

0
0
Text · 97.2 KiB · a3b9076 Raw
2465 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define double @sin_f64(double %a) {6; CHECK-LABEL: sin_f64:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    b sin9entry:10  %c = call double @llvm.sin.f64(double %a)11  ret double %c12}13 14define float @sin_f32(float %a) {15; CHECK-LABEL: sin_f32:16; CHECK:       // %bb.0: // %entry17; CHECK-NEXT:    b sinf18entry:19  %c = call float @llvm.sin.f32(float %a)20  ret float %c21}22 23define half @sin_f16(half %a) nounwind {24; CHECK-LABEL: sin_f16:25; CHECK:       // %bb.0: // %entry26; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill27; CHECK-NEXT:    fcvt s0, h028; CHECK-NEXT:    bl sinf29; CHECK-NEXT:    fcvt h0, s030; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload31; CHECK-NEXT:    ret32entry:33  %c = call half @llvm.sin.f16(half %a)34  ret half %c35}36 37define fp128 @sin_fp128(fp128 %a) {38; CHECK-LABEL: sin_fp128:39; CHECK:       // %bb.0: // %entry40; CHECK-NEXT:    b sinl41entry:42  %c = call fp128 @llvm.sin.fp128(fp128 %a)43  ret fp128 %c44}45 46define <1 x double> @sin_v1f64(<1 x double> %x) nounwind {47; CHECK-LABEL: sin_v1f64:48; CHECK:       // %bb.0:49; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill50; CHECK-NEXT:    bl sin51; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload52; CHECK-NEXT:    ret53  %c = call <1 x double> @llvm.sin.v1f64(<1 x double> %x)54  ret <1 x double> %c55}56 57define <2 x double> @sin_v2f64(<2 x double> %a) nounwind {58; CHECK-SD-LABEL: sin_v2f64:59; CHECK-SD:       // %bb.0: // %entry60; CHECK-SD-NEXT:    sub sp, sp, #4861; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill62; CHECK-SD-NEXT:    mov d0, v0.d[1]63; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill64; CHECK-SD-NEXT:    bl sin65; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q066; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill67; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload68; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q069; CHECK-SD-NEXT:    bl sin70; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload71; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q072; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload73; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]74; CHECK-SD-NEXT:    add sp, sp, #4875; CHECK-SD-NEXT:    ret76;77; CHECK-GI-LABEL: sin_v2f64:78; CHECK-GI:       // %bb.0: // %entry79; CHECK-GI-NEXT:    sub sp, sp, #3280; CHECK-GI-NEXT:    str d8, [sp, #16] // 8-byte Spill81; CHECK-GI-NEXT:    mov d8, v0.d[1]82; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q083; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill84; CHECK-GI-NEXT:    bl sin85; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q086; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill87; CHECK-GI-NEXT:    fmov d0, d888; CHECK-GI-NEXT:    bl sin89; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload90; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q091; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload92; CHECK-GI-NEXT:    ldr d8, [sp, #16] // 8-byte Reload93; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]94; CHECK-GI-NEXT:    mov v0.16b, v1.16b95; CHECK-GI-NEXT:    add sp, sp, #3296; CHECK-GI-NEXT:    ret97entry:98  %c = call <2 x double> @llvm.sin.v2f64(<2 x double> %a)99  ret <2 x double> %c100}101 102define <3 x double> @sin_v3f64(<3 x double> %a) nounwind {103; CHECK-SD-LABEL: sin_v3f64:104; CHECK-SD:       // %bb.0: // %entry105; CHECK-SD-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill106; CHECK-SD-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill107; CHECK-SD-NEXT:    fmov d8, d2108; CHECK-SD-NEXT:    fmov d9, d1109; CHECK-SD-NEXT:    str x30, [sp, #24] // 8-byte Spill110; CHECK-SD-NEXT:    bl sin111; CHECK-SD-NEXT:    fmov d10, d0112; CHECK-SD-NEXT:    fmov d0, d9113; CHECK-SD-NEXT:    bl sin114; CHECK-SD-NEXT:    fmov d9, d0115; CHECK-SD-NEXT:    fmov d0, d8116; CHECK-SD-NEXT:    bl sin117; CHECK-SD-NEXT:    fmov d1, d9118; CHECK-SD-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload119; CHECK-SD-NEXT:    ldr x30, [sp, #24] // 8-byte Reload120; CHECK-SD-NEXT:    fmov d2, d0121; CHECK-SD-NEXT:    fmov d0, d10122; CHECK-SD-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload123; CHECK-SD-NEXT:    ret124;125; CHECK-GI-LABEL: sin_v3f64:126; CHECK-GI:       // %bb.0: // %entry127; CHECK-GI-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill128; CHECK-GI-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill129; CHECK-GI-NEXT:    fmov d8, d1130; CHECK-GI-NEXT:    fmov d9, d2131; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill132; CHECK-GI-NEXT:    bl sin133; CHECK-GI-NEXT:    fmov d10, d0134; CHECK-GI-NEXT:    fmov d0, d8135; CHECK-GI-NEXT:    bl sin136; CHECK-GI-NEXT:    fmov d8, d0137; CHECK-GI-NEXT:    fmov d0, d9138; CHECK-GI-NEXT:    bl sin139; CHECK-GI-NEXT:    fmov d1, d8140; CHECK-GI-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload141; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload142; CHECK-GI-NEXT:    fmov d2, d0143; CHECK-GI-NEXT:    fmov d0, d10144; CHECK-GI-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload145; CHECK-GI-NEXT:    ret146entry:147  %c = call <3 x double> @llvm.sin.v3f64(<3 x double> %a)148  ret <3 x double> %c149}150 151define <4 x double> @sin_v4f64(<4 x double> %a) nounwind {152; CHECK-SD-LABEL: sin_v4f64:153; CHECK-SD:       // %bb.0: // %entry154; CHECK-SD-NEXT:    sub sp, sp, #64155; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill156; CHECK-SD-NEXT:    mov d0, v0.d[1]157; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill158; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill159; CHECK-SD-NEXT:    bl sin160; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0161; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill162; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload163; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0164; CHECK-SD-NEXT:    bl sin165; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload166; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0167; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]168; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill169; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload170; CHECK-SD-NEXT:    mov d0, v0.d[1]171; CHECK-SD-NEXT:    bl sin172; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0173; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill174; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload175; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0176; CHECK-SD-NEXT:    bl sin177; CHECK-SD-NEXT:    fmov d1, d0178; CHECK-SD-NEXT:    ldp q2, q0, [sp] // 32-byte Folded Reload179; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload180; CHECK-SD-NEXT:    mov v1.d[1], v2.d[0]181; CHECK-SD-NEXT:    add sp, sp, #64182; CHECK-SD-NEXT:    ret183;184; CHECK-GI-LABEL: sin_v4f64:185; CHECK-GI:       // %bb.0: // %entry186; CHECK-GI-NEXT:    sub sp, sp, #80187; CHECK-GI-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill188; CHECK-GI-NEXT:    mov d8, v0.d[1]189; CHECK-GI-NEXT:    mov d9, v1.d[1]190; CHECK-GI-NEXT:    str x30, [sp, #64] // 8-byte Spill191; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0192; CHECK-GI-NEXT:    str q1, [sp] // 16-byte Spill193; CHECK-GI-NEXT:    bl sin194; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0195; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill196; CHECK-GI-NEXT:    fmov d0, d8197; CHECK-GI-NEXT:    bl sin198; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0199; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill200; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload201; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0202; CHECK-GI-NEXT:    bl sin203; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0204; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill205; CHECK-GI-NEXT:    fmov d0, d9206; CHECK-GI-NEXT:    bl sin207; CHECK-GI-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload208; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0209; CHECK-GI-NEXT:    ldr x30, [sp, #64] // 8-byte Reload210; CHECK-GI-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload211; CHECK-GI-NEXT:    mov v2.d[1], v1.d[0]212; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload213; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]214; CHECK-GI-NEXT:    mov v0.16b, v2.16b215; CHECK-GI-NEXT:    add sp, sp, #80216; CHECK-GI-NEXT:    ret217entry:218  %c = call <4 x double> @llvm.sin.v4f64(<4 x double> %a)219  ret <4 x double> %c220}221 222define <2 x float> @sin_v2f32(<2 x float> %a) nounwind {223; CHECK-SD-LABEL: sin_v2f32:224; CHECK-SD:       // %bb.0: // %entry225; CHECK-SD-NEXT:    sub sp, sp, #48226; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0227; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill228; CHECK-SD-NEXT:    mov s0, v0.s[1]229; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill230; CHECK-SD-NEXT:    bl sinf231; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0232; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill233; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload234; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0235; CHECK-SD-NEXT:    bl sinf236; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload237; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0238; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload239; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]240; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0241; CHECK-SD-NEXT:    add sp, sp, #48242; CHECK-SD-NEXT:    ret243;244; CHECK-GI-LABEL: sin_v2f32:245; CHECK-GI:       // %bb.0: // %entry246; CHECK-GI-NEXT:    sub sp, sp, #32247; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0248; CHECK-GI-NEXT:    str d8, [sp, #16] // 8-byte Spill249; CHECK-GI-NEXT:    mov s8, v0.s[1]250; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill251; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0252; CHECK-GI-NEXT:    bl sinf253; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0254; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill255; CHECK-GI-NEXT:    fmov s0, s8256; CHECK-GI-NEXT:    bl sinf257; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload258; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0259; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload260; CHECK-GI-NEXT:    ldr d8, [sp, #16] // 8-byte Reload261; CHECK-GI-NEXT:    mov v1.s[1], v0.s[0]262; CHECK-GI-NEXT:    fmov d0, d1263; CHECK-GI-NEXT:    add sp, sp, #32264; CHECK-GI-NEXT:    ret265entry:266  %c = call <2 x float> @llvm.sin.v2f32(<2 x float> %a)267  ret <2 x float> %c268}269 270define <3 x float> @sin_v3f32(<3 x float> %a) nounwind {271; CHECK-SD-LABEL: sin_v3f32:272; CHECK-SD:       // %bb.0: // %entry273; CHECK-SD-NEXT:    sub sp, sp, #48274; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill275; CHECK-SD-NEXT:    mov s0, v0.s[1]276; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill277; CHECK-SD-NEXT:    bl sinf278; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0279; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill280; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload281; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0282; CHECK-SD-NEXT:    bl sinf283; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload284; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0285; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]286; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill287; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload288; CHECK-SD-NEXT:    mov s0, v0.s[2]289; CHECK-SD-NEXT:    bl sinf290; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload291; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0292; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload293; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]294; CHECK-SD-NEXT:    mov v0.16b, v1.16b295; CHECK-SD-NEXT:    add sp, sp, #48296; CHECK-SD-NEXT:    ret297;298; CHECK-GI-LABEL: sin_v3f32:299; CHECK-GI:       // %bb.0: // %entry300; CHECK-GI-NEXT:    sub sp, sp, #64301; CHECK-GI-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill302; CHECK-GI-NEXT:    mov s8, v0.s[1]303; CHECK-GI-NEXT:    mov s9, v0.s[2]304; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill305; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0306; CHECK-GI-NEXT:    bl sinf307; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0308; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill309; CHECK-GI-NEXT:    fmov s0, s8310; CHECK-GI-NEXT:    bl sinf311; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0312; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill313; CHECK-GI-NEXT:    fmov s0, s9314; CHECK-GI-NEXT:    bl sinf315; CHECK-GI-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload316; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0317; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload318; CHECK-GI-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload319; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]320; CHECK-GI-NEXT:    mov v1.s[2], v0.s[0]321; CHECK-GI-NEXT:    mov v0.16b, v1.16b322; CHECK-GI-NEXT:    add sp, sp, #64323; CHECK-GI-NEXT:    ret324entry:325  %c = call <3 x float> @llvm.sin.v3f32(<3 x float> %a)326  ret <3 x float> %c327}328 329define <4 x float> @sin_v4f32(<4 x float> %a) nounwind {330; CHECK-SD-LABEL: sin_v4f32:331; CHECK-SD:       // %bb.0: // %entry332; CHECK-SD-NEXT:    sub sp, sp, #48333; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill334; CHECK-SD-NEXT:    mov s0, v0.s[1]335; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill336; CHECK-SD-NEXT:    bl sinf337; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0338; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill339; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload340; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0341; CHECK-SD-NEXT:    bl sinf342; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload343; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0344; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]345; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill346; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload347; CHECK-SD-NEXT:    mov s0, v0.s[2]348; CHECK-SD-NEXT:    bl sinf349; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload350; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0351; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]352; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload353; CHECK-SD-NEXT:    mov s0, v0.s[3]354; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill355; CHECK-SD-NEXT:    bl sinf356; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload357; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0358; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload359; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]360; CHECK-SD-NEXT:    mov v0.16b, v1.16b361; CHECK-SD-NEXT:    add sp, sp, #48362; CHECK-SD-NEXT:    ret363;364; CHECK-GI-LABEL: sin_v4f32:365; CHECK-GI:       // %bb.0: // %entry366; CHECK-GI-NEXT:    sub sp, sp, #80367; CHECK-GI-NEXT:    str d10, [sp, #48] // 8-byte Spill368; CHECK-GI-NEXT:    mov s10, v0.s[3]369; CHECK-GI-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill370; CHECK-GI-NEXT:    mov s8, v0.s[1]371; CHECK-GI-NEXT:    mov s9, v0.s[2]372; CHECK-GI-NEXT:    str x30, [sp, #72] // 8-byte Spill373; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0374; CHECK-GI-NEXT:    bl sinf375; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0376; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill377; CHECK-GI-NEXT:    fmov s0, s8378; CHECK-GI-NEXT:    bl sinf379; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0380; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill381; CHECK-GI-NEXT:    fmov s0, s9382; CHECK-GI-NEXT:    bl sinf383; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0384; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill385; CHECK-GI-NEXT:    fmov s0, s10386; CHECK-GI-NEXT:    bl sinf387; CHECK-GI-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload388; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0389; CHECK-GI-NEXT:    ldr x30, [sp, #72] // 8-byte Reload390; CHECK-GI-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload391; CHECK-GI-NEXT:    ldr d10, [sp, #48] // 8-byte Reload392; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]393; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload394; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]395; CHECK-GI-NEXT:    mov v1.s[3], v0.s[0]396; CHECK-GI-NEXT:    mov v0.16b, v1.16b397; CHECK-GI-NEXT:    add sp, sp, #80398; CHECK-GI-NEXT:    ret399entry:400  %c = call <4 x float> @llvm.sin.v4f32(<4 x float> %a)401  ret <4 x float> %c402}403 404define <8 x float> @sin_v8f32(<8 x float> %a) nounwind {405; CHECK-SD-LABEL: sin_v8f32:406; CHECK-SD:       // %bb.0: // %entry407; CHECK-SD-NEXT:    sub sp, sp, #64408; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill409; CHECK-SD-NEXT:    mov s0, v0.s[1]410; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill411; CHECK-SD-NEXT:    bl sinf412; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0413; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill414; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload415; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0416; CHECK-SD-NEXT:    bl sinf417; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload418; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0419; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]420; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill421; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload422; CHECK-SD-NEXT:    mov s0, v0.s[2]423; CHECK-SD-NEXT:    bl sinf424; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload425; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0426; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]427; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload428; CHECK-SD-NEXT:    mov s0, v0.s[3]429; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill430; CHECK-SD-NEXT:    bl sinf431; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload432; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0433; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]434; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload435; CHECK-SD-NEXT:    mov s0, v0.s[1]436; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill437; CHECK-SD-NEXT:    bl sinf438; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0439; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill440; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload441; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0442; CHECK-SD-NEXT:    bl sinf443; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload444; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0445; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]446; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill447; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload448; CHECK-SD-NEXT:    mov s0, v0.s[2]449; CHECK-SD-NEXT:    bl sinf450; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload451; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0452; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]453; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload454; CHECK-SD-NEXT:    mov s0, v0.s[3]455; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill456; CHECK-SD-NEXT:    bl sinf457; CHECK-SD-NEXT:    fmov s2, s0458; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload459; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload460; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload461; CHECK-SD-NEXT:    mov v1.s[3], v2.s[0]462; CHECK-SD-NEXT:    add sp, sp, #64463; CHECK-SD-NEXT:    ret464;465; CHECK-GI-LABEL: sin_v8f32:466; CHECK-GI:       // %bb.0: // %entry467; CHECK-GI-NEXT:    sub sp, sp, #176468; CHECK-GI-NEXT:    stp d13, d12, [sp, #112] // 16-byte Folded Spill469; CHECK-GI-NEXT:    mov s12, v1.s[2]470; CHECK-GI-NEXT:    mov s13, v1.s[3]471; CHECK-GI-NEXT:    stp d11, d10, [sp, #128] // 16-byte Folded Spill472; CHECK-GI-NEXT:    mov s10, v0.s[3]473; CHECK-GI-NEXT:    mov s11, v1.s[1]474; CHECK-GI-NEXT:    stp d9, d8, [sp, #144] // 16-byte Folded Spill475; CHECK-GI-NEXT:    mov s8, v0.s[1]476; CHECK-GI-NEXT:    mov s9, v0.s[2]477; CHECK-GI-NEXT:    str x30, [sp, #160] // 8-byte Spill478; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0479; CHECK-GI-NEXT:    str q1, [sp, #32] // 16-byte Spill480; CHECK-GI-NEXT:    bl sinf481; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0482; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill483; CHECK-GI-NEXT:    fmov s0, s8484; CHECK-GI-NEXT:    bl sinf485; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0486; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill487; CHECK-GI-NEXT:    fmov s0, s9488; CHECK-GI-NEXT:    bl sinf489; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0490; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill491; CHECK-GI-NEXT:    fmov s0, s10492; CHECK-GI-NEXT:    bl sinf493; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0494; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill495; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload496; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0497; CHECK-GI-NEXT:    bl sinf498; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0499; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill500; CHECK-GI-NEXT:    fmov s0, s11501; CHECK-GI-NEXT:    bl sinf502; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0503; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill504; CHECK-GI-NEXT:    fmov s0, s12505; CHECK-GI-NEXT:    bl sinf506; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0507; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill508; CHECK-GI-NEXT:    fmov s0, s13509; CHECK-GI-NEXT:    bl sinf510; CHECK-GI-NEXT:    ldp q2, q1, [sp, #48] // 32-byte Folded Reload511; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0512; CHECK-GI-NEXT:    ldr x30, [sp, #160] // 8-byte Reload513; CHECK-GI-NEXT:    ldp d9, d8, [sp, #144] // 16-byte Folded Reload514; CHECK-GI-NEXT:    ldp d11, d10, [sp, #128] // 16-byte Folded Reload515; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]516; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload517; CHECK-GI-NEXT:    ldp d13, d12, [sp, #112] // 16-byte Folded Reload518; CHECK-GI-NEXT:    mov v3.s[1], v2.s[0]519; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload520; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]521; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload522; CHECK-GI-NEXT:    mov v3.s[2], v2.s[0]523; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload524; CHECK-GI-NEXT:    mov v1.s[3], v2.s[0]525; CHECK-GI-NEXT:    mov v3.s[3], v0.s[0]526; CHECK-GI-NEXT:    mov v2.16b, v1.16b527; CHECK-GI-NEXT:    mov v1.16b, v3.16b528; CHECK-GI-NEXT:    mov v0.16b, v2.16b529; CHECK-GI-NEXT:    add sp, sp, #176530; CHECK-GI-NEXT:    ret531entry:532  %c = call <8 x float> @llvm.sin.v8f32(<8 x float> %a)533  ret <8 x float> %c534}535 536define <7 x half> @sin_v7f16(<7 x half> %a) nounwind {537; CHECK-SD-LABEL: sin_v7f16:538; CHECK-SD:       // %bb.0: // %entry539; CHECK-SD-NEXT:    sub sp, sp, #48540; CHECK-SD-NEXT:    mov h1, v0.h[1]541; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill542; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill543; CHECK-SD-NEXT:    fcvt s0, h1544; CHECK-SD-NEXT:    bl sinf545; CHECK-SD-NEXT:    fcvt h0, s0546; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill547; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload548; CHECK-SD-NEXT:    fcvt s0, h0549; CHECK-SD-NEXT:    bl sinf550; CHECK-SD-NEXT:    fcvt h0, s0551; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload552; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]553; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill554; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload555; CHECK-SD-NEXT:    mov h0, v0.h[2]556; CHECK-SD-NEXT:    fcvt s0, h0557; CHECK-SD-NEXT:    bl sinf558; CHECK-SD-NEXT:    fcvt h0, s0559; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload560; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]561; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload562; CHECK-SD-NEXT:    mov h0, v0.h[3]563; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill564; CHECK-SD-NEXT:    fcvt s0, h0565; CHECK-SD-NEXT:    bl sinf566; CHECK-SD-NEXT:    fcvt h0, s0567; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload568; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]569; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload570; CHECK-SD-NEXT:    mov h0, v0.h[4]571; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill572; CHECK-SD-NEXT:    fcvt s0, h0573; CHECK-SD-NEXT:    bl sinf574; CHECK-SD-NEXT:    fcvt h0, s0575; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload576; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]577; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload578; CHECK-SD-NEXT:    mov h0, v0.h[5]579; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill580; CHECK-SD-NEXT:    fcvt s0, h0581; CHECK-SD-NEXT:    bl sinf582; CHECK-SD-NEXT:    fcvt h0, s0583; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload584; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]585; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload586; CHECK-SD-NEXT:    mov h0, v0.h[6]587; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill588; CHECK-SD-NEXT:    fcvt s0, h0589; CHECK-SD-NEXT:    bl sinf590; CHECK-SD-NEXT:    fcvt h0, s0591; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload592; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]593; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload594; CHECK-SD-NEXT:    mov h0, v0.h[7]595; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill596; CHECK-SD-NEXT:    fcvt s0, h0597; CHECK-SD-NEXT:    bl sinf598; CHECK-SD-NEXT:    fcvt h1, s0599; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload600; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload601; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]602; CHECK-SD-NEXT:    add sp, sp, #48603; CHECK-SD-NEXT:    ret604;605; CHECK-GI-LABEL: sin_v7f16:606; CHECK-GI:       // %bb.0: // %entry607; CHECK-GI-NEXT:    sub sp, sp, #160608; CHECK-GI-NEXT:    stp d13, d12, [sp, #96] // 16-byte Folded Spill609; CHECK-GI-NEXT:    mov h12, v0.h[5]610; CHECK-GI-NEXT:    mov h13, v0.h[6]611; CHECK-GI-NEXT:    stp d11, d10, [sp, #112] // 16-byte Folded Spill612; CHECK-GI-NEXT:    mov h10, v0.h[3]613; CHECK-GI-NEXT:    mov h11, v0.h[4]614; CHECK-GI-NEXT:    stp d9, d8, [sp, #128] // 16-byte Folded Spill615; CHECK-GI-NEXT:    mov h8, v0.h[1]616; CHECK-GI-NEXT:    mov h9, v0.h[2]617; CHECK-GI-NEXT:    fcvt s0, h0618; CHECK-GI-NEXT:    str x30, [sp, #144] // 8-byte Spill619; CHECK-GI-NEXT:    bl sinf620; CHECK-GI-NEXT:    fcvt s1, h8621; CHECK-GI-NEXT:    fcvt h0, s0622; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill623; CHECK-GI-NEXT:    fmov s0, s1624; CHECK-GI-NEXT:    bl sinf625; CHECK-GI-NEXT:    fcvt s1, h9626; CHECK-GI-NEXT:    fcvt h0, s0627; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill628; CHECK-GI-NEXT:    fmov s0, s1629; CHECK-GI-NEXT:    bl sinf630; CHECK-GI-NEXT:    fcvt s1, h10631; CHECK-GI-NEXT:    fcvt h0, s0632; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill633; CHECK-GI-NEXT:    fmov s0, s1634; CHECK-GI-NEXT:    bl sinf635; CHECK-GI-NEXT:    fcvt s1, h11636; CHECK-GI-NEXT:    fcvt h0, s0637; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill638; CHECK-GI-NEXT:    fmov s0, s1639; CHECK-GI-NEXT:    bl sinf640; CHECK-GI-NEXT:    fcvt s1, h12641; CHECK-GI-NEXT:    fcvt h0, s0642; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill643; CHECK-GI-NEXT:    fmov s0, s1644; CHECK-GI-NEXT:    bl sinf645; CHECK-GI-NEXT:    fcvt s1, h13646; CHECK-GI-NEXT:    fcvt h0, s0647; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill648; CHECK-GI-NEXT:    fmov s0, s1649; CHECK-GI-NEXT:    bl sinf650; CHECK-GI-NEXT:    ldp q3, q2, [sp, #48] // 32-byte Folded Reload651; CHECK-GI-NEXT:    fcvt h0, s0652; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload653; CHECK-GI-NEXT:    ldp d9, d8, [sp, #128] // 16-byte Folded Reload654; CHECK-GI-NEXT:    ldp d11, d10, [sp, #112] // 16-byte Folded Reload655; CHECK-GI-NEXT:    ldr x30, [sp, #144] // 8-byte Reload656; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]657; CHECK-GI-NEXT:    ldp d13, d12, [sp, #96] // 16-byte Folded Reload658; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]659; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload660; CHECK-GI-NEXT:    mov v1.h[3], v3.h[0]661; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]662; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload663; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]664; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]665; CHECK-GI-NEXT:    mov v0.16b, v1.16b666; CHECK-GI-NEXT:    add sp, sp, #160667; CHECK-GI-NEXT:    ret668entry:669  %c = call <7 x half> @llvm.sin.v7f16(<7 x half> %a)670  ret <7 x half> %c671}672 673define <4 x half> @sin_v4f16(<4 x half> %a) nounwind {674; CHECK-SD-LABEL: sin_v4f16:675; CHECK-SD:       // %bb.0: // %entry676; CHECK-SD-NEXT:    sub sp, sp, #48677; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0678; CHECK-SD-NEXT:    mov h1, v0.h[1]679; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill680; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill681; CHECK-SD-NEXT:    fcvt s0, h1682; CHECK-SD-NEXT:    bl sinf683; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload684; CHECK-SD-NEXT:    fcvt h0, s0685; CHECK-SD-NEXT:    fcvt s1, h1686; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill687; CHECK-SD-NEXT:    fmov s0, s1688; CHECK-SD-NEXT:    bl sinf689; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload690; CHECK-SD-NEXT:    fcvt h2, s0691; CHECK-SD-NEXT:    mov h1, v1.h[2]692; CHECK-SD-NEXT:    fcvt s0, h1693; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload694; CHECK-SD-NEXT:    mov v2.h[1], v1.h[0]695; CHECK-SD-NEXT:    str q2, [sp] // 16-byte Spill696; CHECK-SD-NEXT:    bl sinf697; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload698; CHECK-SD-NEXT:    fcvt h2, s0699; CHECK-SD-NEXT:    mov h1, v1.h[3]700; CHECK-SD-NEXT:    fcvt s0, h1701; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload702; CHECK-SD-NEXT:    mov v1.h[2], v2.h[0]703; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill704; CHECK-SD-NEXT:    bl sinf705; CHECK-SD-NEXT:    fcvt h1, s0706; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload707; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload708; CHECK-SD-NEXT:    mov v0.h[3], v1.h[0]709; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0710; CHECK-SD-NEXT:    add sp, sp, #48711; CHECK-SD-NEXT:    ret712;713; CHECK-GI-LABEL: sin_v4f16:714; CHECK-GI:       // %bb.0: // %entry715; CHECK-GI-NEXT:    sub sp, sp, #80716; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0717; CHECK-GI-NEXT:    str d10, [sp, #48] // 8-byte Spill718; CHECK-GI-NEXT:    mov h10, v0.h[3]719; CHECK-GI-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill720; CHECK-GI-NEXT:    mov h8, v0.h[1]721; CHECK-GI-NEXT:    mov h9, v0.h[2]722; CHECK-GI-NEXT:    fcvt s0, h0723; CHECK-GI-NEXT:    str x30, [sp, #72] // 8-byte Spill724; CHECK-GI-NEXT:    bl sinf725; CHECK-GI-NEXT:    fcvt s1, h8726; CHECK-GI-NEXT:    fcvt h0, s0727; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill728; CHECK-GI-NEXT:    fmov s0, s1729; CHECK-GI-NEXT:    bl sinf730; CHECK-GI-NEXT:    fcvt s1, h9731; CHECK-GI-NEXT:    fcvt h0, s0732; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill733; CHECK-GI-NEXT:    fmov s0, s1734; CHECK-GI-NEXT:    bl sinf735; CHECK-GI-NEXT:    fcvt s1, h10736; CHECK-GI-NEXT:    fcvt h0, s0737; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill738; CHECK-GI-NEXT:    fmov s0, s1739; CHECK-GI-NEXT:    bl sinf740; CHECK-GI-NEXT:    ldp q3, q2, [sp] // 32-byte Folded Reload741; CHECK-GI-NEXT:    fcvt h0, s0742; CHECK-GI-NEXT:    ldr q1, [sp, #32] // 16-byte Reload743; CHECK-GI-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload744; CHECK-GI-NEXT:    ldr x30, [sp, #72] // 8-byte Reload745; CHECK-GI-NEXT:    ldr d10, [sp, #48] // 8-byte Reload746; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]747; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]748; CHECK-GI-NEXT:    mov v1.h[3], v0.h[0]749; CHECK-GI-NEXT:    mov v0.16b, v1.16b750; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0751; CHECK-GI-NEXT:    add sp, sp, #80752; CHECK-GI-NEXT:    ret753entry:754  %c = call <4 x half> @llvm.sin.v4f16(<4 x half> %a)755  ret <4 x half> %c756}757 758define <8 x half> @sin_v8f16(<8 x half> %a) nounwind {759; CHECK-SD-LABEL: sin_v8f16:760; CHECK-SD:       // %bb.0: // %entry761; CHECK-SD-NEXT:    sub sp, sp, #48762; CHECK-SD-NEXT:    mov h1, v0.h[1]763; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill764; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill765; CHECK-SD-NEXT:    fcvt s0, h1766; CHECK-SD-NEXT:    bl sinf767; CHECK-SD-NEXT:    fcvt h0, s0768; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill769; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload770; CHECK-SD-NEXT:    fcvt s0, h0771; CHECK-SD-NEXT:    bl sinf772; CHECK-SD-NEXT:    fcvt h0, s0773; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload774; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]775; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill776; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload777; CHECK-SD-NEXT:    mov h0, v0.h[2]778; CHECK-SD-NEXT:    fcvt s0, h0779; CHECK-SD-NEXT:    bl sinf780; CHECK-SD-NEXT:    fcvt h0, s0781; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload782; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]783; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload784; CHECK-SD-NEXT:    mov h0, v0.h[3]785; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill786; CHECK-SD-NEXT:    fcvt s0, h0787; CHECK-SD-NEXT:    bl sinf788; CHECK-SD-NEXT:    fcvt h0, s0789; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload790; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]791; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload792; CHECK-SD-NEXT:    mov h0, v0.h[4]793; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill794; CHECK-SD-NEXT:    fcvt s0, h0795; CHECK-SD-NEXT:    bl sinf796; CHECK-SD-NEXT:    fcvt h0, s0797; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload798; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]799; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload800; CHECK-SD-NEXT:    mov h0, v0.h[5]801; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill802; CHECK-SD-NEXT:    fcvt s0, h0803; CHECK-SD-NEXT:    bl sinf804; CHECK-SD-NEXT:    fcvt h0, s0805; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload806; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]807; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload808; CHECK-SD-NEXT:    mov h0, v0.h[6]809; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill810; CHECK-SD-NEXT:    fcvt s0, h0811; CHECK-SD-NEXT:    bl sinf812; CHECK-SD-NEXT:    fcvt h0, s0813; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload814; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]815; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload816; CHECK-SD-NEXT:    mov h0, v0.h[7]817; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill818; CHECK-SD-NEXT:    fcvt s0, h0819; CHECK-SD-NEXT:    bl sinf820; CHECK-SD-NEXT:    fcvt h1, s0821; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload822; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload823; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]824; CHECK-SD-NEXT:    add sp, sp, #48825; CHECK-SD-NEXT:    ret826;827; CHECK-GI-LABEL: sin_v8f16:828; CHECK-GI:       // %bb.0: // %entry829; CHECK-GI-NEXT:    sub sp, sp, #176830; CHECK-GI-NEXT:    str d14, [sp, #112] // 8-byte Spill831; CHECK-GI-NEXT:    mov h14, v0.h[7]832; CHECK-GI-NEXT:    stp d13, d12, [sp, #120] // 16-byte Folded Spill833; CHECK-GI-NEXT:    mov h12, v0.h[5]834; CHECK-GI-NEXT:    mov h13, v0.h[6]835; CHECK-GI-NEXT:    stp d11, d10, [sp, #136] // 16-byte Folded Spill836; CHECK-GI-NEXT:    mov h10, v0.h[3]837; CHECK-GI-NEXT:    mov h11, v0.h[4]838; CHECK-GI-NEXT:    stp d9, d8, [sp, #152] // 16-byte Folded Spill839; CHECK-GI-NEXT:    mov h8, v0.h[1]840; CHECK-GI-NEXT:    mov h9, v0.h[2]841; CHECK-GI-NEXT:    fcvt s0, h0842; CHECK-GI-NEXT:    str x30, [sp, #168] // 8-byte Spill843; CHECK-GI-NEXT:    bl sinf844; CHECK-GI-NEXT:    fcvt s1, h8845; CHECK-GI-NEXT:    fcvt h0, s0846; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill847; CHECK-GI-NEXT:    fmov s0, s1848; CHECK-GI-NEXT:    bl sinf849; CHECK-GI-NEXT:    fcvt s1, h9850; CHECK-GI-NEXT:    fcvt h0, s0851; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill852; CHECK-GI-NEXT:    fmov s0, s1853; CHECK-GI-NEXT:    bl sinf854; CHECK-GI-NEXT:    fcvt s1, h10855; CHECK-GI-NEXT:    fcvt h0, s0856; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill857; CHECK-GI-NEXT:    fmov s0, s1858; CHECK-GI-NEXT:    bl sinf859; CHECK-GI-NEXT:    fcvt s1, h11860; CHECK-GI-NEXT:    fcvt h0, s0861; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill862; CHECK-GI-NEXT:    fmov s0, s1863; CHECK-GI-NEXT:    bl sinf864; CHECK-GI-NEXT:    fcvt s1, h12865; CHECK-GI-NEXT:    fcvt h0, s0866; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill867; CHECK-GI-NEXT:    fmov s0, s1868; CHECK-GI-NEXT:    bl sinf869; CHECK-GI-NEXT:    fcvt s1, h13870; CHECK-GI-NEXT:    fcvt h0, s0871; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill872; CHECK-GI-NEXT:    fmov s0, s1873; CHECK-GI-NEXT:    bl sinf874; CHECK-GI-NEXT:    fcvt s1, h14875; CHECK-GI-NEXT:    fcvt h0, s0876; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill877; CHECK-GI-NEXT:    fmov s0, s1878; CHECK-GI-NEXT:    bl sinf879; CHECK-GI-NEXT:    ldp q3, q2, [sp, #64] // 32-byte Folded Reload880; CHECK-GI-NEXT:    fcvt h0, s0881; CHECK-GI-NEXT:    ldr q1, [sp, #96] // 16-byte Reload882; CHECK-GI-NEXT:    ldp d9, d8, [sp, #152] // 16-byte Folded Reload883; CHECK-GI-NEXT:    ldp d11, d10, [sp, #136] // 16-byte Folded Reload884; CHECK-GI-NEXT:    ldr x30, [sp, #168] // 8-byte Reload885; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]886; CHECK-GI-NEXT:    ldr d14, [sp, #112] // 8-byte Reload887; CHECK-GI-NEXT:    ldp d13, d12, [sp, #120] // 16-byte Folded Reload888; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]889; CHECK-GI-NEXT:    ldp q2, q3, [sp, #32] // 32-byte Folded Reload890; CHECK-GI-NEXT:    mov v1.h[3], v3.h[0]891; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]892; CHECK-GI-NEXT:    ldp q2, q3, [sp] // 32-byte Folded Reload893; CHECK-GI-NEXT:    mov v1.h[5], v3.h[0]894; CHECK-GI-NEXT:    mov v1.h[6], v2.h[0]895; CHECK-GI-NEXT:    mov v1.h[7], v0.h[0]896; CHECK-GI-NEXT:    mov v0.16b, v1.16b897; CHECK-GI-NEXT:    add sp, sp, #176898; CHECK-GI-NEXT:    ret899entry:900  %c = call <8 x half> @llvm.sin.v8f16(<8 x half> %a)901  ret <8 x half> %c902}903 904define <16 x half> @sin_v16f16(<16 x half> %a) nounwind {905; CHECK-SD-LABEL: sin_v16f16:906; CHECK-SD:       // %bb.0: // %entry907; CHECK-SD-NEXT:    sub sp, sp, #64908; CHECK-SD-NEXT:    stp q1, q0, [sp] // 32-byte Folded Spill909; CHECK-SD-NEXT:    mov h1, v0.h[1]910; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill911; CHECK-SD-NEXT:    fcvt s0, h1912; CHECK-SD-NEXT:    bl sinf913; CHECK-SD-NEXT:    fcvt h0, s0914; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill915; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload916; CHECK-SD-NEXT:    fcvt s0, h0917; CHECK-SD-NEXT:    bl sinf918; CHECK-SD-NEXT:    fcvt h0, s0919; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload920; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]921; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill922; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload923; CHECK-SD-NEXT:    mov h0, v0.h[2]924; CHECK-SD-NEXT:    fcvt s0, h0925; CHECK-SD-NEXT:    bl sinf926; CHECK-SD-NEXT:    fcvt h0, s0927; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload928; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]929; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload930; CHECK-SD-NEXT:    mov h0, v0.h[3]931; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill932; CHECK-SD-NEXT:    fcvt s0, h0933; CHECK-SD-NEXT:    bl sinf934; CHECK-SD-NEXT:    fcvt h0, s0935; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload936; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]937; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload938; CHECK-SD-NEXT:    mov h0, v0.h[4]939; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill940; CHECK-SD-NEXT:    fcvt s0, h0941; CHECK-SD-NEXT:    bl sinf942; CHECK-SD-NEXT:    fcvt h0, s0943; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload944; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]945; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload946; CHECK-SD-NEXT:    mov h0, v0.h[5]947; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill948; CHECK-SD-NEXT:    fcvt s0, h0949; CHECK-SD-NEXT:    bl sinf950; CHECK-SD-NEXT:    fcvt h0, s0951; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload952; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]953; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload954; CHECK-SD-NEXT:    mov h0, v0.h[6]955; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill956; CHECK-SD-NEXT:    fcvt s0, h0957; CHECK-SD-NEXT:    bl sinf958; CHECK-SD-NEXT:    fcvt h0, s0959; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload960; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]961; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload962; CHECK-SD-NEXT:    mov h0, v0.h[7]963; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill964; CHECK-SD-NEXT:    fcvt s0, h0965; CHECK-SD-NEXT:    bl sinf966; CHECK-SD-NEXT:    fcvt h0, s0967; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload968; CHECK-SD-NEXT:    mov v1.h[7], v0.h[0]969; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload970; CHECK-SD-NEXT:    mov h0, v0.h[1]971; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill972; CHECK-SD-NEXT:    fcvt s0, h0973; CHECK-SD-NEXT:    bl sinf974; CHECK-SD-NEXT:    fcvt h0, s0975; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill976; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload977; CHECK-SD-NEXT:    fcvt s0, h0978; CHECK-SD-NEXT:    bl sinf979; CHECK-SD-NEXT:    fcvt h0, s0980; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload981; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]982; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill983; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload984; CHECK-SD-NEXT:    mov h0, v0.h[2]985; CHECK-SD-NEXT:    fcvt s0, h0986; CHECK-SD-NEXT:    bl sinf987; CHECK-SD-NEXT:    fcvt h0, s0988; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload989; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]990; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload991; CHECK-SD-NEXT:    mov h0, v0.h[3]992; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill993; CHECK-SD-NEXT:    fcvt s0, h0994; CHECK-SD-NEXT:    bl sinf995; CHECK-SD-NEXT:    fcvt h0, s0996; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload997; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]998; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload999; CHECK-SD-NEXT:    mov h0, v0.h[4]1000; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1001; CHECK-SD-NEXT:    fcvt s0, h01002; CHECK-SD-NEXT:    bl sinf1003; CHECK-SD-NEXT:    fcvt h0, s01004; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1005; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1006; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1007; CHECK-SD-NEXT:    mov h0, v0.h[5]1008; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1009; CHECK-SD-NEXT:    fcvt s0, h01010; CHECK-SD-NEXT:    bl sinf1011; CHECK-SD-NEXT:    fcvt h0, s01012; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1013; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1014; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1015; CHECK-SD-NEXT:    mov h0, v0.h[6]1016; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1017; CHECK-SD-NEXT:    fcvt s0, h01018; CHECK-SD-NEXT:    bl sinf1019; CHECK-SD-NEXT:    fcvt h0, s01020; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1021; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1022; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1023; CHECK-SD-NEXT:    mov h0, v0.h[7]1024; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1025; CHECK-SD-NEXT:    fcvt s0, h01026; CHECK-SD-NEXT:    bl sinf1027; CHECK-SD-NEXT:    fmov s1, s01028; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1029; CHECK-SD-NEXT:    fcvt h2, s11030; CHECK-SD-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload1031; CHECK-SD-NEXT:    mov v1.h[7], v2.h[0]1032; CHECK-SD-NEXT:    add sp, sp, #641033; CHECK-SD-NEXT:    ret1034;1035; CHECK-GI-LABEL: sin_v16f16:1036; CHECK-GI:       // %bb.0: // %entry1037; CHECK-GI-NEXT:    sub sp, sp, #3201038; CHECK-GI-NEXT:    stp d15, d14, [sp, #240] // 16-byte Folded Spill1039; CHECK-GI-NEXT:    mov v2.16b, v1.16b1040; CHECK-GI-NEXT:    mov h14, v1.h[1]1041; CHECK-GI-NEXT:    str q1, [sp, #80] // 16-byte Spill1042; CHECK-GI-NEXT:    mov h1, v1.h[2]1043; CHECK-GI-NEXT:    mov h15, v0.h[1]1044; CHECK-GI-NEXT:    stp d13, d12, [sp, #256] // 16-byte Folded Spill1045; CHECK-GI-NEXT:    mov h12, v0.h[6]1046; CHECK-GI-NEXT:    mov h13, v0.h[7]1047; CHECK-GI-NEXT:    stp d11, d10, [sp, #272] // 16-byte Folded Spill1048; CHECK-GI-NEXT:    mov h10, v0.h[4]1049; CHECK-GI-NEXT:    mov h11, v0.h[5]1050; CHECK-GI-NEXT:    stp d9, d8, [sp, #288] // 16-byte Folded Spill1051; CHECK-GI-NEXT:    mov h8, v0.h[2]1052; CHECK-GI-NEXT:    mov h9, v0.h[3]1053; CHECK-GI-NEXT:    str h1, [sp, #16] // 2-byte Spill1054; CHECK-GI-NEXT:    mov h1, v2.h[3]1055; CHECK-GI-NEXT:    fcvt s0, h01056; CHECK-GI-NEXT:    stp x29, x30, [sp, #304] // 16-byte Folded Spill1057; CHECK-GI-NEXT:    str h1, [sp, #32] // 2-byte Spill1058; CHECK-GI-NEXT:    mov h1, v2.h[4]1059; CHECK-GI-NEXT:    str h1, [sp, #48] // 2-byte Spill1060; CHECK-GI-NEXT:    mov h1, v2.h[5]1061; CHECK-GI-NEXT:    str h1, [sp, #64] // 2-byte Spill1062; CHECK-GI-NEXT:    mov h1, v2.h[6]1063; CHECK-GI-NEXT:    str h1, [sp, #96] // 2-byte Spill1064; CHECK-GI-NEXT:    mov h1, v2.h[7]1065; CHECK-GI-NEXT:    str h1, [sp, #160] // 2-byte Spill1066; CHECK-GI-NEXT:    bl sinf1067; CHECK-GI-NEXT:    fcvt s1, h151068; CHECK-GI-NEXT:    fcvt h0, s01069; CHECK-GI-NEXT:    str q0, [sp, #192] // 16-byte Spill1070; CHECK-GI-NEXT:    fmov s0, s11071; CHECK-GI-NEXT:    bl sinf1072; CHECK-GI-NEXT:    fcvt s1, h81073; CHECK-GI-NEXT:    fcvt h0, s01074; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill1075; CHECK-GI-NEXT:    fmov s0, s11076; CHECK-GI-NEXT:    bl sinf1077; CHECK-GI-NEXT:    fcvt s1, h91078; CHECK-GI-NEXT:    fcvt h0, s01079; CHECK-GI-NEXT:    str q0, [sp, #224] // 16-byte Spill1080; CHECK-GI-NEXT:    fmov s0, s11081; CHECK-GI-NEXT:    bl sinf1082; CHECK-GI-NEXT:    fcvt s1, h101083; CHECK-GI-NEXT:    fcvt h0, s01084; CHECK-GI-NEXT:    str q0, [sp, #208] // 16-byte Spill1085; CHECK-GI-NEXT:    fmov s0, s11086; CHECK-GI-NEXT:    bl sinf1087; CHECK-GI-NEXT:    fcvt s1, h111088; CHECK-GI-NEXT:    fcvt h0, s01089; CHECK-GI-NEXT:    str q0, [sp, #176] // 16-byte Spill1090; CHECK-GI-NEXT:    fmov s0, s11091; CHECK-GI-NEXT:    bl sinf1092; CHECK-GI-NEXT:    fcvt s1, h121093; CHECK-GI-NEXT:    fcvt h0, s01094; CHECK-GI-NEXT:    str q0, [sp, #144] // 16-byte Spill1095; CHECK-GI-NEXT:    fmov s0, s11096; CHECK-GI-NEXT:    bl sinf1097; CHECK-GI-NEXT:    fcvt s1, h131098; CHECK-GI-NEXT:    fcvt h0, s01099; CHECK-GI-NEXT:    str q0, [sp, #128] // 16-byte Spill1100; CHECK-GI-NEXT:    fmov s0, s11101; CHECK-GI-NEXT:    bl sinf1102; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload1103; CHECK-GI-NEXT:    fcvt h0, s01104; CHECK-GI-NEXT:    fcvt s1, h11105; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1106; CHECK-GI-NEXT:    fmov s0, s11107; CHECK-GI-NEXT:    bl sinf1108; CHECK-GI-NEXT:    fcvt s1, h141109; CHECK-GI-NEXT:    fcvt h0, s01110; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1111; CHECK-GI-NEXT:    fmov s0, s11112; CHECK-GI-NEXT:    bl sinf1113; CHECK-GI-NEXT:    ldr h1, [sp, #16] // 2-byte Reload1114; CHECK-GI-NEXT:    fcvt h0, s01115; CHECK-GI-NEXT:    fcvt s1, h11116; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1117; CHECK-GI-NEXT:    fmov s0, s11118; CHECK-GI-NEXT:    bl sinf1119; CHECK-GI-NEXT:    ldr h1, [sp, #32] // 2-byte Reload1120; CHECK-GI-NEXT:    fcvt h0, s01121; CHECK-GI-NEXT:    fcvt s1, h11122; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1123; CHECK-GI-NEXT:    fmov s0, s11124; CHECK-GI-NEXT:    bl sinf1125; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload1126; CHECK-GI-NEXT:    fcvt h0, s01127; CHECK-GI-NEXT:    fcvt s1, h11128; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1129; CHECK-GI-NEXT:    fmov s0, s11130; CHECK-GI-NEXT:    bl sinf1131; CHECK-GI-NEXT:    ldr h1, [sp, #64] // 2-byte Reload1132; CHECK-GI-NEXT:    fcvt h0, s01133; CHECK-GI-NEXT:    fcvt s1, h11134; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill1135; CHECK-GI-NEXT:    fmov s0, s11136; CHECK-GI-NEXT:    bl sinf1137; CHECK-GI-NEXT:    ldr h1, [sp, #96] // 2-byte Reload1138; CHECK-GI-NEXT:    fcvt h0, s01139; CHECK-GI-NEXT:    fcvt s1, h11140; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill1141; CHECK-GI-NEXT:    fmov s0, s11142; CHECK-GI-NEXT:    bl sinf1143; CHECK-GI-NEXT:    ldr h1, [sp, #160] // 2-byte Reload1144; CHECK-GI-NEXT:    fcvt h0, s01145; CHECK-GI-NEXT:    fcvt s1, h11146; CHECK-GI-NEXT:    str q0, [sp, #160] // 16-byte Spill1147; CHECK-GI-NEXT:    fmov s0, s11148; CHECK-GI-NEXT:    bl sinf1149; CHECK-GI-NEXT:    ldr q3, [sp, #192] // 16-byte Reload1150; CHECK-GI-NEXT:    ldr q2, [sp, #112] // 16-byte Reload1151; CHECK-GI-NEXT:    ldp x29, x30, [sp, #304] // 16-byte Folded Reload1152; CHECK-GI-NEXT:    mov v3.h[1], v2.h[0]1153; CHECK-GI-NEXT:    ldp q1, q2, [sp] // 32-byte Folded Reload1154; CHECK-GI-NEXT:    ldp d9, d8, [sp, #288] // 16-byte Folded Reload1155; CHECK-GI-NEXT:    ldp d11, d10, [sp, #272] // 16-byte Folded Reload1156; CHECK-GI-NEXT:    mov v1.h[1], v2.h[0]1157; CHECK-GI-NEXT:    ldr q2, [sp, #224] // 16-byte Reload1158; CHECK-GI-NEXT:    ldp d13, d12, [sp, #256] // 16-byte Folded Reload1159; CHECK-GI-NEXT:    mov v3.h[2], v2.h[0]1160; CHECK-GI-NEXT:    ldr q2, [sp, #32] // 16-byte Reload1161; CHECK-GI-NEXT:    ldp d15, d14, [sp, #240] // 16-byte Folded Reload1162; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1163; CHECK-GI-NEXT:    ldr q2, [sp, #208] // 16-byte Reload1164; CHECK-GI-NEXT:    mov v3.h[3], v2.h[0]1165; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload1166; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]1167; CHECK-GI-NEXT:    ldr q2, [sp, #176] // 16-byte Reload1168; CHECK-GI-NEXT:    mov v3.h[4], v2.h[0]1169; CHECK-GI-NEXT:    ldr q2, [sp, #64] // 16-byte Reload1170; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]1171; CHECK-GI-NEXT:    ldr q2, [sp, #144] // 16-byte Reload1172; CHECK-GI-NEXT:    mov v3.h[5], v2.h[0]1173; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload1174; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1175; CHECK-GI-NEXT:    fcvt h2, s01176; CHECK-GI-NEXT:    ldr q0, [sp, #128] // 16-byte Reload1177; CHECK-GI-NEXT:    mov v3.h[6], v0.h[0]1178; CHECK-GI-NEXT:    ldr q0, [sp, #160] // 16-byte Reload1179; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]1180; CHECK-GI-NEXT:    ldr q0, [sp, #80] // 16-byte Reload1181; CHECK-GI-NEXT:    mov v3.h[7], v0.h[0]1182; CHECK-GI-NEXT:    mov v1.h[7], v2.h[0]1183; CHECK-GI-NEXT:    mov v0.16b, v3.16b1184; CHECK-GI-NEXT:    add sp, sp, #3201185; CHECK-GI-NEXT:    ret1186entry:1187  %c = call <16 x half> @llvm.sin.v16f16(<16 x half> %a)1188  ret <16 x half> %c1189}1190 1191define <2 x fp128> @sin_v2fp128(<2 x fp128> %a) nounwind {1192; CHECK-LABEL: sin_v2fp128:1193; CHECK:       // %bb.0: // %entry1194; CHECK-NEXT:    sub sp, sp, #481195; CHECK-NEXT:    str x30, [sp, #32] // 8-byte Spill1196; CHECK-NEXT:    str q1, [sp, #16] // 16-byte Spill1197; CHECK-NEXT:    bl sinl1198; CHECK-NEXT:    str q0, [sp] // 16-byte Spill1199; CHECK-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1200; CHECK-NEXT:    bl sinl1201; CHECK-NEXT:    mov v1.16b, v0.16b1202; CHECK-NEXT:    ldr q0, [sp] // 16-byte Reload1203; CHECK-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1204; CHECK-NEXT:    add sp, sp, #481205; CHECK-NEXT:    ret1206entry:1207  %c = call <2 x fp128> @llvm.sin.v2fp128(<2 x fp128> %a)1208  ret <2 x fp128> %c1209}1210 1211define double @cos_f64(double %a) {1212; CHECK-LABEL: cos_f64:1213; CHECK:       // %bb.0: // %entry1214; CHECK-NEXT:    b cos1215entry:1216  %c = call double @llvm.cos.f64(double %a)1217  ret double %c1218}1219 1220define float @cos_f32(float %a) {1221; CHECK-LABEL: cos_f32:1222; CHECK:       // %bb.0: // %entry1223; CHECK-NEXT:    b cosf1224entry:1225  %c = call float @llvm.cos.f32(float %a)1226  ret float %c1227}1228 1229define half @cos_f16(half %a) nounwind {1230; CHECK-LABEL: cos_f16:1231; CHECK:       // %bb.0: // %entry1232; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill1233; CHECK-NEXT:    fcvt s0, h01234; CHECK-NEXT:    bl cosf1235; CHECK-NEXT:    fcvt h0, s01236; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload1237; CHECK-NEXT:    ret1238entry:1239  %c = call half @llvm.cos.f16(half %a)1240  ret half %c1241}1242 1243define fp128 @cos_fp128(fp128 %a) {1244; CHECK-LABEL: cos_fp128:1245; CHECK:       // %bb.0: // %entry1246; CHECK-NEXT:    b cosl1247entry:1248  %c = call fp128 @llvm.cos.fp128(fp128 %a)1249  ret fp128 %c1250}1251 1252define <1 x double> @cos_v1f64(<1 x double> %x) nounwind {1253; CHECK-LABEL: cos_v1f64:1254; CHECK:       // %bb.0:1255; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill1256; CHECK-NEXT:    bl cos1257; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload1258; CHECK-NEXT:    ret1259  %c = call <1 x double> @llvm.cos.v1f64(<1 x double> %x)1260  ret <1 x double> %c1261}1262 1263define <2 x double> @cos_v2f64(<2 x double> %a) nounwind {1264; CHECK-SD-LABEL: cos_v2f64:1265; CHECK-SD:       // %bb.0: // %entry1266; CHECK-SD-NEXT:    sub sp, sp, #481267; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1268; CHECK-SD-NEXT:    mov d0, v0.d[1]1269; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1270; CHECK-SD-NEXT:    bl cos1271; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01272; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1273; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1274; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01275; CHECK-SD-NEXT:    bl cos1276; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1277; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01278; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1279; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]1280; CHECK-SD-NEXT:    add sp, sp, #481281; CHECK-SD-NEXT:    ret1282;1283; CHECK-GI-LABEL: cos_v2f64:1284; CHECK-GI:       // %bb.0: // %entry1285; CHECK-GI-NEXT:    sub sp, sp, #321286; CHECK-GI-NEXT:    str d8, [sp, #16] // 8-byte Spill1287; CHECK-GI-NEXT:    mov d8, v0.d[1]1288; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q01289; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill1290; CHECK-GI-NEXT:    bl cos1291; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01292; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1293; CHECK-GI-NEXT:    fmov d0, d81294; CHECK-GI-NEXT:    bl cos1295; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload1296; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01297; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload1298; CHECK-GI-NEXT:    ldr d8, [sp, #16] // 8-byte Reload1299; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]1300; CHECK-GI-NEXT:    mov v0.16b, v1.16b1301; CHECK-GI-NEXT:    add sp, sp, #321302; CHECK-GI-NEXT:    ret1303entry:1304  %c = call <2 x double> @llvm.cos.v2f64(<2 x double> %a)1305  ret <2 x double> %c1306}1307 1308define <3 x double> @cos_v3f64(<3 x double> %a) nounwind {1309; CHECK-SD-LABEL: cos_v3f64:1310; CHECK-SD:       // %bb.0: // %entry1311; CHECK-SD-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill1312; CHECK-SD-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill1313; CHECK-SD-NEXT:    fmov d8, d21314; CHECK-SD-NEXT:    fmov d9, d11315; CHECK-SD-NEXT:    str x30, [sp, #24] // 8-byte Spill1316; CHECK-SD-NEXT:    bl cos1317; CHECK-SD-NEXT:    fmov d10, d01318; CHECK-SD-NEXT:    fmov d0, d91319; CHECK-SD-NEXT:    bl cos1320; CHECK-SD-NEXT:    fmov d9, d01321; CHECK-SD-NEXT:    fmov d0, d81322; CHECK-SD-NEXT:    bl cos1323; CHECK-SD-NEXT:    fmov d1, d91324; CHECK-SD-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload1325; CHECK-SD-NEXT:    ldr x30, [sp, #24] // 8-byte Reload1326; CHECK-SD-NEXT:    fmov d2, d01327; CHECK-SD-NEXT:    fmov d0, d101328; CHECK-SD-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload1329; CHECK-SD-NEXT:    ret1330;1331; CHECK-GI-LABEL: cos_v3f64:1332; CHECK-GI:       // %bb.0: // %entry1333; CHECK-GI-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill1334; CHECK-GI-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill1335; CHECK-GI-NEXT:    fmov d8, d11336; CHECK-GI-NEXT:    fmov d9, d21337; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill1338; CHECK-GI-NEXT:    bl cos1339; CHECK-GI-NEXT:    fmov d10, d01340; CHECK-GI-NEXT:    fmov d0, d81341; CHECK-GI-NEXT:    bl cos1342; CHECK-GI-NEXT:    fmov d8, d01343; CHECK-GI-NEXT:    fmov d0, d91344; CHECK-GI-NEXT:    bl cos1345; CHECK-GI-NEXT:    fmov d1, d81346; CHECK-GI-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload1347; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload1348; CHECK-GI-NEXT:    fmov d2, d01349; CHECK-GI-NEXT:    fmov d0, d101350; CHECK-GI-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload1351; CHECK-GI-NEXT:    ret1352entry:1353  %c = call <3 x double> @llvm.cos.v3f64(<3 x double> %a)1354  ret <3 x double> %c1355}1356 1357define <4 x double> @cos_v4f64(<4 x double> %a) nounwind {1358; CHECK-SD-LABEL: cos_v4f64:1359; CHECK-SD:       // %bb.0: // %entry1360; CHECK-SD-NEXT:    sub sp, sp, #641361; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1362; CHECK-SD-NEXT:    mov d0, v0.d[1]1363; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1364; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1365; CHECK-SD-NEXT:    bl cos1366; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01367; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1368; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1369; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01370; CHECK-SD-NEXT:    bl cos1371; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1372; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01373; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]1374; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1375; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1376; CHECK-SD-NEXT:    mov d0, v0.d[1]1377; CHECK-SD-NEXT:    bl cos1378; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01379; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1380; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1381; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01382; CHECK-SD-NEXT:    bl cos1383; CHECK-SD-NEXT:    fmov d1, d01384; CHECK-SD-NEXT:    ldp q2, q0, [sp] // 32-byte Folded Reload1385; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1386; CHECK-SD-NEXT:    mov v1.d[1], v2.d[0]1387; CHECK-SD-NEXT:    add sp, sp, #641388; CHECK-SD-NEXT:    ret1389;1390; CHECK-GI-LABEL: cos_v4f64:1391; CHECK-GI:       // %bb.0: // %entry1392; CHECK-GI-NEXT:    sub sp, sp, #801393; CHECK-GI-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill1394; CHECK-GI-NEXT:    mov d8, v0.d[1]1395; CHECK-GI-NEXT:    mov d9, v1.d[1]1396; CHECK-GI-NEXT:    str x30, [sp, #64] // 8-byte Spill1397; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q01398; CHECK-GI-NEXT:    str q1, [sp] // 16-byte Spill1399; CHECK-GI-NEXT:    bl cos1400; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01401; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1402; CHECK-GI-NEXT:    fmov d0, d81403; CHECK-GI-NEXT:    bl cos1404; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01405; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1406; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1407; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q01408; CHECK-GI-NEXT:    bl cos1409; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01410; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1411; CHECK-GI-NEXT:    fmov d0, d91412; CHECK-GI-NEXT:    bl cos1413; CHECK-GI-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload1414; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01415; CHECK-GI-NEXT:    ldr x30, [sp, #64] // 8-byte Reload1416; CHECK-GI-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload1417; CHECK-GI-NEXT:    mov v2.d[1], v1.d[0]1418; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload1419; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]1420; CHECK-GI-NEXT:    mov v0.16b, v2.16b1421; CHECK-GI-NEXT:    add sp, sp, #801422; CHECK-GI-NEXT:    ret1423entry:1424  %c = call <4 x double> @llvm.cos.v4f64(<4 x double> %a)1425  ret <4 x double> %c1426}1427 1428define <2 x float> @cos_v2f32(<2 x float> %a) nounwind {1429; CHECK-SD-LABEL: cos_v2f32:1430; CHECK-SD:       // %bb.0: // %entry1431; CHECK-SD-NEXT:    sub sp, sp, #481432; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01433; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1434; CHECK-SD-NEXT:    mov s0, v0.s[1]1435; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1436; CHECK-SD-NEXT:    bl cosf1437; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01438; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1439; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1440; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01441; CHECK-SD-NEXT:    bl cosf1442; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1443; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01444; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1445; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]1446; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01447; CHECK-SD-NEXT:    add sp, sp, #481448; CHECK-SD-NEXT:    ret1449;1450; CHECK-GI-LABEL: cos_v2f32:1451; CHECK-GI:       // %bb.0: // %entry1452; CHECK-GI-NEXT:    sub sp, sp, #321453; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01454; CHECK-GI-NEXT:    str d8, [sp, #16] // 8-byte Spill1455; CHECK-GI-NEXT:    mov s8, v0.s[1]1456; CHECK-GI-NEXT:    str x30, [sp, #24] // 8-byte Spill1457; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01458; CHECK-GI-NEXT:    bl cosf1459; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01460; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1461; CHECK-GI-NEXT:    fmov s0, s81462; CHECK-GI-NEXT:    bl cosf1463; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload1464; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01465; CHECK-GI-NEXT:    ldr x30, [sp, #24] // 8-byte Reload1466; CHECK-GI-NEXT:    ldr d8, [sp, #16] // 8-byte Reload1467; CHECK-GI-NEXT:    mov v1.s[1], v0.s[0]1468; CHECK-GI-NEXT:    fmov d0, d11469; CHECK-GI-NEXT:    add sp, sp, #321470; CHECK-GI-NEXT:    ret1471entry:1472  %c = call <2 x float> @llvm.cos.v2f32(<2 x float> %a)1473  ret <2 x float> %c1474}1475 1476define <3 x float> @cos_v3f32(<3 x float> %a) nounwind {1477; CHECK-SD-LABEL: cos_v3f32:1478; CHECK-SD:       // %bb.0: // %entry1479; CHECK-SD-NEXT:    sub sp, sp, #481480; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1481; CHECK-SD-NEXT:    mov s0, v0.s[1]1482; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1483; CHECK-SD-NEXT:    bl cosf1484; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01485; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1486; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1487; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01488; CHECK-SD-NEXT:    bl cosf1489; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1490; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01491; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]1492; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1493; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1494; CHECK-SD-NEXT:    mov s0, v0.s[2]1495; CHECK-SD-NEXT:    bl cosf1496; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1497; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01498; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1499; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]1500; CHECK-SD-NEXT:    mov v0.16b, v1.16b1501; CHECK-SD-NEXT:    add sp, sp, #481502; CHECK-SD-NEXT:    ret1503;1504; CHECK-GI-LABEL: cos_v3f32:1505; CHECK-GI:       // %bb.0: // %entry1506; CHECK-GI-NEXT:    sub sp, sp, #641507; CHECK-GI-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill1508; CHECK-GI-NEXT:    mov s8, v0.s[1]1509; CHECK-GI-NEXT:    mov s9, v0.s[2]1510; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill1511; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01512; CHECK-GI-NEXT:    bl cosf1513; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01514; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1515; CHECK-GI-NEXT:    fmov s0, s81516; CHECK-GI-NEXT:    bl cosf1517; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01518; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1519; CHECK-GI-NEXT:    fmov s0, s91520; CHECK-GI-NEXT:    bl cosf1521; CHECK-GI-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload1522; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01523; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1524; CHECK-GI-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload1525; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]1526; CHECK-GI-NEXT:    mov v1.s[2], v0.s[0]1527; CHECK-GI-NEXT:    mov v0.16b, v1.16b1528; CHECK-GI-NEXT:    add sp, sp, #641529; CHECK-GI-NEXT:    ret1530entry:1531  %c = call <3 x float> @llvm.cos.v3f32(<3 x float> %a)1532  ret <3 x float> %c1533}1534 1535define <4 x float> @cos_v4f32(<4 x float> %a) nounwind {1536; CHECK-SD-LABEL: cos_v4f32:1537; CHECK-SD:       // %bb.0: // %entry1538; CHECK-SD-NEXT:    sub sp, sp, #481539; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1540; CHECK-SD-NEXT:    mov s0, v0.s[1]1541; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1542; CHECK-SD-NEXT:    bl cosf1543; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01544; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1545; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1546; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01547; CHECK-SD-NEXT:    bl cosf1548; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1549; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01550; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]1551; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1552; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1553; CHECK-SD-NEXT:    mov s0, v0.s[2]1554; CHECK-SD-NEXT:    bl cosf1555; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1556; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01557; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]1558; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1559; CHECK-SD-NEXT:    mov s0, v0.s[3]1560; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill1561; CHECK-SD-NEXT:    bl cosf1562; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1563; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01564; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1565; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]1566; CHECK-SD-NEXT:    mov v0.16b, v1.16b1567; CHECK-SD-NEXT:    add sp, sp, #481568; CHECK-SD-NEXT:    ret1569;1570; CHECK-GI-LABEL: cos_v4f32:1571; CHECK-GI:       // %bb.0: // %entry1572; CHECK-GI-NEXT:    sub sp, sp, #801573; CHECK-GI-NEXT:    str d10, [sp, #48] // 8-byte Spill1574; CHECK-GI-NEXT:    mov s10, v0.s[3]1575; CHECK-GI-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill1576; CHECK-GI-NEXT:    mov s8, v0.s[1]1577; CHECK-GI-NEXT:    mov s9, v0.s[2]1578; CHECK-GI-NEXT:    str x30, [sp, #72] // 8-byte Spill1579; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01580; CHECK-GI-NEXT:    bl cosf1581; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01582; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1583; CHECK-GI-NEXT:    fmov s0, s81584; CHECK-GI-NEXT:    bl cosf1585; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01586; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1587; CHECK-GI-NEXT:    fmov s0, s91588; CHECK-GI-NEXT:    bl cosf1589; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01590; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1591; CHECK-GI-NEXT:    fmov s0, s101592; CHECK-GI-NEXT:    bl cosf1593; CHECK-GI-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload1594; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01595; CHECK-GI-NEXT:    ldr x30, [sp, #72] // 8-byte Reload1596; CHECK-GI-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload1597; CHECK-GI-NEXT:    ldr d10, [sp, #48] // 8-byte Reload1598; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]1599; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload1600; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]1601; CHECK-GI-NEXT:    mov v1.s[3], v0.s[0]1602; CHECK-GI-NEXT:    mov v0.16b, v1.16b1603; CHECK-GI-NEXT:    add sp, sp, #801604; CHECK-GI-NEXT:    ret1605entry:1606  %c = call <4 x float> @llvm.cos.v4f32(<4 x float> %a)1607  ret <4 x float> %c1608}1609 1610define <8 x float> @cos_v8f32(<8 x float> %a) nounwind {1611; CHECK-SD-LABEL: cos_v8f32:1612; CHECK-SD:       // %bb.0: // %entry1613; CHECK-SD-NEXT:    sub sp, sp, #641614; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill1615; CHECK-SD-NEXT:    mov s0, v0.s[1]1616; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1617; CHECK-SD-NEXT:    bl cosf1618; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01619; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1620; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1621; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01622; CHECK-SD-NEXT:    bl cosf1623; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1624; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01625; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]1626; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1627; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1628; CHECK-SD-NEXT:    mov s0, v0.s[2]1629; CHECK-SD-NEXT:    bl cosf1630; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1631; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01632; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]1633; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1634; CHECK-SD-NEXT:    mov s0, v0.s[3]1635; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1636; CHECK-SD-NEXT:    bl cosf1637; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1638; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01639; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]1640; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1641; CHECK-SD-NEXT:    mov s0, v0.s[1]1642; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1643; CHECK-SD-NEXT:    bl cosf1644; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01645; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1646; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1647; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q01648; CHECK-SD-NEXT:    bl cosf1649; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1650; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01651; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]1652; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1653; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1654; CHECK-SD-NEXT:    mov s0, v0.s[2]1655; CHECK-SD-NEXT:    bl cosf1656; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1657; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q01658; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]1659; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1660; CHECK-SD-NEXT:    mov s0, v0.s[3]1661; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill1662; CHECK-SD-NEXT:    bl cosf1663; CHECK-SD-NEXT:    fmov s2, s01664; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1665; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1666; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1667; CHECK-SD-NEXT:    mov v1.s[3], v2.s[0]1668; CHECK-SD-NEXT:    add sp, sp, #641669; CHECK-SD-NEXT:    ret1670;1671; CHECK-GI-LABEL: cos_v8f32:1672; CHECK-GI:       // %bb.0: // %entry1673; CHECK-GI-NEXT:    sub sp, sp, #1761674; CHECK-GI-NEXT:    stp d13, d12, [sp, #112] // 16-byte Folded Spill1675; CHECK-GI-NEXT:    mov s12, v1.s[2]1676; CHECK-GI-NEXT:    mov s13, v1.s[3]1677; CHECK-GI-NEXT:    stp d11, d10, [sp, #128] // 16-byte Folded Spill1678; CHECK-GI-NEXT:    mov s10, v0.s[3]1679; CHECK-GI-NEXT:    mov s11, v1.s[1]1680; CHECK-GI-NEXT:    stp d9, d8, [sp, #144] // 16-byte Folded Spill1681; CHECK-GI-NEXT:    mov s8, v0.s[1]1682; CHECK-GI-NEXT:    mov s9, v0.s[2]1683; CHECK-GI-NEXT:    str x30, [sp, #160] // 8-byte Spill1684; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01685; CHECK-GI-NEXT:    str q1, [sp, #32] // 16-byte Spill1686; CHECK-GI-NEXT:    bl cosf1687; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01688; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill1689; CHECK-GI-NEXT:    fmov s0, s81690; CHECK-GI-NEXT:    bl cosf1691; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01692; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1693; CHECK-GI-NEXT:    fmov s0, s91694; CHECK-GI-NEXT:    bl cosf1695; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01696; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill1697; CHECK-GI-NEXT:    fmov s0, s101698; CHECK-GI-NEXT:    bl cosf1699; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01700; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1701; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1702; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q01703; CHECK-GI-NEXT:    bl cosf1704; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01705; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1706; CHECK-GI-NEXT:    fmov s0, s111707; CHECK-GI-NEXT:    bl cosf1708; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01709; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1710; CHECK-GI-NEXT:    fmov s0, s121711; CHECK-GI-NEXT:    bl cosf1712; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01713; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1714; CHECK-GI-NEXT:    fmov s0, s131715; CHECK-GI-NEXT:    bl cosf1716; CHECK-GI-NEXT:    ldp q2, q1, [sp, #48] // 32-byte Folded Reload1717; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q01718; CHECK-GI-NEXT:    ldr x30, [sp, #160] // 8-byte Reload1719; CHECK-GI-NEXT:    ldp d9, d8, [sp, #144] // 16-byte Folded Reload1720; CHECK-GI-NEXT:    ldp d11, d10, [sp, #128] // 16-byte Folded Reload1721; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]1722; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload1723; CHECK-GI-NEXT:    ldp d13, d12, [sp, #112] // 16-byte Folded Reload1724; CHECK-GI-NEXT:    mov v3.s[1], v2.s[0]1725; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload1726; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]1727; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload1728; CHECK-GI-NEXT:    mov v3.s[2], v2.s[0]1729; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload1730; CHECK-GI-NEXT:    mov v1.s[3], v2.s[0]1731; CHECK-GI-NEXT:    mov v3.s[3], v0.s[0]1732; CHECK-GI-NEXT:    mov v2.16b, v1.16b1733; CHECK-GI-NEXT:    mov v1.16b, v3.16b1734; CHECK-GI-NEXT:    mov v0.16b, v2.16b1735; CHECK-GI-NEXT:    add sp, sp, #1761736; CHECK-GI-NEXT:    ret1737entry:1738  %c = call <8 x float> @llvm.cos.v8f32(<8 x float> %a)1739  ret <8 x float> %c1740}1741 1742define <7 x half> @cos_v7f16(<7 x half> %a) nounwind {1743; CHECK-SD-LABEL: cos_v7f16:1744; CHECK-SD:       // %bb.0: // %entry1745; CHECK-SD-NEXT:    sub sp, sp, #481746; CHECK-SD-NEXT:    mov h1, v0.h[1]1747; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1748; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1749; CHECK-SD-NEXT:    fcvt s0, h11750; CHECK-SD-NEXT:    bl cosf1751; CHECK-SD-NEXT:    fcvt h0, s01752; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1753; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1754; CHECK-SD-NEXT:    fcvt s0, h01755; CHECK-SD-NEXT:    bl cosf1756; CHECK-SD-NEXT:    fcvt h0, s01757; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1758; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]1759; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1760; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1761; CHECK-SD-NEXT:    mov h0, v0.h[2]1762; CHECK-SD-NEXT:    fcvt s0, h01763; CHECK-SD-NEXT:    bl cosf1764; CHECK-SD-NEXT:    fcvt h0, s01765; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1766; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1767; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1768; CHECK-SD-NEXT:    mov h0, v0.h[3]1769; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1770; CHECK-SD-NEXT:    fcvt s0, h01771; CHECK-SD-NEXT:    bl cosf1772; CHECK-SD-NEXT:    fcvt h0, s01773; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1774; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1775; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1776; CHECK-SD-NEXT:    mov h0, v0.h[4]1777; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1778; CHECK-SD-NEXT:    fcvt s0, h01779; CHECK-SD-NEXT:    bl cosf1780; CHECK-SD-NEXT:    fcvt h0, s01781; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1782; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1783; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1784; CHECK-SD-NEXT:    mov h0, v0.h[5]1785; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1786; CHECK-SD-NEXT:    fcvt s0, h01787; CHECK-SD-NEXT:    bl cosf1788; CHECK-SD-NEXT:    fcvt h0, s01789; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1790; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1791; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1792; CHECK-SD-NEXT:    mov h0, v0.h[6]1793; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1794; CHECK-SD-NEXT:    fcvt s0, h01795; CHECK-SD-NEXT:    bl cosf1796; CHECK-SD-NEXT:    fcvt h0, s01797; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1798; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1799; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1800; CHECK-SD-NEXT:    mov h0, v0.h[7]1801; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1802; CHECK-SD-NEXT:    fcvt s0, h01803; CHECK-SD-NEXT:    bl cosf1804; CHECK-SD-NEXT:    fcvt h1, s01805; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1806; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1807; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]1808; CHECK-SD-NEXT:    add sp, sp, #481809; CHECK-SD-NEXT:    ret1810;1811; CHECK-GI-LABEL: cos_v7f16:1812; CHECK-GI:       // %bb.0: // %entry1813; CHECK-GI-NEXT:    sub sp, sp, #1601814; CHECK-GI-NEXT:    stp d13, d12, [sp, #96] // 16-byte Folded Spill1815; CHECK-GI-NEXT:    mov h12, v0.h[5]1816; CHECK-GI-NEXT:    mov h13, v0.h[6]1817; CHECK-GI-NEXT:    stp d11, d10, [sp, #112] // 16-byte Folded Spill1818; CHECK-GI-NEXT:    mov h10, v0.h[3]1819; CHECK-GI-NEXT:    mov h11, v0.h[4]1820; CHECK-GI-NEXT:    stp d9, d8, [sp, #128] // 16-byte Folded Spill1821; CHECK-GI-NEXT:    mov h8, v0.h[1]1822; CHECK-GI-NEXT:    mov h9, v0.h[2]1823; CHECK-GI-NEXT:    fcvt s0, h01824; CHECK-GI-NEXT:    str x30, [sp, #144] // 8-byte Spill1825; CHECK-GI-NEXT:    bl cosf1826; CHECK-GI-NEXT:    fcvt s1, h81827; CHECK-GI-NEXT:    fcvt h0, s01828; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1829; CHECK-GI-NEXT:    fmov s0, s11830; CHECK-GI-NEXT:    bl cosf1831; CHECK-GI-NEXT:    fcvt s1, h91832; CHECK-GI-NEXT:    fcvt h0, s01833; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1834; CHECK-GI-NEXT:    fmov s0, s11835; CHECK-GI-NEXT:    bl cosf1836; CHECK-GI-NEXT:    fcvt s1, h101837; CHECK-GI-NEXT:    fcvt h0, s01838; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill1839; CHECK-GI-NEXT:    fmov s0, s11840; CHECK-GI-NEXT:    bl cosf1841; CHECK-GI-NEXT:    fcvt s1, h111842; CHECK-GI-NEXT:    fcvt h0, s01843; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1844; CHECK-GI-NEXT:    fmov s0, s11845; CHECK-GI-NEXT:    bl cosf1846; CHECK-GI-NEXT:    fcvt s1, h121847; CHECK-GI-NEXT:    fcvt h0, s01848; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1849; CHECK-GI-NEXT:    fmov s0, s11850; CHECK-GI-NEXT:    bl cosf1851; CHECK-GI-NEXT:    fcvt s1, h131852; CHECK-GI-NEXT:    fcvt h0, s01853; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1854; CHECK-GI-NEXT:    fmov s0, s11855; CHECK-GI-NEXT:    bl cosf1856; CHECK-GI-NEXT:    ldp q3, q2, [sp, #48] // 32-byte Folded Reload1857; CHECK-GI-NEXT:    fcvt h0, s01858; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload1859; CHECK-GI-NEXT:    ldp d9, d8, [sp, #128] // 16-byte Folded Reload1860; CHECK-GI-NEXT:    ldp d11, d10, [sp, #112] // 16-byte Folded Reload1861; CHECK-GI-NEXT:    ldr x30, [sp, #144] // 8-byte Reload1862; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]1863; CHECK-GI-NEXT:    ldp d13, d12, [sp, #96] // 16-byte Folded Reload1864; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1865; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload1866; CHECK-GI-NEXT:    mov v1.h[3], v3.h[0]1867; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]1868; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload1869; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1870; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]1871; CHECK-GI-NEXT:    mov v0.16b, v1.16b1872; CHECK-GI-NEXT:    add sp, sp, #1601873; CHECK-GI-NEXT:    ret1874entry:1875  %c = call <7 x half> @llvm.cos.v7f16(<7 x half> %a)1876  ret <7 x half> %c1877}1878 1879define <4 x half> @cos_v4f16(<4 x half> %a) nounwind {1880; CHECK-SD-LABEL: cos_v4f16:1881; CHECK-SD:       // %bb.0: // %entry1882; CHECK-SD-NEXT:    sub sp, sp, #481883; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q01884; CHECK-SD-NEXT:    mov h1, v0.h[1]1885; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1886; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1887; CHECK-SD-NEXT:    fcvt s0, h11888; CHECK-SD-NEXT:    bl cosf1889; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1890; CHECK-SD-NEXT:    fcvt h0, s01891; CHECK-SD-NEXT:    fcvt s1, h11892; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1893; CHECK-SD-NEXT:    fmov s0, s11894; CHECK-SD-NEXT:    bl cosf1895; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1896; CHECK-SD-NEXT:    fcvt h2, s01897; CHECK-SD-NEXT:    mov h1, v1.h[2]1898; CHECK-SD-NEXT:    fcvt s0, h11899; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1900; CHECK-SD-NEXT:    mov v2.h[1], v1.h[0]1901; CHECK-SD-NEXT:    str q2, [sp] // 16-byte Spill1902; CHECK-SD-NEXT:    bl cosf1903; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1904; CHECK-SD-NEXT:    fcvt h2, s01905; CHECK-SD-NEXT:    mov h1, v1.h[3]1906; CHECK-SD-NEXT:    fcvt s0, h11907; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload1908; CHECK-SD-NEXT:    mov v1.h[2], v2.h[0]1909; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill1910; CHECK-SD-NEXT:    bl cosf1911; CHECK-SD-NEXT:    fcvt h1, s01912; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1913; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1914; CHECK-SD-NEXT:    mov v0.h[3], v1.h[0]1915; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q01916; CHECK-SD-NEXT:    add sp, sp, #481917; CHECK-SD-NEXT:    ret1918;1919; CHECK-GI-LABEL: cos_v4f16:1920; CHECK-GI:       // %bb.0: // %entry1921; CHECK-GI-NEXT:    sub sp, sp, #801922; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q01923; CHECK-GI-NEXT:    str d10, [sp, #48] // 8-byte Spill1924; CHECK-GI-NEXT:    mov h10, v0.h[3]1925; CHECK-GI-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill1926; CHECK-GI-NEXT:    mov h8, v0.h[1]1927; CHECK-GI-NEXT:    mov h9, v0.h[2]1928; CHECK-GI-NEXT:    fcvt s0, h01929; CHECK-GI-NEXT:    str x30, [sp, #72] // 8-byte Spill1930; CHECK-GI-NEXT:    bl cosf1931; CHECK-GI-NEXT:    fcvt s1, h81932; CHECK-GI-NEXT:    fcvt h0, s01933; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1934; CHECK-GI-NEXT:    fmov s0, s11935; CHECK-GI-NEXT:    bl cosf1936; CHECK-GI-NEXT:    fcvt s1, h91937; CHECK-GI-NEXT:    fcvt h0, s01938; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1939; CHECK-GI-NEXT:    fmov s0, s11940; CHECK-GI-NEXT:    bl cosf1941; CHECK-GI-NEXT:    fcvt s1, h101942; CHECK-GI-NEXT:    fcvt h0, s01943; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1944; CHECK-GI-NEXT:    fmov s0, s11945; CHECK-GI-NEXT:    bl cosf1946; CHECK-GI-NEXT:    ldp q3, q2, [sp] // 32-byte Folded Reload1947; CHECK-GI-NEXT:    fcvt h0, s01948; CHECK-GI-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1949; CHECK-GI-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload1950; CHECK-GI-NEXT:    ldr x30, [sp, #72] // 8-byte Reload1951; CHECK-GI-NEXT:    ldr d10, [sp, #48] // 8-byte Reload1952; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]1953; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1954; CHECK-GI-NEXT:    mov v1.h[3], v0.h[0]1955; CHECK-GI-NEXT:    mov v0.16b, v1.16b1956; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q01957; CHECK-GI-NEXT:    add sp, sp, #801958; CHECK-GI-NEXT:    ret1959entry:1960  %c = call <4 x half> @llvm.cos.v4f16(<4 x half> %a)1961  ret <4 x half> %c1962}1963 1964define <8 x half> @cos_v8f16(<8 x half> %a) nounwind {1965; CHECK-SD-LABEL: cos_v8f16:1966; CHECK-SD:       // %bb.0: // %entry1967; CHECK-SD-NEXT:    sub sp, sp, #481968; CHECK-SD-NEXT:    mov h1, v0.h[1]1969; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1970; CHECK-SD-NEXT:    str x30, [sp, #32] // 8-byte Spill1971; CHECK-SD-NEXT:    fcvt s0, h11972; CHECK-SD-NEXT:    bl cosf1973; CHECK-SD-NEXT:    fcvt h0, s01974; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1975; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1976; CHECK-SD-NEXT:    fcvt s0, h01977; CHECK-SD-NEXT:    bl cosf1978; CHECK-SD-NEXT:    fcvt h0, s01979; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1980; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]1981; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill1982; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1983; CHECK-SD-NEXT:    mov h0, v0.h[2]1984; CHECK-SD-NEXT:    fcvt s0, h01985; CHECK-SD-NEXT:    bl cosf1986; CHECK-SD-NEXT:    fcvt h0, s01987; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1988; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1989; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1990; CHECK-SD-NEXT:    mov h0, v0.h[3]1991; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill1992; CHECK-SD-NEXT:    fcvt s0, h01993; CHECK-SD-NEXT:    bl cosf1994; CHECK-SD-NEXT:    fcvt h0, s01995; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1996; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1997; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1998; CHECK-SD-NEXT:    mov h0, v0.h[4]1999; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2000; CHECK-SD-NEXT:    fcvt s0, h02001; CHECK-SD-NEXT:    bl cosf2002; CHECK-SD-NEXT:    fcvt h0, s02003; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2004; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]2005; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2006; CHECK-SD-NEXT:    mov h0, v0.h[5]2007; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2008; CHECK-SD-NEXT:    fcvt s0, h02009; CHECK-SD-NEXT:    bl cosf2010; CHECK-SD-NEXT:    fcvt h0, s02011; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2012; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]2013; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2014; CHECK-SD-NEXT:    mov h0, v0.h[6]2015; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2016; CHECK-SD-NEXT:    fcvt s0, h02017; CHECK-SD-NEXT:    bl cosf2018; CHECK-SD-NEXT:    fcvt h0, s02019; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2020; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]2021; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2022; CHECK-SD-NEXT:    mov h0, v0.h[7]2023; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2024; CHECK-SD-NEXT:    fcvt s0, h02025; CHECK-SD-NEXT:    bl cosf2026; CHECK-SD-NEXT:    fcvt h1, s02027; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2028; CHECK-SD-NEXT:    ldr x30, [sp, #32] // 8-byte Reload2029; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]2030; CHECK-SD-NEXT:    add sp, sp, #482031; CHECK-SD-NEXT:    ret2032;2033; CHECK-GI-LABEL: cos_v8f16:2034; CHECK-GI:       // %bb.0: // %entry2035; CHECK-GI-NEXT:    sub sp, sp, #1762036; CHECK-GI-NEXT:    str d14, [sp, #112] // 8-byte Spill2037; CHECK-GI-NEXT:    mov h14, v0.h[7]2038; CHECK-GI-NEXT:    stp d13, d12, [sp, #120] // 16-byte Folded Spill2039; CHECK-GI-NEXT:    mov h12, v0.h[5]2040; CHECK-GI-NEXT:    mov h13, v0.h[6]2041; CHECK-GI-NEXT:    stp d11, d10, [sp, #136] // 16-byte Folded Spill2042; CHECK-GI-NEXT:    mov h10, v0.h[3]2043; CHECK-GI-NEXT:    mov h11, v0.h[4]2044; CHECK-GI-NEXT:    stp d9, d8, [sp, #152] // 16-byte Folded Spill2045; CHECK-GI-NEXT:    mov h8, v0.h[1]2046; CHECK-GI-NEXT:    mov h9, v0.h[2]2047; CHECK-GI-NEXT:    fcvt s0, h02048; CHECK-GI-NEXT:    str x30, [sp, #168] // 8-byte Spill2049; CHECK-GI-NEXT:    bl cosf2050; CHECK-GI-NEXT:    fcvt s1, h82051; CHECK-GI-NEXT:    fcvt h0, s02052; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill2053; CHECK-GI-NEXT:    fmov s0, s12054; CHECK-GI-NEXT:    bl cosf2055; CHECK-GI-NEXT:    fcvt s1, h92056; CHECK-GI-NEXT:    fcvt h0, s02057; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill2058; CHECK-GI-NEXT:    fmov s0, s12059; CHECK-GI-NEXT:    bl cosf2060; CHECK-GI-NEXT:    fcvt s1, h102061; CHECK-GI-NEXT:    fcvt h0, s02062; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill2063; CHECK-GI-NEXT:    fmov s0, s12064; CHECK-GI-NEXT:    bl cosf2065; CHECK-GI-NEXT:    fcvt s1, h112066; CHECK-GI-NEXT:    fcvt h0, s02067; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill2068; CHECK-GI-NEXT:    fmov s0, s12069; CHECK-GI-NEXT:    bl cosf2070; CHECK-GI-NEXT:    fcvt s1, h122071; CHECK-GI-NEXT:    fcvt h0, s02072; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill2073; CHECK-GI-NEXT:    fmov s0, s12074; CHECK-GI-NEXT:    bl cosf2075; CHECK-GI-NEXT:    fcvt s1, h132076; CHECK-GI-NEXT:    fcvt h0, s02077; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill2078; CHECK-GI-NEXT:    fmov s0, s12079; CHECK-GI-NEXT:    bl cosf2080; CHECK-GI-NEXT:    fcvt s1, h142081; CHECK-GI-NEXT:    fcvt h0, s02082; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill2083; CHECK-GI-NEXT:    fmov s0, s12084; CHECK-GI-NEXT:    bl cosf2085; CHECK-GI-NEXT:    ldp q3, q2, [sp, #64] // 32-byte Folded Reload2086; CHECK-GI-NEXT:    fcvt h0, s02087; CHECK-GI-NEXT:    ldr q1, [sp, #96] // 16-byte Reload2088; CHECK-GI-NEXT:    ldp d9, d8, [sp, #152] // 16-byte Folded Reload2089; CHECK-GI-NEXT:    ldp d11, d10, [sp, #136] // 16-byte Folded Reload2090; CHECK-GI-NEXT:    ldr x30, [sp, #168] // 8-byte Reload2091; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]2092; CHECK-GI-NEXT:    ldr d14, [sp, #112] // 8-byte Reload2093; CHECK-GI-NEXT:    ldp d13, d12, [sp, #120] // 16-byte Folded Reload2094; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]2095; CHECK-GI-NEXT:    ldp q2, q3, [sp, #32] // 32-byte Folded Reload2096; CHECK-GI-NEXT:    mov v1.h[3], v3.h[0]2097; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]2098; CHECK-GI-NEXT:    ldp q2, q3, [sp] // 32-byte Folded Reload2099; CHECK-GI-NEXT:    mov v1.h[5], v3.h[0]2100; CHECK-GI-NEXT:    mov v1.h[6], v2.h[0]2101; CHECK-GI-NEXT:    mov v1.h[7], v0.h[0]2102; CHECK-GI-NEXT:    mov v0.16b, v1.16b2103; CHECK-GI-NEXT:    add sp, sp, #1762104; CHECK-GI-NEXT:    ret2105entry:2106  %c = call <8 x half> @llvm.cos.v8f16(<8 x half> %a)2107  ret <8 x half> %c2108}2109 2110define <16 x half> @cos_v16f16(<16 x half> %a) nounwind {2111; CHECK-SD-LABEL: cos_v16f16:2112; CHECK-SD:       // %bb.0: // %entry2113; CHECK-SD-NEXT:    sub sp, sp, #642114; CHECK-SD-NEXT:    stp q1, q0, [sp] // 32-byte Folded Spill2115; CHECK-SD-NEXT:    mov h1, v0.h[1]2116; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill2117; CHECK-SD-NEXT:    fcvt s0, h12118; CHECK-SD-NEXT:    bl cosf2119; CHECK-SD-NEXT:    fcvt h0, s02120; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill2121; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2122; CHECK-SD-NEXT:    fcvt s0, h02123; CHECK-SD-NEXT:    bl cosf2124; CHECK-SD-NEXT:    fcvt h0, s02125; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2126; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]2127; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill2128; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2129; CHECK-SD-NEXT:    mov h0, v0.h[2]2130; CHECK-SD-NEXT:    fcvt s0, h02131; CHECK-SD-NEXT:    bl cosf2132; CHECK-SD-NEXT:    fcvt h0, s02133; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2134; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]2135; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2136; CHECK-SD-NEXT:    mov h0, v0.h[3]2137; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2138; CHECK-SD-NEXT:    fcvt s0, h02139; CHECK-SD-NEXT:    bl cosf2140; CHECK-SD-NEXT:    fcvt h0, s02141; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2142; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]2143; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2144; CHECK-SD-NEXT:    mov h0, v0.h[4]2145; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2146; CHECK-SD-NEXT:    fcvt s0, h02147; CHECK-SD-NEXT:    bl cosf2148; CHECK-SD-NEXT:    fcvt h0, s02149; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2150; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]2151; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2152; CHECK-SD-NEXT:    mov h0, v0.h[5]2153; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2154; CHECK-SD-NEXT:    fcvt s0, h02155; CHECK-SD-NEXT:    bl cosf2156; CHECK-SD-NEXT:    fcvt h0, s02157; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2158; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]2159; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2160; CHECK-SD-NEXT:    mov h0, v0.h[6]2161; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2162; CHECK-SD-NEXT:    fcvt s0, h02163; CHECK-SD-NEXT:    bl cosf2164; CHECK-SD-NEXT:    fcvt h0, s02165; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2166; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]2167; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2168; CHECK-SD-NEXT:    mov h0, v0.h[7]2169; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2170; CHECK-SD-NEXT:    fcvt s0, h02171; CHECK-SD-NEXT:    bl cosf2172; CHECK-SD-NEXT:    fcvt h0, s02173; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2174; CHECK-SD-NEXT:    mov v1.h[7], v0.h[0]2175; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2176; CHECK-SD-NEXT:    mov h0, v0.h[1]2177; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill2178; CHECK-SD-NEXT:    fcvt s0, h02179; CHECK-SD-NEXT:    bl cosf2180; CHECK-SD-NEXT:    fcvt h0, s02181; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill2182; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2183; CHECK-SD-NEXT:    fcvt s0, h02184; CHECK-SD-NEXT:    bl cosf2185; CHECK-SD-NEXT:    fcvt h0, s02186; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2187; CHECK-SD-NEXT:    mov v0.h[1], v1.h[0]2188; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill2189; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2190; CHECK-SD-NEXT:    mov h0, v0.h[2]2191; CHECK-SD-NEXT:    fcvt s0, h02192; CHECK-SD-NEXT:    bl cosf2193; CHECK-SD-NEXT:    fcvt h0, s02194; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2195; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]2196; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2197; CHECK-SD-NEXT:    mov h0, v0.h[3]2198; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2199; CHECK-SD-NEXT:    fcvt s0, h02200; CHECK-SD-NEXT:    bl cosf2201; CHECK-SD-NEXT:    fcvt h0, s02202; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2203; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]2204; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2205; CHECK-SD-NEXT:    mov h0, v0.h[4]2206; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2207; CHECK-SD-NEXT:    fcvt s0, h02208; CHECK-SD-NEXT:    bl cosf2209; CHECK-SD-NEXT:    fcvt h0, s02210; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2211; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]2212; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2213; CHECK-SD-NEXT:    mov h0, v0.h[5]2214; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2215; CHECK-SD-NEXT:    fcvt s0, h02216; CHECK-SD-NEXT:    bl cosf2217; CHECK-SD-NEXT:    fcvt h0, s02218; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2219; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]2220; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2221; CHECK-SD-NEXT:    mov h0, v0.h[6]2222; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2223; CHECK-SD-NEXT:    fcvt s0, h02224; CHECK-SD-NEXT:    bl cosf2225; CHECK-SD-NEXT:    fcvt h0, s02226; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload2227; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]2228; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload2229; CHECK-SD-NEXT:    mov h0, v0.h[7]2230; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill2231; CHECK-SD-NEXT:    fcvt s0, h02232; CHECK-SD-NEXT:    bl cosf2233; CHECK-SD-NEXT:    fmov s1, s02234; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload2235; CHECK-SD-NEXT:    fcvt h2, s12236; CHECK-SD-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload2237; CHECK-SD-NEXT:    mov v1.h[7], v2.h[0]2238; CHECK-SD-NEXT:    add sp, sp, #642239; CHECK-SD-NEXT:    ret2240;2241; CHECK-GI-LABEL: cos_v16f16:2242; CHECK-GI:       // %bb.0: // %entry2243; CHECK-GI-NEXT:    sub sp, sp, #3202244; CHECK-GI-NEXT:    stp d15, d14, [sp, #240] // 16-byte Folded Spill2245; CHECK-GI-NEXT:    mov v2.16b, v1.16b2246; CHECK-GI-NEXT:    mov h14, v1.h[1]2247; CHECK-GI-NEXT:    str q1, [sp, #80] // 16-byte Spill2248; CHECK-GI-NEXT:    mov h1, v1.h[2]2249; CHECK-GI-NEXT:    mov h15, v0.h[1]2250; CHECK-GI-NEXT:    stp d13, d12, [sp, #256] // 16-byte Folded Spill2251; CHECK-GI-NEXT:    mov h12, v0.h[6]2252; CHECK-GI-NEXT:    mov h13, v0.h[7]2253; CHECK-GI-NEXT:    stp d11, d10, [sp, #272] // 16-byte Folded Spill2254; CHECK-GI-NEXT:    mov h10, v0.h[4]2255; CHECK-GI-NEXT:    mov h11, v0.h[5]2256; CHECK-GI-NEXT:    stp d9, d8, [sp, #288] // 16-byte Folded Spill2257; CHECK-GI-NEXT:    mov h8, v0.h[2]2258; CHECK-GI-NEXT:    mov h9, v0.h[3]2259; CHECK-GI-NEXT:    str h1, [sp, #16] // 2-byte Spill2260; CHECK-GI-NEXT:    mov h1, v2.h[3]2261; CHECK-GI-NEXT:    fcvt s0, h02262; CHECK-GI-NEXT:    stp x29, x30, [sp, #304] // 16-byte Folded Spill2263; CHECK-GI-NEXT:    str h1, [sp, #32] // 2-byte Spill2264; CHECK-GI-NEXT:    mov h1, v2.h[4]2265; CHECK-GI-NEXT:    str h1, [sp, #48] // 2-byte Spill2266; CHECK-GI-NEXT:    mov h1, v2.h[5]2267; CHECK-GI-NEXT:    str h1, [sp, #64] // 2-byte Spill2268; CHECK-GI-NEXT:    mov h1, v2.h[6]2269; CHECK-GI-NEXT:    str h1, [sp, #96] // 2-byte Spill2270; CHECK-GI-NEXT:    mov h1, v2.h[7]2271; CHECK-GI-NEXT:    str h1, [sp, #160] // 2-byte Spill2272; CHECK-GI-NEXT:    bl cosf2273; CHECK-GI-NEXT:    fcvt s1, h152274; CHECK-GI-NEXT:    fcvt h0, s02275; CHECK-GI-NEXT:    str q0, [sp, #192] // 16-byte Spill2276; CHECK-GI-NEXT:    fmov s0, s12277; CHECK-GI-NEXT:    bl cosf2278; CHECK-GI-NEXT:    fcvt s1, h82279; CHECK-GI-NEXT:    fcvt h0, s02280; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill2281; CHECK-GI-NEXT:    fmov s0, s12282; CHECK-GI-NEXT:    bl cosf2283; CHECK-GI-NEXT:    fcvt s1, h92284; CHECK-GI-NEXT:    fcvt h0, s02285; CHECK-GI-NEXT:    str q0, [sp, #224] // 16-byte Spill2286; CHECK-GI-NEXT:    fmov s0, s12287; CHECK-GI-NEXT:    bl cosf2288; CHECK-GI-NEXT:    fcvt s1, h102289; CHECK-GI-NEXT:    fcvt h0, s02290; CHECK-GI-NEXT:    str q0, [sp, #208] // 16-byte Spill2291; CHECK-GI-NEXT:    fmov s0, s12292; CHECK-GI-NEXT:    bl cosf2293; CHECK-GI-NEXT:    fcvt s1, h112294; CHECK-GI-NEXT:    fcvt h0, s02295; CHECK-GI-NEXT:    str q0, [sp, #176] // 16-byte Spill2296; CHECK-GI-NEXT:    fmov s0, s12297; CHECK-GI-NEXT:    bl cosf2298; CHECK-GI-NEXT:    fcvt s1, h122299; CHECK-GI-NEXT:    fcvt h0, s02300; CHECK-GI-NEXT:    str q0, [sp, #144] // 16-byte Spill2301; CHECK-GI-NEXT:    fmov s0, s12302; CHECK-GI-NEXT:    bl cosf2303; CHECK-GI-NEXT:    fcvt s1, h132304; CHECK-GI-NEXT:    fcvt h0, s02305; CHECK-GI-NEXT:    str q0, [sp, #128] // 16-byte Spill2306; CHECK-GI-NEXT:    fmov s0, s12307; CHECK-GI-NEXT:    bl cosf2308; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload2309; CHECK-GI-NEXT:    fcvt h0, s02310; CHECK-GI-NEXT:    fcvt s1, h12311; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill2312; CHECK-GI-NEXT:    fmov s0, s12313; CHECK-GI-NEXT:    bl cosf2314; CHECK-GI-NEXT:    fcvt s1, h142315; CHECK-GI-NEXT:    fcvt h0, s02316; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill2317; CHECK-GI-NEXT:    fmov s0, s12318; CHECK-GI-NEXT:    bl cosf2319; CHECK-GI-NEXT:    ldr h1, [sp, #16] // 2-byte Reload2320; CHECK-GI-NEXT:    fcvt h0, s02321; CHECK-GI-NEXT:    fcvt s1, h12322; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill2323; CHECK-GI-NEXT:    fmov s0, s12324; CHECK-GI-NEXT:    bl cosf2325; CHECK-GI-NEXT:    ldr h1, [sp, #32] // 2-byte Reload2326; CHECK-GI-NEXT:    fcvt h0, s02327; CHECK-GI-NEXT:    fcvt s1, h12328; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill2329; CHECK-GI-NEXT:    fmov s0, s12330; CHECK-GI-NEXT:    bl cosf2331; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload2332; CHECK-GI-NEXT:    fcvt h0, s02333; CHECK-GI-NEXT:    fcvt s1, h12334; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill2335; CHECK-GI-NEXT:    fmov s0, s12336; CHECK-GI-NEXT:    bl cosf2337; CHECK-GI-NEXT:    ldr h1, [sp, #64] // 2-byte Reload2338; CHECK-GI-NEXT:    fcvt h0, s02339; CHECK-GI-NEXT:    fcvt s1, h12340; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill2341; CHECK-GI-NEXT:    fmov s0, s12342; CHECK-GI-NEXT:    bl cosf2343; CHECK-GI-NEXT:    ldr h1, [sp, #96] // 2-byte Reload2344; CHECK-GI-NEXT:    fcvt h0, s02345; CHECK-GI-NEXT:    fcvt s1, h12346; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill2347; CHECK-GI-NEXT:    fmov s0, s12348; CHECK-GI-NEXT:    bl cosf2349; CHECK-GI-NEXT:    ldr h1, [sp, #160] // 2-byte Reload2350; CHECK-GI-NEXT:    fcvt h0, s02351; CHECK-GI-NEXT:    fcvt s1, h12352; CHECK-GI-NEXT:    str q0, [sp, #160] // 16-byte Spill2353; CHECK-GI-NEXT:    fmov s0, s12354; CHECK-GI-NEXT:    bl cosf2355; CHECK-GI-NEXT:    ldr q3, [sp, #192] // 16-byte Reload2356; CHECK-GI-NEXT:    ldr q2, [sp, #112] // 16-byte Reload2357; CHECK-GI-NEXT:    ldp x29, x30, [sp, #304] // 16-byte Folded Reload2358; CHECK-GI-NEXT:    mov v3.h[1], v2.h[0]2359; CHECK-GI-NEXT:    ldp q1, q2, [sp] // 32-byte Folded Reload2360; CHECK-GI-NEXT:    ldp d9, d8, [sp, #288] // 16-byte Folded Reload2361; CHECK-GI-NEXT:    ldp d11, d10, [sp, #272] // 16-byte Folded Reload2362; CHECK-GI-NEXT:    mov v1.h[1], v2.h[0]2363; CHECK-GI-NEXT:    ldr q2, [sp, #224] // 16-byte Reload2364; CHECK-GI-NEXT:    ldp d13, d12, [sp, #256] // 16-byte Folded Reload2365; CHECK-GI-NEXT:    mov v3.h[2], v2.h[0]2366; CHECK-GI-NEXT:    ldr q2, [sp, #32] // 16-byte Reload2367; CHECK-GI-NEXT:    ldp d15, d14, [sp, #240] // 16-byte Folded Reload2368; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]2369; CHECK-GI-NEXT:    ldr q2, [sp, #208] // 16-byte Reload2370; CHECK-GI-NEXT:    mov v3.h[3], v2.h[0]2371; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload2372; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]2373; CHECK-GI-NEXT:    ldr q2, [sp, #176] // 16-byte Reload2374; CHECK-GI-NEXT:    mov v3.h[4], v2.h[0]2375; CHECK-GI-NEXT:    ldr q2, [sp, #64] // 16-byte Reload2376; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]2377; CHECK-GI-NEXT:    ldr q2, [sp, #144] // 16-byte Reload2378; CHECK-GI-NEXT:    mov v3.h[5], v2.h[0]2379; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload2380; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]2381; CHECK-GI-NEXT:    fcvt h2, s02382; CHECK-GI-NEXT:    ldr q0, [sp, #128] // 16-byte Reload2383; CHECK-GI-NEXT:    mov v3.h[6], v0.h[0]2384; CHECK-GI-NEXT:    ldr q0, [sp, #160] // 16-byte Reload2385; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]2386; CHECK-GI-NEXT:    ldr q0, [sp, #80] // 16-byte Reload2387; CHECK-GI-NEXT:    mov v3.h[7], v0.h[0]2388; CHECK-GI-NEXT:    mov v1.h[7], v2.h[0]2389; CHECK-GI-NEXT:    mov v0.16b, v3.16b2390; CHECK-GI-NEXT:    add sp, sp, #3202391; CHECK-GI-NEXT:    ret2392entry:2393  %c = call <16 x half> @llvm.cos.v16f16(<16 x half> %a)2394  ret <16 x half> %c2395}2396 2397define <2 x fp128> @cos_v2fp128(<2 x fp128> %a) nounwind {2398; CHECK-LABEL: cos_v2fp128:2399; CHECK:       // %bb.0: // %entry2400; CHECK-NEXT:    sub sp, sp, #482401; CHECK-NEXT:    str x30, [sp, #32] // 8-byte Spill2402; CHECK-NEXT:    str q1, [sp, #16] // 16-byte Spill2403; CHECK-NEXT:    bl cosl2404; CHECK-NEXT:    str q0, [sp] // 16-byte Spill2405; CHECK-NEXT:    ldr q0, [sp, #16] // 16-byte Reload2406; CHECK-NEXT:    bl cosl2407; CHECK-NEXT:    mov v1.16b, v0.16b2408; CHECK-NEXT:    ldr q0, [sp] // 16-byte Reload2409; CHECK-NEXT:    ldr x30, [sp, #32] // 8-byte Reload2410; CHECK-NEXT:    add sp, sp, #482411; CHECK-NEXT:    ret2412entry:2413  %c = call <2 x fp128> @llvm.cos.v2fp128(<2 x fp128> %a)2414  ret <2 x fp128> %c2415}2416 2417; This is testing that we do not produce incorrect tailcall lowerings2418define i64 @donttailcall(double noundef %x, double noundef %y) nounwind {2419; CHECK-LABEL: donttailcall:2420; CHECK:       // %bb.0: // %entry2421; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill2422; CHECK-NEXT:    bl sin2423; CHECK-NEXT:    fmov x0, d02424; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload2425; CHECK-NEXT:    ret2426entry:2427  %call = tail call double @llvm.sin.f64(double noundef %x)2428  %0 = bitcast double %call to i642429  ret i64 %02430}2431 2432 2433declare <16 x half> @llvm.cos.v16f16(<16 x half>)2434declare <16 x half> @llvm.sin.v16f16(<16 x half>)2435declare <2 x double> @llvm.cos.v2f64(<2 x double>)2436declare <2 x double> @llvm.sin.v2f64(<2 x double>)2437declare <2 x float> @llvm.cos.v2f32(<2 x float>)2438declare <2 x float> @llvm.sin.v2f32(<2 x float>)2439declare <2 x fp128> @llvm.cos.v2fp128(<2 x fp128>)2440declare <2 x fp128> @llvm.sin.v2fp128(<2 x fp128>)2441declare <3 x double> @llvm.cos.v3f64(<3 x double>)2442declare <3 x double> @llvm.sin.v3f64(<3 x double>)2443declare <3 x float> @llvm.cos.v3f32(<3 x float>)2444declare <3 x float> @llvm.sin.v3f32(<3 x float>)2445declare <4 x double> @llvm.cos.v4f64(<4 x double>)2446declare <4 x double> @llvm.sin.v4f64(<4 x double>)2447declare <4 x float> @llvm.cos.v4f32(<4 x float>)2448declare <4 x float> @llvm.sin.v4f32(<4 x float>)2449declare <4 x half> @llvm.cos.v4f16(<4 x half>)2450declare <4 x half> @llvm.sin.v4f16(<4 x half>)2451declare <7 x half> @llvm.cos.v7f16(<7 x half>)2452declare <7 x half> @llvm.sin.v7f16(<7 x half>)2453declare <8 x float> @llvm.cos.v8f32(<8 x float>)2454declare <8 x float> @llvm.sin.v8f32(<8 x float>)2455declare <8 x half> @llvm.cos.v8f16(<8 x half>)2456declare <8 x half> @llvm.sin.v8f16(<8 x half>)2457declare double @llvm.cos.f64(double)2458declare double @llvm.sin.f64(double)2459declare float @llvm.cos.f32(float)2460declare float @llvm.sin.f32(float)2461declare fp128 @llvm.cos.fp128(fp128)2462declare fp128 @llvm.sin.fp128(fp128)2463declare half @llvm.cos.f16(half)2464declare half @llvm.sin.f16(half)2465