brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.8 KiB · c0b044a Raw
822 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>' -disable-output %s 2>&1 | FileCheck %s3 4define void @test_invar_dependence_before_positive_strided_access_1(ptr %a) {5; CHECK-LABEL: 'test_invar_dependence_before_positive_strided_access_1'6; CHECK-NEXT:    loop:7; CHECK-NEXT:      Memory dependences are safe8; CHECK-NEXT:      Dependences:9; CHECK-NEXT:      Run-time memory checks:10; CHECK-NEXT:      Grouped accesses:11; CHECK-EMPTY:12; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.13; CHECK-NEXT:      SCEV assumptions:14; CHECK-EMPTY:15; CHECK-NEXT:      Expressions re-written:16;17entry:18  %gep.off = getelementptr i8, ptr %a, i32 419  br label %loop20 21loop:22  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]23  %gep = getelementptr i32, ptr %gep.off, i32 %iv24  %l = load i32, ptr %a25  store i32 %l, ptr %gep26  %iv.next = add i32 %iv, 127  %ec = icmp eq i32 %iv.next, 10028  br i1 %ec, label %exit, label %loop29 30exit:31  ret void32}33 34define void @test_invar_dependence_before_positive_strided_access_2(ptr %a) {35; CHECK-LABEL: 'test_invar_dependence_before_positive_strided_access_2'36; CHECK-NEXT:    loop:37; CHECK-NEXT:      Memory dependences are safe38; CHECK-NEXT:      Dependences:39; CHECK-NEXT:      Run-time memory checks:40; CHECK-NEXT:      Grouped accesses:41; CHECK-EMPTY:42; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.43; CHECK-NEXT:      SCEV assumptions:44; CHECK-EMPTY:45; CHECK-NEXT:      Expressions re-written:46;47entry:48  %gep.off = getelementptr i8, ptr %a, i32 449  br label %loop50 51loop:52  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]53  %gep = getelementptr i32, ptr %gep.off, i32 %iv54  %l = load i32, ptr %gep55  store i32 %l, ptr %a56  %iv.next = add i32 %iv, 157  %ec = icmp eq i32 %iv.next, 10058  br i1 %ec, label %exit, label %loop59 60exit:61  ret void62}63 64define void @test_invar_dependence_not_before_positive_strided_access_1(ptr %a) {65; CHECK-LABEL: 'test_invar_dependence_not_before_positive_strided_access_1'66; CHECK-NEXT:    loop:67; 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 loop68; CHECK-NEXT:  Unknown data dependence.69; CHECK-NEXT:      Dependences:70; CHECK-NEXT:        Unknown:71; CHECK-NEXT:            %l = load i32, ptr %a, align 4 ->72; CHECK-NEXT:            store i32 %l, ptr %gep, align 473; CHECK-EMPTY:74; CHECK-NEXT:      Run-time memory checks:75; CHECK-NEXT:      Grouped accesses:76; CHECK-EMPTY:77; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.78; CHECK-NEXT:      SCEV assumptions:79; CHECK-EMPTY:80; CHECK-NEXT:      Expressions re-written:81;82entry:83  %gep.off = getelementptr i8, ptr %a, i32 384  br label %loop85 86loop:87  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]88  %gep = getelementptr i32, ptr %gep.off, i32 %iv89  %l = load i32, ptr %a90  store i32 %l, ptr %gep91  %iv.next = add i32 %iv, 192  %ec = icmp eq i32 %iv.next, 10093  br i1 %ec, label %exit, label %loop94 95exit:96  ret void97}98 99define void @test_invar_dependence_not_before_positive_strided_access_2(ptr %a) {100; CHECK-LABEL: 'test_invar_dependence_not_before_positive_strided_access_2'101; CHECK-NEXT:    loop:102; 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 loop103; CHECK-NEXT:  Unknown data dependence.104; CHECK-NEXT:      Dependences:105; CHECK-NEXT:        Unknown:106; CHECK-NEXT:            %l = load i32, ptr %gep, align 4 ->107; CHECK-NEXT:            store i32 %l, ptr %a, align 4108; CHECK-EMPTY:109; CHECK-NEXT:      Run-time memory checks:110; CHECK-NEXT:      Grouped accesses:111; CHECK-EMPTY:112; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.113; CHECK-NEXT:      SCEV assumptions:114; CHECK-EMPTY:115; CHECK-NEXT:      Expressions re-written:116;117entry:118  %gep.off = getelementptr i8, ptr %a, i32 3119  br label %loop120 121loop:122  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]123  %gep = getelementptr i32, ptr %gep.off, i32 %iv124  %l = load i32, ptr %gep125  store i32 %l, ptr %a126  %iv.next = add i32 %iv, 1127  %ec = icmp eq i32 %iv.next, 100128  br i1 %ec, label %exit, label %loop129 130exit:131  ret void132}133 134define void @test_invar_dependence_before_positive_strided_access_1_different_access_sizes(ptr %a) {135; CHECK-LABEL: 'test_invar_dependence_before_positive_strided_access_1_different_access_sizes'136; CHECK-NEXT:    loop:137; CHECK-NEXT:      Memory dependences are safe138; CHECK-NEXT:      Dependences:139; CHECK-NEXT:      Run-time memory checks:140; CHECK-NEXT:      Grouped accesses:141; CHECK-EMPTY:142; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.143; CHECK-NEXT:      SCEV assumptions:144; CHECK-EMPTY:145; CHECK-NEXT:      Expressions re-written:146;147entry:148  %gep.off = getelementptr i8, ptr %a, i32 4149  br label %loop150 151loop:152  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]153  %gep = getelementptr i32, ptr %gep.off, i32 %iv154  %l = load i32, ptr %a155  %t = trunc i32 %l to i8156  store i8 %t, ptr %gep157  %iv.next = add i32 %iv, 1158  %ec = icmp eq i32 %iv.next, 100159  br i1 %ec, label %exit, label %loop160 161exit:162  ret void163}164 165define void @test_invar_dependence_not_before_positive_strided_access_1_different_access_sizes(ptr %a) {166; CHECK-LABEL: 'test_invar_dependence_not_before_positive_strided_access_1_different_access_sizes'167; CHECK-NEXT:    loop:168; 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 loop169; CHECK-NEXT:  Unknown data dependence.170; CHECK-NEXT:      Dependences:171; CHECK-NEXT:        Unknown:172; CHECK-NEXT:            %l = load i64, ptr %a, align 4 ->173; CHECK-NEXT:            store i32 %t, ptr %gep, align 4174; CHECK-EMPTY:175; CHECK-NEXT:      Run-time memory checks:176; CHECK-NEXT:      Grouped accesses:177; CHECK-EMPTY:178; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.179; CHECK-NEXT:      SCEV assumptions:180; CHECK-EMPTY:181; CHECK-NEXT:      Expressions re-written:182;183entry:184  %gep.off = getelementptr i8, ptr %a, i32 4185  br label %loop186 187loop:188  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]189  %gep = getelementptr i32, ptr %gep.off, i32 %iv190  %l = load i64, ptr %a191  %t = trunc i64 %l to i32192  store i32 %t, ptr %gep193  %iv.next = add i32 %iv, 1194  %ec = icmp eq i32 %iv.next, 100195  br i1 %ec, label %exit, label %loop196 197exit:198  ret void199}200 201define void @test_invar_dependence_before_negative_strided_access_1(ptr %a) {202; CHECK-LABEL: 'test_invar_dependence_before_negative_strided_access_1'203; CHECK-NEXT:    loop:204; CHECK-NEXT:      Memory dependences are safe205; CHECK-NEXT:      Dependences:206; CHECK-NEXT:      Run-time memory checks:207; CHECK-NEXT:      Grouped accesses:208; CHECK-EMPTY:209; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.210; CHECK-NEXT:      SCEV assumptions:211; CHECK-EMPTY:212; CHECK-NEXT:      Expressions re-written:213;214entry:215  %gep.off = getelementptr i32, ptr %a, i32 100216  br label %loop217 218loop:219  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]220  %gep = getelementptr i32, ptr %gep.off, i32 %iv221  %l = load i32, ptr %a222  store i32 %l, ptr %gep223  %iv.next = sub i32 %iv, 1224  %ec = icmp eq i32 %iv.next, -100225  br i1 %ec, label %exit, label %loop226 227exit:228  ret void229}230 231define void @test_invar_dependence_before_negative_strided_access_2(ptr %a) {232; CHECK-LABEL: 'test_invar_dependence_before_negative_strided_access_2'233; CHECK-NEXT:    loop:234; CHECK-NEXT:      Memory dependences are safe235; CHECK-NEXT:      Dependences:236; CHECK-NEXT:      Run-time memory checks:237; CHECK-NEXT:      Grouped accesses:238; CHECK-EMPTY:239; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.240; CHECK-NEXT:      SCEV assumptions:241; CHECK-EMPTY:242; CHECK-NEXT:      Expressions re-written:243;244entry:245  %gep.off = getelementptr i32, ptr %a, i32 100246  br label %loop247 248loop:249  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]250  %gep = getelementptr i32, ptr %gep.off, i32 %iv251  %l = load i32, ptr %gep252  store i32 %l, ptr %a253  %iv.next = sub i32 %iv, 1254  %ec = icmp eq i32 %iv.next, -100255  br i1 %ec, label %exit, label %loop256 257exit:258  ret void259}260 261 262define void @test_invar_dependence_not_before_negative_strided_access_1(ptr %a) {263; CHECK-LABEL: 'test_invar_dependence_not_before_negative_strided_access_1'264; CHECK-NEXT:    loop:265; 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 loop266; CHECK-NEXT:  Unknown data dependence.267; CHECK-NEXT:      Dependences:268; CHECK-NEXT:        Unknown:269; CHECK-NEXT:            %l = load i32, ptr %a, align 4 ->270; CHECK-NEXT:            store i32 %l, ptr %gep, align 4271; CHECK-EMPTY:272; CHECK-NEXT:      Run-time memory checks:273; CHECK-NEXT:      Grouped accesses:274; CHECK-EMPTY:275; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.276; CHECK-NEXT:      SCEV assumptions:277; CHECK-EMPTY:278; CHECK-NEXT:      Expressions re-written:279;280entry:281  %gep.off = getelementptr i32, ptr %a, i32 99282  br label %loop283 284loop:285  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]286  %gep = getelementptr i32, ptr %gep.off, i32 %iv287  %l = load i32, ptr %a288  store i32 %l, ptr %gep289  %iv.next = sub i32 %iv, 1290  %ec = icmp eq i32 %iv.next, -100291  br i1 %ec, label %exit, label %loop292 293exit:294  ret void295}296 297define void @test_invar_dependence_not_before_negative_strided_access_2(ptr %a) {298; CHECK-LABEL: 'test_invar_dependence_not_before_negative_strided_access_2'299; CHECK-NEXT:    loop:300; 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 loop301; CHECK-NEXT:  Unknown data dependence.302; CHECK-NEXT:      Dependences:303; CHECK-NEXT:        Unknown:304; CHECK-NEXT:            %l = load i32, ptr %gep, align 4 ->305; CHECK-NEXT:            store i32 %l, ptr %a, align 4306; CHECK-EMPTY:307; CHECK-NEXT:      Run-time memory checks:308; CHECK-NEXT:      Grouped accesses:309; CHECK-EMPTY:310; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.311; CHECK-NEXT:      SCEV assumptions:312; CHECK-EMPTY:313; CHECK-NEXT:      Expressions re-written:314;315entry:316  %gep.off = getelementptr i32, ptr %a, i32 99317  br label %loop318 319loop:320  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]321  %gep = getelementptr i32, ptr %gep.off, i32 %iv322  %l = load i32, ptr %gep323  store i32 %l, ptr %a324  %iv.next = sub i32 %iv, 1325  %ec = icmp eq i32 %iv.next, -100326  br i1 %ec, label %exit, label %loop327 328exit:329  ret void330}331 332define void @test_both_invar_before_1(ptr %a) {333; CHECK-LABEL: 'test_both_invar_before_1'334; CHECK-NEXT:    loop:335; CHECK-NEXT:      Memory dependences are safe336; CHECK-NEXT:      Dependences:337; CHECK-NEXT:      Run-time memory checks:338; CHECK-NEXT:      Grouped accesses:339; CHECK-EMPTY:340; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.341; CHECK-NEXT:      SCEV assumptions:342; CHECK-EMPTY:343; CHECK-NEXT:      Expressions re-written:344;345entry:346  %gep.off = getelementptr i8, ptr %a, i32 4347  br label %loop348 349loop:350  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]351  %l = load i32, ptr %a352  store i32 %l, ptr %gep.off353  %iv.next = add i32 %iv, 1354  %ec = icmp eq i32 %iv.next, 100355  br i1 %ec, label %exit, label %loop356 357exit:358  ret void359}360 361define void @test_both_invar_before_2(ptr %a) {362; CHECK-LABEL: 'test_both_invar_before_2'363; CHECK-NEXT:    loop:364; CHECK-NEXT:      Memory dependences are safe365; CHECK-NEXT:      Dependences:366; CHECK-NEXT:      Run-time memory checks:367; CHECK-NEXT:      Grouped accesses:368; CHECK-EMPTY:369; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.370; CHECK-NEXT:      SCEV assumptions:371; CHECK-EMPTY:372; CHECK-NEXT:      Expressions re-written:373;374entry:375  %gep.off = getelementptr i8, ptr %a, i32 4376  br label %loop377 378loop:379  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]380  %l = load i32, ptr %gep.off381  store i32 %l, ptr %a382  %iv.next = add i32 %iv, 1383  %ec = icmp eq i32 %iv.next, 100384  br i1 %ec, label %exit, label %loop385 386exit:387  ret void388}389 390define void @test_both_invar_not_before_1(ptr %a) {391; CHECK-LABEL: 'test_both_invar_not_before_1'392; CHECK-NEXT:    loop:393; 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 loop394; CHECK-NEXT:  Unknown data dependence.395; CHECK-NEXT:      Dependences:396; CHECK-NEXT:        Unknown:397; CHECK-NEXT:            %l = load i32, ptr %a, align 4 ->398; CHECK-NEXT:            store i32 %l, ptr %gep.off, align 4399; CHECK-EMPTY:400; CHECK-NEXT:      Run-time memory checks:401; CHECK-NEXT:      Grouped accesses:402; CHECK-EMPTY:403; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.404; CHECK-NEXT:      SCEV assumptions:405; CHECK-EMPTY:406; CHECK-NEXT:      Expressions re-written:407;408entry:409  %gep.off = getelementptr i8, ptr %a, i32 3410  br label %loop411 412loop:413  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]414  %l = load i32, ptr %a415  store i32 %l, ptr %gep.off416  %iv.next = add i32 %iv, 1417  %ec = icmp eq i32 %iv.next, 100418  br i1 %ec, label %exit, label %loop419 420exit:421  ret void422}423 424define void @test_both_invar_not_before_2(ptr %a) {425; CHECK-LABEL: 'test_both_invar_not_before_2'426; CHECK-NEXT:    loop:427; 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 loop428; CHECK-NEXT:  Unknown data dependence.429; CHECK-NEXT:      Dependences:430; CHECK-NEXT:        Unknown:431; CHECK-NEXT:            %l = load i32, ptr %gep.off, align 4 ->432; CHECK-NEXT:            store i32 %l, ptr %a, align 4433; CHECK-EMPTY:434; CHECK-NEXT:      Run-time memory checks:435; CHECK-NEXT:      Grouped accesses:436; CHECK-EMPTY:437; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.438; CHECK-NEXT:      SCEV assumptions:439; CHECK-EMPTY:440; CHECK-NEXT:      Expressions re-written:441;442entry:443  %gep.off = getelementptr i8, ptr %a, i32 3444  br label %loop445 446loop:447  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]448  %l = load i32, ptr %gep.off449  store i32 %l, ptr %a450  %iv.next = add i32 %iv, 1451  %ec = icmp eq i32 %iv.next, 100452  br i1 %ec, label %exit, label %loop453 454exit:455  ret void456}457 458define void @test_invar_dependence_before_via_loop_guard_positive_strided_access_1(ptr %a, i32 %off) {459; CHECK-LABEL: 'test_invar_dependence_before_via_loop_guard_positive_strided_access_1'460; CHECK-NEXT:    loop:461; 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 loop462; CHECK-NEXT:  Unknown data dependence.463; CHECK-NEXT:      Dependences:464; CHECK-NEXT:        Unknown:465; CHECK-NEXT:            %l = load i32, ptr %a, align 4 ->466; CHECK-NEXT:            store i32 %l, ptr %gep, align 4467; CHECK-EMPTY:468; CHECK-NEXT:      Run-time memory checks:469; CHECK-NEXT:      Grouped accesses:470; CHECK-EMPTY:471; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.472; CHECK-NEXT:      SCEV assumptions:473; CHECK-EMPTY:474; CHECK-NEXT:      Expressions re-written:475;476entry:477  %gep.off = getelementptr i8, ptr %a, i32 %off478  %c = icmp sge i32 %off, 4479  br i1 %c, label %loop, label %exit480 481loop:482  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]483  %gep = getelementptr i32, ptr %gep.off, i32 %iv484  %l = load i32, ptr %a485  store i32 %l, ptr %gep486  %iv.next = add i32 %iv, 1487  %ec = icmp eq i32 %iv.next, 100488  br i1 %ec, label %exit, label %loop489 490exit:491  ret void492}493 494define void @test_invar_dependence_before_via_loop_guard_positive_strided_access_2(ptr %a, i32 %off) {495; CHECK-LABEL: 'test_invar_dependence_before_via_loop_guard_positive_strided_access_2'496; CHECK-NEXT:    loop: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:            %l = load i32, ptr %gep, align 4 ->502; CHECK-NEXT:            store i32 %l, ptr %a, align 4503; CHECK-EMPTY:504; CHECK-NEXT:      Run-time memory checks:505; CHECK-NEXT:      Grouped accesses:506; CHECK-EMPTY:507; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.508; CHECK-NEXT:      SCEV assumptions:509; CHECK-EMPTY:510; CHECK-NEXT:      Expressions re-written:511;512entry:513  %gep.off = getelementptr i8, ptr %a, i32 %off514  %c = icmp sge i32 %off, 4515  br i1 %c, label %loop, label %exit516 517loop:518  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]519  %gep = getelementptr i32, ptr %gep.off, i32 %iv520  %l = load i32, ptr %gep521  store i32 %l, ptr %a522  %iv.next = add i32 %iv, 1523  %ec = icmp eq i32 %iv.next, 100524  br i1 %ec, label %exit, label %loop525 526exit:527  ret void528}529define void @test_invar_dependence_not_before_via_loop_guard_positive_strided_access_1(ptr %a, i32 %off) {530; CHECK-LABEL: 'test_invar_dependence_not_before_via_loop_guard_positive_strided_access_1'531; CHECK-NEXT:    loop:532; 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 loop533; CHECK-NEXT:  Unknown data dependence.534; CHECK-NEXT:      Dependences:535; CHECK-NEXT:        Unknown:536; CHECK-NEXT:            %l = load i32, ptr %a, align 4 ->537; CHECK-NEXT:            store i32 %l, ptr %gep, align 4538; CHECK-EMPTY:539; CHECK-NEXT:      Run-time memory checks:540; CHECK-NEXT:      Grouped accesses:541; CHECK-EMPTY:542; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.543; CHECK-NEXT:      SCEV assumptions:544; CHECK-EMPTY:545; CHECK-NEXT:      Expressions re-written:546;547entry:548  %gep.off = getelementptr i8, ptr %a, i32 %off549  %c = icmp sge i32 %off, 3550  br i1 %c, label %loop, label %exit551 552loop:553  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]554  %gep = getelementptr i32, ptr %gep.off, i32 %iv555  %l = load i32, ptr %a556  store i32 %l, ptr %gep557  %iv.next = add i32 %iv, 1558  %ec = icmp eq i32 %iv.next, 100559  br i1 %ec, label %exit, label %loop560 561exit:562  ret void563}564 565define void @test_invar_dependence_not_before_via_loop_guard_positive_strided_access_2(ptr %a, i32 %off) {566; CHECK-LABEL: 'test_invar_dependence_not_before_via_loop_guard_positive_strided_access_2'567; CHECK-NEXT:    loop:568; 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 loop569; CHECK-NEXT:  Unknown data dependence.570; CHECK-NEXT:      Dependences:571; CHECK-NEXT:        Unknown:572; CHECK-NEXT:            %l = load i32, ptr %gep, align 4 ->573; CHECK-NEXT:            store i32 %l, ptr %a, align 4574; CHECK-EMPTY:575; CHECK-NEXT:      Run-time memory checks:576; CHECK-NEXT:      Grouped accesses:577; CHECK-EMPTY:578; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.579; CHECK-NEXT:      SCEV assumptions:580; CHECK-EMPTY:581; CHECK-NEXT:      Expressions re-written:582;583entry:584  %gep.off = getelementptr i8, ptr %a, i32 %off585  %c = icmp sge i32 %off, 3586  br i1 %c, label %loop, label %exit587 588loop:589  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]590  %gep = getelementptr i32, ptr %gep.off, i32 %iv591  %l = load i32, ptr %gep592  store i32 %l, ptr %a593  %iv.next = add i32 %iv, 1594  %ec = icmp eq i32 %iv.next, 100595  br i1 %ec, label %exit, label %loop596 597exit:598  ret void599}600 601define void @test_invar_dependence_before_positive_strided_access_via_loop_guard_1(ptr %a, i32 %off) {602; CHECK-LABEL: 'test_invar_dependence_before_positive_strided_access_via_loop_guard_1'603; CHECK-NEXT:    loop:604; CHECK-NEXT:      Report: could not determine number of loop iterations605; CHECK-NEXT:      Dependences:606; CHECK-NEXT:      Run-time memory checks:607; CHECK-NEXT:      Grouped accesses:608; CHECK-EMPTY:609; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.610; CHECK-NEXT:      SCEV assumptions:611; CHECK-EMPTY:612; CHECK-NEXT:      Expressions re-written:613;614entry:615  %gep.off = getelementptr i8, ptr %a, i32 4616  %c = icmp sge i32 %off, 0617  br i1 %c, label %loop, label %exit618 619loop:620  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]621  %gep = getelementptr i32, ptr %gep.off, i32 %iv622  %l = load i32, ptr %gep623  store i32 %l, ptr %a624  %iv.next = add i32 %iv, %off625  %ec = icmp eq i32 %iv.next, 100626  br i1 %ec, label %exit, label %loop627 628exit:629  ret void630}631 632define void @test_invar_dependence_before_positive_strided_access_via_loop_guard_2(ptr %a, i32 %off) {633; CHECK-LABEL: 'test_invar_dependence_before_positive_strided_access_via_loop_guard_2'634; CHECK-NEXT:    loop:635; CHECK-NEXT:      Report: could not determine number of loop iterations636; CHECK-NEXT:      Dependences:637; CHECK-NEXT:      Run-time memory checks:638; CHECK-NEXT:      Grouped accesses:639; CHECK-EMPTY:640; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.641; CHECK-NEXT:      SCEV assumptions:642; CHECK-EMPTY:643; CHECK-NEXT:      Expressions re-written:644;645entry:646  %gep.off = getelementptr i8, ptr %a, i32 4647  %c = icmp sge i32 %off, 0648  br i1 %c, label %loop, label %exit649 650loop:651  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]652  %gep = getelementptr i32, ptr %gep.off, i32 %iv653  %l = load i32, ptr %a654  store i32 %l, ptr %gep655  %iv.next = add i32 %iv, %off656  %ec = icmp eq i32 %iv.next, 100657  br i1 %ec, label %exit, label %loop658 659exit:660  ret void661}662 663define void @test_invar_dependence_not_known_beforepositive_strided_access_not_known_via_loop_guard_1(ptr %a, i32 %off) {664; CHECK-LABEL: 'test_invar_dependence_not_known_beforepositive_strided_access_not_known_via_loop_guard_1'665; CHECK-NEXT:    loop:666; CHECK-NEXT:      Report: could not determine number of loop iterations667; CHECK-NEXT:      Dependences:668; CHECK-NEXT:      Run-time memory checks:669; CHECK-NEXT:      Grouped accesses:670; CHECK-EMPTY:671; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.672; CHECK-NEXT:      SCEV assumptions:673; CHECK-EMPTY:674; CHECK-NEXT:      Expressions re-written:675;676entry:677  %gep.off = getelementptr i8, ptr %a, i32 4678  br label %loop679 680loop:681  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]682  %gep = getelementptr i32, ptr %gep.off, i32 %iv683  %l = load i32, ptr %a684  store i32 %l, ptr %gep685  %iv.next = add i32 %iv, %off686  %ec = icmp eq i32 %iv.next, 100687  br i1 %ec, label %exit, label %loop688 689exit:690  ret void691}692 693define void @test_invar_dependence_not_known_beforepositive_strided_access_not_known_via_loop_guard_2(ptr %a, i32 %off) {694; CHECK-LABEL: 'test_invar_dependence_not_known_beforepositive_strided_access_not_known_via_loop_guard_2'695; CHECK-NEXT:    loop:696; CHECK-NEXT:      Report: could not determine number of loop iterations697; CHECK-NEXT:      Dependences:698; CHECK-NEXT:      Run-time memory checks:699; CHECK-NEXT:      Grouped accesses:700; CHECK-EMPTY:701; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.702; CHECK-NEXT:      SCEV assumptions:703; CHECK-EMPTY:704; CHECK-NEXT:      Expressions re-written:705;706entry:707  %gep.off = getelementptr i8, ptr %a, i32 4708  br label %loop709 710loop:711  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]712  %gep = getelementptr i32, ptr %gep.off, i32 %iv713  %l = load i32, ptr %gep714  store i32 %l, ptr %a715  %iv.next = add i32 %iv, %off716  %ec = icmp eq i32 %iv.next, 100717  br i1 %ec, label %exit, label %loop718 719exit:720  ret void721}722 723define void @test_invar_vector_dependence_before_positive_strided_access_1(ptr %a) {724; CHECK-LABEL: 'test_invar_vector_dependence_before_positive_strided_access_1'725; CHECK-NEXT:    loop:726; CHECK-NEXT:      Memory dependences are safe727; CHECK-NEXT:      Dependences:728; CHECK-NEXT:      Run-time memory checks:729; CHECK-NEXT:      Grouped accesses:730; CHECK-EMPTY:731; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.732; CHECK-NEXT:      SCEV assumptions:733; CHECK-EMPTY:734; CHECK-NEXT:      Expressions re-written:735;736entry:737  %gep.off = getelementptr i8, ptr %a, i32 4738  br label %loop739 740loop:741  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]742  %gep = getelementptr i32, ptr %gep.off, i32 %iv743  %l = load <4 x i8>, ptr %a744  store i32 0, ptr %gep745  %iv.next = add i32 %iv, 1746  %ec = icmp eq i32 %iv.next, 100747  br i1 %ec, label %exit, label %loop748 749exit:750  ret void751}752 753define void @test_invar_scalable_dependence_before_positive_strided_access_1(ptr %a) {754; CHECK-LABEL: 'test_invar_scalable_dependence_before_positive_strided_access_1'755; CHECK-NEXT:    loop:756; 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 loop757; CHECK-NEXT:  Unknown data dependence.758; CHECK-NEXT:      Dependences:759; CHECK-NEXT:        Unknown:760; CHECK-NEXT:            %l = load <vscale x 4 x i8>, ptr %a, align 4 ->761; CHECK-NEXT:            store i32 0, ptr %gep, align 4762; CHECK-EMPTY:763; CHECK-NEXT:      Run-time memory checks:764; CHECK-NEXT:      Grouped accesses:765; CHECK-EMPTY:766; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.767; CHECK-NEXT:      SCEV assumptions:768; CHECK-EMPTY:769; CHECK-NEXT:      Expressions re-written:770;771entry:772  %gep.off = getelementptr i8, ptr %a, i32 4773  br label %loop774 775loop:776  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]777  %gep = getelementptr i32, ptr %gep.off, i32 %iv778  %l = load <vscale x 4 x i8>, ptr %a779  store i32 0, ptr %gep780  %iv.next = add i32 %iv, 1781  %ec = icmp eq i32 %iv.next, 100782  br i1 %ec, label %exit, label %loop783 784exit:785  ret void786}787 788define 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 safe792; 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;801entry:802  %add = add i32 %offset, 3803  br label %loop804 805loop: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, %add809  %gep.mul = getelementptr i8, ptr %dst.1, i32 %iv.mul810  store i32 0, ptr %gep.mul, align 8811  %iv.2.mul  = mul i32 %iv.2, %offset812  %gep = getelementptr i32, ptr %dst.2, i32 %iv.2.mul813  store i32 0, ptr %gep, align 8814  %iv.2.next = add i32 %iv.2, 1815  %iv.3.next = add i32 %iv.3, 1816  %ec = icmp eq i32 %iv.3, 200817  br i1 %ec, label %exit, label %loop818 819exit:820  ret void821}822