brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 43a1e5a Raw
107 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_urem_positive_odd(i32 %x) {6; CHECK-LABEL: fold_urem_positive_odd:7; CHECK:       # %bb.0:8; CHECK-NEXT:    lis 4, 227659; CHECK-NEXT:    ori 4, 4, 896910; CHECK-NEXT:    mulhwu 4, 3, 411; CHECK-NEXT:    sub 5, 3, 412; CHECK-NEXT:    srwi 5, 5, 113; CHECK-NEXT:    add 4, 5, 414; CHECK-NEXT:    srwi 4, 4, 615; CHECK-NEXT:    mulli 4, 4, 9516; CHECK-NEXT:    sub 3, 3, 417; CHECK-NEXT:    blr18  %1 = urem i32 %x, 9519  ret i32 %120}21 22 23define i32 @fold_urem_positive_even(i32 %x) {24; CHECK-LABEL: fold_urem_positive_even:25; CHECK:       # %bb.0:26; CHECK-NEXT:    lis 4, -222627; CHECK-NEXT:    ori 4, 4, 1632328; CHECK-NEXT:    mulhwu 4, 3, 429; CHECK-NEXT:    srwi 4, 4, 1030; CHECK-NEXT:    mulli 4, 4, 106031; CHECK-NEXT:    sub 3, 3, 432; CHECK-NEXT:    blr33  %1 = urem i32 %x, 106034  ret i32 %135}36 37 38; Don't fold if we can combine urem with udiv.39define i32 @combine_urem_udiv(i32 %x) {40; CHECK-LABEL: combine_urem_udiv:41; CHECK:       # %bb.0:42; CHECK-NEXT:    lis 4, 2276543; CHECK-NEXT:    ori 4, 4, 896944; CHECK-NEXT:    mulhwu 4, 3, 445; CHECK-NEXT:    sub 5, 3, 446; CHECK-NEXT:    srwi 5, 5, 147; CHECK-NEXT:    add 4, 5, 448; CHECK-NEXT:    srwi 4, 4, 649; CHECK-NEXT:    mulli 5, 4, 9550; CHECK-NEXT:    sub 3, 3, 551; CHECK-NEXT:    add 3, 3, 452; CHECK-NEXT:    blr53  %1 = urem i32 %x, 9554  %2 = udiv i32 %x, 9555  %3 = add i32 %1, %256  ret i32 %357}58 59; Don't fold for divisors that are a power of two.60define i32 @dont_fold_urem_power_of_two(i32 %x) {61; CHECK-LABEL: dont_fold_urem_power_of_two:62; CHECK:       # %bb.0:63; CHECK-NEXT:    clrlwi 3, 3, 2664; CHECK-NEXT:    blr65  %1 = urem i32 %x, 6466  ret i32 %167}68 69; Don't fold if the divisor is one.70define i32 @dont_fold_urem_one(i32 %x) {71; CHECK-LABEL: dont_fold_urem_one:72; CHECK:       # %bb.0:73; CHECK-NEXT:    li 3, 074; CHECK-NEXT:    blr75  %1 = urem i32 %x, 176  ret i32 %177}78 79; Don't fold if the divisor is 2^32.80define i32 @dont_fold_urem_i32_umax(i32 %x) {81; CHECK-LABEL: dont_fold_urem_i32_umax:82; CHECK:       # %bb.0:83; CHECK-NEXT:    blr84  %1 = urem i32 %x, 429496729685  ret i32 %186}87 88; Don't fold i64 urem89define i64 @dont_fold_urem_i64(i64 %x) {90; CHECK-LABEL: dont_fold_urem_i64:91; CHECK:       # %bb.0:92; CHECK-NEXT:    mflr 093; CHECK-NEXT:    stwu 1, -16(1)94; CHECK-NEXT:    stw 0, 20(1)95; CHECK-NEXT:    .cfi_def_cfa_offset 1696; CHECK-NEXT:    .cfi_offset lr, 497; CHECK-NEXT:    li 5, 098; CHECK-NEXT:    li 6, 9899; CHECK-NEXT:    bl __umoddi3100; CHECK-NEXT:    lwz 0, 20(1)101; CHECK-NEXT:    addi 1, 1, 16102; CHECK-NEXT:    mtlr 0103; CHECK-NEXT:    blr104  %1 = urem i64 %x, 98105  ret i64 %1106}107