1 /* PR tree-optimization/97997 */
2 /* { dg-do compile { target { ilp32 || lp64 } } } */
3 /* { dg-options "-O2 -fdump-tree-optimized" } */
4 /* { dg-final { scan-tree-dump-times "return x_\[0-9]*\\\(D\\\);" 6 "optimized" } } */
5 /* { dg-final { scan-tree-dump-not " / " "optimized" } } */
6 /* { dg-final { scan-tree-dump-not " \\* " "optimized" } } */
7 
8 unsigned short
f1(unsigned short x)9 f1 (unsigned short x)
10 {
11   return x * 10 / 10;
12 }
13 
14 unsigned short
f2(unsigned short x)15 f2 (unsigned short x)
16 {
17   int a = x;
18   int b = 10;
19   int c = 10;
20   return a * b / c;
21 }
22 
23 unsigned short
f3(unsigned short x)24 f3 (unsigned short x)
25 {
26   return x * 10U / 10;
27 }
28 
29 unsigned short
f4(unsigned short x)30 f4 (unsigned short x)
31 {
32   unsigned a = x;
33   unsigned b = 10;
34   unsigned c = 10;
35   return a * b / c;
36 }
37 
38 unsigned short
f5(unsigned short x,unsigned short y)39 f5 (unsigned short x, unsigned short y)
40 {
41   return (unsigned) x * y / y;
42 }
43 
44 unsigned int
f6(unsigned int x,unsigned int y)45 f6 (unsigned int x, unsigned int y)
46 {
47   if (x >= 30000)
48     __builtin_unreachable ();
49   if (y >= ~0U / 30000)
50     __builtin_unreachable ();
51   return x * y / y;
52 }
53