aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/AArch64/urem-lkk.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/AArch64/urem-lkk.ll')
-rw-r--r--llvm/test/CodeGen/AArch64/urem-lkk.ll68
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