11; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
22; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
33; RUN: | FileCheck %s
4+ ; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa -da-enable-dependence-test=strong-siv 2>&1 \
5+ ; RUN: | FileCheck %s --check-prefix=CHECK-STRONG-SIV
46
57target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
68target triple = "x86_64-apple-macosx10.6.0"
@@ -25,6 +27,20 @@ define void @strong0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
2527; CHECK-NEXT: Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
2628; CHECK-NEXT: da analyze - none!
2729;
30+ ; CHECK-STRONG-SIV-LABEL: 'strong0'
31+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %arrayidx, align 4
32+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
33+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: %2 = load i32, ptr %arrayidx3, align 4
34+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [2]!
35+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
36+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
37+ ; CHECK-STRONG-SIV-NEXT: Src: %2 = load i32, ptr %arrayidx3, align 4 --> Dst: %2 = load i32, ptr %arrayidx3, align 4
38+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
39+ ; CHECK-STRONG-SIV-NEXT: Src: %2 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
40+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
41+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
42+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
43+ ;
2844entry:
2945 %cmp1 = icmp sgt i64 %n , 0
3046 br i1 %cmp1 , label %for.body.preheader , label %for.end
@@ -74,6 +90,20 @@ define void @strong1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
7490; CHECK-NEXT: Src: store i32 %1, ptr %B.addr.02, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4
7591; CHECK-NEXT: da analyze - none!
7692;
93+ ; CHECK-STRONG-SIV-LABEL: 'strong1'
94+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: store i32 %conv2, ptr %arrayidx, align 4
95+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
96+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: %1 = load i32, ptr %arrayidx3, align 4
97+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [2]!
98+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4
99+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
100+ ; CHECK-STRONG-SIV-NEXT: Src: %1 = load i32, ptr %arrayidx3, align 4 --> Dst: %1 = load i32, ptr %arrayidx3, align 4
101+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
102+ ; CHECK-STRONG-SIV-NEXT: Src: %1 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4
103+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
104+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %B.addr.02, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4
105+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
106+ ;
77107entry:
78108 %cmp1 = icmp sgt i32 %n , 0
79109 br i1 %cmp1 , label %for.body.preheader , label %for.end
@@ -124,6 +154,20 @@ define void @strong2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
124154; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
125155; CHECK-NEXT: da analyze - none!
126156;
157+ ; CHECK-STRONG-SIV-LABEL: 'strong2'
158+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
159+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
160+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
161+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [2]!
162+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
163+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
164+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
165+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
166+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
167+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
168+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
169+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
170+ ;
127171entry:
128172 %cmp1 = icmp eq i64 %n , 0
129173 br i1 %cmp1 , label %for.end , label %for.body.preheader
@@ -173,6 +217,20 @@ define void @strong3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {
173217; CHECK-NEXT: Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
174218; CHECK-NEXT: da analyze - none!
175219;
220+ ; CHECK-STRONG-SIV-LABEL: 'strong3'
221+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %arrayidx, align 4
222+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
223+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: %2 = load i32, ptr %arrayidx2, align 4
224+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [2]!
225+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
226+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
227+ ; CHECK-STRONG-SIV-NEXT: Src: %2 = load i32, ptr %arrayidx2, align 4 --> Dst: %2 = load i32, ptr %arrayidx2, align 4
228+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
229+ ; CHECK-STRONG-SIV-NEXT: Src: %2 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
230+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
231+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4
232+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
233+ ;
176234entry:
177235 %cmp1 = icmp sgt i32 %n , 0
178236 br i1 %cmp1 , label %for.body.preheader , label %for.end
@@ -223,6 +281,20 @@ define void @strong4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
223281; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
224282; CHECK-NEXT: da analyze - none!
225283;
284+ ; CHECK-STRONG-SIV-LABEL: 'strong4'
285+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
286+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
287+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
288+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
289+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
290+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
291+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
292+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
293+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
294+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
295+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
296+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
297+ ;
226298entry:
227299 br label %for.body
228300
@@ -265,6 +337,20 @@ define void @strong5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
265337; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
266338; CHECK-NEXT: da analyze - none!
267339;
340+ ; CHECK-STRONG-SIV-LABEL: 'strong5'
341+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
342+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
343+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
344+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [19]!
345+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
346+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
347+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
348+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
349+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
350+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
351+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
352+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
353+ ;
268354entry:
269355 br label %for.body
270356
@@ -307,6 +393,20 @@ define void @strong6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
307393; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
308394; CHECK-NEXT: da analyze - none!
309395;
396+ ; CHECK-STRONG-SIV-LABEL: 'strong6'
397+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
398+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
399+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
400+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [3]!
401+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
402+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
403+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
404+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
405+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
406+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
407+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
408+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
409+ ;
310410entry:
311411 br label %for.body
312412
@@ -351,6 +451,20 @@ define void @strong7(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
351451; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
352452; CHECK-NEXT: da analyze - none!
353453;
454+ ; CHECK-STRONG-SIV-LABEL: 'strong7'
455+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
456+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
457+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
458+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
459+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
460+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
461+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
462+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
463+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
464+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
465+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
466+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
467+ ;
354468entry:
355469 br label %for.body
356470
@@ -395,6 +509,20 @@ define void @strong8(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
395509; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
396510; CHECK-NEXT: da analyze - none!
397511;
512+ ; CHECK-STRONG-SIV-LABEL: 'strong8'
513+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
514+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
515+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
516+ ; CHECK-STRONG-SIV-NEXT: da analyze - flow [*|<]!
517+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
518+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
519+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4
520+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
521+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
522+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
523+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
524+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
525+ ;
398526entry:
399527 br label %for.body
400528
@@ -437,6 +565,20 @@ define void @strong9(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
437565; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
438566; CHECK-NEXT: da analyze - none!
439567;
568+ ; CHECK-STRONG-SIV-LABEL: 'strong9'
569+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
570+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
571+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
572+ ; CHECK-STRONG-SIV-NEXT: da analyze - flow [*|<]!
573+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
574+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
575+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4
576+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
577+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
578+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
579+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4
580+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
581+ ;
440582entry:
441583 %cmp1 = icmp eq i64 %n , 0
442584 br i1 %cmp1 , label %for.end , label %for.body.preheader
@@ -488,6 +630,20 @@ define void @strong10(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {
488630; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
489631; CHECK-NEXT: da analyze - none!
490632;
633+ ; CHECK-STRONG-SIV-LABEL: 'strong10'
634+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4
635+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
636+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4
637+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent flow [0|<]!
638+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
639+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
640+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4
641+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
642+ ; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
643+ ; CHECK-STRONG-SIV-NEXT: da analyze - confused!
644+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4
645+ ; CHECK-STRONG-SIV-NEXT: da analyze - none!
646+ ;
491647entry:
492648 br label %for.body
493649
@@ -512,3 +668,53 @@ for.body: ; preds = %entry, %for.body
512668for.end: ; preds = %for.body
513669 ret void
514670}
671+
672+ ;; for (long unsigned i = 0; i < 9223372036854775806; i++) {
673+ ;; for (long unsigned j = 0; j < 2147483640; j++) {
674+ ;; A[i] = 0;
675+ ;; A[j] = 0;
676+ ;; }
677+ ;; }
678+
679+ define dso_local void @strong11 (ptr %A ) local_unnamed_addr #0 {
680+ ; CHECK-LABEL: 'strong11'
681+ ; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4
682+ ; CHECK-NEXT: da analyze - none!
683+ ; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx4, align 4
684+ ; CHECK-NEXT: da analyze - none!
685+ ; CHECK-NEXT: Src: store i32 0, ptr %arrayidx4, align 4 --> Dst: store i32 0, ptr %arrayidx4, align 4
686+ ; CHECK-NEXT: da analyze - consistent output [S 0]!
687+ ;
688+ ; CHECK-STRONG-SIV-LABEL: 'strong11'
689+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4
690+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [0 S]!
691+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx4, align 4
692+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [* *|<]!
693+ ; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx4, align 4 --> Dst: store i32 0, ptr %arrayidx4, align 4
694+ ; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [S 0]!
695+ ;
696+ entry:
697+ br label %for.cond1.preheader
698+
699+ for.cond1.preheader: ; preds = %entry, %for.inc5
700+ %i.014 = phi i64 [ 0 , %entry ], [ %inc6 , %for.inc5 ]
701+ %arrayidx = getelementptr inbounds nuw i32 , ptr %A , i64 %i.014
702+ br label %for.body3
703+
704+ for.body3: ; preds = %for.cond1.preheader, %for.body3
705+ %j.013 = phi i64 [ 0 , %for.cond1.preheader ], [ %inc , %for.body3 ]
706+ store i32 0 , ptr %arrayidx , align 4
707+ %arrayidx4 = getelementptr inbounds nuw i32 , ptr %A , i64 %j.013
708+ store i32 0 , ptr %arrayidx4 , align 4
709+ %inc = add nuw nsw i64 %j.013 , 1
710+ %exitcond.not = icmp eq i64 %inc , 2147483640
711+ br i1 %exitcond.not , label %for.inc5 , label %for.body3
712+
713+ for.inc5: ; preds = %for.body3
714+ %inc6 = add nuw nsw i64 %i.014 , 1
715+ %exitcond15.not = icmp eq i64 %inc6 , 9223372036854775806
716+ br i1 %exitcond15.not , label %for.end7 , label %for.cond1.preheader
717+
718+ for.end7: ; preds = %for.inc5
719+ ret void
720+ }
0 commit comments