brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.5 KiB · 1b137c7 Raw
436 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \3; RUN:   -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s4 5define { half, half } @test_modf_f16(half %a) {6; CHECK-LABEL: test_modf_f16:7; CHECK:       # %bb.0:8; CHECK-NEXT:    mflr r09; CHECK-NEXT:    stdu r1, -48(r1)10; CHECK-NEXT:    std r0, 64(r1)11; CHECK-NEXT:    .cfi_def_cfa_offset 4812; CHECK-NEXT:    .cfi_offset lr, 1613; CHECK-NEXT:    xscvdphp f0, f114; CHECK-NEXT:    addi r4, r1, 4415; CHECK-NEXT:    mffprwz r3, f016; CHECK-NEXT:    clrlwi r3, r3, 1617; CHECK-NEXT:    mtfprwz f0, r318; CHECK-NEXT:    xscvhpdp f1, f019; CHECK-NEXT:    bl modff20; CHECK-NEXT:    nop21; CHECK-NEXT:    lfs f2, 44(r1)22; CHECK-NEXT:    addi r1, r1, 4823; CHECK-NEXT:    ld r0, 16(r1)24; CHECK-NEXT:    mtlr r025; CHECK-NEXT:    blr26  %result = call { half, half } @llvm.modf.f16(half %a)27  ret { half, half } %result28}29 30define half @test_modf_f16_only_use_fractional_part(half %a) {31; CHECK-LABEL: test_modf_f16_only_use_fractional_part:32; CHECK:       # %bb.0:33; CHECK-NEXT:    mflr r034; CHECK-NEXT:    stdu r1, -48(r1)35; CHECK-NEXT:    std r0, 64(r1)36; CHECK-NEXT:    .cfi_def_cfa_offset 4837; CHECK-NEXT:    .cfi_offset lr, 1638; CHECK-NEXT:    xscvdphp f0, f139; CHECK-NEXT:    addi r4, r1, 4440; CHECK-NEXT:    mffprwz r3, f041; CHECK-NEXT:    clrlwi r3, r3, 1642; CHECK-NEXT:    mtfprwz f0, r343; CHECK-NEXT:    xscvhpdp f1, f044; CHECK-NEXT:    bl modff45; CHECK-NEXT:    nop46; CHECK-NEXT:    addi r1, r1, 4847; CHECK-NEXT:    ld r0, 16(r1)48; CHECK-NEXT:    mtlr r049; CHECK-NEXT:    blr50  %result = call { half, half } @llvm.modf.f16(half %a)51  %result.0 = extractvalue { half, half } %result, 052  ret half %result.053}54 55define half @test_modf_f16_only_use_integral_part(half %a) {56; CHECK-LABEL: test_modf_f16_only_use_integral_part:57; CHECK:       # %bb.0:58; CHECK-NEXT:    mflr r059; CHECK-NEXT:    stdu r1, -48(r1)60; CHECK-NEXT:    std r0, 64(r1)61; CHECK-NEXT:    .cfi_def_cfa_offset 4862; CHECK-NEXT:    .cfi_offset lr, 1663; CHECK-NEXT:    xscvdphp f0, f164; CHECK-NEXT:    addi r4, r1, 4465; CHECK-NEXT:    mffprwz r3, f066; CHECK-NEXT:    clrlwi r3, r3, 1667; CHECK-NEXT:    mtfprwz f0, r368; CHECK-NEXT:    xscvhpdp f1, f069; CHECK-NEXT:    bl modff70; CHECK-NEXT:    nop71; CHECK-NEXT:    lfs f1, 44(r1)72; CHECK-NEXT:    addi r1, r1, 4873; CHECK-NEXT:    ld r0, 16(r1)74; CHECK-NEXT:    mtlr r075; CHECK-NEXT:    blr76  %result = call { half, half } @llvm.modf.f16(half %a)77  %result.1 = extractvalue { half, half } %result, 178  ret half %result.179}80 81define { <2 x half>, <2 x half> } @test_modf_v2f16(<2 x half> %a) {82; CHECK-LABEL: test_modf_v2f16:83; CHECK:       # %bb.0:84; CHECK-NEXT:    mflr r085; CHECK-NEXT:    .cfi_def_cfa_offset 6486; CHECK-NEXT:    .cfi_offset lr, 1687; CHECK-NEXT:    .cfi_offset f30, -1688; CHECK-NEXT:    .cfi_offset f31, -889; CHECK-NEXT:    stfd f30, -16(r1) # 8-byte Folded Spill90; CHECK-NEXT:    stfd f31, -8(r1) # 8-byte Folded Spill91; CHECK-NEXT:    stdu r1, -64(r1)92; CHECK-NEXT:    std r0, 80(r1)93; CHECK-NEXT:    xscvdphp f0, f294; CHECK-NEXT:    addi r4, r1, 4095; CHECK-NEXT:    mffprwz r3, f096; CHECK-NEXT:    clrlwi r3, r3, 1697; CHECK-NEXT:    mtfprwz f0, r398; CHECK-NEXT:    xscvhpdp f31, f099; CHECK-NEXT:    xscvdphp f0, f1100; CHECK-NEXT:    mffprwz r3, f0101; CHECK-NEXT:    clrlwi r3, r3, 16102; CHECK-NEXT:    mtfprwz f0, r3103; CHECK-NEXT:    xscvhpdp f1, f0104; CHECK-NEXT:    bl modff105; CHECK-NEXT:    nop106; CHECK-NEXT:    addi r4, r1, 44107; CHECK-NEXT:    fmr f30, f1108; CHECK-NEXT:    fmr f1, f31109; CHECK-NEXT:    bl modff110; CHECK-NEXT:    nop111; CHECK-NEXT:    lfs f3, 40(r1)112; CHECK-NEXT:    fmr f2, f1113; CHECK-NEXT:    fmr f1, f30114; CHECK-NEXT:    lfs f4, 44(r1)115; CHECK-NEXT:    addi r1, r1, 64116; CHECK-NEXT:    ld r0, 16(r1)117; CHECK-NEXT:    lfd f31, -8(r1) # 8-byte Folded Reload118; CHECK-NEXT:    lfd f30, -16(r1) # 8-byte Folded Reload119; CHECK-NEXT:    mtlr r0120; CHECK-NEXT:    blr121  %result = call { <2 x half>, <2 x half> } @llvm.modf.v2f16(<2 x half> %a)122  ret { <2 x half>, <2 x half> } %result123}124 125define { float, float } @test_modf_f32(float %a) {126; CHECK-LABEL: test_modf_f32:127; CHECK:       # %bb.0:128; CHECK-NEXT:    mflr r0129; CHECK-NEXT:    stdu r1, -48(r1)130; CHECK-NEXT:    std r0, 64(r1)131; CHECK-NEXT:    .cfi_def_cfa_offset 48132; CHECK-NEXT:    .cfi_offset lr, 16133; CHECK-NEXT:    addi r4, r1, 44134; CHECK-NEXT:    bl modff135; CHECK-NEXT:    nop136; CHECK-NEXT:    lfs f2, 44(r1)137; CHECK-NEXT:    addi r1, r1, 48138; CHECK-NEXT:    ld r0, 16(r1)139; CHECK-NEXT:    mtlr r0140; CHECK-NEXT:    blr141  %result = call { float, float } @llvm.modf.f32(float %a)142  ret { float, float } %result143}144 145define { <3 x float>, <3 x float> } @test_modf_v3f32(<3 x float> %a) {146; CHECK-LABEL: test_modf_v3f32:147; CHECK:       # %bb.0:148; CHECK-NEXT:    mflr r0149; CHECK-NEXT:    stdu r1, -112(r1)150; CHECK-NEXT:    std r0, 128(r1)151; CHECK-NEXT:    .cfi_def_cfa_offset 112152; CHECK-NEXT:    .cfi_offset lr, 16153; CHECK-NEXT:    .cfi_offset r28, -32154; CHECK-NEXT:    .cfi_offset r29, -24155; CHECK-NEXT:    .cfi_offset r30, -16156; CHECK-NEXT:    .cfi_offset v30, -64157; CHECK-NEXT:    .cfi_offset v31, -48158; CHECK-NEXT:    xxsldwi vs0, v2, v2, 3159; CHECK-NEXT:    std r30, 96(r1) # 8-byte Folded Spill160; CHECK-NEXT:    addi r30, r1, 36161; CHECK-NEXT:    std r28, 80(r1) # 8-byte Folded Spill162; CHECK-NEXT:    stxv v30, 48(r1) # 16-byte Folded Spill163; CHECK-NEXT:    std r29, 88(r1) # 8-byte Folded Spill164; CHECK-NEXT:    stxv v31, 64(r1) # 16-byte Folded Spill165; CHECK-NEXT:    mr r4, r30166; CHECK-NEXT:    vmr v31, v2167; CHECK-NEXT:    xscvspdpn f1, vs0168; CHECK-NEXT:    bl modff169; CHECK-NEXT:    nop170; CHECK-NEXT:    xxswapd vs0, v31171; CHECK-NEXT:    addi r29, r1, 40172; CHECK-NEXT:    xscvdpspn v30, f1173; CHECK-NEXT:    mr r4, r29174; CHECK-NEXT:    xscvspdpn f1, vs0175; CHECK-NEXT:    bl modff176; CHECK-NEXT:    nop177; CHECK-NEXT:    xscvdpspn vs0, f1178; CHECK-NEXT:    addi r28, r1, 44179; CHECK-NEXT:    mr r4, r28180; CHECK-NEXT:    xxmrghw v30, vs0, v30181; CHECK-NEXT:    xxsldwi vs0, v31, v31, 1182; CHECK-NEXT:    xscvspdpn f1, vs0183; CHECK-NEXT:    bl modff184; CHECK-NEXT:    nop185; CHECK-NEXT:    addis r3, r2, .LCPI5_0@toc@ha186; CHECK-NEXT:    xscvdpspn v2, f1187; CHECK-NEXT:    lfiwzx f1, 0, r30188; CHECK-NEXT:    lfiwzx f2, 0, r29189; CHECK-NEXT:    lxsiwzx v3, 0, r28190; CHECK-NEXT:    lxv v31, 64(r1) # 16-byte Folded Reload191; CHECK-NEXT:    ld r30, 96(r1) # 8-byte Folded Reload192; CHECK-NEXT:    ld r29, 88(r1) # 8-byte Folded Reload193; CHECK-NEXT:    ld r28, 80(r1) # 8-byte Folded Reload194; CHECK-NEXT:    addi r3, r3, .LCPI5_0@toc@l195; CHECK-NEXT:    lxv vs0, 0(r3)196; CHECK-NEXT:    xxmrghw v4, vs2, vs1197; CHECK-NEXT:    xxperm v2, v30, vs0198; CHECK-NEXT:    lxv v30, 48(r1) # 16-byte Folded Reload199; CHECK-NEXT:    xxperm v3, v4, vs0200; CHECK-NEXT:    addi r1, r1, 112201; CHECK-NEXT:    ld r0, 16(r1)202; CHECK-NEXT:    mtlr r0203; CHECK-NEXT:    blr204  %result = call { <3 x float>, <3 x float> } @llvm.modf.v3f32(<3 x float> %a)205  ret { <3 x float>, <3 x float> } %result206}207 208define { <2 x float>, <2 x float> } @test_modf_v2f32(<2 x float> %a) {209; CHECK-LABEL: test_modf_v2f32:210; CHECK:       # %bb.0:211; CHECK-NEXT:    mflr r0212; CHECK-NEXT:    stdu r1, -112(r1)213; CHECK-NEXT:    std r0, 128(r1)214; CHECK-NEXT:    .cfi_def_cfa_offset 112215; CHECK-NEXT:    .cfi_offset lr, 16216; CHECK-NEXT:    .cfi_offset r29, -24217; CHECK-NEXT:    .cfi_offset r30, -16218; CHECK-NEXT:    .cfi_offset v30, -64219; CHECK-NEXT:    .cfi_offset v31, -48220; CHECK-NEXT:    xxsldwi vs0, v2, v2, 3221; CHECK-NEXT:    std r30, 96(r1) # 8-byte Folded Spill222; CHECK-NEXT:    addi r30, r1, 40223; CHECK-NEXT:    std r29, 88(r1) # 8-byte Folded Spill224; CHECK-NEXT:    stxv v30, 48(r1) # 16-byte Folded Spill225; CHECK-NEXT:    mr r4, r30226; CHECK-NEXT:    stxv v31, 64(r1) # 16-byte Folded Spill227; CHECK-NEXT:    xscvspdpn f1, vs0228; CHECK-NEXT:    vmr v31, v2229; CHECK-NEXT:    bl modff230; CHECK-NEXT:    nop231; CHECK-NEXT:    xxswapd vs0, v31232; CHECK-NEXT:    addi r29, r1, 44233; CHECK-NEXT:    xscvdpspn v30, f1234; CHECK-NEXT:    mr r4, r29235; CHECK-NEXT:    xscvspdpn f1, vs0236; CHECK-NEXT:    bl modff237; CHECK-NEXT:    nop238; CHECK-NEXT:    xscvdpspn vs0, f1239; CHECK-NEXT:    lfiwzx f1, 0, r29240; CHECK-NEXT:    lxv v31, 64(r1) # 16-byte Folded Reload241; CHECK-NEXT:    ld r29, 88(r1) # 8-byte Folded Reload242; CHECK-NEXT:    xxmrghw v2, vs0, v30243; CHECK-NEXT:    lfiwzx f0, 0, r30244; CHECK-NEXT:    lxv v30, 48(r1) # 16-byte Folded Reload245; CHECK-NEXT:    ld r30, 96(r1) # 8-byte Folded Reload246; CHECK-NEXT:    xxmrghw v3, vs1, vs0247; CHECK-NEXT:    addi r1, r1, 112248; CHECK-NEXT:    ld r0, 16(r1)249; CHECK-NEXT:    mtlr r0250; CHECK-NEXT:    blr251  %result = call { <2 x float>, <2 x float> } @llvm.modf.v2f32(<2 x float> %a)252  ret { <2 x float>, <2 x float> } %result253}254 255define { double, double } @test_modf_f64(double %a) {256; CHECK-LABEL: test_modf_f64:257; CHECK:       # %bb.0:258; CHECK-NEXT:    mflr r0259; CHECK-NEXT:    stdu r1, -48(r1)260; CHECK-NEXT:    std r0, 64(r1)261; CHECK-NEXT:    .cfi_def_cfa_offset 48262; CHECK-NEXT:    .cfi_offset lr, 16263; CHECK-NEXT:    addi r4, r1, 40264; CHECK-NEXT:    bl modf265; CHECK-NEXT:    nop266; CHECK-NEXT:    lfd f2, 40(r1)267; CHECK-NEXT:    addi r1, r1, 48268; CHECK-NEXT:    ld r0, 16(r1)269; CHECK-NEXT:    mtlr r0270; CHECK-NEXT:    blr271  %result = call { double, double } @llvm.modf.f64(double %a)272  ret { double, double } %result273}274 275define { <2 x double>, <2 x double> } @test_modf_v2f64(<2 x double> %a) {276; CHECK-LABEL: test_modf_v2f64:277; CHECK:       # %bb.0:278; CHECK-NEXT:    mflr r0279; CHECK-NEXT:    stdu r1, -80(r1)280; CHECK-NEXT:    std r0, 96(r1)281; CHECK-NEXT:    .cfi_def_cfa_offset 80282; CHECK-NEXT:    .cfi_offset lr, 16283; CHECK-NEXT:    .cfi_offset v30, -32284; CHECK-NEXT:    .cfi_offset v31, -16285; CHECK-NEXT:    stxv v31, 64(r1) # 16-byte Folded Spill286; CHECK-NEXT:    vmr v31, v2287; CHECK-NEXT:    addi r4, r1, 32288; CHECK-NEXT:    xscpsgndp f1, v31, v31289; CHECK-NEXT:    stxv v30, 48(r1) # 16-byte Folded Spill290; CHECK-NEXT:    bl modf291; CHECK-NEXT:    nop292; CHECK-NEXT:    xscpsgndp v30, f1, f1293; CHECK-NEXT:    xxswapd vs1, v31294; CHECK-NEXT:    addi r4, r1, 40295; CHECK-NEXT:    bl modf296; CHECK-NEXT:    nop297; CHECK-NEXT:    xxmrghd v2, v30, vs1298; CHECK-NEXT:    lfd f0, 32(r1)299; CHECK-NEXT:    lfd f1, 40(r1)300; CHECK-NEXT:    lxv v31, 64(r1) # 16-byte Folded Reload301; CHECK-NEXT:    lxv v30, 48(r1) # 16-byte Folded Reload302; CHECK-NEXT:    xxmrghd v3, vs0, vs1303; CHECK-NEXT:    addi r1, r1, 80304; CHECK-NEXT:    ld r0, 16(r1)305; CHECK-NEXT:    mtlr r0306; CHECK-NEXT:    blr307  %result = call { <2 x double>, <2 x double> } @llvm.modf.v2f64(<2 x double> %a)308  ret { <2 x double>, <2 x double> } %result309}310 311define { ppc_fp128, ppc_fp128 } @test_modf_ppcf128(ppc_fp128 %a) {312; CHECK-LABEL: test_modf_ppcf128:313; CHECK:       # %bb.0:314; CHECK-NEXT:    mflr r0315; CHECK-NEXT:    stdu r1, -48(r1)316; CHECK-NEXT:    std r0, 64(r1)317; CHECK-NEXT:    .cfi_def_cfa_offset 48318; CHECK-NEXT:    .cfi_offset lr, 16319; CHECK-NEXT:    addi r5, r1, 32320; CHECK-NEXT:    bl modfl321; CHECK-NEXT:    nop322; CHECK-NEXT:    lfd f3, 32(r1)323; CHECK-NEXT:    lfd f4, 40(r1)324; CHECK-NEXT:    addi r1, r1, 48325; CHECK-NEXT:    ld r0, 16(r1)326; CHECK-NEXT:    mtlr r0327; CHECK-NEXT:    blr328  %result = call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)329  ret { ppc_fp128, ppc_fp128 } %result330}331 332define ppc_fp128 @test_modf_ppcf128_only_use_intergral(ppc_fp128 %a) {333; CHECK-LABEL: test_modf_ppcf128_only_use_intergral:334; CHECK:       # %bb.0:335; CHECK-NEXT:    mflr r0336; CHECK-NEXT:    stdu r1, -48(r1)337; CHECK-NEXT:    std r0, 64(r1)338; CHECK-NEXT:    .cfi_def_cfa_offset 48339; CHECK-NEXT:    .cfi_offset lr, 16340; CHECK-NEXT:    addi r5, r1, 32341; CHECK-NEXT:    bl modfl342; CHECK-NEXT:    nop343; CHECK-NEXT:    lfd f1, 32(r1)344; CHECK-NEXT:    lfd f2, 40(r1)345; CHECK-NEXT:    addi r1, r1, 48346; CHECK-NEXT:    ld r0, 16(r1)347; CHECK-NEXT:    mtlr r0348; CHECK-NEXT:    blr349  %result = call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)350  %result.1 = extractvalue { ppc_fp128, ppc_fp128 } %result, 1351  ret ppc_fp128 %result.1352}353 354define ppc_fp128 @test_modf_ppcf128_only_use_fractional(ppc_fp128 %a) {355; CHECK-LABEL: test_modf_ppcf128_only_use_fractional:356; CHECK:       # %bb.0:357; CHECK-NEXT:    mflr r0358; CHECK-NEXT:    stdu r1, -48(r1)359; CHECK-NEXT:    std r0, 64(r1)360; CHECK-NEXT:    .cfi_def_cfa_offset 48361; CHECK-NEXT:    .cfi_offset lr, 16362; CHECK-NEXT:    addi r5, r1, 32363; CHECK-NEXT:    bl modfl364; CHECK-NEXT:    nop365; CHECK-NEXT:    addi r1, r1, 48366; CHECK-NEXT:    ld r0, 16(r1)367; CHECK-NEXT:    mtlr r0368; CHECK-NEXT:    blr369  %result = call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)370  %result.1 = extractvalue { ppc_fp128, ppc_fp128 } %result, 0371  ret ppc_fp128 %result.1372}373 374define { ppc_fp128, ppc_fp128 } @test_modf_ppcf128_tail_call(ppc_fp128 %a) {375; CHECK-LABEL: test_modf_ppcf128_tail_call:376; CHECK:       # %bb.0:377; CHECK-NEXT:    mflr r0378; CHECK-NEXT:    stdu r1, -48(r1)379; CHECK-NEXT:    std r0, 64(r1)380; CHECK-NEXT:    .cfi_def_cfa_offset 48381; CHECK-NEXT:    .cfi_offset lr, 16382; CHECK-NEXT:    addi r5, r1, 32383; CHECK-NEXT:    bl modfl384; CHECK-NEXT:    nop385; CHECK-NEXT:    lfd f3, 32(r1)386; CHECK-NEXT:    lfd f4, 40(r1)387; CHECK-NEXT:    addi r1, r1, 48388; CHECK-NEXT:    ld r0, 16(r1)389; CHECK-NEXT:    mtlr r0390; CHECK-NEXT:    blr391  %result = tail call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)392  ret { ppc_fp128, ppc_fp128 } %result393}394 395define ppc_fp128 @test_modf_ppcf128_only_use_intergral_tail_call(ppc_fp128 %a) {396; CHECK-LABEL: test_modf_ppcf128_only_use_intergral_tail_call:397; CHECK:       # %bb.0:398; CHECK-NEXT:    mflr r0399; CHECK-NEXT:    stdu r1, -48(r1)400; CHECK-NEXT:    std r0, 64(r1)401; CHECK-NEXT:    .cfi_def_cfa_offset 48402; CHECK-NEXT:    .cfi_offset lr, 16403; CHECK-NEXT:    addi r5, r1, 32404; CHECK-NEXT:    bl modfl405; CHECK-NEXT:    nop406; CHECK-NEXT:    lfd f1, 32(r1)407; CHECK-NEXT:    lfd f2, 40(r1)408; CHECK-NEXT:    addi r1, r1, 48409; CHECK-NEXT:    ld r0, 16(r1)410; CHECK-NEXT:    mtlr r0411; CHECK-NEXT:    blr412  %result = tail call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)413  %result.1 = extractvalue { ppc_fp128, ppc_fp128 } %result, 1414  ret ppc_fp128 %result.1415}416 417define ppc_fp128 @test_modf_ppcf128_only_use_fractional_tail_call(ppc_fp128 %a) {418; CHECK-LABEL: test_modf_ppcf128_only_use_fractional_tail_call:419; CHECK:       # %bb.0:420; CHECK-NEXT:    mflr r0421; CHECK-NEXT:    stdu r1, -48(r1)422; CHECK-NEXT:    std r0, 64(r1)423; CHECK-NEXT:    .cfi_def_cfa_offset 48424; CHECK-NEXT:    .cfi_offset lr, 16425; CHECK-NEXT:    addi r5, r1, 32426; CHECK-NEXT:    bl modfl427; CHECK-NEXT:    nop428; CHECK-NEXT:    addi r1, r1, 48429; CHECK-NEXT:    ld r0, 16(r1)430; CHECK-NEXT:    mtlr r0431; CHECK-NEXT:    blr432  %result = tail call { ppc_fp128, ppc_fp128 } @llvm.modf.ppcf128(ppc_fp128 %a)433  %result.1 = extractvalue { ppc_fp128, ppc_fp128 } %result, 0434  ret ppc_fp128 %result.1435}436