11; 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
33
44declare void @llvm.assume (i1 noundef)
55
@@ -135,6 +135,17 @@ define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(ptr %p)
135135 ret ptr %p2
136136}
137137
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+
138149define ptr @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call (ptr %p ) {
139150; CHECK-LABEL: @dont_fold_assume_align_pow2_of_loaded_pointer_into_align_metadata_due_to_call(
140151; 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
175186define ptr @redundant_assume_align_1 (ptr %p ) {
176187; CHECK-LABEL: @redundant_assume_align_1(
177188; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
178- ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 1) ]
179189; CHECK-NEXT: call void @foo(ptr [[P2]])
180190; CHECK-NEXT: ret ptr [[P2]]
181191;
@@ -189,7 +199,6 @@ define ptr @redundant_assume_align_1(ptr %p) {
189199define ptr @redundant_assume_align_8_via_align_metadata (ptr %p ) {
190200; CHECK-LABEL: @redundant_assume_align_8_via_align_metadata(
191201; 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) ]
193202; CHECK-NEXT: call void @foo(ptr [[P2]])
194203; CHECK-NEXT: ret ptr [[P2]]
195204;
@@ -249,7 +258,48 @@ define ptr @redundant_assume_align_8_via_asume(ptr %p) {
249258 ret ptr %p
250259}
251260
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+
252289declare 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+
253303;.
254304; CHECK: [[META0]] = !{i64 8}
255305;.
0 commit comments