Skip to content

Commit 8fe7860

Browse files
authored
LAA/test: cover invariant stores with unit stride (#124586)
LoopAccessAnalysis is missing coverage of the special-case of invariant stores with unit stride. It was previously determined that stride-versioning for stores is not profitable, but test coverage is missing. Fix this.
1 parent d69b785 commit 8fe7860

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,3 +784,38 @@ loop:
784784
exit:
785785
ret void
786786
}
787+
788+
define void @invariant_stores_unit_stride(i32 %offset, ptr noalias %dst.1, ptr %dst.2) {
789+
; CHECK-LABEL: 'invariant_stores_unit_stride'
790+
; CHECK-NEXT: loop:
791+
; CHECK-NEXT: Memory dependences are safe
792+
; CHECK-NEXT: Dependences:
793+
; CHECK-NEXT: Run-time memory checks:
794+
; CHECK-NEXT: Grouped accesses:
795+
; CHECK-EMPTY:
796+
; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.
797+
; CHECK-NEXT: SCEV assumptions:
798+
; CHECK-EMPTY:
799+
; CHECK-NEXT: Expressions re-written:
800+
;
801+
entry:
802+
%add = add i32 %offset, 3
803+
br label %loop
804+
805+
loop:
806+
%iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]
807+
%iv.3 = phi i32 [ 0, %entry ], [ %iv.3.next, %loop ]
808+
%iv.mul = mul i32 %iv.3, %add
809+
%gep.mul = getelementptr i8, ptr %dst.1, i32 %iv.mul
810+
store i32 0, ptr %gep.mul, align 8
811+
%iv.2.mul = mul i32 %iv.2, %offset
812+
%gep = getelementptr i32, ptr %dst.2, i32 %iv.2.mul
813+
store i32 0, ptr %gep, align 8
814+
%iv.2.next = add i32 %iv.2, 1
815+
%iv.3.next = add i32 %iv.3, 1
816+
%ec = icmp eq i32 %iv.3, 200
817+
br i1 %ec, label %exit, label %loop
818+
819+
exit:
820+
ret void
821+
}

0 commit comments

Comments
 (0)