Skip to content

Commit ef55640

Browse files
committed
[InstCombine] Add extra pre-commit tests. NFC.
1 parent aafd211 commit ef55640

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

llvm/test/Transforms/InstCombine/sub-from-sub.ll

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ define i8 @t0(i8 %x, i8 %y, i8 %z) {
1717
ret i8 %r
1818
}
1919

20-
; No flags are propagated
20+
; NSW/NUW flags are propagated
2121
define i8 @t1_flags(i8 %x, i8 %y, i8 %z) {
2222
; CHECK-LABEL: @t1_flags(
2323
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
@@ -29,6 +29,74 @@ define i8 @t1_flags(i8 %x, i8 %y, i8 %z) {
2929
ret i8 %r
3030
}
3131

32+
; NUW flags are propagated
33+
define i8 @t1_flags_nuw_only(i8 %x, i8 %y, i8 %z) {
34+
; CHECK-LABEL: @t1_flags_nuw_only(
35+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
36+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
37+
; CHECK-NEXT: ret i8 [[R]]
38+
;
39+
%o0 = sub nuw i8 %x, %y
40+
%r = sub nuw i8 %o0, %z
41+
ret i8 %r
42+
}
43+
44+
; Negative tests
45+
define i8 @t1_flags_sub_nsw_sub(i8 %x, i8 %y, i8 %z) {
46+
; CHECK-LABEL: @t1_flags_sub_nsw_sub(
47+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
48+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
49+
; CHECK-NEXT: ret i8 [[R]]
50+
;
51+
%o0 = sub nsw i8 %x, %y
52+
%r = sub i8 %o0, %z
53+
ret i8 %r
54+
}
55+
56+
define i8 @t1_flags_nuw_first(i8 %x, i8 %y, i8 %z) {
57+
; CHECK-LABEL: @t1_flags_nuw_first(
58+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
59+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
60+
; CHECK-NEXT: ret i8 [[R]]
61+
;
62+
%o0 = sub nuw i8 %x, %y
63+
%r = sub i8 %o0, %z
64+
ret i8 %r
65+
}
66+
67+
define i8 @t1_flags_nuw_second(i8 %x, i8 %y, i8 %z) {
68+
; CHECK-LABEL: @t1_flags_nuw_second(
69+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
70+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
71+
; CHECK-NEXT: ret i8 [[R]]
72+
;
73+
%o0 = sub i8 %x, %y
74+
%r = sub nuw i8 %o0, %z
75+
ret i8 %r
76+
}
77+
78+
define i8 @t1_flags_nuw_nsw_first(i8 %x, i8 %y, i8 %z) {
79+
; CHECK-LABEL: @t1_flags_nuw_nsw_first(
80+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
81+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
82+
; CHECK-NEXT: ret i8 [[R]]
83+
;
84+
%o0 = sub nuw nsw i8 %x, %y
85+
%r = sub i8 %o0, %z
86+
ret i8 %r
87+
}
88+
89+
define i8 @t1_flags_nuw_nsw_second(i8 %x, i8 %y, i8 %z) {
90+
; CHECK-LABEL: @t1_flags_nuw_nsw_second(
91+
; CHECK-NEXT: [[TMP1:%.*]] = add i8 [[Y:%.*]], [[Z:%.*]]
92+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[X:%.*]], [[TMP1]]
93+
; CHECK-NEXT: ret i8 [[R]]
94+
;
95+
%o0 = sub i8 %x, %y
96+
%r = sub nuw nsw i8 %o0, %z
97+
ret i8 %r
98+
}
99+
32100
; The inner sub must have single use.
33101
define i8 @n2(i8 %x, i8 %y, i8 %z) {
34102
; CHECK-LABEL: @n2(

0 commit comments

Comments
 (0)