1488 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=hexagon < %s | FileCheck -check-prefix=BASE %s3; RUN: llc -mtriple=hexagon-unknown-linux-gnu < %s | FileCheck -check-prefix=GNU %s4; RUN: llc -mtriple=hexagon-unknown-linux-musl < %s | FileCheck -check-prefix=MUSL %s5 6define { half, half } @test_sincos_f16(half %a) #0 {7; BASE-LABEL: test_sincos_f16:8; BASE: // %bb.0:9; BASE-NEXT: {10; BASE-NEXT: call __extendhfsf211; BASE-NEXT: memd(r29+#-16) = r17:1612; BASE-NEXT: allocframe(#8)13; BASE-NEXT: } // 8-byte Folded Spill14; BASE-NEXT: {15; BASE-NEXT: call sinf16; BASE-NEXT: r16 = r017; BASE-NEXT: }18; BASE-NEXT: {19; BASE-NEXT: call __truncsfhf220; BASE-NEXT: }21; BASE-NEXT: {22; BASE-NEXT: call cosf23; BASE-NEXT: r17 = r024; BASE-NEXT: r0 = r1625; BASE-NEXT: }26; BASE-NEXT: {27; BASE-NEXT: call __truncsfhf228; BASE-NEXT: }29; BASE-NEXT: {30; BASE-NEXT: r1:0 = combine(r0,r17)31; BASE-NEXT: r17:16 = memd(r29+#0)32; BASE-NEXT: dealloc_return33; BASE-NEXT: } // 8-byte Folded Reload34;35; GNU-LABEL: test_sincos_f16:36; GNU: // %bb.0:37; GNU-NEXT: {38; GNU-NEXT: call __extendhfsf239; GNU-NEXT: memd(r29+#-16) = r17:1640; GNU-NEXT: allocframe(#16)41; GNU-NEXT: } // 8-byte Folded Spill42; GNU-NEXT: {43; GNU-NEXT: call sincosf44; GNU-NEXT: r1 = add(r29,#0)45; GNU-NEXT: r2 = add(r29,#4)46; GNU-NEXT: }47; GNU-NEXT: {48; GNU-NEXT: call __truncsfhf249; GNU-NEXT: r0 = memw(r29+#0)50; GNU-NEXT: }51; GNU-NEXT: {52; GNU-NEXT: call __truncsfhf253; GNU-NEXT: r16 = r054; GNU-NEXT: r0 = memw(r29+#4)55; GNU-NEXT: }56; GNU-NEXT: {57; GNU-NEXT: r1:0 = combine(r0,r16)58; GNU-NEXT: r17:16 = memd(r29+#8)59; GNU-NEXT: dealloc_return60; GNU-NEXT: } // 8-byte Folded Reload61;62; MUSL-LABEL: test_sincos_f16:63; MUSL: // %bb.0:64; MUSL-NEXT: {65; MUSL-NEXT: call __extendhfsf266; MUSL-NEXT: memd(r29+#-16) = r17:1667; MUSL-NEXT: allocframe(#8)68; MUSL-NEXT: } // 8-byte Folded Spill69; MUSL-NEXT: {70; MUSL-NEXT: call sinf71; MUSL-NEXT: r16 = r072; MUSL-NEXT: }73; MUSL-NEXT: {74; MUSL-NEXT: call __truncsfhf275; MUSL-NEXT: }76; MUSL-NEXT: {77; MUSL-NEXT: call cosf78; MUSL-NEXT: r17 = r079; MUSL-NEXT: r0 = r1680; MUSL-NEXT: }81; MUSL-NEXT: {82; MUSL-NEXT: call __truncsfhf283; MUSL-NEXT: }84; MUSL-NEXT: {85; MUSL-NEXT: r1:0 = combine(r0,r17)86; MUSL-NEXT: r17:16 = memd(r29+#0)87; MUSL-NEXT: dealloc_return88; MUSL-NEXT: } // 8-byte Folded Reload89 %result = call { half, half } @llvm.sincos.f16(half %a)90 ret { half, half } %result91}92 93define half @test_sincos_f16_only_use_sin(half %a) #0 {94; BASE-LABEL: test_sincos_f16_only_use_sin:95; BASE: // %bb.0:96; BASE-NEXT: {97; BASE-NEXT: call __extendhfsf298; BASE-NEXT: allocframe(r29,#0):raw99; BASE-NEXT: }100; BASE-NEXT: {101; BASE-NEXT: call sinf102; BASE-NEXT: }103; BASE-NEXT: {104; BASE-NEXT: call __truncsfhf2105; BASE-NEXT: }106; BASE-NEXT: {107; BASE-NEXT: r31:30 = dealloc_return(r30):raw108; BASE-NEXT: }109;110; GNU-LABEL: test_sincos_f16_only_use_sin:111; GNU: // %bb.0:112; GNU-NEXT: {113; GNU-NEXT: call __extendhfsf2114; GNU-NEXT: allocframe(r29,#8):raw115; GNU-NEXT: }116; GNU-NEXT: {117; GNU-NEXT: call sincosf118; GNU-NEXT: r1 = add(r29,#0)119; GNU-NEXT: r2 = add(r29,#4)120; GNU-NEXT: }121; GNU-NEXT: {122; GNU-NEXT: call __truncsfhf2123; GNU-NEXT: r0 = memw(r29+#0)124; GNU-NEXT: }125; GNU-NEXT: {126; GNU-NEXT: r31:30 = dealloc_return(r30):raw127; GNU-NEXT: }128;129; MUSL-LABEL: test_sincos_f16_only_use_sin:130; MUSL: // %bb.0:131; MUSL-NEXT: {132; MUSL-NEXT: call __extendhfsf2133; MUSL-NEXT: allocframe(r29,#0):raw134; MUSL-NEXT: }135; MUSL-NEXT: {136; MUSL-NEXT: call sinf137; MUSL-NEXT: }138; MUSL-NEXT: {139; MUSL-NEXT: call __truncsfhf2140; MUSL-NEXT: }141; MUSL-NEXT: {142; MUSL-NEXT: r31:30 = dealloc_return(r30):raw143; MUSL-NEXT: }144 %result = call { half, half } @llvm.sincos.f16(half %a)145 %result.0 = extractvalue { half, half } %result, 0146 ret half %result.0147}148 149define half @test_sincos_f16_only_use_cos(half %a) #0 {150; BASE-LABEL: test_sincos_f16_only_use_cos:151; BASE: // %bb.0:152; BASE-NEXT: {153; BASE-NEXT: call __extendhfsf2154; BASE-NEXT: allocframe(r29,#0):raw155; BASE-NEXT: }156; BASE-NEXT: {157; BASE-NEXT: call cosf158; BASE-NEXT: }159; BASE-NEXT: {160; BASE-NEXT: call __truncsfhf2161; BASE-NEXT: }162; BASE-NEXT: {163; BASE-NEXT: r31:30 = dealloc_return(r30):raw164; BASE-NEXT: }165;166; GNU-LABEL: test_sincos_f16_only_use_cos:167; GNU: // %bb.0:168; GNU-NEXT: {169; GNU-NEXT: call __extendhfsf2170; GNU-NEXT: allocframe(r29,#8):raw171; GNU-NEXT: }172; GNU-NEXT: {173; GNU-NEXT: call sincosf174; GNU-NEXT: r1 = add(r29,#0)175; GNU-NEXT: r2 = add(r29,#4)176; GNU-NEXT: }177; GNU-NEXT: {178; GNU-NEXT: call __truncsfhf2179; GNU-NEXT: r0 = memw(r29+#4)180; GNU-NEXT: }181; GNU-NEXT: {182; GNU-NEXT: r31:30 = dealloc_return(r30):raw183; GNU-NEXT: }184;185; MUSL-LABEL: test_sincos_f16_only_use_cos:186; MUSL: // %bb.0:187; MUSL-NEXT: {188; MUSL-NEXT: call __extendhfsf2189; MUSL-NEXT: allocframe(r29,#0):raw190; MUSL-NEXT: }191; MUSL-NEXT: {192; MUSL-NEXT: call cosf193; MUSL-NEXT: }194; MUSL-NEXT: {195; MUSL-NEXT: call __truncsfhf2196; MUSL-NEXT: }197; MUSL-NEXT: {198; MUSL-NEXT: r31:30 = dealloc_return(r30):raw199; MUSL-NEXT: }200 %result = call { half, half } @llvm.sincos.f16(half %a)201 %result.1 = extractvalue { half, half } %result, 1202 ret half %result.1203}204 205define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) #0 {206; BASE-LABEL: test_sincos_v2f16:207; BASE: // %bb.0:208; BASE-NEXT: {209; BASE-NEXT: r17:16 = combine(r3,r0)210; BASE-NEXT: r0 = r2211; BASE-NEXT: memd(r29+#-16) = r17:16212; BASE-NEXT: allocframe(#24)213; BASE-NEXT: } // 8-byte Folded Spill214; BASE-NEXT: {215; BASE-NEXT: call __extendhfsf2216; BASE-NEXT: memd(r29+#8) = r19:18217; BASE-NEXT: memd(r29+#0) = r21:20218; BASE-NEXT: } // 8-byte Folded Spill219; BASE-NEXT: {220; BASE-NEXT: call sinf221; BASE-NEXT: r18 = r0222; BASE-NEXT: }223; BASE-NEXT: {224; BASE-NEXT: call __truncsfhf2225; BASE-NEXT: }226; BASE-NEXT: {227; BASE-NEXT: call __extendhfsf2228; BASE-NEXT: r19 = r0229; BASE-NEXT: r0 = r17230; BASE-NEXT: }231; BASE-NEXT: {232; BASE-NEXT: call sinf233; BASE-NEXT: r17 = r0234; BASE-NEXT: }235; BASE-NEXT: {236; BASE-NEXT: call __truncsfhf2237; BASE-NEXT: }238; BASE-NEXT: {239; BASE-NEXT: call cosf240; BASE-NEXT: r20 = r0241; BASE-NEXT: r0 = r18242; BASE-NEXT: }243; BASE-NEXT: {244; BASE-NEXT: call __truncsfhf2245; BASE-NEXT: }246; BASE-NEXT: {247; BASE-NEXT: call cosf248; BASE-NEXT: r18 = r0249; BASE-NEXT: r0 = r17250; BASE-NEXT: }251; BASE-NEXT: {252; BASE-NEXT: call __truncsfhf2253; BASE-NEXT: }254; BASE-NEXT: {255; BASE-NEXT: memh(r16+#6) = r0256; BASE-NEXT: memh(r16+#4) = r18257; BASE-NEXT: }258; BASE-NEXT: {259; BASE-NEXT: memh(r16+#2) = r20260; BASE-NEXT: memh(r16+#0) = r19261; BASE-NEXT: }262; BASE-NEXT: {263; BASE-NEXT: r17:16 = memd(r29+#16)264; BASE-NEXT: r19:18 = memd(r29+#8)265; BASE-NEXT: } // 8-byte Folded Reload266; BASE-NEXT: {267; BASE-NEXT: r21:20 = memd(r29+#0)268; BASE-NEXT: dealloc_return269; BASE-NEXT: } // 8-byte Folded Reload270;271; GNU-LABEL: test_sincos_v2f16:272; GNU: // %bb.0:273; GNU-NEXT: {274; GNU-NEXT: r17:16 = combine(r3,r0)275; GNU-NEXT: r0 = r2276; GNU-NEXT: memd(r29+#-16) = r17:16277; GNU-NEXT: allocframe(#32)278; GNU-NEXT: } // 8-byte Folded Spill279; GNU-NEXT: {280; GNU-NEXT: call __extendhfsf2281; GNU-NEXT: memd(r29+#16) = r19:18282; GNU-NEXT: } // 8-byte Folded Spill283; GNU-NEXT: {284; GNU-NEXT: call sincosf285; GNU-NEXT: r1 = add(r29,#8)286; GNU-NEXT: r2 = add(r29,#12)287; GNU-NEXT: }288; GNU-NEXT: {289; GNU-NEXT: call __extendhfsf2290; GNU-NEXT: r0 = r17291; GNU-NEXT: }292; GNU-NEXT: {293; GNU-NEXT: call sincosf294; GNU-NEXT: r1 = add(r29,#0)295; GNU-NEXT: r2 = add(r29,#4)296; GNU-NEXT: }297; GNU-NEXT: {298; GNU-NEXT: call __truncsfhf2299; GNU-NEXT: r0 = memw(r29+#8)300; GNU-NEXT: }301; GNU-NEXT: {302; GNU-NEXT: call __truncsfhf2303; GNU-NEXT: r17 = r0304; GNU-NEXT: r0 = memw(r29+#0)305; GNU-NEXT: }306; GNU-NEXT: {307; GNU-NEXT: call __truncsfhf2308; GNU-NEXT: r18 = r0309; GNU-NEXT: r0 = memw(r29+#12)310; GNU-NEXT: }311; GNU-NEXT: {312; GNU-NEXT: call __truncsfhf2313; GNU-NEXT: r19 = r0314; GNU-NEXT: r0 = memw(r29+#4)315; GNU-NEXT: }316; GNU-NEXT: {317; GNU-NEXT: memh(r16+#6) = r0318; GNU-NEXT: memh(r16+#4) = r19319; GNU-NEXT: }320; GNU-NEXT: {321; GNU-NEXT: memh(r16+#2) = r18322; GNU-NEXT: memh(r16+#0) = r17323; GNU-NEXT: }324; GNU-NEXT: {325; GNU-NEXT: r17:16 = memd(r29+#24)326; GNU-NEXT: r19:18 = memd(r29+#16)327; GNU-NEXT: } // 8-byte Folded Reload328; GNU-NEXT: {329; GNU-NEXT: r31:30 = dealloc_return(r30):raw330; GNU-NEXT: }331;332; MUSL-LABEL: test_sincos_v2f16:333; MUSL: // %bb.0:334; MUSL-NEXT: {335; MUSL-NEXT: r17:16 = combine(r3,r0)336; MUSL-NEXT: r0 = r2337; MUSL-NEXT: memd(r29+#-16) = r17:16338; MUSL-NEXT: allocframe(#24)339; MUSL-NEXT: } // 8-byte Folded Spill340; MUSL-NEXT: {341; MUSL-NEXT: call __extendhfsf2342; MUSL-NEXT: memd(r29+#8) = r19:18343; MUSL-NEXT: memd(r29+#0) = r21:20344; MUSL-NEXT: } // 8-byte Folded Spill345; MUSL-NEXT: {346; MUSL-NEXT: call sinf347; MUSL-NEXT: r18 = r0348; MUSL-NEXT: }349; MUSL-NEXT: {350; MUSL-NEXT: call __truncsfhf2351; MUSL-NEXT: }352; MUSL-NEXT: {353; MUSL-NEXT: call __extendhfsf2354; MUSL-NEXT: r19 = r0355; MUSL-NEXT: r0 = r17356; MUSL-NEXT: }357; MUSL-NEXT: {358; MUSL-NEXT: call sinf359; MUSL-NEXT: r17 = r0360; MUSL-NEXT: }361; MUSL-NEXT: {362; MUSL-NEXT: call __truncsfhf2363; MUSL-NEXT: }364; MUSL-NEXT: {365; MUSL-NEXT: call cosf366; MUSL-NEXT: r20 = r0367; MUSL-NEXT: r0 = r18368; MUSL-NEXT: }369; MUSL-NEXT: {370; MUSL-NEXT: call __truncsfhf2371; MUSL-NEXT: }372; MUSL-NEXT: {373; MUSL-NEXT: call cosf374; MUSL-NEXT: r18 = r0375; MUSL-NEXT: r0 = r17376; MUSL-NEXT: }377; MUSL-NEXT: {378; MUSL-NEXT: call __truncsfhf2379; MUSL-NEXT: }380; MUSL-NEXT: {381; MUSL-NEXT: memh(r16+#6) = r0382; MUSL-NEXT: memh(r16+#4) = r18383; MUSL-NEXT: }384; MUSL-NEXT: {385; MUSL-NEXT: memh(r16+#2) = r20386; MUSL-NEXT: memh(r16+#0) = r19387; MUSL-NEXT: }388; MUSL-NEXT: {389; MUSL-NEXT: r17:16 = memd(r29+#16)390; MUSL-NEXT: r19:18 = memd(r29+#8)391; MUSL-NEXT: } // 8-byte Folded Reload392; MUSL-NEXT: {393; MUSL-NEXT: r21:20 = memd(r29+#0)394; MUSL-NEXT: dealloc_return395; MUSL-NEXT: } // 8-byte Folded Reload396 %result = call { <2 x half>, <2 x half> } @llvm.sincos.v2f16(<2 x half> %a)397 ret { <2 x half>, <2 x half> } %result398}399 400define { float, float } @test_sincos_f32(float %a) #0 {401; BASE-LABEL: test_sincos_f32:402; BASE: // %bb.0:403; BASE-NEXT: {404; BASE-NEXT: call sinf405; BASE-NEXT: r16 = r0406; BASE-NEXT: memd(r29+#-16) = r17:16407; BASE-NEXT: allocframe(#8)408; BASE-NEXT: } // 8-byte Folded Spill409; BASE-NEXT: {410; BASE-NEXT: call cosf411; BASE-NEXT: r17 = r0412; BASE-NEXT: r0 = r16413; BASE-NEXT: }414; BASE-NEXT: {415; BASE-NEXT: r1:0 = combine(r0,r17)416; BASE-NEXT: r17:16 = memd(r29+#0)417; BASE-NEXT: dealloc_return418; BASE-NEXT: } // 8-byte Folded Reload419;420; GNU-LABEL: test_sincos_f32:421; GNU: // %bb.0:422; GNU-NEXT: {423; GNU-NEXT: allocframe(r29,#8):raw424; GNU-NEXT: }425; GNU-NEXT: {426; GNU-NEXT: call sincosf427; GNU-NEXT: r1 = add(r29,#0)428; GNU-NEXT: r2 = add(r29,#4)429; GNU-NEXT: }430; GNU-NEXT: {431; GNU-NEXT: r0 = memw(r29+#0)432; GNU-NEXT: r1 = memw(r29+#4)433; GNU-NEXT: }434; GNU-NEXT: {435; GNU-NEXT: r31:30 = dealloc_return(r30):raw436; GNU-NEXT: }437;438; MUSL-LABEL: test_sincos_f32:439; MUSL: // %bb.0:440; MUSL-NEXT: {441; MUSL-NEXT: call sinf442; MUSL-NEXT: r16 = r0443; MUSL-NEXT: memd(r29+#-16) = r17:16444; MUSL-NEXT: allocframe(#8)445; MUSL-NEXT: } // 8-byte Folded Spill446; MUSL-NEXT: {447; MUSL-NEXT: call cosf448; MUSL-NEXT: r17 = r0449; MUSL-NEXT: r0 = r16450; MUSL-NEXT: }451; MUSL-NEXT: {452; MUSL-NEXT: r1:0 = combine(r0,r17)453; MUSL-NEXT: r17:16 = memd(r29+#0)454; MUSL-NEXT: dealloc_return455; MUSL-NEXT: } // 8-byte Folded Reload456 %result = call { float, float } @llvm.sincos.f32(float %a)457 ret { float, float } %result458}459 460define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {461; CHECKR2-LABEL: test_sincos_v2f32:462; CHECKR2: # %bb.0:463; CHECKR2-NEXT: daddiu $sp, $sp, -32464; CHECKR2-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill465; CHECKR2-NEXT: sd $16, 16($sp) # 8-byte Folded Spill466; CHECKR2-NEXT: move $16, $4467; CHECKR2-NEXT: dsrl $1, $4, 32468; CHECKR2-NEXT: sll $1, $1, 0469; CHECKR2-NEXT: mtc1 $1, $f12470; CHECKR2-NEXT: daddiu $5, $sp, 12471; CHECKR2-NEXT: jal sincosf472; CHECKR2-NEXT: daddiu $6, $sp, 8473; CHECKR2-NEXT: sll $1, $16, 0474; CHECKR2-NEXT: mtc1 $1, $f12475; CHECKR2-NEXT: daddiu $5, $sp, 4476; CHECKR2-NEXT: jal sincosf477; CHECKR2-NEXT: daddiu $6, $sp, 0478; CHECKR2-NEXT: lwc1 $f0, 12($sp)479; CHECKR2-NEXT: mfc1 $1, $f0480; CHECKR2-NEXT: dsll $1, $1, 32481; CHECKR2-NEXT: lwc1 $f0, 4($sp)482; CHECKR2-NEXT: mfc1 $2, $f0483; CHECKR2-NEXT: dext $2, $2, 0, 32484; CHECKR2-NEXT: lwc1 $f0, 8($sp)485; CHECKR2-NEXT: or $2, $2, $1486; CHECKR2-NEXT: mfc1 $1, $f0487; CHECKR2-NEXT: dsll $1, $1, 32488; CHECKR2-NEXT: lwc1 $f0, 0($sp)489; CHECKR2-NEXT: mfc1 $3, $f0490; CHECKR2-NEXT: dext $3, $3, 0, 32491; CHECKR2-NEXT: or $3, $3, $1492; CHECKR2-NEXT: ld $16, 16($sp) # 8-byte Folded Reload493; CHECKR2-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload494; CHECKR2-NEXT: jr $ra495; CHECKR2-NEXT: daddiu $sp, $sp, 32496; BASE-LABEL: test_sincos_v2f32:497; BASE: // %bb.0:498; BASE-NEXT: {499; BASE-NEXT: r17:16 = combine(r0,r2)500; BASE-NEXT: r0 = r2501; BASE-NEXT: memd(r29+#-16) = r17:16502; BASE-NEXT: allocframe(#24)503; BASE-NEXT: } // 8-byte Folded Spill504; BASE-NEXT: {505; BASE-NEXT: call sinf506; BASE-NEXT: r18 = r3507; BASE-NEXT: memd(r29+#8) = r19:18508; BASE-NEXT: memd(r29+#0) = r21:20509; BASE-NEXT: } // 8-byte Folded Spill510; BASE-NEXT: {511; BASE-NEXT: call sinf512; BASE-NEXT: r19 = r0513; BASE-NEXT: r0 = r18514; BASE-NEXT: }515; BASE-NEXT: {516; BASE-NEXT: call cosf517; BASE-NEXT: r20 = r0518; BASE-NEXT: r0 = r16519; BASE-NEXT: }520; BASE-NEXT: {521; BASE-NEXT: call cosf522; BASE-NEXT: r16 = r0523; BASE-NEXT: r0 = r18524; BASE-NEXT: }525; BASE-NEXT: {526; BASE-NEXT: r1:0 = combine(r0,r16)527; BASE-NEXT: r3:2 = combine(r20,r19)528; BASE-NEXT: }529; BASE-NEXT: {530; BASE-NEXT: memd(r17+#8) = r1:0531; BASE-NEXT: memd(r17+#0) = r3:2532; BASE-NEXT: }533; BASE-NEXT: {534; BASE-NEXT: r17:16 = memd(r29+#16)535; BASE-NEXT: r19:18 = memd(r29+#8)536; BASE-NEXT: } // 8-byte Folded Reload537; BASE-NEXT: {538; BASE-NEXT: r21:20 = memd(r29+#0)539; BASE-NEXT: dealloc_return540; BASE-NEXT: } // 8-byte Folded Reload541;542; GNU-LABEL: test_sincos_v2f32:543; GNU: // %bb.0:544; GNU-NEXT: {545; GNU-NEXT: r17:16 = combine(r0,r2)546; GNU-NEXT: r1 = add(r0,#4)547; GNU-NEXT: memd(r29+#-16) = r17:16548; GNU-NEXT: allocframe(#8)549; GNU-NEXT: } // 8-byte Folded Spill550; GNU-NEXT: {551; GNU-NEXT: call sincosf552; GNU-NEXT: r2 = add(r0,#12)553; GNU-NEXT: r0 = r3554; GNU-NEXT: }555; GNU-NEXT: {556; GNU-NEXT: call sincosf557; GNU-NEXT: r2 = add(r17,#8)558; GNU-NEXT: r1:0 = combine(r17,r16)559; GNU-NEXT: }560; GNU-NEXT: {561; GNU-NEXT: r17:16 = memd(r29+#0)562; GNU-NEXT: dealloc_return563; GNU-NEXT: } // 8-byte Folded Reload564;565; MUSL-LABEL: test_sincos_v2f32:566; MUSL: // %bb.0:567; MUSL-NEXT: {568; MUSL-NEXT: r17:16 = combine(r0,r2)569; MUSL-NEXT: r0 = r2570; MUSL-NEXT: memd(r29+#-16) = r17:16571; MUSL-NEXT: allocframe(#24)572; MUSL-NEXT: } // 8-byte Folded Spill573; MUSL-NEXT: {574; MUSL-NEXT: call sinf575; MUSL-NEXT: r18 = r3576; MUSL-NEXT: memd(r29+#8) = r19:18577; MUSL-NEXT: memd(r29+#0) = r21:20578; MUSL-NEXT: } // 8-byte Folded Spill579; MUSL-NEXT: {580; MUSL-NEXT: call sinf581; MUSL-NEXT: r19 = r0582; MUSL-NEXT: r0 = r18583; MUSL-NEXT: }584; MUSL-NEXT: {585; MUSL-NEXT: call cosf586; MUSL-NEXT: r20 = r0587; MUSL-NEXT: r0 = r16588; MUSL-NEXT: }589; MUSL-NEXT: {590; MUSL-NEXT: call cosf591; MUSL-NEXT: r16 = r0592; MUSL-NEXT: r0 = r18593; MUSL-NEXT: }594; MUSL-NEXT: {595; MUSL-NEXT: r1:0 = combine(r0,r16)596; MUSL-NEXT: r3:2 = combine(r20,r19)597; MUSL-NEXT: }598; MUSL-NEXT: {599; MUSL-NEXT: memd(r17+#8) = r1:0600; MUSL-NEXT: memd(r17+#0) = r3:2601; MUSL-NEXT: }602; MUSL-NEXT: {603; MUSL-NEXT: r17:16 = memd(r29+#16)604; MUSL-NEXT: r19:18 = memd(r29+#8)605; MUSL-NEXT: } // 8-byte Folded Reload606; MUSL-NEXT: {607; MUSL-NEXT: r21:20 = memd(r29+#0)608; MUSL-NEXT: dealloc_return609; MUSL-NEXT: } // 8-byte Folded Reload610 %result = call { <2 x float>, <2 x float> } @llvm.sincos.v2f32(<2 x float> %a)611 ret { <2 x float>, <2 x float> } %result612}613 614define { <3 x float>, <3 x float> } @test_sincos_v3f32(<3 x float> %a) #0 {615; CHECKR2-LABEL: test_sincos_v3f32:616; CHECKR2: # %bb.0:617; CHECKR2-NEXT: daddiu $sp, $sp, -48618; CHECKR2-NEXT: sdc1 $f25, 40($sp) # 8-byte Folded Spill619; CHECKR2-NEXT: sdc1 $f24, 32($sp) # 8-byte Folded Spill620; CHECKR2-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill621; CHECKR2-NEXT: sd $16, 16($sp) # 8-byte Folded Spill622; CHECKR2-NEXT: mov.s $f24, $f15623; CHECKR2-NEXT: mov.s $f25, $f14624; CHECKR2-NEXT: mov.s $f12, $f13625; CHECKR2-NEXT: move $16, $4626; CHECKR2-NEXT: daddiu $5, $sp, 4627; CHECKR2-NEXT: jal sincosf628; CHECKR2-NEXT: daddiu $6, $sp, 0629; CHECKR2-NEXT: daddiu $5, $sp, 12630; CHECKR2-NEXT: daddiu $6, $sp, 8631; CHECKR2-NEXT: jal sincosf632; CHECKR2-NEXT: mov.s $f12, $f25633; CHECKR2-NEXT: daddiu $5, $16, 8634; CHECKR2-NEXT: daddiu $6, $16, 24635; CHECKR2-NEXT: jal sincosf636; CHECKR2-NEXT: mov.s $f12, $f24637; CHECKR2-NEXT: lwc1 $f0, 0($sp)638; CHECKR2-NEXT: mfc1 $1, $f0639; CHECKR2-NEXT: dsll $1, $1, 32640; CHECKR2-NEXT: lwc1 $f0, 8($sp)641; CHECKR2-NEXT: mfc1 $2, $f0642; CHECKR2-NEXT: dext $2, $2, 0, 32643; CHECKR2-NEXT: or $1, $2, $1644; CHECKR2-NEXT: lwc1 $f0, 4($sp)645; CHECKR2-NEXT: mfc1 $2, $f0646; CHECKR2-NEXT: sd $1, 16($16)647; CHECKR2-NEXT: dsll $1, $2, 32648; CHECKR2-NEXT: lwc1 $f0, 12($sp)649; CHECKR2-NEXT: mfc1 $2, $f0650; CHECKR2-NEXT: dext $2, $2, 0, 32651; CHECKR2-NEXT: or $1, $2, $1652; CHECKR2-NEXT: sd $1, 0($16)653; CHECKR2-NEXT: ld $16, 16($sp) # 8-byte Folded Reload654; CHECKR2-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload655; CHECKR2-NEXT: ldc1 $f24, 32($sp) # 8-byte Folded Reload656; CHECKR2-NEXT: ldc1 $f25, 40($sp) # 8-byte Folded Reload657; CHECKR2-NEXT: jr $ra658; CHECKR2-NEXT: daddiu $sp, $sp, 48659; BASE-LABEL: test_sincos_v3f32:660; BASE: // %bb.0:661; BASE-NEXT: {662; BASE-NEXT: memd(r29+#-16) = r17:16663; BASE-NEXT: allocframe(#32)664; BASE-NEXT: } // 8-byte Folded Spill665; BASE-NEXT: {666; BASE-NEXT: r19:18 = combine(r0,r2)667; BASE-NEXT: r0 = r2668; BASE-NEXT: memd(r29+#16) = r19:18669; BASE-NEXT: memd(r29+#8) = r21:20670; BASE-NEXT: } // 8-byte Folded Spill671; BASE-NEXT: {672; BASE-NEXT: call sinf673; BASE-NEXT: r21:20 = combine(r3,r4)674; BASE-NEXT: memd(r29+#0) = r23:22675; BASE-NEXT: } // 8-byte Folded Spill676; BASE-NEXT: {677; BASE-NEXT: call sinf678; BASE-NEXT: r16 = r0679; BASE-NEXT: r0 = r21680; BASE-NEXT: }681; BASE-NEXT: {682; BASE-NEXT: call cosf683; BASE-NEXT: r17 = r0684; BASE-NEXT: r0 = r18685; BASE-NEXT: }686; BASE-NEXT: {687; BASE-NEXT: call cosf688; BASE-NEXT: r22 = r0689; BASE-NEXT: r0 = r21690; BASE-NEXT: }691; BASE-NEXT: {692; BASE-NEXT: call sinf693; BASE-NEXT: r23 = r0694; BASE-NEXT: r0 = r20695; BASE-NEXT: }696; BASE-NEXT: {697; BASE-NEXT: call cosf698; BASE-NEXT: r18 = r0699; BASE-NEXT: r0 = r20700; BASE-NEXT: }701; BASE-NEXT: {702; BASE-NEXT: memw(r19+#24) = r0703; BASE-NEXT: memd(r19+#16) = r23:22704; BASE-NEXT: }705; BASE-NEXT: {706; BASE-NEXT: memw(r19+#8) = r18707; BASE-NEXT: memd(r19+#0) = r17:16708; BASE-NEXT: }709; BASE-NEXT: {710; BASE-NEXT: r17:16 = memd(r29+#24)711; BASE-NEXT: r19:18 = memd(r29+#16)712; BASE-NEXT: } // 8-byte Folded Reload713; BASE-NEXT: {714; BASE-NEXT: r21:20 = memd(r29+#8)715; BASE-NEXT: r23:22 = memd(r29+#0)716; BASE-NEXT: } // 8-byte Folded Reload717; BASE-NEXT: {718; BASE-NEXT: r31:30 = dealloc_return(r30):raw719; BASE-NEXT: }720;721; GNU-LABEL: test_sincos_v3f32:722; GNU: // %bb.0:723; GNU-NEXT: {724; GNU-NEXT: r17:16 = combine(r4,r0)725; GNU-NEXT: r0 = r2726; GNU-NEXT: memd(r29+#-16) = r17:16727; GNU-NEXT: allocframe(#32)728; GNU-NEXT: } // 8-byte Folded Spill729; GNU-NEXT: {730; GNU-NEXT: r2 = add(r29,#12)731; GNU-NEXT: r18 = r3732; GNU-NEXT: r1 = add(r29,#8)733; GNU-NEXT: memd(r29+#16) = r19:18734; GNU-NEXT: } // 8-byte Folded Spill735; GNU-NEXT: {736; GNU-NEXT: call sincosf737; GNU-NEXT: }738; GNU-NEXT: {739; GNU-NEXT: call sincosf740; GNU-NEXT: r1 = add(r29,#0)741; GNU-NEXT: r2 = add(r29,#4)742; GNU-NEXT: r0 = r18743; GNU-NEXT: }744; GNU-NEXT: {745; GNU-NEXT: call sincosf746; GNU-NEXT: r1 = add(r16,#8)747; GNU-NEXT: r2 = add(r16,#24)748; GNU-NEXT: r0 = r17749; GNU-NEXT: }750; GNU-NEXT: {751; GNU-NEXT: r0 = memw(r29+#8)752; GNU-NEXT: r1 = memw(r29+#0)753; GNU-NEXT: }754; GNU-NEXT: {755; GNU-NEXT: r2 = memw(r29+#12)756; GNU-NEXT: r3 = memw(r29+#4)757; GNU-NEXT: }758; GNU-NEXT: {759; GNU-NEXT: memd(r16+#16) = r3:2760; GNU-NEXT: memd(r16+#0) = r1:0761; GNU-NEXT: }762; GNU-NEXT: {763; GNU-NEXT: r17:16 = memd(r29+#24)764; GNU-NEXT: r19:18 = memd(r29+#16)765; GNU-NEXT: } // 8-byte Folded Reload766; GNU-NEXT: {767; GNU-NEXT: r31:30 = dealloc_return(r30):raw768; GNU-NEXT: }769;770; MUSL-LABEL: test_sincos_v3f32:771; MUSL: // %bb.0:772; MUSL-NEXT: {773; MUSL-NEXT: memd(r29+#-16) = r17:16774; MUSL-NEXT: allocframe(#32)775; MUSL-NEXT: } // 8-byte Folded Spill776; MUSL-NEXT: {777; MUSL-NEXT: r19:18 = combine(r0,r2)778; MUSL-NEXT: r0 = r2779; MUSL-NEXT: memd(r29+#16) = r19:18780; MUSL-NEXT: memd(r29+#8) = r21:20781; MUSL-NEXT: } // 8-byte Folded Spill782; MUSL-NEXT: {783; MUSL-NEXT: call sinf784; MUSL-NEXT: r21:20 = combine(r3,r4)785; MUSL-NEXT: memd(r29+#0) = r23:22786; MUSL-NEXT: } // 8-byte Folded Spill787; MUSL-NEXT: {788; MUSL-NEXT: call sinf789; MUSL-NEXT: r16 = r0790; MUSL-NEXT: r0 = r21791; MUSL-NEXT: }792; MUSL-NEXT: {793; MUSL-NEXT: call cosf794; MUSL-NEXT: r17 = r0795; MUSL-NEXT: r0 = r18796; MUSL-NEXT: }797; MUSL-NEXT: {798; MUSL-NEXT: call cosf799; MUSL-NEXT: r22 = r0800; MUSL-NEXT: r0 = r21801; MUSL-NEXT: }802; MUSL-NEXT: {803; MUSL-NEXT: call sinf804; MUSL-NEXT: r23 = r0805; MUSL-NEXT: r0 = r20806; MUSL-NEXT: }807; MUSL-NEXT: {808; MUSL-NEXT: call cosf809; MUSL-NEXT: r18 = r0810; MUSL-NEXT: r0 = r20811; MUSL-NEXT: }812; MUSL-NEXT: {813; MUSL-NEXT: memw(r19+#24) = r0814; MUSL-NEXT: memd(r19+#16) = r23:22815; MUSL-NEXT: }816; MUSL-NEXT: {817; MUSL-NEXT: memw(r19+#8) = r18818; MUSL-NEXT: memd(r19+#0) = r17:16819; MUSL-NEXT: }820; MUSL-NEXT: {821; MUSL-NEXT: r17:16 = memd(r29+#24)822; MUSL-NEXT: r19:18 = memd(r29+#16)823; MUSL-NEXT: } // 8-byte Folded Reload824; MUSL-NEXT: {825; MUSL-NEXT: r21:20 = memd(r29+#8)826; MUSL-NEXT: r23:22 = memd(r29+#0)827; MUSL-NEXT: } // 8-byte Folded Reload828; MUSL-NEXT: {829; MUSL-NEXT: r31:30 = dealloc_return(r30):raw830; MUSL-NEXT: }831 %result = call { <3 x float>, <3 x float> } @llvm.sincos.v3f32(<3 x float> %a)832 ret { <3 x float>, <3 x float> } %result833}834 835define { double, double } @test_sincos_f64(double %a) #0 {836; BASE-LABEL: test_sincos_f64:837; BASE: // %bb.0:838; BASE-NEXT: {839; BASE-NEXT: r17:16 = combine(r3,r2)840; BASE-NEXT: memd(r29+#-16) = r17:16841; BASE-NEXT: allocframe(#24)842; BASE-NEXT: } // 8-byte Folded Spill843; BASE-NEXT: {844; BASE-NEXT: r18 = r0845; BASE-NEXT: r1:0 = combine(r3,r2)846; BASE-NEXT: memd(r29+#8) = r19:18847; BASE-NEXT: memd(r29+#0) = r21:20848; BASE-NEXT: } // 8-byte Folded Spill849; BASE-NEXT: {850; BASE-NEXT: call sin851; BASE-NEXT: }852; BASE-NEXT: {853; BASE-NEXT: call cos854; BASE-NEXT: r21:20 = combine(r1,r0)855; BASE-NEXT: r1:0 = combine(r17,r16)856; BASE-NEXT: }857; BASE-NEXT: {858; BASE-NEXT: memd(r18+#8) = r1:0859; BASE-NEXT: memd(r18+#0) = r21:20860; BASE-NEXT: }861; BASE-NEXT: {862; BASE-NEXT: r17:16 = memd(r29+#16)863; BASE-NEXT: r19:18 = memd(r29+#8)864; BASE-NEXT: } // 8-byte Folded Reload865; BASE-NEXT: {866; BASE-NEXT: r21:20 = memd(r29+#0)867; BASE-NEXT: dealloc_return868; BASE-NEXT: } // 8-byte Folded Reload869;870; GNU-LABEL: test_sincos_f64:871; GNU: // %bb.0:872; GNU-NEXT: {873; GNU-NEXT: r5:4 = combine(r3,r2)874; GNU-NEXT: r3 = add(r0,#8)875; GNU-NEXT: r2 = r0876; GNU-NEXT: allocframe(#0)877; GNU-NEXT: }878; GNU-NEXT: {879; GNU-NEXT: call sincos880; GNU-NEXT: r1:0 = combine(r5,r4)881; GNU-NEXT: }882; GNU-NEXT: {883; GNU-NEXT: r31:30 = dealloc_return(r30):raw884; GNU-NEXT: }885;886; MUSL-LABEL: test_sincos_f64:887; MUSL: // %bb.0:888; MUSL-NEXT: {889; MUSL-NEXT: r17:16 = combine(r3,r2)890; MUSL-NEXT: memd(r29+#-16) = r17:16891; MUSL-NEXT: allocframe(#24)892; MUSL-NEXT: } // 8-byte Folded Spill893; MUSL-NEXT: {894; MUSL-NEXT: r18 = r0895; MUSL-NEXT: r1:0 = combine(r3,r2)896; MUSL-NEXT: memd(r29+#8) = r19:18897; MUSL-NEXT: memd(r29+#0) = r21:20898; MUSL-NEXT: } // 8-byte Folded Spill899; MUSL-NEXT: {900; MUSL-NEXT: call sin901; MUSL-NEXT: }902; MUSL-NEXT: {903; MUSL-NEXT: call cos904; MUSL-NEXT: r21:20 = combine(r1,r0)905; MUSL-NEXT: r1:0 = combine(r17,r16)906; MUSL-NEXT: }907; MUSL-NEXT: {908; MUSL-NEXT: memd(r18+#8) = r1:0909; MUSL-NEXT: memd(r18+#0) = r21:20910; MUSL-NEXT: }911; MUSL-NEXT: {912; MUSL-NEXT: r17:16 = memd(r29+#16)913; MUSL-NEXT: r19:18 = memd(r29+#8)914; MUSL-NEXT: } // 8-byte Folded Reload915; MUSL-NEXT: {916; MUSL-NEXT: r21:20 = memd(r29+#0)917; MUSL-NEXT: dealloc_return918; MUSL-NEXT: } // 8-byte Folded Reload919 %result = call { double, double } @llvm.sincos.f64(double %a)920 ret { double, double } %result921}922 923define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {924; CHECKR2-LABEL: test_sincos_v2f64:925; CHECKR2: # %bb.0:926; CHECKR2-NEXT: addiu $sp, $sp, -32927; CHECKR2-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill928; CHECKR2-NEXT: sw $18, 24($sp) # 4-byte Folded Spill929; CHECKR2-NEXT: sw $17, 20($sp) # 4-byte Folded Spill930; CHECKR2-NEXT: sw $16, 16($sp) # 4-byte Folded Spill931; CHECKR2-NEXT: move $16, $7932; CHECKR2-NEXT: move $17, $6933; CHECKR2-NEXT: move $18, $4934; CHECKR2-NEXT: lw $1, 48($sp)935; CHECKR2-NEXT: lw $2, 52($sp)936; CHECKR2-NEXT: mtc1 $2, $f12937; CHECKR2-NEXT: mthc1 $1, $f12938; CHECKR2-NEXT: addiu $6, $4, 8939; CHECKR2-NEXT: jal sincos940; CHECKR2-NEXT: addiu $7, $4, 24941; CHECKR2-NEXT: mtc1 $16, $f12942; CHECKR2-NEXT: mthc1 $17, $f12943; CHECKR2-NEXT: addiu $7, $18, 16944; CHECKR2-NEXT: jal sincos945; CHECKR2-NEXT: move $6, $18946; CHECKR2-NEXT: lw $16, 16($sp) # 4-byte Folded Reload947; CHECKR2-NEXT: lw $17, 20($sp) # 4-byte Folded Reload948; CHECKR2-NEXT: lw $18, 24($sp) # 4-byte Folded Reload949; CHECKR2-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload950; CHECKR2-NEXT: jr $ra951; CHECKR2-NEXT: addiu $sp, $sp, 32952; BASE-LABEL: test_sincos_v2f64:953; BASE: // %bb.0:954; BASE-NEXT: {955; BASE-NEXT: r17:16 = combine(r3,r2)956; BASE-NEXT: memd(r29+#-16) = r17:16957; BASE-NEXT: allocframe(#40)958; BASE-NEXT: } // 8-byte Folded Spill959; BASE-NEXT: {960; BASE-NEXT: r18 = r0961; BASE-NEXT: r1:0 = combine(r3,r2)962; BASE-NEXT: memd(r29+#24) = r19:18963; BASE-NEXT: memd(r29+#16) = r21:20964; BASE-NEXT: } // 8-byte Folded Spill965; BASE-NEXT: {966; BASE-NEXT: call sin967; BASE-NEXT: r21:20 = combine(r5,r4)968; BASE-NEXT: memd(r29+#8) = r23:22969; BASE-NEXT: memd(r29+#0) = r25:24970; BASE-NEXT: } // 8-byte Folded Spill971; BASE-NEXT: {972; BASE-NEXT: call sin973; BASE-NEXT: r23:22 = combine(r1,r0)974; BASE-NEXT: r1:0 = combine(r21,r20)975; BASE-NEXT: }976; BASE-NEXT: {977; BASE-NEXT: call cos978; BASE-NEXT: r25:24 = combine(r1,r0)979; BASE-NEXT: r1:0 = combine(r17,r16)980; BASE-NEXT: }981; BASE-NEXT: {982; BASE-NEXT: call cos983; BASE-NEXT: r17:16 = combine(r1,r0)984; BASE-NEXT: r1:0 = combine(r21,r20)985; BASE-NEXT: }986; BASE-NEXT: {987; BASE-NEXT: memd(r18+#16) = r17:16988; BASE-NEXT: memd(r18+#24) = r1:0989; BASE-NEXT: }990; BASE-NEXT: {991; BASE-NEXT: memd(r18+#8) = r25:24992; BASE-NEXT: memd(r18+#0) = r23:22993; BASE-NEXT: }994; BASE-NEXT: {995; BASE-NEXT: r17:16 = memd(r29+#32)996; BASE-NEXT: r19:18 = memd(r29+#24)997; BASE-NEXT: } // 8-byte Folded Reload998; BASE-NEXT: {999; BASE-NEXT: r21:20 = memd(r29+#16)1000; BASE-NEXT: r23:22 = memd(r29+#8)1001; BASE-NEXT: } // 8-byte Folded Reload1002; BASE-NEXT: {1003; BASE-NEXT: r25:24 = memd(r29+#0)1004; BASE-NEXT: r31:30 = dealloc_return(r30):raw1005; BASE-NEXT: } // 8-byte Folded Reload1006;1007; GNU-LABEL: test_sincos_v2f64:1008; GNU: // %bb.0:1009; GNU-NEXT: {1010; GNU-NEXT: r17:16 = combine(r3,r2)1011; GNU-NEXT: r2 = add(r0,#8)1012; GNU-NEXT: memd(r29+#-16) = r17:161013; GNU-NEXT: allocframe(#16)1014; GNU-NEXT: } // 8-byte Folded Spill1015; GNU-NEXT: {1016; GNU-NEXT: r3 = add(r0,#24)1017; GNU-NEXT: r1:0 = combine(r5,r4)1018; GNU-NEXT: r18 = r01019; GNU-NEXT: memd(r29+#0) = r19:181020; GNU-NEXT: } // 8-byte Folded Spill1021; GNU-NEXT: {1022; GNU-NEXT: call sincos1023; GNU-NEXT: }1024; GNU-NEXT: {1025; GNU-NEXT: call sincos1026; GNU-NEXT: r3 = add(r18,#16)1027; GNU-NEXT: r1:0 = combine(r17,r16)1028; GNU-NEXT: r2 = r181029; GNU-NEXT: }1030; GNU-NEXT: {1031; GNU-NEXT: r17:16 = memd(r29+#8)1032; GNU-NEXT: r19:18 = memd(r29+#0)1033; GNU-NEXT: } // 8-byte Folded Reload1034; GNU-NEXT: {1035; GNU-NEXT: r31:30 = dealloc_return(r30):raw1036; GNU-NEXT: }1037;1038; MUSL-LABEL: test_sincos_v2f64:1039; MUSL: // %bb.0:1040; MUSL-NEXT: {1041; MUSL-NEXT: r17:16 = combine(r3,r2)1042; MUSL-NEXT: memd(r29+#-16) = r17:161043; MUSL-NEXT: allocframe(#40)1044; MUSL-NEXT: } // 8-byte Folded Spill1045; MUSL-NEXT: {1046; MUSL-NEXT: r18 = r01047; MUSL-NEXT: r1:0 = combine(r3,r2)1048; MUSL-NEXT: memd(r29+#24) = r19:181049; MUSL-NEXT: memd(r29+#16) = r21:201050; MUSL-NEXT: } // 8-byte Folded Spill1051; MUSL-NEXT: {1052; MUSL-NEXT: call sin1053; MUSL-NEXT: r21:20 = combine(r5,r4)1054; MUSL-NEXT: memd(r29+#8) = r23:221055; MUSL-NEXT: memd(r29+#0) = r25:241056; MUSL-NEXT: } // 8-byte Folded Spill1057; MUSL-NEXT: {1058; MUSL-NEXT: call sin1059; MUSL-NEXT: r23:22 = combine(r1,r0)1060; MUSL-NEXT: r1:0 = combine(r21,r20)1061; MUSL-NEXT: }1062; MUSL-NEXT: {1063; MUSL-NEXT: call cos1064; MUSL-NEXT: r25:24 = combine(r1,r0)1065; MUSL-NEXT: r1:0 = combine(r17,r16)1066; MUSL-NEXT: }1067; MUSL-NEXT: {1068; MUSL-NEXT: call cos1069; MUSL-NEXT: r17:16 = combine(r1,r0)1070; MUSL-NEXT: r1:0 = combine(r21,r20)1071; MUSL-NEXT: }1072; MUSL-NEXT: {1073; MUSL-NEXT: memd(r18+#16) = r17:161074; MUSL-NEXT: memd(r18+#24) = r1:01075; MUSL-NEXT: }1076; MUSL-NEXT: {1077; MUSL-NEXT: memd(r18+#8) = r25:241078; MUSL-NEXT: memd(r18+#0) = r23:221079; MUSL-NEXT: }1080; MUSL-NEXT: {1081; MUSL-NEXT: r17:16 = memd(r29+#32)1082; MUSL-NEXT: r19:18 = memd(r29+#24)1083; MUSL-NEXT: } // 8-byte Folded Reload1084; MUSL-NEXT: {1085; MUSL-NEXT: r21:20 = memd(r29+#16)1086; MUSL-NEXT: r23:22 = memd(r29+#8)1087; MUSL-NEXT: } // 8-byte Folded Reload1088; MUSL-NEXT: {1089; MUSL-NEXT: r25:24 = memd(r29+#0)1090; MUSL-NEXT: r31:30 = dealloc_return(r30):raw1091; MUSL-NEXT: } // 8-byte Folded Reload1092 %result = call { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %a)1093 ret { <2 x double>, <2 x double> } %result1094}1095 1096define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {1097; BASE-LABEL: test_sincos_f128:1098; BASE: // %bb.0:1099; BASE-NEXT: {1100; BASE-NEXT: r17:16 = combine(r5,r4)1101; BASE-NEXT: memd(r29+#-16) = r17:161102; BASE-NEXT: allocframe(#56)1103; BASE-NEXT: } // 8-byte Folded Spill1104; BASE-NEXT: {1105; BASE-NEXT: r20 = r01106; BASE-NEXT: r0 = add(r29,#0)1107; BASE-NEXT: memd(r29+#32) = r21:201108; BASE-NEXT: memd(r29+#40) = r19:181109; BASE-NEXT: } // 8-byte Folded Spill1110; BASE-NEXT: {1111; BASE-NEXT: call sinl1112; BASE-NEXT: r19:18 = combine(r3,r2)1113; BASE-NEXT: }1114; BASE-NEXT: {1115; BASE-NEXT: call cosl1116; BASE-NEXT: r0 = add(r29,#16)1117; BASE-NEXT: r3:2 = combine(r19,r18)1118; BASE-NEXT: r5:4 = combine(r17,r16)1119; BASE-NEXT: }1120; BASE-NEXT: {1121; BASE-NEXT: r1:0 = memd(r29+#0)1122; BASE-NEXT: r3:2 = memd(r29+#8)1123; BASE-NEXT: }1124; BASE-NEXT: {1125; BASE-NEXT: r5:4 = memd(r29+#16)1126; BASE-NEXT: r7:6 = memd(r29+#24)1127; BASE-NEXT: }1128; BASE-NEXT: {1129; BASE-NEXT: memd(r20+#24) = r7:61130; BASE-NEXT: memd(r20+#16) = r5:41131; BASE-NEXT: }1132; BASE-NEXT: {1133; BASE-NEXT: memd(r20+#8) = r3:21134; BASE-NEXT: memd(r20+#0) = r1:01135; BASE-NEXT: }1136; BASE-NEXT: {1137; BASE-NEXT: r17:16 = memd(r29+#48)1138; BASE-NEXT: r19:18 = memd(r29+#40)1139; BASE-NEXT: } // 8-byte Folded Reload1140; BASE-NEXT: {1141; BASE-NEXT: r21:20 = memd(r29+#32)1142; BASE-NEXT: dealloc_return1143; BASE-NEXT: } // 8-byte Folded Reload1144;1145; GNU-LABEL: test_sincos_f128:1146; GNU: // %bb.0:1147; GNU-NEXT: {1148; GNU-NEXT: r16 = r01149; GNU-NEXT: memd(r29+#-16) = r17:161150; GNU-NEXT: allocframe(#64)1151; GNU-NEXT: } // 8-byte Folded Spill1152; GNU-NEXT: {1153; GNU-NEXT: r0 = add(r29,#40)1154; GNU-NEXT: r7 = add(r29,#24)1155; GNU-NEXT: r6 = add(r29,#8)1156; GNU-NEXT: memw(r29+#4) = r7.new1157; GNU-NEXT: }1158; GNU-NEXT: {1159; GNU-NEXT: call sincosl1160; GNU-NEXT: memw(r29+#0) = r61161; GNU-NEXT: }1162; GNU-NEXT: {1163; GNU-NEXT: r1:0 = memd(r29+#8)1164; GNU-NEXT: r3:2 = memd(r29+#16)1165; GNU-NEXT: }1166; GNU-NEXT: {1167; GNU-NEXT: r5:4 = memd(r29+#24)1168; GNU-NEXT: r7:6 = memd(r29+#32)1169; GNU-NEXT: }1170; GNU-NEXT: {1171; GNU-NEXT: memd(r16+#24) = r7:61172; GNU-NEXT: memd(r16+#16) = r5:41173; GNU-NEXT: }1174; GNU-NEXT: {1175; GNU-NEXT: memd(r16+#8) = r3:21176; GNU-NEXT: memd(r16+#0) = r1:01177; GNU-NEXT: }1178; GNU-NEXT: {1179; GNU-NEXT: r17:16 = memd(r29+#56)1180; GNU-NEXT: dealloc_return1181; GNU-NEXT: } // 8-byte Folded Reload1182;1183; MUSL-LABEL: test_sincos_f128:1184; MUSL: // %bb.0:1185; MUSL-NEXT: {1186; MUSL-NEXT: r17:16 = combine(r5,r4)1187; MUSL-NEXT: memd(r29+#-16) = r17:161188; MUSL-NEXT: allocframe(#56)1189; MUSL-NEXT: } // 8-byte Folded Spill1190; MUSL-NEXT: {1191; MUSL-NEXT: r20 = r01192; MUSL-NEXT: r0 = add(r29,#0)1193; MUSL-NEXT: memd(r29+#32) = r21:201194; MUSL-NEXT: memd(r29+#40) = r19:181195; MUSL-NEXT: } // 8-byte Folded Spill1196; MUSL-NEXT: {1197; MUSL-NEXT: call sinl1198; MUSL-NEXT: r19:18 = combine(r3,r2)1199; MUSL-NEXT: }1200; MUSL-NEXT: {1201; MUSL-NEXT: call cosl1202; MUSL-NEXT: r0 = add(r29,#16)1203; MUSL-NEXT: r3:2 = combine(r19,r18)1204; MUSL-NEXT: r5:4 = combine(r17,r16)1205; MUSL-NEXT: }1206; MUSL-NEXT: {1207; MUSL-NEXT: r1:0 = memd(r29+#0)1208; MUSL-NEXT: r3:2 = memd(r29+#8)1209; MUSL-NEXT: }1210; MUSL-NEXT: {1211; MUSL-NEXT: r5:4 = memd(r29+#16)1212; MUSL-NEXT: r7:6 = memd(r29+#24)1213; MUSL-NEXT: }1214; MUSL-NEXT: {1215; MUSL-NEXT: memd(r20+#24) = r7:61216; MUSL-NEXT: memd(r20+#16) = r5:41217; MUSL-NEXT: }1218; MUSL-NEXT: {1219; MUSL-NEXT: memd(r20+#8) = r3:21220; MUSL-NEXT: memd(r20+#0) = r1:01221; MUSL-NEXT: }1222; MUSL-NEXT: {1223; MUSL-NEXT: r17:16 = memd(r29+#48)1224; MUSL-NEXT: r19:18 = memd(r29+#40)1225; MUSL-NEXT: } // 8-byte Folded Reload1226; MUSL-NEXT: {1227; MUSL-NEXT: r21:20 = memd(r29+#32)1228; MUSL-NEXT: dealloc_return1229; MUSL-NEXT: } // 8-byte Folded Reload1230 %result = call { fp128, fp128 } @llvm.sincos.f128(fp128 %a)1231 ret { fp128, fp128 } %result1232}1233 1234define { <2 x fp128>, <2 x fp128> } @test_sincos_v2f128(<2 x fp128> %a) #0 {1235; BASE-LABEL: test_sincos_v2f128:1236; BASE: // %bb.0:1237; BASE-NEXT: {1238; BASE-NEXT: r17:16 = combine(r5,r4)1239; BASE-NEXT: memd(r29+#-16) = r17:161240; BASE-NEXT: allocframe(#104)1241; BASE-NEXT: } // 8-byte Folded Spill1242; BASE-NEXT: {1243; BASE-NEXT: r20 = r01244; BASE-NEXT: r0 = add(r29,#32)1245; BASE-NEXT: memd(r29+#80) = r21:201246; BASE-NEXT: memd(r29+#88) = r19:181247; BASE-NEXT: } // 8-byte Folded Spill1248; BASE-NEXT: {1249; BASE-NEXT: r19:18 = combine(r3,r2)1250; BASE-NEXT: memd(r29+#72) = r23:221251; BASE-NEXT: memd(r29+#64) = r25:241252; BASE-NEXT: } // 8-byte Folded Spill1253; BASE-NEXT: {1254; BASE-NEXT: call sinl1255; BASE-NEXT: r23:22 = memd(r29+#112)1256; BASE-NEXT: r25:24 = memd(r29+#120)1257; BASE-NEXT: }1258; BASE-NEXT: {1259; BASE-NEXT: call sinl1260; BASE-NEXT: r0 = add(r29,#0)1261; BASE-NEXT: r3:2 = combine(r23,r22)1262; BASE-NEXT: r5:4 = combine(r25,r24)1263; BASE-NEXT: }1264; BASE-NEXT: {1265; BASE-NEXT: call cosl1266; BASE-NEXT: r0 = add(r29,#48)1267; BASE-NEXT: r3:2 = combine(r19,r18)1268; BASE-NEXT: r5:4 = combine(r17,r16)1269; BASE-NEXT: }1270; BASE-NEXT: {1271; BASE-NEXT: call cosl1272; BASE-NEXT: r0 = add(r29,#16)1273; BASE-NEXT: r3:2 = combine(r23,r22)1274; BASE-NEXT: r5:4 = combine(r25,r24)1275; BASE-NEXT: }1276; BASE-NEXT: {1277; BASE-NEXT: r1:0 = memd(r29+#32)1278; BASE-NEXT: r3:2 = memd(r29+#40)1279; BASE-NEXT: }1280; BASE-NEXT: {1281; BASE-NEXT: r9:8 = memd(r29+#48)1282; BASE-NEXT: r15:14 = memd(r29+#24)1283; BASE-NEXT: }1284; BASE-NEXT: {1285; BASE-NEXT: r5:4 = memd(r29+#0)1286; BASE-NEXT: r7:6 = memd(r29+#8)1287; BASE-NEXT: }1288; BASE-NEXT: {1289; BASE-NEXT: r13:12 = memd(r29+#16)1290; BASE-NEXT: r11:10 = memd(r29+#56)1291; BASE-NEXT: }1292; BASE-NEXT: {1293; BASE-NEXT: memd(r20+#56) = r15:141294; BASE-NEXT: memd(r20+#48) = r13:121295; BASE-NEXT: }1296; BASE-NEXT: {1297; BASE-NEXT: memd(r20+#40) = r11:101298; BASE-NEXT: memd(r20+#32) = r9:81299; BASE-NEXT: }1300; BASE-NEXT: {1301; BASE-NEXT: memd(r20+#24) = r7:61302; BASE-NEXT: memd(r20+#16) = r5:41303; BASE-NEXT: }1304; BASE-NEXT: {1305; BASE-NEXT: memd(r20+#8) = r3:21306; BASE-NEXT: memd(r20+#0) = r1:01307; BASE-NEXT: }1308; BASE-NEXT: {1309; BASE-NEXT: r17:16 = memd(r29+#96)1310; BASE-NEXT: r19:18 = memd(r29+#88)1311; BASE-NEXT: } // 8-byte Folded Reload1312; BASE-NEXT: {1313; BASE-NEXT: r21:20 = memd(r29+#80)1314; BASE-NEXT: r23:22 = memd(r29+#72)1315; BASE-NEXT: } // 8-byte Folded Reload1316; BASE-NEXT: {1317; BASE-NEXT: r25:24 = memd(r29+#64)1318; BASE-NEXT: r31:30 = dealloc_return(r30):raw1319; BASE-NEXT: } // 8-byte Folded Reload1320;1321; GNU-LABEL: test_sincos_v2f128:1322; GNU: // %bb.0:1323; GNU-NEXT: {1324; GNU-NEXT: r16 = r01325; GNU-NEXT: memd(r29+#-16) = r17:161326; GNU-NEXT: allocframe(#128)1327; GNU-NEXT: } // 8-byte Folded Spill1328; GNU-NEXT: {1329; GNU-NEXT: r0 = add(r29,#88)1330; GNU-NEXT: r17 = r291331; GNU-NEXT: memd(r29+#112) = r19:181332; GNU-NEXT: memd(r29+#104) = r21:201333; GNU-NEXT: } // 8-byte Folded Spill1334; GNU-NEXT: {1335; GNU-NEXT: r6 = add(r29,#56)1336; GNU-NEXT: r1 = add(r29,#72)1337; GNU-NEXT: r19:18 = memd(r29+#136)1338; GNU-NEXT: memw(r17+#0) = r6.new1339; GNU-NEXT: }1340; GNU-NEXT: {1341; GNU-NEXT: call sincosl1342; GNU-NEXT: r21:20 = memd(r29+#144)1343; GNU-NEXT: memw(r17+#4) = r11344; GNU-NEXT: }1345; GNU-NEXT: {1346; GNU-NEXT: r0 = add(r29,#24)1347; GNU-NEXT: r3:2 = combine(r19,r18)1348; GNU-NEXT: r5:4 = combine(r21,r20)1349; GNU-NEXT: memw(r17+#4) = r0.new1350; GNU-NEXT: }1351; GNU-NEXT: {1352; GNU-NEXT: call sincosl1353; GNU-NEXT: r0 = add(r29,#40)1354; GNU-NEXT: r1 = add(r29,#8)1355; GNU-NEXT: memw(r17+#0) = r1.new1356; GNU-NEXT: }1357; GNU-NEXT: {1358; GNU-NEXT: r1:0 = memd(r29+#56)1359; GNU-NEXT: r3:2 = memd(r29+#64)1360; GNU-NEXT: }1361; GNU-NEXT: {1362; GNU-NEXT: r5:4 = memd(r29+#8)1363; GNU-NEXT: r7:6 = memd(r29+#16)1364; GNU-NEXT: }1365; GNU-NEXT: {1366; GNU-NEXT: r9:8 = memd(r29+#72)1367; GNU-NEXT: r13:12 = memd(r29+#24)1368; GNU-NEXT: }1369; GNU-NEXT: {1370; GNU-NEXT: r15:14 = memd(r29+#32)1371; GNU-NEXT: r11:10 = memd(r29+#80)1372; GNU-NEXT: }1373; GNU-NEXT: {1374; GNU-NEXT: memd(r16+#56) = r15:141375; GNU-NEXT: memd(r16+#48) = r13:121376; GNU-NEXT: }1377; GNU-NEXT: {1378; GNU-NEXT: memd(r16+#40) = r11:101379; GNU-NEXT: memd(r16+#32) = r9:81380; GNU-NEXT: }1381; GNU-NEXT: {1382; GNU-NEXT: memd(r16+#24) = r7:61383; GNU-NEXT: memd(r16+#16) = r5:41384; GNU-NEXT: }1385; GNU-NEXT: {1386; GNU-NEXT: memd(r16+#8) = r3:21387; GNU-NEXT: memd(r16+#0) = r1:01388; GNU-NEXT: }1389; GNU-NEXT: {1390; GNU-NEXT: r17:16 = memd(r29+#120)1391; GNU-NEXT: r19:18 = memd(r29+#112)1392; GNU-NEXT: } // 8-byte Folded Reload1393; GNU-NEXT: {1394; GNU-NEXT: r21:20 = memd(r29+#104)1395; GNU-NEXT: dealloc_return1396; GNU-NEXT: } // 8-byte Folded Reload1397;1398; MUSL-LABEL: test_sincos_v2f128:1399; MUSL: // %bb.0:1400; MUSL-NEXT: {1401; MUSL-NEXT: r17:16 = combine(r5,r4)1402; MUSL-NEXT: memd(r29+#-16) = r17:161403; MUSL-NEXT: allocframe(#104)1404; MUSL-NEXT: } // 8-byte Folded Spill1405; MUSL-NEXT: {1406; MUSL-NEXT: r20 = r01407; MUSL-NEXT: r0 = add(r29,#32)1408; MUSL-NEXT: memd(r29+#80) = r21:201409; MUSL-NEXT: memd(r29+#88) = r19:181410; MUSL-NEXT: } // 8-byte Folded Spill1411; MUSL-NEXT: {1412; MUSL-NEXT: r19:18 = combine(r3,r2)1413; MUSL-NEXT: memd(r29+#72) = r23:221414; MUSL-NEXT: memd(r29+#64) = r25:241415; MUSL-NEXT: } // 8-byte Folded Spill1416; MUSL-NEXT: {1417; MUSL-NEXT: call sinl1418; MUSL-NEXT: r23:22 = memd(r29+#112)1419; MUSL-NEXT: r25:24 = memd(r29+#120)1420; MUSL-NEXT: }1421; MUSL-NEXT: {1422; MUSL-NEXT: call sinl1423; MUSL-NEXT: r0 = add(r29,#0)1424; MUSL-NEXT: r3:2 = combine(r23,r22)1425; MUSL-NEXT: r5:4 = combine(r25,r24)1426; MUSL-NEXT: }1427; MUSL-NEXT: {1428; MUSL-NEXT: call cosl1429; MUSL-NEXT: r0 = add(r29,#48)1430; MUSL-NEXT: r3:2 = combine(r19,r18)1431; MUSL-NEXT: r5:4 = combine(r17,r16)1432; MUSL-NEXT: }1433; MUSL-NEXT: {1434; MUSL-NEXT: call cosl1435; MUSL-NEXT: r0 = add(r29,#16)1436; MUSL-NEXT: r3:2 = combine(r23,r22)1437; MUSL-NEXT: r5:4 = combine(r25,r24)1438; MUSL-NEXT: }1439; MUSL-NEXT: {1440; MUSL-NEXT: r1:0 = memd(r29+#32)1441; MUSL-NEXT: r3:2 = memd(r29+#40)1442; MUSL-NEXT: }1443; MUSL-NEXT: {1444; MUSL-NEXT: r9:8 = memd(r29+#48)1445; MUSL-NEXT: r15:14 = memd(r29+#24)1446; MUSL-NEXT: }1447; MUSL-NEXT: {1448; MUSL-NEXT: r5:4 = memd(r29+#0)1449; MUSL-NEXT: r7:6 = memd(r29+#8)1450; MUSL-NEXT: }1451; MUSL-NEXT: {1452; MUSL-NEXT: r13:12 = memd(r29+#16)1453; MUSL-NEXT: r11:10 = memd(r29+#56)1454; MUSL-NEXT: }1455; MUSL-NEXT: {1456; MUSL-NEXT: memd(r20+#56) = r15:141457; MUSL-NEXT: memd(r20+#48) = r13:121458; MUSL-NEXT: }1459; MUSL-NEXT: {1460; MUSL-NEXT: memd(r20+#40) = r11:101461; MUSL-NEXT: memd(r20+#32) = r9:81462; MUSL-NEXT: }1463; MUSL-NEXT: {1464; MUSL-NEXT: memd(r20+#24) = r7:61465; MUSL-NEXT: memd(r20+#16) = r5:41466; MUSL-NEXT: }1467; MUSL-NEXT: {1468; MUSL-NEXT: memd(r20+#8) = r3:21469; MUSL-NEXT: memd(r20+#0) = r1:01470; MUSL-NEXT: }1471; MUSL-NEXT: {1472; MUSL-NEXT: r17:16 = memd(r29+#96)1473; MUSL-NEXT: r19:18 = memd(r29+#88)1474; MUSL-NEXT: } // 8-byte Folded Reload1475; MUSL-NEXT: {1476; MUSL-NEXT: r21:20 = memd(r29+#80)1477; MUSL-NEXT: r23:22 = memd(r29+#72)1478; MUSL-NEXT: } // 8-byte Folded Reload1479; MUSL-NEXT: {1480; MUSL-NEXT: r25:24 = memd(r29+#64)1481; MUSL-NEXT: r31:30 = dealloc_return(r30):raw1482; MUSL-NEXT: } // 8-byte Folded Reload1483 %result = call { <2 x fp128>, <2 x fp128> } @llvm.sincos.v2f128(<2 x fp128> %a)1484 ret { <2 x fp128>, <2 x fp128> } %result1485}1486 1487attributes #0 = { nounwind }1488