4
4
declare void @maythrow ()
5
5
declare void @use (i16 )
6
6
7
- define void @sdiv_not_ok (i16 %n , i16 %xx ) {
7
+ define void @sdiv_not_ok (i16 %n , i16 noundef %xx ) {
8
8
; CHECK-LABEL: @sdiv_not_ok(
9
9
; CHECK-NEXT: entry:
10
10
; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
25
25
br label %loop
26
26
}
27
27
28
- define void @srem_not_ok2 (i16 %nn , i16 %x ) {
28
+ define void @srem_not_ok2 (i16 %nn , i16 noundef %x ) {
29
29
; CHECK-LABEL: @srem_not_ok2(
30
30
; CHECK-NEXT: entry:
31
31
; CHECK-NEXT: [[N:%.*]] = and i16 [[NN:%.*]], 1323
@@ -46,15 +46,15 @@ loop:
46
46
br label %loop
47
47
}
48
48
49
- define void @sdiv_ok (i16 %n , i16 %xx ) {
49
+ define void @sdiv_ok (i16 %n , i16 noundef %xx ) {
50
50
; CHECK-LABEL: @sdiv_ok(
51
51
; CHECK-NEXT: entry:
52
52
; CHECK-NEXT: [[XO:%.*]] = or i16 [[XX:%.*]], 1
53
53
; CHECK-NEXT: [[X:%.*]] = and i16 [[XO]], 123
54
+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i16 [[N:%.*]], [[X]]
54
55
; CHECK-NEXT: br label [[LOOP:%.*]]
55
56
; CHECK: loop:
56
57
; CHECK-NEXT: call void @maythrow()
57
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i16 [[N:%.*]], [[X]]
58
58
; CHECK-NEXT: call void @use(i16 [[DIV]])
59
59
; CHECK-NEXT: br label [[LOOP]]
60
60
;
@@ -69,15 +69,15 @@ loop:
69
69
br label %loop
70
70
}
71
71
72
- define void @srem_ok2 (i16 %nn , i16 %xx ) {
72
+ define void @srem_ok2 (i16 noundef %nn , i16 noundef %xx ) {
73
73
; CHECK-LABEL: @srem_ok2(
74
74
; CHECK-NEXT: entry:
75
75
; CHECK-NEXT: [[N:%.*]] = and i16 [[NN:%.*]], 123
76
76
; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
77
+ ; CHECK-NEXT: [[DIV:%.*]] = srem i16 [[N]], [[X]]
77
78
; CHECK-NEXT: br label [[LOOP:%.*]]
78
79
; CHECK: loop:
79
80
; CHECK-NEXT: call void @maythrow()
80
- ; CHECK-NEXT: [[DIV:%.*]] = srem i16 [[N]], [[X]]
81
81
; CHECK-NEXT: call void @use(i16 [[DIV]])
82
82
; CHECK-NEXT: br label [[LOOP]]
83
83
;
92
92
br label %loop
93
93
}
94
94
95
- define void @udiv_not_ok (i16 %n , i16 %xx ) {
95
+ define void @sdiv_not_ok3_maybe_poison_denum (i16 noundef %nn , i16 %xx ) {
96
+ ; CHECK-LABEL: @sdiv_not_ok3_maybe_poison_denum(
97
+ ; CHECK-NEXT: entry:
98
+ ; CHECK-NEXT: [[N:%.*]] = and i16 [[NN:%.*]], 123
99
+ ; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
100
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
101
+ ; CHECK: loop:
102
+ ; CHECK-NEXT: call void @maythrow()
103
+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i16 [[N]], [[X]]
104
+ ; CHECK-NEXT: call void @use(i16 [[DIV]])
105
+ ; CHECK-NEXT: br label [[LOOP]]
106
+ ;
107
+ entry:
108
+ %n = and i16 %nn , 123
109
+ %x = or i16 %xx , 1
110
+ br label %loop
111
+ loop:
112
+ call void @maythrow ()
113
+ %div = sdiv i16 %n , %x
114
+ call void @use (i16 %div )
115
+ br label %loop
116
+ }
117
+
118
+ define void @sdiv_not_ok3_maybe_poison_num (i16 %nn , i16 noundef %xx ) {
119
+ ; CHECK-LABEL: @sdiv_not_ok3_maybe_poison_num(
120
+ ; CHECK-NEXT: entry:
121
+ ; CHECK-NEXT: [[N:%.*]] = and i16 [[NN:%.*]], 123
122
+ ; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
123
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
124
+ ; CHECK: loop:
125
+ ; CHECK-NEXT: call void @maythrow()
126
+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i16 [[N]], [[X]]
127
+ ; CHECK-NEXT: call void @use(i16 [[DIV]])
128
+ ; CHECK-NEXT: br label [[LOOP]]
129
+ ;
130
+ entry:
131
+ %n = and i16 %nn , 123
132
+ %x = or i16 %xx , 1
133
+ br label %loop
134
+ loop:
135
+ call void @maythrow ()
136
+ %div = sdiv i16 %n , %x
137
+ call void @use (i16 %div )
138
+ br label %loop
139
+ }
140
+
141
+ define void @udiv_not_ok (i16 %n , i16 noundef %xx ) {
96
142
; CHECK-LABEL: @udiv_not_ok(
97
143
; CHECK-NEXT: entry:
98
144
; CHECK-NEXT: [[X:%.*]] = xor i16 [[XX:%.*]], 1
@@ -113,10 +159,31 @@ loop:
113
159
br label %loop
114
160
}
115
161
116
- define void @udiv_ok (i16 %n , i16 %xx ) {
162
+ define void @udiv_ok (i16 %n , i16 noundef %xx ) {
117
163
; CHECK-LABEL: @udiv_ok(
118
164
; CHECK-NEXT: entry:
119
165
; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
166
+ ; CHECK-NEXT: [[DIV:%.*]] = udiv i16 [[N:%.*]], [[X]]
167
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
168
+ ; CHECK: loop:
169
+ ; CHECK-NEXT: call void @maythrow()
170
+ ; CHECK-NEXT: call void @use(i16 [[DIV]])
171
+ ; CHECK-NEXT: br label [[LOOP]]
172
+ ;
173
+ entry:
174
+ %x = or i16 %xx , 1
175
+ br label %loop
176
+ loop:
177
+ call void @maythrow ()
178
+ %div = udiv i16 %n , %x
179
+ call void @use (i16 %div )
180
+ br label %loop
181
+ }
182
+
183
+ define void @urem_not_ok_maybe_poison (i16 %n , i16 %xx ) {
184
+ ; CHECK-LABEL: @urem_not_ok_maybe_poison(
185
+ ; CHECK-NEXT: entry:
186
+ ; CHECK-NEXT: [[X:%.*]] = or i16 [[XX:%.*]], 1
120
187
; CHECK-NEXT: br label [[LOOP:%.*]]
121
188
; CHECK: loop:
122
189
; CHECK-NEXT: call void @maythrow()
0 commit comments