Skip to content

Commit 71329c6

Browse files
committed
[AArch64][GlobalISel] Add test coverage for sub1.ll. NFC
1 parent 46f9117 commit 71329c6

File tree

1 file changed

+74
-33
lines changed

1 file changed

+74
-33
lines changed

llvm/test/CodeGen/AArch64/sub1.ll

Lines changed: 74 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,43 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s
2+
; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3+
; RUN: llc < %s -mtriple=aarch64-unknown-unknown -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
34

45
define i64 @sub1_disguised_constant(i64 %x) {
5-
; CHECK-LABEL: sub1_disguised_constant:
6-
; CHECK: // %bb.0:
7-
; CHECK-NEXT: sub w8, w0, #1
8-
; CHECK-NEXT: and w8, w0, w8
9-
; CHECK-NEXT: and x0, x8, #0xffff
10-
; CHECK-NEXT: ret
6+
; CHECK-SD-LABEL: sub1_disguised_constant:
7+
; CHECK-SD: // %bb.0:
8+
; CHECK-SD-NEXT: sub w8, w0, #1
9+
; CHECK-SD-NEXT: and w8, w0, w8
10+
; CHECK-SD-NEXT: and x0, x8, #0xffff
11+
; CHECK-SD-NEXT: ret
12+
;
13+
; CHECK-GI-LABEL: sub1_disguised_constant:
14+
; CHECK-GI: // %bb.0:
15+
; CHECK-GI-NEXT: mov w8, #65535 // =0xffff
16+
; CHECK-GI-NEXT: and x9, x0, #0xffff
17+
; CHECK-GI-NEXT: add x8, x0, x8
18+
; CHECK-GI-NEXT: and x0, x9, x8
19+
; CHECK-GI-NEXT: ret
1120
%a1 = and i64 %x, 65535
1221
%a2 = add i64 %x, 65535
1322
%r = and i64 %a1, %a2
1423
ret i64 %r
1524
}
1625

1726
define i8 @masked_sub_i8(i8 %x) {
18-
; CHECK-LABEL: masked_sub_i8:
19-
; CHECK: // %bb.0:
20-
; CHECK-NEXT: mov w8, #5
21-
; CHECK-NEXT: and w8, w0, w8
22-
; CHECK-NEXT: eor w0, w8, #0x7
23-
; CHECK-NEXT: ret
27+
; CHECK-SD-LABEL: masked_sub_i8:
28+
; CHECK-SD: // %bb.0:
29+
; CHECK-SD-NEXT: mov w8, #5 // =0x5
30+
; CHECK-SD-NEXT: and w8, w0, w8
31+
; CHECK-SD-NEXT: eor w0, w8, #0x7
32+
; CHECK-SD-NEXT: ret
33+
;
34+
; CHECK-GI-LABEL: masked_sub_i8:
35+
; CHECK-GI: // %bb.0:
36+
; CHECK-GI-NEXT: mov w8, #5 // =0x5
37+
; CHECK-GI-NEXT: mov w9, #7 // =0x7
38+
; CHECK-GI-NEXT: and w8, w0, w8
39+
; CHECK-GI-NEXT: sub w0, w9, w8
40+
; CHECK-GI-NEXT: ret
2441
%a = and i8 %x, 5
2542
%m = sub i8 7, %a
2643
ret i8 %m
@@ -29,12 +46,20 @@ define i8 @masked_sub_i8(i8 %x) {
2946
; Borrow from the MSB is ok.
3047

3148
define i8 @masked_sub_high_bit_mask_i8(i8 %x) {
32-
; CHECK-LABEL: masked_sub_high_bit_mask_i8:
33-
; CHECK: // %bb.0:
34-
; CHECK-NEXT: mov w8, #-96
35-
; CHECK-NEXT: and w8, w0, w8
36-
; CHECK-NEXT: eor w0, w8, #0x3c
37-
; CHECK-NEXT: ret
49+
; CHECK-SD-LABEL: masked_sub_high_bit_mask_i8:
50+
; CHECK-SD: // %bb.0:
51+
; CHECK-SD-NEXT: mov w8, #-96 // =0xffffffa0
52+
; CHECK-SD-NEXT: and w8, w0, w8
53+
; CHECK-SD-NEXT: eor w0, w8, #0x3c
54+
; CHECK-SD-NEXT: ret
55+
;
56+
; CHECK-GI-LABEL: masked_sub_high_bit_mask_i8:
57+
; CHECK-GI: // %bb.0:
58+
; CHECK-GI-NEXT: mov w8, #-96 // =0xffffffa0
59+
; CHECK-GI-NEXT: mov w9, #60 // =0x3c
60+
; CHECK-GI-NEXT: and w8, w0, w8
61+
; CHECK-GI-NEXT: sub w0, w9, w8
62+
; CHECK-GI-NEXT: ret
3863
%maskx = and i8 %x, 160 ; 0b10100000
3964
%s = sub i8 60, %maskx ; 0b00111100
4065
ret i8 %s
@@ -43,7 +68,7 @@ define i8 @masked_sub_high_bit_mask_i8(i8 %x) {
4368
define i8 @not_masked_sub_i8(i8 %x) {
4469
; CHECK-LABEL: not_masked_sub_i8:
4570
; CHECK: // %bb.0:
46-
; CHECK-NEXT: mov w8, #7
71+
; CHECK-NEXT: mov w8, #7 // =0x7
4772
; CHECK-NEXT: and w9, w0, #0x8
4873
; CHECK-NEXT: sub w0, w8, w9
4974
; CHECK-NEXT: ret
@@ -53,25 +78,41 @@ define i8 @not_masked_sub_i8(i8 %x) {
5378
}
5479

5580
define i32 @masked_sub_i32(i32 %x) {
56-
; CHECK-LABEL: masked_sub_i32:
57-
; CHECK: // %bb.0:
58-
; CHECK-NEXT: mov w8, #9
59-
; CHECK-NEXT: and w8, w0, w8
60-
; CHECK-NEXT: eor w0, w8, #0x1f
61-
; CHECK-NEXT: ret
81+
; CHECK-SD-LABEL: masked_sub_i32:
82+
; CHECK-SD: // %bb.0:
83+
; CHECK-SD-NEXT: mov w8, #9 // =0x9
84+
; CHECK-SD-NEXT: and w8, w0, w8
85+
; CHECK-SD-NEXT: eor w0, w8, #0x1f
86+
; CHECK-SD-NEXT: ret
87+
;
88+
; CHECK-GI-LABEL: masked_sub_i32:
89+
; CHECK-GI: // %bb.0:
90+
; CHECK-GI-NEXT: mov w8, #9 // =0x9
91+
; CHECK-GI-NEXT: mov w9, #31 // =0x1f
92+
; CHECK-GI-NEXT: and w8, w0, w8
93+
; CHECK-GI-NEXT: sub w0, w9, w8
94+
; CHECK-GI-NEXT: ret
6295
%a = and i32 %x, 9
6396
%m = sub i32 31, %a
6497
ret i32 %m
6598
}
6699

67100
define <4 x i32> @masked_sub_v4i32(<4 x i32> %x) {
68-
; CHECK-LABEL: masked_sub_v4i32:
69-
; CHECK: // %bb.0:
70-
; CHECK-NEXT: movi v1.4s, #42
71-
; CHECK-NEXT: movi v2.4s, #1, msl #8
72-
; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
73-
; CHECK-NEXT: eor v0.16b, v0.16b, v2.16b
74-
; CHECK-NEXT: ret
101+
; CHECK-SD-LABEL: masked_sub_v4i32:
102+
; CHECK-SD: // %bb.0:
103+
; CHECK-SD-NEXT: movi v1.4s, #42
104+
; CHECK-SD-NEXT: movi v2.4s, #1, msl #8
105+
; CHECK-SD-NEXT: and v0.16b, v0.16b, v1.16b
106+
; CHECK-SD-NEXT: eor v0.16b, v0.16b, v2.16b
107+
; CHECK-SD-NEXT: ret
108+
;
109+
; CHECK-GI-LABEL: masked_sub_v4i32:
110+
; CHECK-GI: // %bb.0:
111+
; CHECK-GI-NEXT: movi v1.4s, #42
112+
; CHECK-GI-NEXT: movi v2.4s, #1, msl #8
113+
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
114+
; CHECK-GI-NEXT: sub v0.4s, v2.4s, v0.4s
115+
; CHECK-GI-NEXT: ret
75116
%a = and <4 x i32> %x, <i32 42, i32 42, i32 42, i32 42>
76117
%m = sub <4 x i32> <i32 511, i32 511, i32 511, i32 511>, %a
77118
ret <4 x i32> %m

0 commit comments

Comments
 (0)