Skip to content

Commit d108fa0

Browse files
committed
[LAA] Add tests with invariant accesses using vector types.
Extra tests for #92307
1 parent 04ae6e6 commit d108fa0

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

llvm/test/Analysis/LoopAccessAnalysis/invariant-dependence-before.ll

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,3 +754,73 @@ loop:
754754
exit:
755755
ret void
756756
}
757+
758+
define void @test_invar_vector_dependence_before_positive_strided_access_1(ptr %a) {
759+
; CHECK-LABEL: 'test_invar_vector_dependence_before_positive_strided_access_1'
760+
; CHECK-NEXT: loop:
761+
; CHECK-NEXT: Report: unsafe dependent memory operations in loop. Use #pragma clang loop distribute(enable) to allow loop distribution to attempt to isolate the offending operations into a separate loop
762+
; CHECK-NEXT: Unknown data dependence.
763+
; CHECK-NEXT: Dependences:
764+
; CHECK-NEXT: Unknown:
765+
; CHECK-NEXT: %l = load <4 x i8>, ptr %a, align 4 ->
766+
; CHECK-NEXT: store i32 0, ptr %gep, align 4
767+
; CHECK-EMPTY:
768+
; CHECK-NEXT: Run-time memory checks:
769+
; CHECK-NEXT: Grouped accesses:
770+
; CHECK-EMPTY:
771+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
772+
; CHECK-NEXT: SCEV assumptions:
773+
; CHECK-EMPTY:
774+
; CHECK-NEXT: Expressions re-written:
775+
;
776+
entry:
777+
%gep.off = getelementptr i8, ptr %a, i32 4
778+
br label %loop
779+
780+
loop:
781+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
782+
%gep = getelementptr i32, ptr %gep.off, i32 %iv
783+
%l = load <4 x i8>, ptr %a
784+
store i32 0, ptr %gep
785+
%iv.next = add i32 %iv, 1
786+
%ec = icmp eq i32 %iv.next, 100
787+
br i1 %ec, label %exit, label %loop
788+
789+
exit:
790+
ret void
791+
}
792+
793+
define void @test_invar_scalable_dependence_before_positive_strided_access_1(ptr %a) {
794+
; CHECK-LABEL: 'test_invar_scalable_dependence_before_positive_strided_access_1'
795+
; CHECK-NEXT: loop:
796+
; CHECK-NEXT: Report: unsafe dependent memory operations in loop. Use #pragma clang loop distribute(enable) to allow loop distribution to attempt to isolate the offending operations into a separate loop
797+
; CHECK-NEXT: Unknown data dependence.
798+
; CHECK-NEXT: Dependences:
799+
; CHECK-NEXT: Unknown:
800+
; CHECK-NEXT: %l = load <vscale x 4 x i8>, ptr %a, align 4 ->
801+
; CHECK-NEXT: store i32 0, ptr %gep, align 4
802+
; CHECK-EMPTY:
803+
; CHECK-NEXT: Run-time memory checks:
804+
; CHECK-NEXT: Grouped accesses:
805+
; CHECK-EMPTY:
806+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
807+
; CHECK-NEXT: SCEV assumptions:
808+
; CHECK-EMPTY:
809+
; CHECK-NEXT: Expressions re-written:
810+
;
811+
entry:
812+
%gep.off = getelementptr i8, ptr %a, i32 4
813+
br label %loop
814+
815+
loop:
816+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
817+
%gep = getelementptr i32, ptr %gep.off, i32 %iv
818+
%l = load <vscale x 4 x i8>, ptr %a
819+
store i32 0, ptr %gep
820+
%iv.next = add i32 %iv, 1
821+
%ec = icmp eq i32 %iv.next, 100
822+
br i1 %ec, label %exit, label %loop
823+
824+
exit:
825+
ret void
826+
}

0 commit comments

Comments
 (0)