brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 0a93255 Raw
150 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -mcpu=ppc64 < %s | FileCheck --check-prefix=CHECK %s3; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu -mcpu=ppc < %s | FileCheck --check-prefix=CHECK %s4 5define i32 @fold_srem_positive_odd(i32 %x) {6; CHECK-LABEL: fold_srem_positive_odd:7; CHECK:       # %bb.0:8; CHECK-NEXT:    lis 4, -213869; CHECK-NEXT:    ori 4, 4, 3725310; CHECK-NEXT:    mulhw 4, 3, 411; CHECK-NEXT:    add 4, 4, 312; CHECK-NEXT:    srwi 5, 4, 3113; CHECK-NEXT:    srawi 4, 4, 614; CHECK-NEXT:    add 4, 4, 515; CHECK-NEXT:    mulli 4, 4, 9516; CHECK-NEXT:    sub 3, 3, 417; CHECK-NEXT:    blr18  %1 = srem i32 %x, 9519  ret i32 %120}21 22 23define i32 @fold_srem_positive_even(i32 %x) {24; CHECK-LABEL: fold_srem_positive_even:25; CHECK:       # %bb.0:26; CHECK-NEXT:    lis 4, 1582727; CHECK-NEXT:    ori 4, 4, 3684928; CHECK-NEXT:    mulhw 4, 3, 429; CHECK-NEXT:    srwi 5, 4, 3130; CHECK-NEXT:    srawi 4, 4, 831; CHECK-NEXT:    add 4, 4, 532; CHECK-NEXT:    mulli 4, 4, 106033; CHECK-NEXT:    sub 3, 3, 434; CHECK-NEXT:    blr35  %1 = srem i32 %x, 106036  ret i32 %137}38 39 40define i32 @fold_srem_negative_odd(i32 %x) {41; CHECK-LABEL: fold_srem_negative_odd:42; CHECK:       # %bb.0:43; CHECK-NEXT:    lis 4, -2320644; CHECK-NEXT:    ori 4, 4, 6544545; CHECK-NEXT:    mulhw 4, 3, 446; CHECK-NEXT:    srwi 5, 4, 3147; CHECK-NEXT:    srawi 4, 4, 848; CHECK-NEXT:    add 4, 4, 549; CHECK-NEXT:    mulli 4, 4, -72350; CHECK-NEXT:    sub 3, 3, 451; CHECK-NEXT:    blr52  %1 = srem i32 %x, -72353  ret i32 %154}55 56 57define i32 @fold_srem_negative_even(i32 %x) {58; CHECK-LABEL: fold_srem_negative_even:59; CHECK:       # %bb.0:60; CHECK-NEXT:    lis 4, -73161; CHECK-NEXT:    ori 4, 4, 6243962; CHECK-NEXT:    mulhw 4, 3, 463; CHECK-NEXT:    srwi 5, 4, 3164; CHECK-NEXT:    srawi 4, 4, 865; CHECK-NEXT:    add 4, 4, 566; CHECK-NEXT:    mulli 4, 4, -2298167; CHECK-NEXT:    sub 3, 3, 468; CHECK-NEXT:    blr69  %1 = srem i32 %x, -2298170  ret i32 %171}72 73 74; Don't fold if we can combine srem with sdiv.75define i32 @combine_srem_sdiv(i32 %x) {76; CHECK-LABEL: combine_srem_sdiv:77; CHECK:       # %bb.0:78; CHECK-NEXT:    lis 4, -2138679; CHECK-NEXT:    ori 4, 4, 3725380; CHECK-NEXT:    mulhw 4, 3, 481; CHECK-NEXT:    add 4, 4, 382; CHECK-NEXT:    srwi 5, 4, 3183; CHECK-NEXT:    srawi 4, 4, 684; CHECK-NEXT:    add 4, 4, 585; CHECK-NEXT:    mulli 5, 4, 9586; CHECK-NEXT:    sub 3, 3, 587; CHECK-NEXT:    add 3, 3, 488; CHECK-NEXT:    blr89  %1 = srem i32 %x, 9590  %2 = sdiv i32 %x, 9591  %3 = add i32 %1, %292  ret i32 %393}94 95; Don't fold for divisors that are a power of two.96define i32 @dont_fold_srem_power_of_two(i32 %x) {97; CHECK-LABEL: dont_fold_srem_power_of_two:98; CHECK:       # %bb.0:99; CHECK-NEXT:    srawi 4, 3, 6100; CHECK-NEXT:    addze 4, 4101; CHECK-NEXT:    slwi 4, 4, 6102; CHECK-NEXT:    sub 3, 3, 4103; CHECK-NEXT:    blr104  %1 = srem i32 %x, 64105  ret i32 %1106}107 108; Don't fold if the divisor is one.109define i32 @dont_fold_srem_one(i32 %x) {110; CHECK-LABEL: dont_fold_srem_one:111; CHECK:       # %bb.0:112; CHECK-NEXT:    li 3, 0113; CHECK-NEXT:    blr114  %1 = srem i32 %x, 1115  ret i32 %1116}117 118; Don't fold if the divisor is 2^31.119define i32 @dont_fold_srem_i32_smax(i32 %x) {120; CHECK-LABEL: dont_fold_srem_i32_smax:121; CHECK:       # %bb.0:122; CHECK-NEXT:    srawi 4, 3, 31123; CHECK-NEXT:    addze 4, 4124; CHECK-NEXT:    slwi 4, 4, 31125; CHECK-NEXT:    add 3, 3, 4126; CHECK-NEXT:    blr127  %1 = srem i32 %x, 2147483648128  ret i32 %1129}130 131; Don't fold i64 srem132define i64 @dont_fold_srem_i64(i64 %x) {133; CHECK-LABEL: dont_fold_srem_i64:134; CHECK:       # %bb.0:135; CHECK-NEXT:    mflr 0136; CHECK-NEXT:    stwu 1, -16(1)137; CHECK-NEXT:    stw 0, 20(1)138; CHECK-NEXT:    .cfi_def_cfa_offset 16139; CHECK-NEXT:    .cfi_offset lr, 4140; CHECK-NEXT:    li 5, 0141; CHECK-NEXT:    li 6, 98142; CHECK-NEXT:    bl __moddi3143; CHECK-NEXT:    lwz 0, 20(1)144; CHECK-NEXT:    addi 1, 1, 16145; CHECK-NEXT:    mtlr 0146; CHECK-NEXT:    blr147  %1 = srem i64 %x, 98148  ret i64 %1149}150