brintos

brintos / llvm-project-archived public Read only

0
0
Text · 41.4 KiB · 120edf0 Raw
782 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=all 2>&1 \3; RUN:     | FileCheck %s --check-prefix=CHECK-ALL4; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=strong-siv 2>&1 \5; RUN:     | FileCheck %s --check-prefix=CHECK-STRONG-SIV6; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=weak-crossing-siv 2>&1 \7; RUN:     | FileCheck %s --check-prefix=CHECK-WEAK-CROSSING-SIV8; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=exact-siv 2>&1 \9; RUN:     | FileCheck %s --check-prefix=CHECK-EXACT-SIV10; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=weak-zero-siv 2>&1 \11; RUN:     | FileCheck %s --check-prefix=CHECK-WEAK-ZERO-SIV12; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=exact-rdiv 2>&1 \13; RUN:     | FileCheck %s --check-prefix=CHECK-EXACT-RDIV14; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=symbolic-rdiv 2>&1 \15; RUN:     | FileCheck %s --check-prefix=CHECK-SYMBOLIC-RDIV16; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=gcd-miv 2>&1 \17; RUN:     | FileCheck %s --check-prefix=CHECK-GCD-MIV18; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=banerjee-miv 2>&1 \19; RUN:     | FileCheck %s --check-prefix=CHECK-BANERJEE-MIV20 21; for (i = 0; i < 10; i++)22;   a[i] = 0;23define void @strong_siv(ptr %a) {24; CHECK-ALL-LABEL: 'strong_siv'25; CHECK-ALL-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 126; CHECK-ALL-NEXT:    da analyze - none!27;28; CHECK-STRONG-SIV-LABEL: 'strong_siv'29; CHECK-STRONG-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 130; CHECK-STRONG-SIV-NEXT:    da analyze - none!31;32; CHECK-WEAK-CROSSING-SIV-LABEL: 'strong_siv'33; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 134; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!35;36; CHECK-EXACT-SIV-LABEL: 'strong_siv'37; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 138; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!39;40; CHECK-WEAK-ZERO-SIV-LABEL: 'strong_siv'41; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 142; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!43;44; CHECK-EXACT-RDIV-LABEL: 'strong_siv'45; CHECK-EXACT-RDIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 146; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!47;48; CHECK-SYMBOLIC-RDIV-LABEL: 'strong_siv'49; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 150; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!51;52; CHECK-GCD-MIV-LABEL: 'strong_siv'53; CHECK-GCD-MIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 154; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!55;56; CHECK-BANERJEE-MIV-LABEL: 'strong_siv'57; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 0, ptr %gep, align 1 --> Dst: store i8 0, ptr %gep, align 158; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!59;60entry:61  br label %loop62 63loop:64  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]65  %gep = getelementptr i8, ptr %a, i64 %i66  store i8 0, ptr %gep67  %i.inc = add i64 %i, 168  %ec = icmp eq i64 %i.inc, 1069  br i1 %ec, label %exit, label %loop70 71exit:72  ret void73}74 75; for (i = 0; i < 10; i++) {76;   a[i] = 1;77;   a[10 - i] = 2;78; }79define void @weak_crossing_siv(ptr %a) {80; CHECK-ALL-LABEL: 'weak_crossing_siv'81; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 182; CHECK-ALL-NEXT:    da analyze - none!83; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 184; CHECK-ALL-NEXT:    da analyze - output [*|<]!85; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 186; CHECK-ALL-NEXT:    da analyze - none!87;88; CHECK-STRONG-SIV-LABEL: 'weak_crossing_siv'89; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 190; CHECK-STRONG-SIV-NEXT:    da analyze - none!91; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 192; CHECK-STRONG-SIV-NEXT:    da analyze - consistent output [*|<]!93; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 194; CHECK-STRONG-SIV-NEXT:    da analyze - none!95;96; CHECK-WEAK-CROSSING-SIV-LABEL: 'weak_crossing_siv'97; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 198; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!99; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1100; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [*|<]!101; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1102; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!103;104; CHECK-EXACT-SIV-LABEL: 'weak_crossing_siv'105; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1106; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!107; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1108; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*|<]!109; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1110; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!111;112; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_crossing_siv'113; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1114; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!115; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1116; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*|<]!117; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1118; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!119;120; CHECK-EXACT-RDIV-LABEL: 'weak_crossing_siv'121; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1122; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!123; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1124; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*|<]!125; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1126; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!127;128; CHECK-SYMBOLIC-RDIV-LABEL: 'weak_crossing_siv'129; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1130; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!131; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1132; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*|<]!133; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1134; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!135;136; CHECK-GCD-MIV-LABEL: 'weak_crossing_siv'137; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1138; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!139; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1140; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*|<]!141; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1142; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!143;144; CHECK-BANERJEE-MIV-LABEL: 'weak_crossing_siv'145; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1146; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!147; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1148; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*|<]!149; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1150; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!151;152entry:153  br label %loop154 155loop:156  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]157  %i.sub10 = sub i64 10, %i158  %gep.0 = getelementptr i8, ptr %a, i64 %i159  %gep.1 = getelementptr i8, ptr %a, i64 %i.sub10160  store i8 1, ptr %gep.0161  store i8 2, ptr %gep.1162  %i.inc = add i64 %i, 1163  %ec = icmp eq i64 %i.inc, 10164  br i1 %ec, label %exit, label %loop165 166exit:167  ret void168}169 170; for (i = 0; i < 10; i++) {171;   a[2 * i + 0] = 1;172;   a[2 * i + 1] = 2;173; }174define void @exact_siv(ptr %a) {175; CHECK-ALL-LABEL: 'exact_siv'176; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1177; CHECK-ALL-NEXT:    da analyze - none!178; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1179; CHECK-ALL-NEXT:    da analyze - none!180; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1181; CHECK-ALL-NEXT:    da analyze - none!182;183; CHECK-STRONG-SIV-LABEL: 'exact_siv'184; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1185; CHECK-STRONG-SIV-NEXT:    da analyze - none!186; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1187; CHECK-STRONG-SIV-NEXT:    da analyze - none!188; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1189; CHECK-STRONG-SIV-NEXT:    da analyze - none!190;191; CHECK-WEAK-CROSSING-SIV-LABEL: 'exact_siv'192; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1193; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!194; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1195; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*|<]!196; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1197; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!198;199; CHECK-EXACT-SIV-LABEL: 'exact_siv'200; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1201; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!202; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1203; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*|<]!204; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1205; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!206;207; CHECK-WEAK-ZERO-SIV-LABEL: 'exact_siv'208; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1209; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!210; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1211; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*|<]!212; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1213; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!214;215; CHECK-EXACT-RDIV-LABEL: 'exact_siv'216; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1217; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!218; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1219; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*|<]!220; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1221; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!222;223; CHECK-SYMBOLIC-RDIV-LABEL: 'exact_siv'224; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1225; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!226; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1227; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*|<]!228; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1229; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!230;231; CHECK-GCD-MIV-LABEL: 'exact_siv'232; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1233; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!234; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1235; CHECK-GCD-MIV-NEXT:    da analyze - none!236; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1237; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!238;239; CHECK-BANERJEE-MIV-LABEL: 'exact_siv'240; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1241; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!242; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1243; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*|<]!244; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1245; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!246;247entry:248  br label %loop249 250loop:251  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]252  %offset.0 = mul i64 2, %i253  %offset.1 = add i64 %offset.0, 1254  %gep.0 = getelementptr i8, ptr %a, i64 %offset.0255  %gep.1 = getelementptr i8, ptr %a, i64 %offset.1256  store i8 1, ptr %gep.0257  store i8 2, ptr %gep.1258  %i.inc = add i64 %i, 1259  %ec = icmp eq i64 %i.inc, 10260  br i1 %ec, label %exit, label %loop261 262exit:263  ret void264}265 266; for (i = 0; i < 10; i++) {267;   a[10] = 1;268;   a[i] = 2;269; }270define void @weak_zero_siv(ptr %a) {271; CHECK-ALL-LABEL: 'weak_zero_siv'272; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1273; CHECK-ALL-NEXT:    da analyze - consistent output [S]!274; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1275; CHECK-ALL-NEXT:    da analyze - none!276; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1277; CHECK-ALL-NEXT:    da analyze - none!278;279; CHECK-STRONG-SIV-LABEL: 'weak_zero_siv'280; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1281; CHECK-STRONG-SIV-NEXT:    da analyze - consistent output [S]!282; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1283; CHECK-STRONG-SIV-NEXT:    da analyze - consistent output [*|<]!284; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1285; CHECK-STRONG-SIV-NEXT:    da analyze - none!286;287; CHECK-WEAK-CROSSING-SIV-LABEL: 'weak_zero_siv'288; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1289; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [S]!290; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1291; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*|<]!292; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1293; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!294;295; CHECK-EXACT-SIV-LABEL: 'weak_zero_siv'296; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1297; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [S]!298; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1299; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*|<]!300; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1301; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!302;303; CHECK-WEAK-ZERO-SIV-LABEL: 'weak_zero_siv'304; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1305; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [S]!306; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1307; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - none!308; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1309; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!310;311; CHECK-EXACT-RDIV-LABEL: 'weak_zero_siv'312; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1313; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [S]!314; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1315; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*|<]!316; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1317; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!318;319; CHECK-SYMBOLIC-RDIV-LABEL: 'weak_zero_siv'320; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1321; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [S]!322; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1323; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*|<]!324; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1325; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!326;327; CHECK-GCD-MIV-LABEL: 'weak_zero_siv'328; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1329; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [S]!330; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1331; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*|<]!332; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1333; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!334;335; CHECK-BANERJEE-MIV-LABEL: 'weak_zero_siv'336; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1337; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [S]!338; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1339; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*|<]!340; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1341; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!342;343entry:344  br label %loop345 346loop:347  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]348  %gep.0 = getelementptr i8, ptr %a, i64 10349  %gep.1 = getelementptr i8, ptr %a, i64 %i350  store i8 1, ptr %gep.0351  store i8 2, ptr %gep.1352  %i.inc = add i64 %i, 1353  %ec = icmp eq i64 %i.inc, 10354  br i1 %ec, label %exit, label %loop355 356exit:357  ret void358}359 360; for (i = 0; i < 10; i++)361;   a[2 * i + 0] = 1;362; for (i = 0; i < 20; i++)363;   a[2 * i + 1] = 2;364define void @exact_rdiv(ptr %a) {365; CHECK-ALL-LABEL: 'exact_rdiv'366; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1367; CHECK-ALL-NEXT:    da analyze - none!368; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1369; CHECK-ALL-NEXT:    da analyze - none!370; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1371; CHECK-ALL-NEXT:    da analyze - none!372;373; CHECK-STRONG-SIV-LABEL: 'exact_rdiv'374; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1375; CHECK-STRONG-SIV-NEXT:    da analyze - none!376; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1377; CHECK-STRONG-SIV-NEXT:    da analyze - consistent output [|<]!378; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1379; CHECK-STRONG-SIV-NEXT:    da analyze - none!380;381; CHECK-WEAK-CROSSING-SIV-LABEL: 'exact_rdiv'382; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1383; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!384; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1385; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [|<]!386; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1387; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!388;389; CHECK-EXACT-SIV-LABEL: 'exact_rdiv'390; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1391; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!392; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1393; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [|<]!394; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1395; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!396;397; CHECK-WEAK-ZERO-SIV-LABEL: 'exact_rdiv'398; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1399; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!400; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1401; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [|<]!402; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1403; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!404;405; CHECK-EXACT-RDIV-LABEL: 'exact_rdiv'406; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1407; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!408; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1409; CHECK-EXACT-RDIV-NEXT:    da analyze - none!410; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1411; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!412;413; CHECK-SYMBOLIC-RDIV-LABEL: 'exact_rdiv'414; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1415; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!416; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1417; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [|<]!418; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1419; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!420;421; CHECK-GCD-MIV-LABEL: 'exact_rdiv'422; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1423; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!424; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1425; CHECK-GCD-MIV-NEXT:    da analyze - none!426; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1427; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!428;429; CHECK-BANERJEE-MIV-LABEL: 'exact_rdiv'430; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1431; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!432; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1433; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [|<]!434; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1435; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!436;437entry:438  br label %loop.0439 440loop.0:441  %i.0 = phi i64 [ 0, %entry ], [ %i.0.inc, %loop.0 ]442  %offset.0 = phi i64 [ 0, %entry ], [ %offset.0.next, %loop.0 ]443  %gep.0 = getelementptr i8, ptr %a, i64 %offset.0444  store i8 1, ptr %gep.0445  %i.0.inc = add i64 %i.0, 1446  %offset.0.next = add i64 %offset.0, 2447  %ec.0 = icmp eq i64 %i.0.inc, 10448  br i1 %ec.0, label %loop.1, label %loop.0449 450loop.1:451  %i.1 = phi i64 [ 0, %loop.0 ], [ %i.1.inc, %loop.1 ]452  %offset.1 = phi i64 [ 1, %loop.0 ], [ %offset.1.next, %loop.1 ]453  %gep.1 = getelementptr i8, ptr %a, i64 %offset.1454  store i8 2, ptr %gep.1455  %i.1.inc = add i64 %i.1, 1456  %offset.1.next = add i64 %offset.1, 2457  %ec.1 = icmp eq i64 %i.1.inc, 20458  br i1 %ec.1, label %exit, label %loop.1459 460exit:461  ret void462}463 464; for (i = 0; i < 10; i++)465;   a[i + 1] = 1;466; for (i = 0; i < 20; i++)467;   a[-i] = 2;468define void @symbolic_rdiv(ptr %a) {469; CHECK-ALL-LABEL: 'symbolic_rdiv'470; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1471; CHECK-ALL-NEXT:    da analyze - none!472; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1473; CHECK-ALL-NEXT:    da analyze - none!474; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1475; CHECK-ALL-NEXT:    da analyze - none!476;477; CHECK-STRONG-SIV-LABEL: 'symbolic_rdiv'478; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1479; CHECK-STRONG-SIV-NEXT:    da analyze - none!480; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1481; CHECK-STRONG-SIV-NEXT:    da analyze - consistent output [|<]!482; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1483; CHECK-STRONG-SIV-NEXT:    da analyze - none!484;485; CHECK-WEAK-CROSSING-SIV-LABEL: 'symbolic_rdiv'486; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1487; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!488; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1489; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [|<]!490; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1491; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - consistent output [*]!492;493; CHECK-EXACT-SIV-LABEL: 'symbolic_rdiv'494; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1495; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!496; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1497; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [|<]!498; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1499; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!500;501; CHECK-WEAK-ZERO-SIV-LABEL: 'symbolic_rdiv'502; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1503; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!504; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1505; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [|<]!506; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1507; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - consistent output [*]!508;509; CHECK-EXACT-RDIV-LABEL: 'symbolic_rdiv'510; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1511; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!512; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1513; CHECK-EXACT-RDIV-NEXT:    da analyze - none!514; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1515; CHECK-EXACT-RDIV-NEXT:    da analyze - consistent output [*]!516;517; CHECK-SYMBOLIC-RDIV-LABEL: 'symbolic_rdiv'518; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1519; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!520; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1521; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - none!522; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1523; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - consistent output [*]!524;525; CHECK-GCD-MIV-LABEL: 'symbolic_rdiv'526; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1527; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!528; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1529; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [|<]!530; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1531; CHECK-GCD-MIV-NEXT:    da analyze - consistent output [*]!532;533; CHECK-BANERJEE-MIV-LABEL: 'symbolic_rdiv'534; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1535; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!536; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1537; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [|<]!538; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1539; CHECK-BANERJEE-MIV-NEXT:    da analyze - consistent output [*]!540;541entry:542  br label %loop.0543 544loop.0:545  %i.0 = phi i64 [ 0, %entry ], [ %i.0.inc, %loop.0 ]546  %i.0.inc = add i64 %i.0, 1547  %gep.0 = getelementptr i8, ptr %a, i64 %i.0.inc548  store i8 1, ptr %gep.0549  %ec.0 = icmp eq i64 %i.0.inc, 10550  br i1 %ec.0, label %loop.1, label %loop.0551 552loop.1:553  %i.1 = phi i64 [ 0, %loop.0 ], [ %i.1.inc, %loop.1 ]554  %i.1.neg = sub i64 0, %i.1555  %gep.1 = getelementptr i8, ptr %a, i64 %i.1.neg556  store i8 2, ptr %gep.1557  %i.1.inc = add i64 %i.1, 1558  %ec.1 = icmp eq i64 %i.1.inc, 20559  br i1 %ec.1, label %exit, label %loop.1560 561exit:562  ret void563}564 565; for (i = 0; i < 10; i++)566;   for (j = 0; j < 10; j++) {567;     a[2*i + 2*j + 0] = 1;568;     a[2*i + 2*j + 1] = 2;569;   }570define void @gcd_miv(ptr %a) {571; CHECK-ALL-LABEL: 'gcd_miv'572; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1573; CHECK-ALL-NEXT:    da analyze - output [* *]!574; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1575; CHECK-ALL-NEXT:    da analyze - none!576; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1577; CHECK-ALL-NEXT:    da analyze - output [* *]!578;579; CHECK-STRONG-SIV-LABEL: 'gcd_miv'580; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1581; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *]!582; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1583; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *|<]!584; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1585; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *]!586;587; CHECK-WEAK-CROSSING-SIV-LABEL: 'gcd_miv'588; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1589; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *]!590; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1591; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *|<]!592; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1593; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *]!594;595; CHECK-EXACT-SIV-LABEL: 'gcd_miv'596; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1597; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *]!598; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1599; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *|<]!600; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1601; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *]!602;603; CHECK-WEAK-ZERO-SIV-LABEL: 'gcd_miv'604; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1605; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *]!606; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1607; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *|<]!608; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1609; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *]!610;611; CHECK-EXACT-RDIV-LABEL: 'gcd_miv'612; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1613; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *]!614; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1615; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *|<]!616; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1617; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *]!618;619; CHECK-SYMBOLIC-RDIV-LABEL: 'gcd_miv'620; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1621; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *]!622; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1623; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *|<]!624; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1625; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *]!626;627; CHECK-GCD-MIV-LABEL: 'gcd_miv'628; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1629; CHECK-GCD-MIV-NEXT:    da analyze - output [* *]!630; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1631; CHECK-GCD-MIV-NEXT:    da analyze - none!632; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1633; CHECK-GCD-MIV-NEXT:    da analyze - output [* *]!634;635; CHECK-BANERJEE-MIV-LABEL: 'gcd_miv'636; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1637; CHECK-BANERJEE-MIV-NEXT:    da analyze - output [* *]!638; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1639; CHECK-BANERJEE-MIV-NEXT:    da analyze - output [<> <>]!640; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1641; CHECK-BANERJEE-MIV-NEXT:    da analyze - output [* *]!642;643entry:644  br label %loop.i.header645 646loop.i.header:647  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.i.latch ]648  %offset.0.i = phi i64 [ 0, %entry ], [ %offset.0.i.next, %loop.i.latch ]649  %offset.1.i = phi i64 [ 1, %entry ], [ %offset.1.i.next, %loop.i.latch ]650  br label %loop.j651 652loop.j:653  %j = phi i64 [ 0, %loop.i.header ], [ %j.inc, %loop.j ]654  %offset.0 = phi i64 [ %offset.0.i, %loop.i.header ], [ %offset.0.next, %loop.j ]655  %offset.1 = phi i64 [ %offset.1.i, %loop.i.header ], [ %offset.1.next, %loop.j ]656  %gep.0 = getelementptr i8, ptr %a, i64 %offset.0657  %gep.1 = getelementptr i8, ptr %a, i64 %offset.1658  store i8 1, ptr %gep.0659  store i8 2, ptr %gep.1660  %j.inc = add i64 %j, 1661  %offset.0.next = add i64 %offset.0, 2662  %offset.1.next = add i64 %offset.1, 2663  %ec.j = icmp eq i64 %j.inc, 10664  br i1 %ec.j, label %loop.i.latch, label %loop.j665 666loop.i.latch:667  %i.inc = add i64 %i, 1668  %offset.0.i.next = add i64 %offset.0.i, 2669  %offset.1.i.next = add i64 %offset.1.i, 2670  %ec.i = icmp eq i64 %i.inc, 10671  br i1 %ec.i, label %exit, label %loop.i.header672 673exit:674  ret void675}676 677; for (i = 0; i < 10; i++)678;   for (j = 0; j < 10; j++) {679;     a[i + j] = 1;680;     a[i + j + 100] = 2;681;   }682define void @banerjee_miv(ptr %a) {683; CHECK-ALL-LABEL: 'banerjee_miv'684; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1685; CHECK-ALL-NEXT:    da analyze - output [* *]!686; CHECK-ALL-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1687; CHECK-ALL-NEXT:    da analyze - none!688; CHECK-ALL-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1689; CHECK-ALL-NEXT:    da analyze - output [* *]!690;691; CHECK-STRONG-SIV-LABEL: 'banerjee_miv'692; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1693; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *]!694; CHECK-STRONG-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1695; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *|<]!696; CHECK-STRONG-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1697; CHECK-STRONG-SIV-NEXT:    da analyze - output [* *]!698;699; CHECK-WEAK-CROSSING-SIV-LABEL: 'banerjee_miv'700; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1701; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *]!702; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1703; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *|<]!704; CHECK-WEAK-CROSSING-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1705; CHECK-WEAK-CROSSING-SIV-NEXT:    da analyze - output [* *]!706;707; CHECK-EXACT-SIV-LABEL: 'banerjee_miv'708; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1709; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *]!710; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1711; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *|<]!712; CHECK-EXACT-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1713; CHECK-EXACT-SIV-NEXT:    da analyze - output [* *]!714;715; CHECK-WEAK-ZERO-SIV-LABEL: 'banerjee_miv'716; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1717; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *]!718; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1719; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *|<]!720; CHECK-WEAK-ZERO-SIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1721; CHECK-WEAK-ZERO-SIV-NEXT:    da analyze - output [* *]!722;723; CHECK-EXACT-RDIV-LABEL: 'banerjee_miv'724; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1725; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *]!726; CHECK-EXACT-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1727; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *|<]!728; CHECK-EXACT-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1729; CHECK-EXACT-RDIV-NEXT:    da analyze - output [* *]!730;731; CHECK-SYMBOLIC-RDIV-LABEL: 'banerjee_miv'732; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1733; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *]!734; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1735; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *|<]!736; CHECK-SYMBOLIC-RDIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1737; CHECK-SYMBOLIC-RDIV-NEXT:    da analyze - output [* *]!738;739; CHECK-GCD-MIV-LABEL: 'banerjee_miv'740; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1741; CHECK-GCD-MIV-NEXT:    da analyze - output [* *]!742; CHECK-GCD-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1743; CHECK-GCD-MIV-NEXT:    da analyze - output [* *|<]!744; CHECK-GCD-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1745; CHECK-GCD-MIV-NEXT:    da analyze - output [* *]!746;747; CHECK-BANERJEE-MIV-LABEL: 'banerjee_miv'748; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.0, align 1749; CHECK-BANERJEE-MIV-NEXT:    da analyze - output [* *]!750; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 1, ptr %gep.0, align 1 --> Dst: store i8 2, ptr %gep.1, align 1751; CHECK-BANERJEE-MIV-NEXT:    da analyze - none!752; CHECK-BANERJEE-MIV-NEXT:  Src: store i8 2, ptr %gep.1, align 1 --> Dst: store i8 2, ptr %gep.1, align 1753; CHECK-BANERJEE-MIV-NEXT:    da analyze - output [* *]!754;755entry:756  br label %loop.i.header757 758loop.i.header:759  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.i.latch ]760  br label %loop.j761 762loop.j:763  %j = phi i64 [ 0, %loop.i.header ], [ %j.inc, %loop.j ]764  %offset.0 = add i64 %i, %j765  %offset.1 = add i64 %offset.0, 100766  %gep.0 = getelementptr i8, ptr %a, i64 %offset.0767  %gep.1 = getelementptr i8, ptr %a, i64 %offset.1768  store i8 1, ptr %gep.0769  store i8 2, ptr %gep.1770  %j.inc = add i64 %j, 1771  %ec.j = icmp eq i64 %j.inc, 10772  br i1 %ec.j, label %loop.i.latch, label %loop.j773 774loop.i.latch:775  %i.inc = add i64 %i, 1776  %ec.i = icmp eq i64 %i.inc, 10777  br i1 %ec.i, label %exit, label %loop.i.header778 779exit:780  ret void781}782