@@ -114,3 +114,119 @@ if.end:
114
114
ret i32 0
115
115
}
116
116
117
+ define i32 @imm_cost_too_large_cost_of_2 () {
118
+ ; CHECK-LABEL: name: imm_cost_too_large_cost_of_2
119
+ ; CHECK: bb.1.entry:
120
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
121
+ ; CHECK-NEXT: {{ $}}
122
+ ; CHECK-NEXT: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 -2228259
123
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var2
124
+ ; CHECK-NEXT: [[GV1:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var3
125
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
126
+ ; CHECK-NEXT: [[GV2:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var1
127
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s32) from @var1)
128
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
129
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:gpr(s32) = G_ICMP intpred(ne), [[LOAD]](s32), [[C2]]
130
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[ICMP]], [[C2]]
131
+ ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.4
132
+ ; CHECK-NEXT: G_BR %bb.2
133
+ ; CHECK-NEXT: {{ $}}
134
+ ; CHECK-NEXT: bb.2.if.then:
135
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
136
+ ; CHECK-NEXT: {{ $}}
137
+ ; CHECK-NEXT: [[GV3:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var2
138
+ ; CHECK-NEXT: G_STORE [[C]](s32), [[GV3]](p0) :: (store (s32) into @var2)
139
+ ; CHECK-NEXT: G_BR %bb.3
140
+ ; CHECK-NEXT: {{ $}}
141
+ ; CHECK-NEXT: bb.3.if.then2:
142
+ ; CHECK-NEXT: successors: %bb.4(0x80000000)
143
+ ; CHECK-NEXT: {{ $}}
144
+ ; CHECK-NEXT: [[GV4:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var1
145
+ ; CHECK-NEXT: G_STORE [[C]](s32), [[GV4]](p0) :: (store (s32) into @var1)
146
+ ; CHECK-NEXT: G_BR %bb.4
147
+ ; CHECK-NEXT: {{ $}}
148
+ ; CHECK-NEXT: bb.4.if.end:
149
+ ; CHECK-NEXT: [[GV5:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var3
150
+ ; CHECK-NEXT: G_STORE [[C]](s32), [[GV5]](p0) :: (store (s32) into @var3)
151
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
152
+ ; CHECK-NEXT: $w0 = COPY [[C3]](s32)
153
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
154
+ entry:
155
+ %0 = load i32 , i32* @var1 , align 4
156
+ %cst1 = bitcast i32 -2228259 to i32
157
+ %cmp = icmp eq i32 %0 , 1
158
+ br i1 %cmp , label %if.then , label %if.end
159
+
160
+ if.then:
161
+ store i32 %cst1 , i32* @var2
162
+ br label %if.then2
163
+
164
+ if.then2:
165
+ store i32 %cst1 , i32* @var1
166
+ br label %if.end
167
+
168
+ if.end:
169
+ store i32 %cst1 , i32* @var3
170
+ ret i32 0
171
+ }
172
+
173
+ define i64 @imm_cost_too_large_cost_of_4 () {
174
+ ; CHECK-LABEL: name: imm_cost_too_large_cost_of_4
175
+ ; CHECK: bb.1.entry:
176
+ ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
177
+ ; CHECK-NEXT: {{ $}}
178
+ ; CHECK-NEXT: [[C:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 -2228259
179
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var2_64
180
+ ; CHECK-NEXT: [[GV1:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var3_64
181
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 0
182
+ ; CHECK-NEXT: [[GV2:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var1_64
183
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
184
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 1
185
+ ; CHECK-NEXT: [[ICMP:%[0-9]+]]:gpr(s32) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
186
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 1
187
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[ICMP]], [[C3]]
188
+ ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.4
189
+ ; CHECK-NEXT: G_BR %bb.2
190
+ ; CHECK-NEXT: {{ $}}
191
+ ; CHECK-NEXT: bb.2.if.then:
192
+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
193
+ ; CHECK-NEXT: {{ $}}
194
+ ; CHECK-NEXT: [[GV3:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var2_64
195
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
196
+ ; CHECK-NEXT: G_BR %bb.3
197
+ ; CHECK-NEXT: {{ $}}
198
+ ; CHECK-NEXT: bb.3.if.then2:
199
+ ; CHECK-NEXT: successors: %bb.4(0x80000000)
200
+ ; CHECK-NEXT: {{ $}}
201
+ ; CHECK-NEXT: [[GV4:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var1_64
202
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
203
+ ; CHECK-NEXT: G_BR %bb.4
204
+ ; CHECK-NEXT: {{ $}}
205
+ ; CHECK-NEXT: bb.4.if.end:
206
+ ; CHECK-NEXT: [[GV5:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @var3_64
207
+ ; CHECK-NEXT: G_STORE [[C]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
208
+ ; CHECK-NEXT: [[C4:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 0
209
+ ; CHECK-NEXT: $x0 = COPY [[C4]](s64)
210
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
211
+ entry:
212
+ %0 = load i64 , i64* @var1_64 , align 4
213
+ %cst1 = bitcast i64 -2228259 to i64
214
+ %cmp = icmp eq i64 %0 , 1
215
+ br i1 %cmp , label %if.then , label %if.end
216
+
217
+ if.then:
218
+ store i64 %cst1 , i64* @var2_64
219
+ br label %if.then2
220
+
221
+ if.then2:
222
+ store i64 %cst1 , i64* @var1_64
223
+ br label %if.end
224
+
225
+ if.end:
226
+ store i64 %cst1 , i64* @var3_64
227
+ ret i64 0
228
+ }
229
+
230
+ @var1_64 = common global i64 0 , align 4
231
+ @var2_64 = common global i64 0 , align 4
232
+ @var3_64 = common global i64 0 , align 4
0 commit comments