1 ; RUN: opt < %s -reassociate -S | FileCheck %s
3 ; Tests involving repeated operations on the same value.
5 define i8 @nilpotent(i8 %x) {
6 ; CHECK-LABEL: @nilpotent(
12 define i2 @idempotent(i2 %x) {
13 ; CHECK-LABEL: @idempotent(
15 %tmp2 = and i2 %tmp1, %x
16 %tmp3 = and i2 %tmp2, %x
21 define i2 @add(i2 %x) {
24 %tmp2 = add i2 %tmp1, %x
25 %tmp3 = add i2 %tmp2, %x
30 define i2 @cst_add() {
31 ; CHECK-LABEL: @cst_add(
33 %tmp2 = add i2 %tmp1, 1
38 define i8 @cst_mul() {
39 ; CHECK-LABEL: @cst_mul(
41 %tmp2 = mul i8 %tmp1, 3
42 %tmp3 = mul i8 %tmp2, 3
43 %tmp4 = mul i8 %tmp3, 3
48 define i3 @foo3x5(i3 %x) {
49 ; Can be done with two multiplies.
50 ; CHECK-LABEL: @foo3x5(
55 %tmp2 = mul i3 %tmp1, %x
56 %tmp3 = mul i3 %tmp2, %x
57 %tmp4 = mul i3 %tmp3, %x
61 define i3 @foo3x6(i3 %x) {
62 ; Can be done with two multiplies.
63 ; CHECK-LABEL: @foo3x6(
68 %tmp2 = mul i3 %tmp1, %x
69 %tmp3 = mul i3 %tmp2, %x
70 %tmp4 = mul i3 %tmp3, %x
71 %tmp5 = mul i3 %tmp4, %x
75 define i3 @foo3x7(i3 %x) {
76 ; Can be done with two multiplies.
77 ; CHECK-LABEL: @foo3x7(
82 %tmp2 = mul i3 %tmp1, %x
83 %tmp3 = mul i3 %tmp2, %x
84 %tmp4 = mul i3 %tmp3, %x
85 %tmp5 = mul i3 %tmp4, %x
86 %tmp6 = mul i3 %tmp5, %x
90 define i4 @foo4x8(i4 %x) {
91 ; Can be done with two multiplies.
92 ; CHECK-LABEL: @foo4x8(
97 %tmp2 = mul i4 %tmp1, %x
98 %tmp3 = mul i4 %tmp2, %x
99 %tmp4 = mul i4 %tmp3, %x
100 %tmp5 = mul i4 %tmp4, %x
101 %tmp6 = mul i4 %tmp5, %x
102 %tmp7 = mul i4 %tmp6, %x
106 define i4 @foo4x9(i4 %x) {
107 ; Can be done with three multiplies.
108 ; CHECK-LABEL: @foo4x9(
113 %tmp1 = mul i4 %x, %x
114 %tmp2 = mul i4 %tmp1, %x
115 %tmp3 = mul i4 %tmp2, %x
116 %tmp4 = mul i4 %tmp3, %x
117 %tmp5 = mul i4 %tmp4, %x
118 %tmp6 = mul i4 %tmp5, %x
119 %tmp7 = mul i4 %tmp6, %x
120 %tmp8 = mul i4 %tmp7, %x
124 define i4 @foo4x10(i4 %x) {
125 ; Can be done with three multiplies.
126 ; CHECK-LABEL: @foo4x10(
131 %tmp1 = mul i4 %x, %x
132 %tmp2 = mul i4 %tmp1, %x
133 %tmp3 = mul i4 %tmp2, %x
134 %tmp4 = mul i4 %tmp3, %x
135 %tmp5 = mul i4 %tmp4, %x
136 %tmp6 = mul i4 %tmp5, %x
137 %tmp7 = mul i4 %tmp6, %x
138 %tmp8 = mul i4 %tmp7, %x
139 %tmp9 = mul i4 %tmp8, %x
143 define i4 @foo4x11(i4 %x) {
144 ; Can be done with four multiplies.
145 ; CHECK-LABEL: @foo4x11(
151 %tmp1 = mul i4 %x, %x
152 %tmp2 = mul i4 %tmp1, %x
153 %tmp3 = mul i4 %tmp2, %x
154 %tmp4 = mul i4 %tmp3, %x
155 %tmp5 = mul i4 %tmp4, %x
156 %tmp6 = mul i4 %tmp5, %x
157 %tmp7 = mul i4 %tmp6, %x
158 %tmp8 = mul i4 %tmp7, %x
159 %tmp9 = mul i4 %tmp8, %x
160 %tmp10 = mul i4 %tmp9, %x
164 define i4 @foo4x12(i4 %x) {
165 ; Can be done with two multiplies.
166 ; CHECK-LABEL: @foo4x12(
170 %tmp1 = mul i4 %x, %x
171 %tmp2 = mul i4 %tmp1, %x
172 %tmp3 = mul i4 %tmp2, %x
173 %tmp4 = mul i4 %tmp3, %x
174 %tmp5 = mul i4 %tmp4, %x
175 %tmp6 = mul i4 %tmp5, %x
176 %tmp7 = mul i4 %tmp6, %x
177 %tmp8 = mul i4 %tmp7, %x
178 %tmp9 = mul i4 %tmp8, %x
179 %tmp10 = mul i4 %tmp9, %x
180 %tmp11 = mul i4 %tmp10, %x
184 define i4 @foo4x13(i4 %x) {
185 ; Can be done with three multiplies.
186 ; CHECK-LABEL: @foo4x13(
191 %tmp1 = mul i4 %x, %x
192 %tmp2 = mul i4 %tmp1, %x
193 %tmp3 = mul i4 %tmp2, %x
194 %tmp4 = mul i4 %tmp3, %x
195 %tmp5 = mul i4 %tmp4, %x
196 %tmp6 = mul i4 %tmp5, %x
197 %tmp7 = mul i4 %tmp6, %x
198 %tmp8 = mul i4 %tmp7, %x
199 %tmp9 = mul i4 %tmp8, %x
200 %tmp10 = mul i4 %tmp9, %x
201 %tmp11 = mul i4 %tmp10, %x
202 %tmp12 = mul i4 %tmp11, %x
206 define i4 @foo4x14(i4 %x) {
207 ; Can be done with three multiplies.
208 ; CHECK-LABEL: @foo4x14(
213 %tmp1 = mul i4 %x, %x
214 %tmp2 = mul i4 %tmp1, %x
215 %tmp3 = mul i4 %tmp2, %x
216 %tmp4 = mul i4 %tmp3, %x
217 %tmp5 = mul i4 %tmp4, %x
218 %tmp6 = mul i4 %tmp5, %x
219 %tmp7 = mul i4 %tmp6, %x
220 %tmp8 = mul i4 %tmp7, %x
221 %tmp9 = mul i4 %tmp8, %x
222 %tmp10 = mul i4 %tmp9, %x
223 %tmp11 = mul i4 %tmp10, %x
224 %tmp12 = mul i4 %tmp11, %x
225 %tmp13 = mul i4 %tmp12, %x
229 define i4 @foo4x15(i4 %x) {
230 ; Can be done with four multiplies.
231 ; CHECK-LABEL: @foo4x15(
237 %tmp1 = mul i4 %x, %x
238 %tmp2 = mul i4 %tmp1, %x
239 %tmp3 = mul i4 %tmp2, %x
240 %tmp4 = mul i4 %tmp3, %x
241 %tmp5 = mul i4 %tmp4, %x
242 %tmp6 = mul i4 %tmp5, %x
243 %tmp7 = mul i4 %tmp6, %x
244 %tmp8 = mul i4 %tmp7, %x
245 %tmp9 = mul i4 %tmp8, %x
246 %tmp10 = mul i4 %tmp9, %x
247 %tmp11 = mul i4 %tmp10, %x
248 %tmp12 = mul i4 %tmp11, %x
249 %tmp13 = mul i4 %tmp12, %x
250 %tmp14 = mul i4 %tmp13, %x