574 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 32; RUN: opt -passes='print<access-info><allow-partial>' -disable-output < %s 2>&1 | FileCheck %s3 4%s1 = type { [32000 x double], [32000 x double], [32000 x double] }5 6define i32 @load_with_pointer_phi_no_runtime_checks(ptr %data) {7; CHECK-LABEL: 'load_with_pointer_phi_no_runtime_checks'8; CHECK-NEXT: loop.header:9; CHECK-NEXT: Memory dependences are safe10; CHECK-NEXT: Dependences:11; CHECK-NEXT: Run-time memory checks:12; CHECK-NEXT: Grouped accesses:13; CHECK-EMPTY:14; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.15; CHECK-NEXT: SCEV assumptions:16; CHECK-EMPTY:17; CHECK-NEXT: Expressions re-written:18;19entry:20 br label %loop.header21 22loop.header: ; preds = %loop.latch, %entry23 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]24 %iv.next = add nuw nsw i64 %iv, 125 %cmp5 = icmp ult i64 %iv, 1599926 %arrayidx = getelementptr inbounds %s1, ptr %data, i64 0, i32 0, i64 %iv27 br i1 %cmp5, label %if.then, label %if.else28 29if.then: ; preds = %loop.header30 %gep.1 = getelementptr inbounds %s1, ptr %data, i64 0, i32 1, i64 %iv31 br label %loop.latch32 33if.else: ; preds = %loop.header34 %gep.2 = getelementptr inbounds %s1, ptr %data, i64 0, i32 2, i64 %iv35 br label %loop.latch36 37loop.latch: ; preds = %if.else, %if.then38 %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]39 %v8 = load double, ptr %gep.2.sink, align 840 %mul16 = fmul double 3.0, %v841 store double %mul16, ptr %arrayidx, align 842 %exitcond.not = icmp eq i64 %iv.next, 3200043 br i1 %exitcond.not, label %exit, label %loop.header44 45exit: ; preds = %loop.latch46 ret i32 1047}48 49define i32 @store_with_pointer_phi_no_runtime_checks(ptr %data) {50; CHECK-LABEL: 'store_with_pointer_phi_no_runtime_checks'51; CHECK-NEXT: loop.header:52; CHECK-NEXT: Memory dependences are safe53; CHECK-NEXT: Dependences:54; CHECK-NEXT: Run-time memory checks:55; CHECK-NEXT: Grouped accesses:56; CHECK-EMPTY:57; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.58; CHECK-NEXT: SCEV assumptions:59; CHECK-EMPTY:60; CHECK-NEXT: Expressions re-written:61;62entry:63 br label %loop.header64 65loop.header: ; preds = %loop.latch, %entry66 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]67 %iv.next = add nuw nsw i64 %iv, 168 %cmp5 = icmp ult i64 %iv, 1599969 %arrayidx = getelementptr inbounds %s1, ptr %data, i64 0, i32 0, i64 %iv70 br i1 %cmp5, label %if.then, label %if.else71 72if.then: ; preds = %loop.header73 %gep.1 = getelementptr inbounds %s1, ptr %data, i64 0, i32 1, i64 %iv74 br label %loop.latch75 76if.else: ; preds = %loop.header77 %gep.2 = getelementptr inbounds %s1, ptr %data, i64 0, i32 2, i64 %iv78 br label %loop.latch79 80loop.latch: ; preds = %if.else, %if.then81 %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]82 %v8 = load double, ptr %arrayidx, align 883 %mul16 = fmul double 3.0, %v884 store double %mul16, ptr %gep.2.sink, align 885 %exitcond.not = icmp eq i64 %iv.next, 3200086 br i1 %exitcond.not, label %exit, label %loop.header87 88exit: ; preds = %loop.latch89 ret i32 1090}91 92define i32 @store_with_pointer_phi_runtime_checks(ptr %A, ptr %B, ptr %C) {93; CHECK-LABEL: 'store_with_pointer_phi_runtime_checks'94; CHECK-NEXT: loop.header:95; CHECK-NEXT: Memory dependences are safe with run-time checks96; CHECK-NEXT: Dependences:97; CHECK-NEXT: Run-time memory checks:98; CHECK-NEXT: Check 0:99; CHECK-NEXT: Comparing group GRP0:100; CHECK-NEXT: %gep.1 = getelementptr inbounds double, ptr %B, i64 %iv101; CHECK-NEXT: Against group GRP1:102; CHECK-NEXT: %gep.2 = getelementptr inbounds double, ptr %C, i64 %iv103; CHECK-NEXT: Check 1:104; CHECK-NEXT: Comparing group GRP0:105; CHECK-NEXT: %gep.1 = getelementptr inbounds double, ptr %B, i64 %iv106; CHECK-NEXT: Against group GRP2:107; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv108; CHECK-NEXT: Check 2:109; CHECK-NEXT: Comparing group GRP1:110; CHECK-NEXT: %gep.2 = getelementptr inbounds double, ptr %C, i64 %iv111; CHECK-NEXT: Against group GRP2:112; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv113; CHECK-NEXT: Grouped accesses:114; CHECK-NEXT: Group GRP0:115; CHECK-NEXT: (Low: %B High: (256000 + %B))116; CHECK-NEXT: Member: {%B,+,8}<nw><%loop.header>117; CHECK-NEXT: Group GRP1:118; CHECK-NEXT: (Low: %C High: (256000 + %C))119; CHECK-NEXT: Member: {%C,+,8}<nw><%loop.header>120; CHECK-NEXT: Group GRP2:121; CHECK-NEXT: (Low: %A High: (256000 + %A))122; CHECK-NEXT: Member: {%A,+,8}<nw><%loop.header>123; CHECK-EMPTY:124; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.125; CHECK-NEXT: SCEV assumptions:126; CHECK-EMPTY:127; CHECK-NEXT: Expressions re-written:128;129entry:130 br label %loop.header131 132loop.header: ; preds = %loop.latch, %entry133 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]134 %iv.next = add nuw nsw i64 %iv, 1135 %cmp5 = icmp ult i64 %iv, 15999136 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv137 br i1 %cmp5, label %if.then, label %if.else138 139if.then: ; preds = %loop.header140 %gep.1 = getelementptr inbounds double, ptr %B, i64 %iv141 br label %loop.latch142 143if.else: ; preds = %loop.header144 %gep.2 = getelementptr inbounds double, ptr %C, i64 %iv145 br label %loop.latch146 147loop.latch: ; preds = %if.else, %if.then148 %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]149 %v8 = load double, ptr %arrayidx, align 8150 %mul16 = fmul double 3.0, %v8151 store double %mul16, ptr %gep.2.sink, align 8152 %exitcond.not = icmp eq i64 %iv.next, 32000153 br i1 %exitcond.not, label %exit, label %loop.header154 155exit: ; preds = %loop.latch156 ret i32 10157}158 159define i32 @load_with_pointer_phi_outside_loop(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {160; CHECK-LABEL: 'load_with_pointer_phi_outside_loop'161; CHECK-NEXT: loop.header:162; 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 loop163; CHECK-NEXT: Unknown data dependence.164; CHECK-NEXT: Dependences:165; CHECK-NEXT: Unknown:166; CHECK-NEXT: %v8 = load double, ptr %ptr, align 8 ->167; CHECK-NEXT: store double %mul16, ptr %arrayidx, align 8168; CHECK-EMPTY:169; CHECK-NEXT: Run-time memory checks:170; CHECK-NEXT: Grouped accesses:171; CHECK-EMPTY:172; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.173; CHECK-NEXT: SCEV assumptions:174; CHECK-EMPTY:175; CHECK-NEXT: Expressions re-written:176;177entry:178 br i1 %c.0, label %if.then, label %if.else179 180if.then:181 br label %loop.ph182 183if.else:184 %ptr.select = select i1 %c.1, ptr %C, ptr %B185 br label %loop.ph186 187loop.ph:188 %ptr = phi ptr [ %A, %if.then ], [ %ptr.select, %if.else ]189 br label %loop.header190 191loop.header: ; preds = %loop.latch, %entry192 %iv = phi i64 [ 0, %loop.ph ], [ %iv.next, %loop.header ]193 %iv.next = add nuw nsw i64 %iv, 1194 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv195 %v8 = load double, ptr %ptr, align 8196 %mul16 = fmul double 3.0, %v8197 store double %mul16, ptr %arrayidx, align 8198 %exitcond.not = icmp eq i64 %iv.next, 32000199 br i1 %exitcond.not, label %exit, label %loop.header200 201exit: ; preds = %loop.latch202 ret i32 10203}204 205define i32 @store_with_pointer_phi_outside_loop(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {206; CHECK-LABEL: 'store_with_pointer_phi_outside_loop'207; CHECK-NEXT: loop.header:208; 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 loop209; CHECK-NEXT: Unknown data dependence.210; CHECK-NEXT: Dependences:211; CHECK-NEXT: Unknown:212; CHECK-NEXT: %v8 = load double, ptr %arrayidx, align 8 ->213; CHECK-NEXT: store double %mul16, ptr %ptr, align 8214; CHECK-EMPTY:215; CHECK-NEXT: Run-time memory checks:216; CHECK-NEXT: Grouped accesses:217; CHECK-EMPTY:218; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.219; CHECK-NEXT: SCEV assumptions:220; CHECK-EMPTY:221; CHECK-NEXT: Expressions re-written:222;223entry:224 br i1 %c.0, label %if.then, label %if.else225 226if.then:227 br label %loop.ph228 229if.else:230 %ptr.select = select i1 %c.1, ptr %C, ptr %B231 br label %loop.ph232 233loop.ph:234 %ptr = phi ptr [ %A, %if.then ], [ %ptr.select, %if.else ]235 br label %loop.header236 237loop.header: ; preds = %loop.latch, %entry238 %iv = phi i64 [ 0, %loop.ph ], [ %iv.next, %loop.header ]239 %iv.next = add nuw nsw i64 %iv, 1240 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv241 %v8 = load double, ptr %arrayidx, align 8242 %mul16 = fmul double 3.0, %v8243 store double %mul16, ptr %ptr, align 8244 %exitcond.not = icmp eq i64 %iv.next, 32000245 br i1 %exitcond.not, label %exit, label %loop.header246 247exit: ; preds = %loop.latch248 ret i32 10249}250 251define i32 @store_with_pointer_phi_incoming_phi(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {252; CHECK-LABEL: 'store_with_pointer_phi_incoming_phi'253; CHECK-NEXT: loop.header:254; 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 loop255; CHECK-NEXT: Unknown data dependence.256; CHECK-NEXT: Dependences:257; CHECK-NEXT: Unknown:258; CHECK-NEXT: %v8 = load double, ptr %arrayidx, align 8 ->259; CHECK-NEXT: store double %mul16, ptr %ptr.2, align 8260; CHECK-EMPTY:261; CHECK-NEXT: Run-time memory checks:262; CHECK-NEXT: Check 0:263; CHECK-NEXT: Comparing group GRP0:264; CHECK-NEXT: ptr %C265; CHECK-NEXT: Against group GRP1:266; CHECK-NEXT: ptr %B267; CHECK-NEXT: Check 1:268; CHECK-NEXT: Comparing group GRP0:269; CHECK-NEXT: ptr %C270; CHECK-NEXT: Against group GRP2:271; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv272; CHECK-NEXT: ptr %A273; CHECK-NEXT: Check 2:274; CHECK-NEXT: Comparing group GRP1:275; CHECK-NEXT: ptr %B276; CHECK-NEXT: Against group GRP2:277; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv278; CHECK-NEXT: ptr %A279; CHECK-NEXT: Grouped accesses:280; CHECK-NEXT: Group GRP0:281; CHECK-NEXT: (Low: %C High: (8 + %C))282; CHECK-NEXT: Member: %C283; CHECK-NEXT: Group GRP1:284; CHECK-NEXT: (Low: %B High: (8 + %B))285; CHECK-NEXT: Member: %B286; CHECK-NEXT: Group GRP2:287; CHECK-NEXT: (Low: %A High: (256000 + %A))288; CHECK-NEXT: Member: {%A,+,8}<nuw><%loop.header>289; CHECK-NEXT: Member: %A290; CHECK-EMPTY:291; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.292; CHECK-NEXT: SCEV assumptions:293; CHECK-EMPTY:294; CHECK-NEXT: Expressions re-written:295;296; CHECK-EMPTY297entry:298 br label %loop.header299 300loop.header: ; preds = %loop.latch, %entry301 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]302 %iv.next = add nuw nsw i64 %iv, 1303 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv304 %v8 = load double, ptr %arrayidx, align 8305 %mul16 = fmul double 3.0, %v8306 br i1 %c.0, label %loop.then, label %loop.latch307 308loop.then:309 br i1 %c.0, label %loop.then.2, label %loop.else.2310 311loop.then.2:312 br label %merge.2313 314loop.else.2:315 br label %merge.2316 317 318merge.2:319 %ptr = phi ptr [ %A, %loop.then.2 ], [ %B, %loop.else.2 ]320 br label %loop.latch321 322 323loop.latch:324 %ptr.2 = phi ptr [ %ptr, %merge.2], [ %C, %loop.header ]325 store double %mul16, ptr %ptr.2, align 8326 %exitcond.not = icmp eq i64 %iv.next, 32000327 br i1 %exitcond.not, label %exit, label %loop.header328 329exit: ; preds = %loop.latch330 ret i32 10331}332 333; Test cases with pointer phis forming a cycle.334define i32 @store_with_pointer_phi_incoming_phi_irreducible_cycle(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {335; CHECK-LABEL: 'store_with_pointer_phi_incoming_phi_irreducible_cycle'336; CHECK-NEXT: loop.header:337; 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 loop338; CHECK-NEXT: Unknown data dependence.339; CHECK-NEXT: Dependences:340; CHECK-NEXT: Unknown:341; CHECK-NEXT: %v8 = load double, ptr %arrayidx, align 8 ->342; CHECK-NEXT: store double %mul16, ptr %ptr.3, align 8343; CHECK-EMPTY:344; CHECK-NEXT: Run-time memory checks:345; CHECK-NEXT: Check 0:346; CHECK-NEXT: Comparing group GRP0:347; CHECK-NEXT: ptr %C348; CHECK-NEXT: Against group GRP1:349; CHECK-NEXT: ptr %B350; CHECK-NEXT: Check 1:351; CHECK-NEXT: Comparing group GRP0:352; CHECK-NEXT: ptr %C353; CHECK-NEXT: Against group GRP2:354; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv355; CHECK-NEXT: ptr %A356; CHECK-NEXT: Check 2:357; CHECK-NEXT: Comparing group GRP1:358; CHECK-NEXT: ptr %B359; CHECK-NEXT: Against group GRP2:360; CHECK-NEXT: %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv361; CHECK-NEXT: ptr %A362; CHECK-NEXT: Grouped accesses:363; CHECK-NEXT: Group GRP0:364; CHECK-NEXT: (Low: %C High: (8 + %C))365; CHECK-NEXT: Member: %C366; CHECK-NEXT: Group GRP1:367; CHECK-NEXT: (Low: %B High: (8 + %B))368; CHECK-NEXT: Member: %B369; CHECK-NEXT: Group GRP2:370; CHECK-NEXT: (Low: %A High: (256000 + %A))371; CHECK-NEXT: Member: {%A,+,8}<nuw><%loop.header>372; CHECK-NEXT: Member: %A373; CHECK-EMPTY:374; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.375; CHECK-NEXT: SCEV assumptions:376; CHECK-EMPTY:377; CHECK-NEXT: Expressions re-written:378;379; CHECK-EMPTY380entry:381 br label %loop.header382 383loop.header: ; preds = %loop.latch, %entry384 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]385 %iv.next = add nuw nsw i64 %iv, 1386 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv387 %v8 = load double, ptr %arrayidx, align 8388 %mul16 = fmul double 3.0, %v8389 br i1 %c.0, label %loop.then, label %loop.latch390 391loop.then:392 br i1 %c.0, label %BB.A, label %BB.B393 394BB.A:395 %ptr = phi ptr [ %A, %loop.then ], [ %ptr.2, %BB.B ]396 br label %BB.B397 398BB.B:399 %ptr.2 = phi ptr [ %ptr, %BB.A ], [ %B, %loop.then ]400 br i1 %c.1, label %loop.latch, label %BB.A401 402loop.latch:403 %ptr.3 = phi ptr [ %ptr.2, %BB.B ], [ %C, %loop.header ]404 store double %mul16, ptr %ptr.3, align 8405 %exitcond.not = icmp eq i64 %iv.next, 32000406 br i1 %exitcond.not, label %exit, label %loop.header407 408exit: ; preds = %loop.latch409 ret i32 10410}411 412define i32 @store_with_pointer_phi_outside_loop_select(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {413; CHECK-LABEL: 'store_with_pointer_phi_outside_loop_select'414; CHECK-NEXT: loop.header:415; 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 loop416; CHECK-NEXT: Unknown data dependence.417; CHECK-NEXT: Dependences:418; CHECK-NEXT: Unknown:419; CHECK-NEXT: %v8 = load double, ptr %arrayidx, align 8 ->420; CHECK-NEXT: store double %mul16, ptr %ptr, align 8421; CHECK-EMPTY:422; CHECK-NEXT: Run-time memory checks:423; CHECK-NEXT: Grouped accesses:424; CHECK-EMPTY:425; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.426; CHECK-NEXT: SCEV assumptions:427; CHECK-EMPTY:428; CHECK-NEXT: Expressions re-written:429;430entry:431 br i1 %c.0, label %if.then, label %if.else432 433if.then:434 br label %loop.ph435 436if.else:437 %ptr.select = select i1 %c.1, ptr %C, ptr %B438 br label %loop.ph439 440loop.ph:441 %ptr = phi ptr [ %A, %if.then ], [ %ptr.select, %if.else ]442 br label %loop.header443 444loop.header: ; preds = %loop.latch, %entry445 %iv = phi i64 [ 0, %loop.ph ], [ %iv.next, %loop.header ]446 %iv.next = add nuw nsw i64 %iv, 1447 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv448 %v8 = load double, ptr %arrayidx, align 8449 %mul16 = fmul double 3.0, %v8450 store double %mul16, ptr %ptr, align 8451 %exitcond.not = icmp eq i64 %iv.next, 32000452 br i1 %exitcond.not, label %exit, label %loop.header453 454exit: ; preds = %loop.latch455 ret i32 10456}457 458define i32 @store_with_pointer_phi_in_same_bb_use_other_phi(ptr %A, ptr %B, ptr %C, ptr %D, i1 %c.0, i1 %c.1) {459; CHECK-LABEL: 'store_with_pointer_phi_in_same_bb_use_other_phi'460; CHECK-NEXT: loop.header:461; CHECK-NEXT: Report: cannot identify array bounds462; CHECK-NEXT: Dependences:463; CHECK-NEXT: Run-time memory checks:464; CHECK-NEXT: Grouped accesses:465; CHECK-NEXT: Group GRP0:466; CHECK-NEXT: (Low: %A High: (256000 + %A))467; CHECK-NEXT: Member: {%A,+,8}<nuw><%loop.header>468; CHECK-NEXT: Generated run-time checks are incomplete469; CHECK-EMPTY:470; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.471; CHECK-NEXT: SCEV assumptions:472; CHECK-EMPTY:473; CHECK-NEXT: Expressions re-written:474;475entry:476 br label %loop.header477 478loop.header: ; preds = %loop.latch, %entry479 %ptr.0 = phi ptr [ %C, %entry ], [ %D, %loop.header ]480 %ptr.1 = phi ptr [ %B, %entry ], [ %ptr.0, %loop.header ]481 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.header ]482 %iv.next = add nuw nsw i64 %iv, 1483 %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv484 %v8 = load double, ptr %arrayidx, align 8485 %mul16 = fmul double 3.0, %v8486 store double %mul16, ptr %ptr.1, align 8487 %exitcond.not = icmp eq i64 %iv.next, 32000488 br i1 %exitcond.not, label %exit, label %loop.header489 490exit: ; preds = %loop.latch491 ret i32 10492}493 494define void @phi_load_store_memdep_check(i1 %c, ptr %A, ptr %B, ptr %C) {495; CHECK-LABEL: 'phi_load_store_memdep_check'496; CHECK-NEXT: for.body:497; 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 loop498; CHECK-NEXT: Unknown data dependence.499; CHECK-NEXT: Dependences:500; CHECK-NEXT: Unknown:501; CHECK-NEXT: %lv3 = load i16, ptr %c.sink, align 2 ->502; CHECK-NEXT: store i16 %add, ptr %c.sink, align 1503; CHECK-EMPTY:504; CHECK-NEXT: Unknown:505; CHECK-NEXT: %lv3 = load i16, ptr %c.sink, align 2 ->506; CHECK-NEXT: store i16 %add, ptr %c.sink, align 1507; CHECK-EMPTY:508; CHECK-NEXT: Run-time memory checks:509; CHECK-NEXT: Check 0:510; CHECK-NEXT: Comparing group GRP0:511; CHECK-NEXT: ptr %A512; CHECK-NEXT: ptr %A513; CHECK-NEXT: Against group GRP1:514; CHECK-NEXT: ptr %C515; CHECK-NEXT: ptr %C516; CHECK-NEXT: Check 1:517; CHECK-NEXT: Comparing group GRP0:518; CHECK-NEXT: ptr %A519; CHECK-NEXT: ptr %A520; CHECK-NEXT: Against group GRP2:521; CHECK-NEXT: ptr %B522; CHECK-NEXT: ptr %B523; CHECK-NEXT: Check 2:524; CHECK-NEXT: Comparing group GRP1:525; CHECK-NEXT: ptr %C526; CHECK-NEXT: ptr %C527; CHECK-NEXT: Against group GRP2:528; CHECK-NEXT: ptr %B529; CHECK-NEXT: ptr %B530; CHECK-NEXT: Grouped accesses:531; CHECK-NEXT: Group GRP0:532; CHECK-NEXT: (Low: %A High: (2 + %A))533; CHECK-NEXT: Member: %A534; CHECK-NEXT: Member: %A535; CHECK-NEXT: Group GRP1:536; CHECK-NEXT: (Low: %C High: (2 + %C))537; CHECK-NEXT: Member: %C538; CHECK-NEXT: Member: %C539; CHECK-NEXT: Group GRP2:540; CHECK-NEXT: (Low: %B High: (2 + %B))541; CHECK-NEXT: Member: %B542; CHECK-NEXT: Member: %B543; CHECK-EMPTY:544; CHECK-NEXT: Non vectorizable stores to invariant address were found in loop.545; CHECK-NEXT: SCEV assumptions:546; CHECK-EMPTY:547; CHECK-NEXT: Expressions re-written:548;549entry:550 br label %for.body551 552for.body: ; preds = %if.end, %entry553 %iv = phi i16 [ 0, %entry ], [ %iv.next, %if.end ]554 %lv = load i16, ptr %A, align 1555 store i16 %lv, ptr %A, align 1556 br i1 %c, label %if.then, label %if.end557 558if.then: ; preds = %for.body559 %lv2 = load i16, ptr %A, align 1560 br label %if.end561 562if.end: ; preds = %if.then, %for.body563 %c.sink = phi ptr [ %B, %if.then ], [ %C, %for.body ]564 %lv3 = load i16, ptr %c.sink565 %add = add i16 %lv3, 10566 store i16 %add, ptr %c.sink, align 1567 %iv.next = add nuw nsw i16 %iv, 1568 %tobool.not = icmp eq i16 %iv.next, 1000569 br i1 %tobool.not, label %for.end.loopexit, label %for.body570 571for.end.loopexit: ; preds = %if.end572 ret void573}574