brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · 8328591 Raw
216 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 4; Test cases for using the backedge-taken-count to rule out dependencies between5; an invariant and strided accesses.6 7define void @test_distance_greater_than_BTC_100(ptr %a) {8; CHECK-LABEL: 'test_distance_greater_than_BTC_100'9; CHECK-NEXT:    loop:10; CHECK-NEXT:      Memory dependences are safe11; CHECK-NEXT:      Dependences:12; CHECK-NEXT:      Run-time memory checks:13; CHECK-NEXT:      Grouped accesses:14; CHECK-EMPTY:15; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.16; CHECK-NEXT:      SCEV assumptions:17; CHECK-EMPTY:18; CHECK-NEXT:      Expressions re-written:19;20entry:21  %gep.x = getelementptr i32, ptr %a, i32 10022  br label %loop23 24loop:25  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]26  %gep = getelementptr i32, ptr %a, i32 %iv27  %l = load i32, ptr %gep.x28  store i32 %l, ptr %gep29  %iv.next = add i32 %iv, 130  %ec = icmp eq i32 %iv.next, 10031  br i1 %ec, label %exit, label %loop32 33exit:34  ret void35}36 37define void @test_distance_much_greater_than_BTC_100(ptr %a) {38; CHECK-LABEL: 'test_distance_much_greater_than_BTC_100'39; CHECK-NEXT:    loop:40; 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 loop41; CHECK-NEXT:  Unknown data dependence.42; CHECK-NEXT:      Dependences:43; CHECK-NEXT:        Unknown:44; CHECK-NEXT:            %l = load i32, ptr %gep.x, align 4 ->45; CHECK-NEXT:            store i32 %l, ptr %gep, align 446; CHECK-EMPTY:47; CHECK-NEXT:      Run-time memory checks:48; CHECK-NEXT:      Grouped accesses:49; CHECK-EMPTY:50; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.51; CHECK-NEXT:      SCEV assumptions:52; CHECK-EMPTY:53; CHECK-NEXT:      Expressions re-written:54;55entry:56  %gep.x = getelementptr i32, ptr %a, i32 20057  br label %loop58 59loop:60  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]61  %gep = getelementptr i32, ptr %a, i32 %iv62  %l = load i32, ptr %gep.x63  store i32 %l, ptr %gep64  %iv.next = add i32 %iv, 165  %ec = icmp eq i32 %iv.next, 10066  br i1 %ec, label %exit, label %loop67 68exit:69  ret void70}71 72define void @test_distance_equal_BTC_100(ptr %a) {73; CHECK-LABEL: 'test_distance_equal_BTC_100'74; CHECK-NEXT:    loop:75; 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 loop76; CHECK-NEXT:  Unknown data dependence.77; CHECK-NEXT:      Dependences:78; CHECK-NEXT:        Unknown:79; CHECK-NEXT:            %l = load i32, ptr %gep.x, align 4 ->80; CHECK-NEXT:            store i32 %l, ptr %gep, align 481; CHECK-EMPTY:82; CHECK-NEXT:      Run-time memory checks:83; CHECK-NEXT:      Grouped accesses:84; CHECK-EMPTY:85; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.86; CHECK-NEXT:      SCEV assumptions:87; CHECK-EMPTY:88; CHECK-NEXT:      Expressions re-written:89;90entry:91  %gep.x = getelementptr i32, ptr %a, i32 9992  br label %loop93 94loop:95  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]96  %gep = getelementptr i32, ptr %a, i32 %iv97  %l = load i32, ptr %gep.x98  store i32 %l, ptr %gep99  %iv.next = add i32 %iv, 1100  %ec = icmp eq i32 %iv.next, 100101  br i1 %ec, label %exit, label %loop102 103exit:104  ret void105}106 107define void @test_distance_greater_than_BTC_10000(ptr %a) {108; CHECK-LABEL: 'test_distance_greater_than_BTC_10000'109; CHECK-NEXT:    loop:110; CHECK-NEXT:      Memory dependences are safe111; CHECK-NEXT:      Dependences:112; CHECK-NEXT:      Run-time memory checks:113; CHECK-NEXT:      Grouped accesses:114; CHECK-EMPTY:115; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.116; CHECK-NEXT:      SCEV assumptions:117; CHECK-EMPTY:118; CHECK-NEXT:      Expressions re-written:119;120entry:121  %gep.x = getelementptr i32, ptr %a, i32 10000122  br label %loop123 124loop:125  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]126  %gep = getelementptr i32, ptr %a, i32 %iv127  %l = load i32, ptr %gep.x128  store i32 %l, ptr %gep129  %iv.next = add i32 %iv, 1130  %ec = icmp eq i32 %iv.next, 10000131  br i1 %ec, label %exit, label %loop132 133exit:134  ret void135}136 137define void @test_distance_equal_to_BTC_10000(ptr %a) {138; CHECK-LABEL: 'test_distance_equal_to_BTC_10000'139; CHECK-NEXT:    loop:140; 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 loop141; CHECK-NEXT:  Unknown data dependence.142; CHECK-NEXT:      Dependences:143; CHECK-NEXT:        Unknown:144; CHECK-NEXT:            %l = load i32, ptr %gep.x, align 4 ->145; CHECK-NEXT:            store i32 %l, ptr %gep, align 4146; CHECK-EMPTY:147; CHECK-NEXT:      Run-time memory checks:148; CHECK-NEXT:      Grouped accesses:149; CHECK-EMPTY:150; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.151; CHECK-NEXT:      SCEV assumptions:152; CHECK-EMPTY:153; CHECK-NEXT:      Expressions re-written:154;155entry:156  %gep.x = getelementptr i32, ptr %a, i32 9999157  br label %loop158 159loop:160  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]161  %gep = getelementptr i32, ptr %a, i32 %iv162  %l = load i32, ptr %gep.x163  store i32 %l, ptr %gep164  %iv.next = add i32 %iv, 1165  %ec = icmp eq i32 %iv.next, 100000166  br i1 %ec, label %exit, label %loop167 168exit:169  ret void170}171 172define void @test_btc_is_unknown_value(ptr %a, i32 %N) {173; CHECK-LABEL: 'test_btc_is_unknown_value'174; CHECK-NEXT:    loop:175; 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 loop176; CHECK-NEXT:  Unknown data dependence.177; CHECK-NEXT:      Dependences:178; CHECK-NEXT:        Unknown:179; CHECK-NEXT:            %l = load i32, ptr %gep.x, align 4 ->180; CHECK-NEXT:            store i32 %l, ptr %gep, align 4181; CHECK-EMPTY:182; CHECK-NEXT:      Run-time memory checks:183; CHECK-NEXT:      Grouped accesses:184; CHECK-NEXT:        Group GRP0:185; CHECK-NEXT:          (Low: (400 + %a) High: (404 + %a))186; CHECK-NEXT:            Member: (400 + %a)187; CHECK-NEXT:        Group GRP1:188; CHECK-NEXT:          (Low: %a High: (4 + (4 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %a))189; CHECK-NEXT:            Member: {%a,+,4}<nw><%loop>190; CHECK-EMPTY:191; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.192; CHECK-NEXT:      SCEV assumptions:193; CHECK-NEXT:      {0,+,1}<nuw><%loop> Added Flags: <nssw>194; CHECK-EMPTY:195; CHECK-NEXT:      Expressions re-written:196; CHECK-NEXT:      [PSE] %gep = getelementptr i32, ptr %a, i32 %iv:197; CHECK-NEXT:        ((4 * (sext i32 {0,+,1}<nuw><%loop> to i64))<nsw> + %a)198; CHECK-NEXT:        --> {%a,+,4}<nw><%loop>199;200entry:201  %gep.x = getelementptr i32, ptr %a, i32 100202  br label %loop203 204loop:205  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]206  %gep = getelementptr i32, ptr %a, i32 %iv207  %l = load i32, ptr %gep.x208  store i32 %l, ptr %gep209  %iv.next = add i32 %iv, 1210  %ec = icmp eq i32 %iv.next, %N211  br i1 %ec, label %exit, label %loop212 213exit:214  ret void215}216