PR middle-end/77357 - strlen of constant strings not folded
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / vrp13.c
blob33941a35d2c1e57e4940a002b25a640e91b52af3
1 /* { dg-do run } */
2 /* { dg-options -O2 } */
4 extern void abort (void);
5 extern void link_error (void);
7 int
8 foo_div (int i, int j)
10 int k;
12 /* [-INF, -1] / [1, +INF] should not give [-1, -1]. */
13 if (i <= -1)
14 if (j >= 1)
16 k = i / j;
17 if (k == -1)
18 abort ();
20 return k;
23 /* [-20, -10] / [2, 10] should give [-10, -1]. */
24 if (i >= -20)
25 if (i <= -10)
26 if (j >= 2)
27 if (j <= 10)
29 k = i / j;
30 if (k < -10)
31 link_error ();
32 if (k > -1)
33 link_error ();
35 return k;
38 /* [-20, -10] / [-10, -2] should give [1, 10]. */
39 if (i >= -20)
40 if (i <= -10)
41 if (j >= -10)
42 if (j <= -2)
44 k = i / j;
45 if (k < 1)
46 link_error ();
47 if (k > 10)
48 link_error ();
50 return k;
53 /* [-20, 10] / [2, 10] should give [-10, 5]. */
54 if (i >= -20)
55 if (i <= 10)
56 if (j >= 2)
57 if (j <= 10)
59 k = i / j;
60 if (k < -10)
61 link_error ();
62 if (k > 5)
63 link_error ();
65 return k;
68 /* [-20, 10] / [-10, -2] should give [-5, 10]. */
69 if (i >= -20)
70 if (i <= 10)
71 if (j >= -10)
72 if (j <= -2)
74 k = i / j;
75 if (k < -5)
76 link_error ();
77 if (k > 10)
78 link_error ();
80 return k;
83 /* [10, 20] / [2, 10] should give [1, 10]. */
84 if (i >= 10)
85 if (i <= 20)
86 if (j >= 2)
87 if (j <= 10)
89 k = i / j;
90 if (k < 1)
91 link_error ();
92 if (k > 10)
93 link_error ();
95 return k;
98 /* [10, 20] / [-10, -2] should give [-10, -1]. */
99 if (i >= 10)
100 if (i <= 20)
101 if (j >= -10)
102 if (j <= -2)
104 k = i / j;
105 if (k > -1)
106 link_error ();
107 if (k < -10)
108 link_error ();
110 return k;
113 abort ();
117 foo_mult (int i, int j)
119 int k;
121 /* [-20, -10] * [2, 10] should give [-200, -20]. */
122 if (i >= -20)
123 if (i <= -10)
124 if (j >= 2)
125 if (j <= 10)
127 k = i * j;
128 if (k < -200)
129 link_error ();
130 if (k > -20)
131 link_error ();
133 return k;
136 /* [-20, -10] * [-10, -2] should give [20, 200]. */
137 if (i >= -20)
138 if (i <= -10)
139 if (j >= -10)
140 if (j <= -2)
142 k = i * j;
143 if (k < 20)
144 link_error ();
145 if (k > 200)
146 link_error ();
148 return k;
151 /* [-20, 10] * [2, 10] should give [-200, 100]. */
152 if (i >= -20)
153 if (i <= 10)
154 if (j >= 2)
155 if (j <= 10)
157 k = i * j;
158 if (k < -200)
159 link_error ();
160 if (k > 100)
161 link_error ();
163 return k;
166 /* [-20, 10] * [-10, -2] should give [-100, 200]. */
167 if (i >= -20)
168 if (i <= 10)
169 if (j >= -10)
170 if (j <= -2)
172 k = i * j;
173 if (k < -100)
174 link_error ();
175 if (k > 200)
176 link_error ();
178 return k;
181 /* [10, 20] * [2, 10] should give [20, 200]. */
182 if (i >= 10)
183 if (i <= 20)
184 if (j >= 2)
185 if (j <= 10)
187 k = i * j;
188 if (k < 20)
189 link_error ();
190 if (k > 200)
191 link_error ();
193 return k;
196 /* [10, 20] * [-10, -2] should give [-200, -20]. */
197 if (i >= 10)
198 if (i <= 20)
199 if (j >= -10)
200 if (j <= -2)
202 k = i * j;
203 if (k < -200)
204 link_error ();
205 if (k > -20)
206 link_error ();
208 return k;
211 abort ();
215 main()
217 if (foo_div (-10, 5) != -2)
218 abort ();
220 if (foo_div (-16, 4) != -4)
221 abort ();
223 if (foo_div (-15, -5) != 3)
224 abort ();
226 if (foo_div (8, 2) != 4)
227 abort ();
229 if (foo_div (10, -2) != -5)
230 abort ();
232 if (foo_div (20, 5) != 4)
233 abort ();
235 if (foo_div (15, -3) != -5)
236 abort ();
238 if (foo_mult (-10, 5) != -50)
239 abort ();
241 if (foo_mult (-16, 4) != -64)
242 abort ();
244 if (foo_mult (-15, -5) != 75)
245 abort ();
247 if (foo_mult (8, 2) != 16)
248 abort ();
250 if (foo_mult (10, -2) != -20)
251 abort ();
253 if (foo_mult (20, 5) != 100)
254 abort ();
256 if (foo_mult (15, -3) != -45)
257 abort ();
259 return 0;