@@ -784,3 +784,38 @@ loop:
784784exit:
785785 ret void
786786}
787+
788+ define void @stores_to_invariant_address (i32 %offset , ptr noalias %dst.1 , ptr %dst.2 ) {
789+ ; CHECK-LABEL: 'stores_to_invariant_address'
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