1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
2
+ ; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3
+ ; RUN: llc -mtriple=aarch64-unknown-linux-gnu -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI
3
4
4
5
define i32 @fold_urem_positive_odd (i32 %x ) {
5
6
; CHECK-LABEL: fold_urem_positive_odd:
@@ -18,37 +19,54 @@ define i32 @fold_urem_positive_odd(i32 %x) {
18
19
ret i32 %1
19
20
}
20
21
21
-
22
22
define i32 @fold_urem_positive_even (i32 %x ) {
23
- ; CHECK-LABEL: fold_urem_positive_even:
24
- ; CHECK: // %bb.0:
25
- ; CHECK-NEXT: mov w8, #16323 // =0x3fc3
26
- ; CHECK-NEXT: mov w9, #1060 // =0x424
27
- ; CHECK-NEXT: movk w8, #63310, lsl #16
28
- ; CHECK-NEXT: umull x8, w0, w8
29
- ; CHECK-NEXT: lsr x8, x8, #42
30
- ; CHECK-NEXT: msub w0, w8, w9, w0
31
- ; CHECK-NEXT: ret
23
+ ; CHECK-SD-LABEL: fold_urem_positive_even:
24
+ ; CHECK-SD: // %bb.0:
25
+ ; CHECK-SD-NEXT: mov w8, #16323 // =0x3fc3
26
+ ; CHECK-SD-NEXT: mov w9, #1060 // =0x424
27
+ ; CHECK-SD-NEXT: movk w8, #63310, lsl #16
28
+ ; CHECK-SD-NEXT: umull x8, w0, w8
29
+ ; CHECK-SD-NEXT: lsr x8, x8, #42
30
+ ; CHECK-SD-NEXT: msub w0, w8, w9, w0
31
+ ; CHECK-SD-NEXT: ret
32
+ ;
33
+ ; CHECK-GI-LABEL: fold_urem_positive_even:
34
+ ; CHECK-GI: // %bb.0:
35
+ ; CHECK-GI-NEXT: mov w8, #16323 // =0x3fc3
36
+ ; CHECK-GI-NEXT: mov w9, #1060 // =0x424
37
+ ; CHECK-GI-NEXT: movk w8, #63310, lsl #16
38
+ ; CHECK-GI-NEXT: umull x8, w0, w8
39
+ ; CHECK-GI-NEXT: lsr x8, x8, #32
40
+ ; CHECK-GI-NEXT: lsr w8, w8, #10
41
+ ; CHECK-GI-NEXT: msub w0, w8, w9, w0
42
+ ; CHECK-GI-NEXT: ret
32
43
%1 = urem i32 %x , 1060
33
44
ret i32 %1
34
45
}
35
46
36
-
37
47
; Don't fold if we can combine urem with udiv.
38
48
define i32 @combine_urem_udiv (i32 %x ) {
39
- ; CHECK-LABEL: combine_urem_udiv:
40
- ; CHECK: // %bb.0:
41
- ; CHECK-NEXT: mov w8, #8969 // =0x2309
42
- ; CHECK-NEXT: movk w8, #22765, lsl #16
43
- ; CHECK-NEXT: umull x8, w0, w8
44
- ; CHECK-NEXT: lsr x8, x8, #32
45
- ; CHECK-NEXT: sub w9, w0, w8
46
- ; CHECK-NEXT: add w8, w8, w9, lsr #1
47
- ; CHECK-NEXT: mov w9, #95 // =0x5f
48
- ; CHECK-NEXT: lsr w8, w8, #6
49
- ; CHECK-NEXT: msub w9, w8, w9, w0
50
- ; CHECK-NEXT: add w0, w9, w8
51
- ; CHECK-NEXT: ret
49
+ ; CHECK-SD-LABEL: combine_urem_udiv:
50
+ ; CHECK-SD: // %bb.0:
51
+ ; CHECK-SD-NEXT: mov w8, #8969 // =0x2309
52
+ ; CHECK-SD-NEXT: movk w8, #22765, lsl #16
53
+ ; CHECK-SD-NEXT: umull x8, w0, w8
54
+ ; CHECK-SD-NEXT: lsr x8, x8, #32
55
+ ; CHECK-SD-NEXT: sub w9, w0, w8
56
+ ; CHECK-SD-NEXT: add w8, w8, w9, lsr #1
57
+ ; CHECK-SD-NEXT: mov w9, #95 // =0x5f
58
+ ; CHECK-SD-NEXT: lsr w8, w8, #6
59
+ ; CHECK-SD-NEXT: msub w9, w8, w9, w0
60
+ ; CHECK-SD-NEXT: add w0, w9, w8
61
+ ; CHECK-SD-NEXT: ret
62
+ ;
63
+ ; CHECK-GI-LABEL: combine_urem_udiv:
64
+ ; CHECK-GI: // %bb.0:
65
+ ; CHECK-GI-NEXT: mov w8, #95 // =0x5f
66
+ ; CHECK-GI-NEXT: udiv w9, w0, w8
67
+ ; CHECK-GI-NEXT: msub w8, w9, w8, w0
68
+ ; CHECK-GI-NEXT: add w0, w8, w9
69
+ ; CHECK-GI-NEXT: ret
52
70
%1 = urem i32 %x , 95
53
71
%2 = udiv i32 %x , 95
54
72
%3 = add i32 %1 , %2
0 commit comments