diff options
Diffstat (limited to 'llvm/test/CodeGen/AArch64/urem-lkk.ll')
-rw-r--r-- | llvm/test/CodeGen/AArch64/urem-lkk.ll | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/llvm/test/CodeGen/AArch64/urem-lkk.ll b/llvm/test/CodeGen/AArch64/urem-lkk.ll index 2212e0a..0dd6685 100644 --- a/llvm/test/CodeGen/AArch64/urem-lkk.ll +++ b/llvm/test/CodeGen/AArch64/urem-lkk.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD +; RUN: llc -mtriple=aarch64-unknown-linux-gnu -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI define i32 @fold_urem_positive_odd(i32 %x) { ; CHECK-LABEL: fold_urem_positive_odd: @@ -18,37 +19,54 @@ define i32 @fold_urem_positive_odd(i32 %x) { ret i32 %1 } - define i32 @fold_urem_positive_even(i32 %x) { -; CHECK-LABEL: fold_urem_positive_even: -; CHECK: // %bb.0: -; CHECK-NEXT: mov w8, #16323 // =0x3fc3 -; CHECK-NEXT: mov w9, #1060 // =0x424 -; CHECK-NEXT: movk w8, #63310, lsl #16 -; CHECK-NEXT: umull x8, w0, w8 -; CHECK-NEXT: lsr x8, x8, #42 -; CHECK-NEXT: msub w0, w8, w9, w0 -; CHECK-NEXT: ret +; CHECK-SD-LABEL: fold_urem_positive_even: +; CHECK-SD: // %bb.0: +; CHECK-SD-NEXT: mov w8, #16323 // =0x3fc3 +; CHECK-SD-NEXT: mov w9, #1060 // =0x424 +; CHECK-SD-NEXT: movk w8, #63310, lsl #16 +; CHECK-SD-NEXT: umull x8, w0, w8 +; CHECK-SD-NEXT: lsr x8, x8, #42 +; CHECK-SD-NEXT: msub w0, w8, w9, w0 +; CHECK-SD-NEXT: ret +; +; CHECK-GI-LABEL: fold_urem_positive_even: +; CHECK-GI: // %bb.0: +; CHECK-GI-NEXT: mov w8, #16323 // =0x3fc3 +; CHECK-GI-NEXT: mov w9, #1060 // =0x424 +; CHECK-GI-NEXT: movk w8, #63310, lsl #16 +; CHECK-GI-NEXT: umull x8, w0, w8 +; CHECK-GI-NEXT: lsr x8, x8, #32 +; CHECK-GI-NEXT: lsr w8, w8, #10 +; CHECK-GI-NEXT: msub w0, w8, w9, w0 +; CHECK-GI-NEXT: ret %1 = urem i32 %x, 1060 ret i32 %1 } - ; Don't fold if we can combine urem with udiv. define i32 @combine_urem_udiv(i32 %x) { -; CHECK-LABEL: combine_urem_udiv: -; CHECK: // %bb.0: -; CHECK-NEXT: mov w8, #8969 // =0x2309 -; CHECK-NEXT: movk w8, #22765, lsl #16 -; CHECK-NEXT: umull x8, w0, w8 -; CHECK-NEXT: lsr x8, x8, #32 -; CHECK-NEXT: sub w9, w0, w8 -; CHECK-NEXT: add w8, w8, w9, lsr #1 -; CHECK-NEXT: mov w9, #95 // =0x5f -; CHECK-NEXT: lsr w8, w8, #6 -; CHECK-NEXT: msub w9, w8, w9, w0 -; CHECK-NEXT: add w0, w9, w8 -; CHECK-NEXT: ret +; CHECK-SD-LABEL: combine_urem_udiv: +; CHECK-SD: // %bb.0: +; CHECK-SD-NEXT: mov w8, #8969 // =0x2309 +; CHECK-SD-NEXT: movk w8, #22765, lsl #16 +; CHECK-SD-NEXT: umull x8, w0, w8 +; CHECK-SD-NEXT: lsr x8, x8, #32 +; CHECK-SD-NEXT: sub w9, w0, w8 +; CHECK-SD-NEXT: add w8, w8, w9, lsr #1 +; CHECK-SD-NEXT: mov w9, #95 // =0x5f +; CHECK-SD-NEXT: lsr w8, w8, #6 +; CHECK-SD-NEXT: msub w9, w8, w9, w0 +; CHECK-SD-NEXT: add w0, w9, w8 +; CHECK-SD-NEXT: ret +; +; CHECK-GI-LABEL: combine_urem_udiv: +; CHECK-GI: // %bb.0: +; CHECK-GI-NEXT: mov w8, #95 // =0x5f +; CHECK-GI-NEXT: udiv w9, w0, w8 +; CHECK-GI-NEXT: msub w8, w9, w8, w0 +; CHECK-GI-NEXT: add w0, w8, w9 +; CHECK-GI-NEXT: ret %1 = urem i32 %x, 95 %2 = udiv i32 %x, 95 %3 = add i32 %1, %2 |