Skip to content

Commit 62adb89

Browse files
committed
[InstSimpify] Add tests for simplifying (xor (sub C_Mask, X), C_Mask); NFC
1 parent 0d9c027 commit 62adb89

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3+
4+
define i8 @xor_w_sub_fail_missing_nuw(i8 range(i8 0, 16) %x) {
5+
; CHECK-LABEL: define i8 @xor_w_sub_fail_missing_nuw(
6+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
7+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X]], 15
8+
; CHECK-NEXT: [[R:%.*]] = sub nsw i8 15, [[XOR]]
9+
; CHECK-NEXT: ret i8 [[R]]
10+
;
11+
%xor = xor i8 %x, 15
12+
%r = sub nsw i8 15, %xor
13+
ret i8 %r
14+
}
15+
16+
define i8 @xor_w_sub_fail_diff_values(i8 range(i8 0, 16) %x) {
17+
; CHECK-LABEL: define i8 @xor_w_sub_fail_diff_values(
18+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
19+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X]], 15
20+
; CHECK-NEXT: [[R:%.*]] = sub nuw nsw i8 31, [[XOR]]
21+
; CHECK-NEXT: ret i8 [[R]]
22+
;
23+
%xor = xor i8 %x, 15
24+
%r = sub nsw nuw i8 31, %xor
25+
ret i8 %r
26+
}
27+
28+
define i8 @xor_w_sub_fail_diff_values2(i8 range(i8 0, 16) %x) {
29+
; CHECK-LABEL: define i8 @xor_w_sub_fail_diff_values2(
30+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
31+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X]], 31
32+
; CHECK-NEXT: [[R:%.*]] = sub nuw nsw i8 15, [[XOR]]
33+
; CHECK-NEXT: ret i8 [[R]]
34+
;
35+
%xor = xor i8 %x, 31
36+
%r = sub nsw nuw i8 15, %xor
37+
ret i8 %r
38+
}
39+
40+
define i8 @xor_w_sub_fail_not_mask(i8 range(i8 0, 16) %x) {
41+
; CHECK-LABEL: define i8 @xor_w_sub_fail_not_mask(
42+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
43+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X]], 30
44+
; CHECK-NEXT: [[R:%.*]] = sub nuw nsw i8 30, [[XOR]]
45+
; CHECK-NEXT: ret i8 [[R]]
46+
;
47+
%xor = xor i8 %x, 30
48+
%r = sub nsw nuw i8 30, %xor
49+
ret i8 %r
50+
}
51+
52+
define i8 @xor_w_sub_okay(i8 range(i8 0, 16) %x) {
53+
; CHECK-LABEL: define i8 @xor_w_sub_okay(
54+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
55+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X]], 31
56+
; CHECK-NEXT: [[R:%.*]] = sub nuw nsw i8 31, [[XOR]]
57+
; CHECK-NEXT: ret i8 [[R]]
58+
;
59+
%xor = xor i8 %x, 31
60+
%r = sub nsw nuw i8 31, %xor
61+
ret i8 %r
62+
}
63+
64+
define i8 @sub_w_xor_fail_missing_nuw(i8 range(i8 0, 16) %x) {
65+
; CHECK-LABEL: define i8 @sub_w_xor_fail_missing_nuw(
66+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
67+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 15, [[X]]
68+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[SUB]], 15
69+
; CHECK-NEXT: ret i8 [[R]]
70+
;
71+
%sub = sub nsw i8 15, %x
72+
%r = xor i8 %sub, 15
73+
ret i8 %r
74+
}
75+
76+
define i8 @sub_w_xor_fail_diff_values(i8 range(i8 0, 16) %x) {
77+
; CHECK-LABEL: define i8 @sub_w_xor_fail_diff_values(
78+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
79+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i8 15, [[X]]
80+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[SUB]], 31
81+
; CHECK-NEXT: ret i8 [[R]]
82+
;
83+
%sub = sub nsw nuw i8 15, %x
84+
%r = xor i8 %sub, 31
85+
ret i8 %r
86+
}
87+
88+
define i8 @sub_w_sub_fail_diff_values2(i8 range(i8 0, 16) %x) {
89+
; CHECK-LABEL: define i8 @sub_w_sub_fail_diff_values2(
90+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
91+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i8 31, [[X]]
92+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[SUB]], 15
93+
; CHECK-NEXT: ret i8 [[R]]
94+
;
95+
%sub = sub nsw nuw i8 31, %x
96+
%r = xor i8 %sub, 15
97+
ret i8 %r
98+
}
99+
100+
define i8 @sub_w_sub_fail_not_mask(i8 range(i8 0, 16) %x) {
101+
; CHECK-LABEL: define i8 @sub_w_sub_fail_not_mask(
102+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
103+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i8 30, [[X]]
104+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[SUB]], 30
105+
; CHECK-NEXT: ret i8 [[R]]
106+
;
107+
%sub = sub nsw nuw i8 30, %x
108+
%r = xor i8 %sub, 30
109+
ret i8 %r
110+
}
111+
112+
define i8 @sub_w_sub_okay(i8 range(i8 0, 16) %x) {
113+
; CHECK-LABEL: define i8 @sub_w_sub_okay(
114+
; CHECK-SAME: i8 range(i8 0, 16) [[X:%.*]]) {
115+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i8 31, [[X]]
116+
; CHECK-NEXT: [[R:%.*]] = xor i8 [[SUB]], 31
117+
; CHECK-NEXT: ret i8 [[R]]
118+
;
119+
%sub = sub nsw nuw i8 31, %x
120+
%r = xor i8 %sub, 31
121+
ret i8 %r
122+
}

0 commit comments

Comments
 (0)