brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.1 KiB · 0b52e05 Raw
804 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 %s3; RUN: llc -mtriple=hexagon-unknown-linux-gnu < %s | FileCheck %s4; RUN: llc -mtriple=hexagon-unknown-linux-musl < %s | FileCheck %s5 6define { half, i32 } @test_frexp_f16_i32(half %a) nounwind {7; CHECK-LABEL: test_frexp_f16_i32:8; CHECK:       // %bb.0:9; CHECK-NEXT:    {10; CHECK-NEXT:     call __extendhfsf211; CHECK-NEXT:     allocframe(r29,#8):raw12; CHECK-NEXT:    }13; CHECK-NEXT:    {14; CHECK-NEXT:     call frexpf15; CHECK-NEXT:     r1 = add(r29,#4)16; CHECK-NEXT:    }17; CHECK-NEXT:    {18; CHECK-NEXT:     call __truncsfhf219; CHECK-NEXT:    }20; CHECK-NEXT:    {21; CHECK-NEXT:     r1 = memw(r29+#4)22; CHECK-NEXT:     dealloc_return23; CHECK-NEXT:    }24  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)25  ret { half, i32 } %result26}27 28define half @test_frexp_f16_i32_only_use_fract(half %a) nounwind {29; CHECK-LABEL: test_frexp_f16_i32_only_use_fract:30; CHECK:       // %bb.0:31; CHECK-NEXT:    {32; CHECK-NEXT:     call __extendhfsf233; CHECK-NEXT:     allocframe(r29,#8):raw34; CHECK-NEXT:    }35; CHECK-NEXT:    {36; CHECK-NEXT:     call frexpf37; CHECK-NEXT:     r1 = add(r29,#4)38; CHECK-NEXT:    }39; CHECK-NEXT:    {40; CHECK-NEXT:     call __truncsfhf241; CHECK-NEXT:    }42; CHECK-NEXT:    {43; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw44; CHECK-NEXT:    }45  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)46  %result.0 = extractvalue { half, i32 } %result, 047  ret half %result.048}49 50define i32 @test_frexp_f16_i32_only_use_exp(half %a) nounwind {51; CHECK-LABEL: test_frexp_f16_i32_only_use_exp:52; CHECK:       // %bb.0:53; CHECK-NEXT:    {54; CHECK-NEXT:     call __extendhfsf255; CHECK-NEXT:     allocframe(r29,#8):raw56; CHECK-NEXT:    }57; CHECK-NEXT:    {58; CHECK-NEXT:     call frexpf59; CHECK-NEXT:     r1 = add(r29,#4)60; CHECK-NEXT:    }61; CHECK-NEXT:    {62; CHECK-NEXT:     r0 = memw(r29+#4)63; CHECK-NEXT:     dealloc_return64; CHECK-NEXT:    }65  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)66  %result.0 = extractvalue { half, i32 } %result, 167  ret i32 %result.068}69 70define { <2 x half>, <2 x i32> } @test_frexp_v2f16_v2i32(<2 x half> %a) nounwind {71; CHECK-LABEL: test_frexp_v2f16_v2i32:72; CHECK:       // %bb.0:73; CHECK-NEXT:    {74; CHECK-NEXT:     r17:16 = combine(r2,r0)75; CHECK-NEXT:     r0 = r376; CHECK-NEXT:     memd(r29+#-16) = r17:1677; CHECK-NEXT:     allocframe(#32)78; CHECK-NEXT:    } // 8-byte Folded Spill79; CHECK-NEXT:    {80; CHECK-NEXT:     call __extendhfsf281; CHECK-NEXT:     memd(r29+#16) = r19:1882; CHECK-NEXT:     memd(r29+#8) = r21:2083; CHECK-NEXT:    } // 8-byte Folded Spill84; CHECK-NEXT:    {85; CHECK-NEXT:     call frexpf86; CHECK-NEXT:     r1 = add(r29,#0)87; CHECK-NEXT:    }88; CHECK-NEXT:    {89; CHECK-NEXT:     call __extendhfsf290; CHECK-NEXT:     r18 = r091; CHECK-NEXT:     r0 = r1792; CHECK-NEXT:    }93; CHECK-NEXT:    {94; CHECK-NEXT:     call frexpf95; CHECK-NEXT:     r1 = add(r29,#4)96; CHECK-NEXT:    }97; CHECK-NEXT:    {98; CHECK-NEXT:     call __truncsfhf299; CHECK-NEXT:     r20 = memw(r29+#4)100; CHECK-NEXT:     r21 = memw(r29+#0)101; CHECK-NEXT:    }102; CHECK-NEXT:    {103; CHECK-NEXT:     call __truncsfhf2104; CHECK-NEXT:     r17 = r0105; CHECK-NEXT:     r0 = r18106; CHECK-NEXT:    }107; CHECK-NEXT:    {108; CHECK-NEXT:     memh(r16+#2) = r0109; CHECK-NEXT:     memh(r16+#0) = r17110; CHECK-NEXT:    }111; CHECK-NEXT:    {112; CHECK-NEXT:     memd(r16+#8) = r21:20113; CHECK-NEXT:     r17:16 = memd(r29+#24)114; CHECK-EMPTY:115; CHECK-NEXT:    } :mem_noshuf // 8-byte Folded Reload116; CHECK-NEXT:    {117; CHECK-NEXT:     r19:18 = memd(r29+#16)118; CHECK-NEXT:     r21:20 = memd(r29+#8)119; CHECK-NEXT:    } // 8-byte Folded Reload120; CHECK-NEXT:    {121; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw122; CHECK-NEXT:    }123  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)124  ret { <2 x half>, <2 x i32> } %result125}126 127define <2 x half> @test_frexp_v2f16_v2i32_only_use_fract(<2 x half> %a) nounwind {128; CHECK-LABEL: test_frexp_v2f16_v2i32_only_use_fract:129; CHECK:       // %bb.0:130; CHECK-NEXT:    {131; CHECK-NEXT:     call __extendhfsf2132; CHECK-NEXT:     r16 = r1133; CHECK-NEXT:     memd(r29+#-16) = r17:16134; CHECK-NEXT:     allocframe(#16)135; CHECK-NEXT:    } // 8-byte Folded Spill136; CHECK-NEXT:    {137; CHECK-NEXT:     call frexpf138; CHECK-NEXT:     r1 = add(r29,#4)139; CHECK-NEXT:    }140; CHECK-NEXT:    {141; CHECK-NEXT:     call __truncsfhf2142; CHECK-NEXT:    }143; CHECK-NEXT:    {144; CHECK-NEXT:     call __extendhfsf2145; CHECK-NEXT:     r17 = r0146; CHECK-NEXT:     r0 = r16147; CHECK-NEXT:    }148; CHECK-NEXT:    {149; CHECK-NEXT:     call frexpf150; CHECK-NEXT:     r1 = add(r29,#0)151; CHECK-NEXT:    }152; CHECK-NEXT:    {153; CHECK-NEXT:     call __truncsfhf2154; CHECK-NEXT:    }155; CHECK-NEXT:    {156; CHECK-NEXT:     r1 = zxth(r0)157; CHECK-NEXT:     r2 = zxth(r17)158; CHECK-NEXT:     r17:16 = memd(r29+#8)159; CHECK-NEXT:    } // 8-byte Folded Reload160; CHECK-NEXT:    {161; CHECK-NEXT:     r0 = r2162; CHECK-NEXT:     dealloc_return163; CHECK-NEXT:    }164  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)165  %result.0 = extractvalue { <2 x half>, <2 x i32> } %result, 0166  ret <2 x half> %result.0167}168 169define <2 x i32> @test_frexp_v2f16_v2i32_only_use_exp(<2 x half> %a) nounwind {170; CHECK-LABEL: test_frexp_v2f16_v2i32_only_use_exp:171; CHECK:       // %bb.0:172; CHECK-NEXT:    {173; CHECK-NEXT:     call __extendhfsf2174; CHECK-NEXT:     r16 = r1175; CHECK-NEXT:     memd(r29+#-16) = r17:16176; CHECK-NEXT:     allocframe(#16)177; CHECK-NEXT:    } // 8-byte Folded Spill178; CHECK-NEXT:    {179; CHECK-NEXT:     call frexpf180; CHECK-NEXT:     r1 = add(r29,#4)181; CHECK-NEXT:    }182; CHECK-NEXT:    {183; CHECK-NEXT:     call __extendhfsf2184; CHECK-NEXT:     r0 = r16185; CHECK-NEXT:    }186; CHECK-NEXT:    {187; CHECK-NEXT:     call frexpf188; CHECK-NEXT:     r1 = add(r29,#0)189; CHECK-NEXT:    }190; CHECK-NEXT:    {191; CHECK-NEXT:     r0 = memw(r29+#4)192; CHECK-NEXT:     r17:16 = memd(r29+#8)193; CHECK-NEXT:    }194; CHECK-NEXT:    {195; CHECK-NEXT:     r1 = memw(r29+#0)196; CHECK-NEXT:     dealloc_return197; CHECK-NEXT:    }198  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)199  %result.1 = extractvalue { <2 x half>, <2 x i32> } %result, 1200  ret <2 x i32> %result.1201}202 203define { <3 x float>, <3 x i32> } @test_frexp_v3f32_v3i32(<3 x float> %a) nounwind {204; CHECK-LABEL: test_frexp_v3f32_v3i32:205; CHECK:       // %bb.0:206; CHECK-NEXT:    {207; CHECK-NEXT:     r17:16 = combine(r4,r0)208; CHECK-NEXT:     r0 = r2209; CHECK-NEXT:     memd(r29+#-16) = r17:16210; CHECK-NEXT:     allocframe(#32)211; CHECK-NEXT:    } // 8-byte Folded Spill212; CHECK-NEXT:    {213; CHECK-NEXT:     r1 = add(r29,#4)214; CHECK-NEXT:     r18 = r3215; CHECK-NEXT:     memd(r29+#16) = r19:18216; CHECK-NEXT:     memd(r29+#8) = r21:20217; CHECK-NEXT:    } // 8-byte Folded Spill218; CHECK-NEXT:    {219; CHECK-NEXT:     call frexpf220; CHECK-NEXT:    }221; CHECK-NEXT:    {222; CHECK-NEXT:     call frexpf223; CHECK-NEXT:     r0 = r18224; CHECK-NEXT:     r1 = add(r29,#0)225; CHECK-NEXT:     r20 = r0226; CHECK-NEXT:    }227; CHECK-NEXT:    {228; CHECK-NEXT:     call frexpf229; CHECK-NEXT:     r1 = add(r16,#24)230; CHECK-NEXT:     r21 = r0231; CHECK-NEXT:     r0 = r17232; CHECK-NEXT:    }233; CHECK-NEXT:    {234; CHECK-NEXT:     r2 = memw(r29+#4)235; CHECK-NEXT:     r3 = memw(r29+#0)236; CHECK-NEXT:    }237; CHECK-NEXT:    {238; CHECK-NEXT:     memd(r16+#0) = r21:20239; CHECK-NEXT:     memd(r16+#16) = r3:2240; CHECK-NEXT:    }241; CHECK-NEXT:    {242; CHECK-NEXT:     memw(r16+#8) = r0243; CHECK-NEXT:     r17:16 = memd(r29+#24)244; CHECK-EMPTY:245; CHECK-NEXT:    } :mem_noshuf // 8-byte Folded Reload246; CHECK-NEXT:    {247; CHECK-NEXT:     r19:18 = memd(r29+#16)248; CHECK-NEXT:     r21:20 = memd(r29+#8)249; CHECK-NEXT:    } // 8-byte Folded Reload250; CHECK-NEXT:    {251; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw252; CHECK-NEXT:    }253  %result = call { <3 x float>, <3 x i32> } @llvm.frexp.v3f32.v3i32(<3 x float> %a)254  ret { <3 x float>, <3 x i32> } %result255}256 257define { float, i32 } @test_frexp_f32_i32(float %a) nounwind {258; CHECK-LABEL: test_frexp_f32_i32:259; CHECK:       // %bb.0:260; CHECK-NEXT:    {261; CHECK-NEXT:     allocframe(r29,#8):raw262; CHECK-NEXT:    }263; CHECK-NEXT:    {264; CHECK-NEXT:     call frexpf265; CHECK-NEXT:     r1 = add(r29,#4)266; CHECK-NEXT:    }267; CHECK-NEXT:    {268; CHECK-NEXT:     r1 = memw(r29+#4)269; CHECK-NEXT:     dealloc_return270; CHECK-NEXT:    }271  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)272  ret { float, i32 } %result273}274 275define { float, i32 } @test_frexp_f32_i32_tailcall(float %a) nounwind {276; CHECK-LABEL: test_frexp_f32_i32_tailcall:277; CHECK:       // %bb.0:278; CHECK-NEXT:    {279; CHECK-NEXT:     allocframe(r29,#8):raw280; CHECK-NEXT:    }281; CHECK-NEXT:    {282; CHECK-NEXT:     call frexpf283; CHECK-NEXT:     r1 = add(r29,#4)284; CHECK-NEXT:    }285; CHECK-NEXT:    {286; CHECK-NEXT:     r1 = memw(r29+#4)287; CHECK-NEXT:     dealloc_return288; CHECK-NEXT:    }289  %result = tail call { float, i32 } @llvm.frexp.f32.i32(float %a)290  ret { float, i32 } %result291}292 293define float @test_frexp_f32_i32_only_use_fract(float %a) nounwind {294; CHECK-LABEL: test_frexp_f32_i32_only_use_fract:295; CHECK:       // %bb.0:296; CHECK-NEXT:    {297; CHECK-NEXT:     allocframe(r29,#8):raw298; CHECK-NEXT:    }299; CHECK-NEXT:    {300; CHECK-NEXT:     call frexpf301; CHECK-NEXT:     r1 = add(r29,#4)302; CHECK-NEXT:    }303; CHECK-NEXT:    {304; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw305; CHECK-NEXT:    }306  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)307  %result.0 = extractvalue { float, i32 } %result, 0308  ret float %result.0309}310 311define i32 @test_frexp_f32_i32_only_use_exp(float %a) nounwind {312; CHECK-LABEL: test_frexp_f32_i32_only_use_exp:313; CHECK:       // %bb.0:314; CHECK-NEXT:    {315; CHECK-NEXT:     allocframe(r29,#8):raw316; CHECK-NEXT:    }317; CHECK-NEXT:    {318; CHECK-NEXT:     call frexpf319; CHECK-NEXT:     r1 = add(r29,#4)320; CHECK-NEXT:    }321; CHECK-NEXT:    {322; CHECK-NEXT:     r0 = memw(r29+#4)323; CHECK-NEXT:     dealloc_return324; CHECK-NEXT:    }325  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)326  %result.0 = extractvalue { float, i32 } %result, 1327  ret i32 %result.0328}329 330define { <2 x float>, <2 x i32> } @test_frexp_v2f32_v2i32(<2 x float> %a) nounwind {331; CHECK-LABEL: test_frexp_v2f32_v2i32:332; CHECK:       // %bb.0:333; CHECK-NEXT:    {334; CHECK-NEXT:     r17:16 = combine(r3,r0)335; CHECK-NEXT:     r0 = r2336; CHECK-NEXT:     memd(r29+#-16) = r17:16337; CHECK-NEXT:     allocframe(#24)338; CHECK-NEXT:    } // 8-byte Folded Spill339; CHECK-NEXT:    {340; CHECK-NEXT:     call frexpf341; CHECK-NEXT:     r1 = add(r29,#4)342; CHECK-NEXT:     memd(r29+#8) = r19:18343; CHECK-NEXT:    } // 8-byte Folded Spill344; CHECK-NEXT:    {345; CHECK-NEXT:     call frexpf346; CHECK-NEXT:     r0 = r17347; CHECK-NEXT:     r1 = add(r29,#0)348; CHECK-NEXT:     r18 = r0349; CHECK-NEXT:    }350; CHECK-NEXT:    {351; CHECK-NEXT:     r1:0 = combine(r0,r18)352; CHECK-NEXT:     r2 = memw(r29+#4)353; CHECK-NEXT:     r3 = memw(r29+#0)354; CHECK-NEXT:    }355; CHECK-NEXT:    {356; CHECK-NEXT:     memd(r16+#0) = r1:0357; CHECK-NEXT:     memd(r16+#8) = r3:2358; CHECK-NEXT:    }359; CHECK-NEXT:    {360; CHECK-NEXT:     r17:16 = memd(r29+#16)361; CHECK-NEXT:     r19:18 = memd(r29+#8)362; CHECK-NEXT:    } // 8-byte Folded Reload363; CHECK-NEXT:    {364; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw365; CHECK-NEXT:    }366  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)367  ret { <2 x float>, <2 x i32> } %result368}369 370define <2 x float> @test_frexp_v2f32_v2i32_only_use_fract(<2 x float> %a) nounwind {371; CHECK-LABEL: test_frexp_v2f32_v2i32_only_use_fract:372; CHECK:       // %bb.0:373; CHECK-NEXT:    {374; CHECK-NEXT:     r16 = r1375; CHECK-NEXT:     memd(r29+#-16) = r17:16376; CHECK-NEXT:     allocframe(#16)377; CHECK-NEXT:    } // 8-byte Folded Spill378; CHECK-NEXT:    {379; CHECK-NEXT:     call frexpf380; CHECK-NEXT:     r1 = add(r29,#4)381; CHECK-NEXT:    }382; CHECK-NEXT:    {383; CHECK-NEXT:     call frexpf384; CHECK-NEXT:     r0 = r16385; CHECK-NEXT:     r1 = add(r29,#0)386; CHECK-NEXT:     r17 = r0387; CHECK-NEXT:    }388; CHECK-NEXT:    {389; CHECK-NEXT:     r1:0 = combine(r0,r17)390; CHECK-NEXT:     r17:16 = memd(r29+#8)391; CHECK-NEXT:     dealloc_return392; CHECK-NEXT:    } // 8-byte Folded Reload393  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)394  %result.0 = extractvalue { <2 x float>, <2 x i32> } %result, 0395  ret <2 x float> %result.0396}397 398define <2 x i32> @test_frexp_v2f32_v2i32_only_use_exp(<2 x float> %a) nounwind {399; CHECK-LABEL: test_frexp_v2f32_v2i32_only_use_exp:400; CHECK:       // %bb.0:401; CHECK-NEXT:    {402; CHECK-NEXT:     r16 = r1403; CHECK-NEXT:     memd(r29+#-16) = r17:16404; CHECK-NEXT:     allocframe(#16)405; CHECK-NEXT:    } // 8-byte Folded Spill406; CHECK-NEXT:    {407; CHECK-NEXT:     call frexpf408; CHECK-NEXT:     r1 = add(r29,#4)409; CHECK-NEXT:    }410; CHECK-NEXT:    {411; CHECK-NEXT:     call frexpf412; CHECK-NEXT:     r1 = add(r29,#0)413; CHECK-NEXT:     r0 = r16414; CHECK-NEXT:    }415; CHECK-NEXT:    {416; CHECK-NEXT:     r0 = memw(r29+#4)417; CHECK-NEXT:     r17:16 = memd(r29+#8)418; CHECK-NEXT:    }419; CHECK-NEXT:    {420; CHECK-NEXT:     r1 = memw(r29+#0)421; CHECK-NEXT:     dealloc_return422; CHECK-NEXT:    }423  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)424  %result.1 = extractvalue { <2 x float>, <2 x i32> } %result, 1425  ret <2 x i32> %result.1426}427 428define { <4 x float>, <4 x i32> } @test_frexp_v4f32_v4i32(<4 x float> %a) nounwind {429; CHECK-LABEL: test_frexp_v4f32_v4i32:430; CHECK:       // %bb.0:431; CHECK-NEXT:    {432; CHECK-NEXT:     r17:16 = combine(r5,r0)433; CHECK-NEXT:     r0 = r2434; CHECK-NEXT:     memd(r29+#-16) = r17:16435; CHECK-NEXT:     allocframe(#48)436; CHECK-NEXT:    } // 8-byte Folded Spill437; CHECK-NEXT:    {438; CHECK-NEXT:     r1 = add(r29,#12)439; CHECK-NEXT:     r19:18 = combine(r3,r4)440; CHECK-NEXT:     memd(r29+#32) = r19:18441; CHECK-NEXT:     memd(r29+#24) = r21:20442; CHECK-NEXT:    } // 8-byte Folded Spill443; CHECK-NEXT:    {444; CHECK-NEXT:     call frexpf445; CHECK-NEXT:     memd(r29+#16) = r23:22446; CHECK-NEXT:    } // 8-byte Folded Spill447; CHECK-NEXT:    {448; CHECK-NEXT:     call frexpf449; CHECK-NEXT:     r0 = r19450; CHECK-NEXT:     r1 = add(r29,#8)451; CHECK-NEXT:     r20 = r0452; CHECK-NEXT:    }453; CHECK-NEXT:    {454; CHECK-NEXT:     r0 = r18455; CHECK-NEXT:     r1 = add(r29,#4)456; CHECK-NEXT:     r19 = r0457; CHECK-NEXT:     r22 = memw(r29+#12)458; CHECK-NEXT:    }459; CHECK-NEXT:    {460; CHECK-NEXT:     call frexpf461; CHECK-NEXT:     r23 = memw(r29+#8)462; CHECK-NEXT:    }463; CHECK-NEXT:    {464; CHECK-NEXT:     call frexpf465; CHECK-NEXT:     r0 = r17466; CHECK-NEXT:     r1 = add(r29,#0)467; CHECK-NEXT:     r18 = r0468; CHECK-NEXT:    }469; CHECK-NEXT:    {470; CHECK-NEXT:     r1:0 = combine(r0,r18)471; CHECK-NEXT:     r5:4 = combine(r19,r20)472; CHECK-NEXT:     r2 = memw(r29+#4)473; CHECK-NEXT:     r3 = memw(r29+#0)474; CHECK-NEXT:    }475; CHECK-NEXT:    {476; CHECK-NEXT:     memd(r16+#8) = r1:0477; CHECK-NEXT:     memd(r16+#0) = r5:4478; CHECK-NEXT:    }479; CHECK-NEXT:    {480; CHECK-NEXT:     memd(r16+#24) = r3:2481; CHECK-NEXT:     memd(r16+#16) = r23:22482; CHECK-NEXT:    }483; CHECK-NEXT:    {484; CHECK-NEXT:     r17:16 = memd(r29+#40)485; CHECK-NEXT:     r19:18 = memd(r29+#32)486; CHECK-NEXT:    } // 8-byte Folded Reload487; CHECK-NEXT:    {488; CHECK-NEXT:     r21:20 = memd(r29+#24)489; CHECK-NEXT:     r23:22 = memd(r29+#16)490; CHECK-NEXT:    } // 8-byte Folded Reload491; CHECK-NEXT:    {492; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw493; CHECK-NEXT:    }494  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)495  ret { <4 x float>, <4 x i32> } %result496}497 498define <4 x float> @test_frexp_v4f32_v4i32_only_use_fract(<4 x float> %a) nounwind {499; CHECK-LABEL: test_frexp_v4f32_v4i32_only_use_fract:500; CHECK:       // %bb.0:501; CHECK-NEXT:    {502; CHECK-NEXT:     r17:16 = combine(r5,r0)503; CHECK-NEXT:     r0 = r2504; CHECK-NEXT:     memd(r29+#-16) = r17:16505; CHECK-NEXT:     allocframe(#40)506; CHECK-NEXT:    } // 8-byte Folded Spill507; CHECK-NEXT:    {508; CHECK-NEXT:     r1 = add(r29,#12)509; CHECK-NEXT:     r19:18 = combine(r3,r4)510; CHECK-NEXT:     memd(r29+#24) = r19:18511; CHECK-NEXT:     memd(r29+#16) = r21:20512; CHECK-NEXT:    } // 8-byte Folded Spill513; CHECK-NEXT:    {514; CHECK-NEXT:     call frexpf515; CHECK-NEXT:    }516; CHECK-NEXT:    {517; CHECK-NEXT:     call frexpf518; CHECK-NEXT:     r0 = r19519; CHECK-NEXT:     r1 = add(r29,#8)520; CHECK-NEXT:     r20 = r0521; CHECK-NEXT:    }522; CHECK-NEXT:    {523; CHECK-NEXT:     call frexpf524; CHECK-NEXT:     r0 = r18525; CHECK-NEXT:     r1 = add(r29,#4)526; CHECK-NEXT:     r19 = r0527; CHECK-NEXT:    }528; CHECK-NEXT:    {529; CHECK-NEXT:     call frexpf530; CHECK-NEXT:     r0 = r17531; CHECK-NEXT:     r1 = add(r29,#0)532; CHECK-NEXT:     r18 = r0533; CHECK-NEXT:    }534; CHECK-NEXT:    {535; CHECK-NEXT:     r1:0 = combine(r0,r18)536; CHECK-NEXT:     r3:2 = combine(r19,r20)537; CHECK-NEXT:    }538; CHECK-NEXT:    {539; CHECK-NEXT:     memd(r16+#8) = r1:0540; CHECK-NEXT:     memd(r16+#0) = r3:2541; CHECK-NEXT:    }542; CHECK-NEXT:    {543; CHECK-NEXT:     r17:16 = memd(r29+#32)544; CHECK-NEXT:     r19:18 = memd(r29+#24)545; CHECK-NEXT:    } // 8-byte Folded Reload546; CHECK-NEXT:    {547; CHECK-NEXT:     r21:20 = memd(r29+#16)548; CHECK-NEXT:     dealloc_return549; CHECK-NEXT:    } // 8-byte Folded Reload550  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)551  %result.0 = extractvalue { <4 x float>, <4 x i32> } %result, 0552  ret <4 x float> %result.0553}554 555define <4 x i32> @test_frexp_v4f32_v4i32_only_use_exp(<4 x float> %a) nounwind {556; CHECK-LABEL: test_frexp_v4f32_v4i32_only_use_exp:557; CHECK:       // %bb.0:558; CHECK-NEXT:    {559; CHECK-NEXT:     r17:16 = combine(r5,r0)560; CHECK-NEXT:     r0 = r2561; CHECK-NEXT:     memd(r29+#-16) = r17:16562; CHECK-NEXT:     allocframe(#32)563; CHECK-NEXT:    } // 8-byte Folded Spill564; CHECK-NEXT:    {565; CHECK-NEXT:     call frexpf566; CHECK-NEXT:     r19:18 = combine(r3,r4)567; CHECK-NEXT:     r1 = add(r29,#12)568; CHECK-NEXT:     memd(r29+#16) = r19:18569; CHECK-NEXT:    } // 8-byte Folded Spill570; CHECK-NEXT:    {571; CHECK-NEXT:     call frexpf572; CHECK-NEXT:     r1 = add(r29,#8)573; CHECK-NEXT:     r0 = r19574; CHECK-NEXT:    }575; CHECK-NEXT:    {576; CHECK-NEXT:     call frexpf577; CHECK-NEXT:     r1 = add(r29,#4)578; CHECK-NEXT:     r0 = r18579; CHECK-NEXT:    }580; CHECK-NEXT:    {581; CHECK-NEXT:     call frexpf582; CHECK-NEXT:     r1 = add(r29,#0)583; CHECK-NEXT:     r0 = r17584; CHECK-NEXT:    }585; CHECK-NEXT:    {586; CHECK-NEXT:     r0 = memw(r29+#12)587; CHECK-NEXT:     r2 = memw(r29+#4)588; CHECK-NEXT:    }589; CHECK-NEXT:    {590; CHECK-NEXT:     r1 = memw(r29+#8)591; CHECK-NEXT:     r3 = memw(r29+#0)592; CHECK-NEXT:    }593; CHECK-NEXT:    {594; CHECK-NEXT:     memd(r16+#8) = r3:2595; CHECK-NEXT:     memd(r16+#0) = r1:0596; CHECK-NEXT:    }597; CHECK-NEXT:    {598; CHECK-NEXT:     r17:16 = memd(r29+#24)599; CHECK-NEXT:     r19:18 = memd(r29+#16)600; CHECK-NEXT:    } // 8-byte Folded Reload601; CHECK-NEXT:    {602; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw603; CHECK-NEXT:    }604  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)605  %result.1 = extractvalue { <4 x float>, <4 x i32> } %result, 1606  ret <4 x i32> %result.1607}608 609define { double, i32 } @test_frexp_f64_i32(double %a) nounwind {610; CHECK-LABEL: test_frexp_f64_i32:611; CHECK:       // %bb.0:612; CHECK-NEXT:    {613; CHECK-NEXT:     r16 = r0614; CHECK-NEXT:     r1:0 = combine(r3,r2)615; CHECK-NEXT:     memd(r29+#-16) = r17:16616; CHECK-NEXT:     allocframe(#8)617; CHECK-NEXT:    } // 8-byte Folded Spill618; CHECK-NEXT:    {619; CHECK-NEXT:     call frexp620; CHECK-NEXT:     r2 = add(r16,#8)621; CHECK-NEXT:    }622; CHECK-NEXT:    {623; CHECK-NEXT:     memd(r16+#0) = r1:0624; CHECK-NEXT:     r17:16 = memd(r29+#0)625; CHECK-EMPTY:626; CHECK-NEXT:    } :mem_noshuf // 8-byte Folded Reload627; CHECK-NEXT:    {628; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw629; CHECK-NEXT:    }630  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)631  ret { double, i32 } %result632}633 634define double @test_frexp_f64_i32_only_use_fract(double %a) nounwind {635; CHECK-LABEL: test_frexp_f64_i32_only_use_fract:636; CHECK:       // %bb.0:637; CHECK-NEXT:    {638; CHECK-NEXT:     allocframe(r29,#8):raw639; CHECK-NEXT:    }640; CHECK-NEXT:    {641; CHECK-NEXT:     call frexp642; CHECK-NEXT:     r2 = add(r29,#4)643; CHECK-NEXT:    }644; CHECK-NEXT:    {645; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw646; CHECK-NEXT:    }647  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)648  %result.0 = extractvalue { double, i32 } %result, 0649  ret double %result.0650}651 652define i32 @test_frexp_f64_i32_only_use_exp(double %a) nounwind {653; CHECK-LABEL: test_frexp_f64_i32_only_use_exp:654; CHECK:       // %bb.0:655; CHECK-NEXT:    {656; CHECK-NEXT:     allocframe(r29,#8):raw657; CHECK-NEXT:    }658; CHECK-NEXT:    {659; CHECK-NEXT:     call frexp660; CHECK-NEXT:     r2 = add(r29,#4)661; CHECK-NEXT:    }662; CHECK-NEXT:    {663; CHECK-NEXT:     r0 = memw(r29+#4)664; CHECK-NEXT:     dealloc_return665; CHECK-NEXT:    }666  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)667  %result.0 = extractvalue { double, i32 } %result, 1668  ret i32 %result.0669}670 671define { <2 x double>, <2 x i32> } @test_frexp_v2f64_v2i32(<2 x double> %a) nounwind {672; CHECK-LABEL: test_frexp_v2f64_v2i32:673; CHECK:       // %bb.0:674; CHECK-NEXT:    {675; CHECK-NEXT:     r16 = r0676; CHECK-NEXT:     r1:0 = combine(r3,r2)677; CHECK-NEXT:     memd(r29+#-16) = r17:16678; CHECK-NEXT:     allocframe(#32)679; CHECK-NEXT:    } // 8-byte Folded Spill680; CHECK-NEXT:    {681; CHECK-NEXT:     r2 = add(r29,#4)682; CHECK-NEXT:     r19:18 = combine(r5,r4)683; CHECK-NEXT:     memd(r29+#16) = r19:18684; CHECK-NEXT:     memd(r29+#8) = r21:20685; CHECK-NEXT:    } // 8-byte Folded Spill686; CHECK-NEXT:    {687; CHECK-NEXT:     call frexp688; CHECK-NEXT:    }689; CHECK-NEXT:    {690; CHECK-NEXT:     call frexp691; CHECK-NEXT:     r21:20 = combine(r1,r0)692; CHECK-NEXT:     r1:0 = combine(r19,r18)693; CHECK-NEXT:     r2 = add(r29,#0)694; CHECK-NEXT:    }695; CHECK-NEXT:    {696; CHECK-NEXT:     r2 = memw(r29+#4)697; CHECK-NEXT:     r3 = memw(r29+#0)698; CHECK-NEXT:    }699; CHECK-NEXT:    {700; CHECK-NEXT:     memd(r16+#8) = r1:0701; CHECK-NEXT:     memd(r16+#0) = r21:20702; CHECK-NEXT:    }703; CHECK-NEXT:    {704; CHECK-NEXT:     memd(r16+#16) = r3:2705; CHECK-NEXT:     r17:16 = memd(r29+#24)706; CHECK-EMPTY:707; CHECK-NEXT:    } :mem_noshuf // 8-byte Folded Reload708; CHECK-NEXT:    {709; CHECK-NEXT:     r19:18 = memd(r29+#16)710; CHECK-NEXT:     r21:20 = memd(r29+#8)711; CHECK-NEXT:    } // 8-byte Folded Reload712; CHECK-NEXT:    {713; CHECK-NEXT:     r31:30 = dealloc_return(r30):raw714; CHECK-NEXT:    }715  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)716  ret { <2 x double>, <2 x i32> } %result717}718 719define <2 x double> @test_frexp_v2f64_v2i32_only_use_fract(<2 x double> %a) nounwind {720; CHECK-LABEL: test_frexp_v2f64_v2i32_only_use_fract:721; CHECK:       // %bb.0:722; CHECK-NEXT:    {723; CHECK-NEXT:     r16 = r0724; CHECK-NEXT:     r1:0 = combine(r3,r2)725; CHECK-NEXT:     memd(r29+#-16) = r17:16726; CHECK-NEXT:     allocframe(#32)727; CHECK-NEXT:    } // 8-byte Folded Spill728; CHECK-NEXT:    {729; CHECK-NEXT:     r2 = add(r29,#4)730; CHECK-NEXT:     r19:18 = combine(r5,r4)731; CHECK-NEXT:     memd(r29+#16) = r19:18732; CHECK-NEXT:     memd(r29+#8) = r21:20733; CHECK-NEXT:    } // 8-byte Folded Spill734; CHECK-NEXT:    {735; CHECK-NEXT:     call frexp736; CHECK-NEXT:    }737; CHECK-NEXT:    {738; CHECK-NEXT:     call frexp739; CHECK-NEXT:     r21:20 = combine(r1,r0)740; CHECK-NEXT:     r1:0 = combine(r19,r18)741; CHECK-NEXT:     r2 = add(r29,#0)742; CHECK-NEXT:    }743; CHECK-NEXT:    {744; CHECK-NEXT:     memd(r16+#8) = r1:0745; CHECK-NEXT:     memd(r16+#0) = r21:20746; CHECK-NEXT:    }747; CHECK-NEXT:    {748; CHECK-NEXT:     r17:16 = memd(r29+#24)749; CHECK-NEXT:     r19:18 = memd(r29+#16)750; CHECK-NEXT:    } // 8-byte Folded Reload751; CHECK-NEXT:    {752; CHECK-NEXT:     r21:20 = memd(r29+#8)753; CHECK-NEXT:     dealloc_return754; CHECK-NEXT:    } // 8-byte Folded Reload755  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)756  %result.0 = extractvalue { <2 x double>, <2 x i32> } %result, 0757  ret <2 x double> %result.0758}759 760define <2 x i32> @test_frexp_v2f64_v2i32_only_use_exp(<2 x double> %a) nounwind {761; CHECK-LABEL: test_frexp_v2f64_v2i32_only_use_exp:762; CHECK:       // %bb.0:763; CHECK-NEXT:    {764; CHECK-NEXT:     r17:16 = combine(r3,r2)765; CHECK-NEXT:     memd(r29+#-16) = r17:16766; CHECK-NEXT:     allocframe(#16)767; CHECK-NEXT:    } // 8-byte Folded Spill768; CHECK-NEXT:    {769; CHECK-NEXT:     call frexp770; CHECK-NEXT:     r2 = add(r29,#4)771; CHECK-NEXT:    }772; CHECK-NEXT:    {773; CHECK-NEXT:     call frexp774; CHECK-NEXT:     r1:0 = combine(r17,r16)775; CHECK-NEXT:     r2 = add(r29,#0)776; CHECK-NEXT:    }777; CHECK-NEXT:    {778; CHECK-NEXT:     r0 = memw(r29+#4)779; CHECK-NEXT:     r17:16 = memd(r29+#8)780; CHECK-NEXT:    }781; CHECK-NEXT:    {782; CHECK-NEXT:     r1 = memw(r29+#0)783; CHECK-NEXT:     dealloc_return784; CHECK-NEXT:    }785  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)786  %result.1 = extractvalue { <2 x double>, <2 x i32> } %result, 1787  ret <2 x i32> %result.1788}789 790declare { float, i32 } @llvm.frexp.f32.i32(float) #0791declare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>) #0792declare { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float>) #0793 794declare { half, i32 } @llvm.frexp.f16.i32(half) #0795declare { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half>) #0796 797declare { double, i32 } @llvm.frexp.f64.i32(double) #0798declare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>) #0799 800declare { half, i16 } @llvm.frexp.f16.i16(half) #0801declare { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half>) #0802 803attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }804