1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals smart
2
- ; RUN: opt -S -passes=instcombine,simplifycfg < %s 2>&1 | FileCheck %s
2
+ ; RUN: opt -S -passes=' instcombine<no-verify-fixpoint> ,simplifycfg' < %s 2>&1 | FileCheck %s
3
3
4
4
declare void @llvm.assume (i1 noundef)
5
5
@@ -135,6 +135,17 @@ define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(ptr %p)
135
135
ret ptr %p2
136
136
}
137
137
138
+ define ptr @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata (ptr %p ) {
139
+ ; CHECK-LABEL: @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(
140
+ ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
141
+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 8) ]
142
+ ; CHECK-NEXT: ret ptr [[P2]]
143
+ ;
144
+ %p2 = load ptr , ptr %p
145
+ call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i32 8 ) ]
146
+ ret ptr %p2
147
+ }
148
+
138
149
define ptr @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call (ptr %p ) {
139
150
; CHECK-LABEL: @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call(
140
151
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
@@ -175,7 +186,6 @@ define ptr @dont_fold_assume_align_zero_of_loaded_pointer_into_align_metadata(pt
175
186
define ptr @redundant_assume_align_1 (ptr %p ) {
176
187
; CHECK-LABEL: @redundant_assume_align_1(
177
188
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
178
- ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 1) ]
179
189
; CHECK-NEXT: call void @foo(ptr [[P2]])
180
190
; CHECK-NEXT: ret ptr [[P2]]
181
191
;
@@ -189,7 +199,6 @@ define ptr @redundant_assume_align_1(ptr %p) {
189
199
define ptr @redundant_assume_align_8_via_align_metadata (ptr %p ) {
190
200
; CHECK-LABEL: @redundant_assume_align_8_via_align_metadata(
191
201
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0:![0-9]+]]
192
- ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 8) ]
193
202
; CHECK-NEXT: call void @foo(ptr [[P2]])
194
203
; CHECK-NEXT: ret ptr [[P2]]
195
204
;
@@ -249,7 +258,48 @@ define ptr @redundant_assume_align_8_via_asume(ptr %p) {
249
258
ret ptr %p
250
259
}
251
260
261
+ define void @redundant_arg_passed_to_intrinsic (ptr %dst , ptr %src ) {
262
+ ; CHECK-LABEL: @redundant_arg_passed_to_intrinsic(
263
+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[DST:%.*]], i32 8) ]
264
+ ; CHECK-NEXT: call void @bar()
265
+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[SRC:%.*]], i32 8) ]
266
+ ; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[DST]], ptr noundef nonnull align 8 dereferenceable(16) [[SRC]], i64 16, i1 false)
267
+ ; CHECK-NEXT: ret void
268
+ ;
269
+ call void @llvm.assume (i1 true ) [ "align" (ptr %dst , i32 8 ) ]
270
+ call void @bar ()
271
+ call void @llvm.assume (i1 true ) [ "align" (ptr %src , i32 8 ) ]
272
+ call void @llvm.memmove.p0.p0.i64 (ptr align 8 %dst , ptr %src , i64 16 , i1 false )
273
+ ret void
274
+ }
275
+
276
+ define void @test_store (ptr %ptr ) {
277
+ ; CHECK-LABEL: @test_store(
278
+ ; CHECK-NEXT: entry:
279
+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 2) ]
280
+ ; CHECK-NEXT: store i16 0, ptr [[PTR]], align 1
281
+ ; CHECK-NEXT: ret void
282
+ ;
283
+ entry:
284
+ call void @llvm.assume (i1 true ) [ "align" (ptr %ptr , i64 2 ) ]
285
+ store i16 0 , ptr %ptr , align 1
286
+ ret void
287
+ }
288
+
252
289
declare void @foo (ptr )
290
+ declare void @bar ()
291
+
292
+ ; !align must have a constant integer alignment.
293
+ define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata (ptr %p , i64 %align ) {
294
+ ; CHECK-LABEL: @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(
295
+ ; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
296
+ ; CHECK-NEXT: ret ptr [[P2]]
297
+ ;
298
+ %p2 = load ptr , ptr %p
299
+ call void @llvm.assume (i1 true ) [ "align" (ptr %p2 , i64 %align ) ]
300
+ ret ptr %p2
301
+ }
302
+
253
303
;.
254
304
; CHECK: [[META0]] = !{i64 8}
255
305
;.
0 commit comments