1 /* { dg-do compile { target int128 } } */
2 /* { dg-options "-O2 -Wno-long-long -fdump-tree-optimized" } */
3
4 typedef unsigned int __attribute ((mode(TI))) uti_t;
5 typedef int __attribute ((mode(TI))) ti_t;
6
7 long long stest1(long long x, long long y)
8 {
9 return ((ti_t)x * (ti_t)y) >> 64;
10 }
11
12 long long stest2(long long x)
13 {
14 return ((ti_t)x * 19065) >> 64;
15 }
16
17 long long stest3(long long x, long long y)
18 {
19 return (uti_t)((ti_t)x * (ti_t)y) >> 64;
20 }
21
22 long long stest4(long long x)
23 {
24 return (uti_t)((ti_t)x * 19065) >> 64;
25 }
26
27 ti_t stest5(long long x, long long y)
28 {
29 return ((ti_t)x * (ti_t)y) >> 64;
30 }
31
32 ti_t stest6(long long x)
33 {
34 return ((ti_t)x * 19065) >> 64;
35 }
36
37 uti_t stest7(long long x, long long y)
38 {
39 return (uti_t)((ti_t)x * (ti_t)y) >>64;
40 }
41
42 uti_t stest8(long long x)
43 {
44 return (uti_t)((ti_t)x * 19065) >> 64;
45 }
46
47 long long stest9(long long x, long long y)
48 {
49 return ((ti_t)x * (ti_t)y) >> 72;
50 }
51
52 long long stest10(long long x)
53 {
54 return ((ti_t)x * 19065) >> 72;
55 }
56
57 long long stest11(long long x, long long y)
58 {
59 return (uti_t)((ti_t)x * (ti_t)y) >> 72;
60 }
61
62 long long stest12(long long x)
63 {
64 return (uti_t)((ti_t)x * 19065) >> 72;
65 }
66
67 ti_t stest13(long long x, long long y)
68 {
69 return ((ti_t)x * (ti_t)y) >> 72;
70 }
71
72 ti_t stest14(long long x)
73 {
74 return ((ti_t)x * 19065) >> 72;
75 }
76
77 uti_t stest15(long long x, long long y)
78 {
79 return (uti_t)((ti_t)x * (ti_t)y) >> 72;
80 }
81
82 uti_t stest16(long long x)
83 {
84 return (uti_t)((ti_t)x * 19065) >> 72;
85 }
86
87 unsigned long long utest1(unsigned long long x, unsigned long long y)
88 {
89 return ((uti_t)x * (uti_t)y) >> 64;
90 }
91
92 unsigned long long utest2(unsigned long long x)
93 {
94 return ((uti_t)x * 19065) >> 64;
95 }
96
97 unsigned long long utest3(unsigned long long x, unsigned long long y)
98 {
99 return (ti_t)((uti_t)x * (uti_t)y) >> 64;
100 }
101
102 unsigned long long utest4(unsigned long long x)
103 {
104 return (ti_t)((uti_t)x * 19065) >> 64;
105 }
106
107 uti_t utest5(unsigned long long x, unsigned long long y)
108 {
109 return ((uti_t)x * (uti_t)y) >> 64;
110 }
111
112 uti_t utest6(unsigned long long x)
113 {
114 return ((uti_t)x * 19065) >> 64;
115 }
116
117 ti_t utest7(unsigned long long x, unsigned long long y)
118 {
119 return (ti_t)((uti_t)x * (uti_t)y) >>64;
120 }
121
122 ti_t utest8(long long x)
123 {
124 return (uti_t)((ti_t)x * 19065) >> 64;
125 }
126
127 unsigned long long utest9(unsigned long long x, unsigned long long y)
128 {
129 return ((uti_t)x * (uti_t)y) >> 72;
130 }
131
132 unsigned long long utest10(unsigned long long x)
133 {
134 return ((uti_t)x * 19065) >> 72;
135 }
136
137 unsigned long long utest11(unsigned long long x, unsigned long long y)
138 {
139 return (ti_t)((uti_t)x * (uti_t)y) >> 72;
140 }
141
142 unsigned long long utest12(unsigned long long x)
143 {
144 return (ti_t)((uti_t)x * 19065) >> 72;
145 }
146
147 uti_t utest13(unsigned long long x, unsigned long long y)
148 {
149 return ((uti_t)x * (uti_t)y) >> 72;
150 }
151
152 uti_t utest14(unsigned long long x)
153 {
154 return ((uti_t)x * 19065) >> 72;
155 }
156
157 ti_t utest15(unsigned long long x, unsigned long long y)
158 {
159 return (ti_t)((uti_t)x * (uti_t)y) >> 72;
160 }
161
162 ti_t utest16(unsigned long long x)
163 {
164 return (ti_t)((uti_t)x * 19065) >> 72;
165 }
166
167 /* { dg-final { scan-tree-dump-times " h\\* " 32 "optimized" } } */