brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · e319c89 Raw
180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes='print<access-info>' -disable-output %s 2>&1 | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"5 6define void @runtime_checks_with_symbolic_max_btc_neg_1(ptr %P, ptr %S, i32 %x, i32 %y) {7; CHECK-LABEL: 'runtime_checks_with_symbolic_max_btc_neg_1'8; CHECK-NEXT:    loop:9; CHECK-NEXT:      Memory dependences are safe with run-time checks10; CHECK-NEXT:      Dependences:11; CHECK-NEXT:      Run-time memory checks:12; CHECK-NEXT:      Check 0:13; CHECK-NEXT:        Comparing group GRP0:14; CHECK-NEXT:          %gep.iv = getelementptr inbounds i32, ptr %P, i32 %iv15; CHECK-NEXT:        Against group GRP1:16; CHECK-NEXT:        ptr %S17; CHECK-NEXT:      Grouped accesses:18; CHECK-NEXT:        Group GRP0:19; CHECK-NEXT:          (Low: ((4 * %y) + %P) High: inttoptr (i32 -1 to ptr))20; CHECK-NEXT:            Member: {((4 * %y) + %P),+,4}<%loop>21; CHECK-NEXT:        Group GRP1:22; CHECK-NEXT:          (Low: %S High: (4 + %S))23; CHECK-NEXT:            Member: %S24; CHECK-EMPTY:25; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.26; CHECK-NEXT:      SCEV assumptions:27; CHECK-EMPTY:28; CHECK-NEXT:      Expressions re-written:29;30entry:31  br label %loop32 33loop:34  %iv = phi i32 [ %y, %entry ], [ %iv.next, %loop ]35  %gep.iv = getelementptr inbounds i32, ptr %P, i32 %iv36  %l = load i32, ptr %S37  store i32 %l, ptr %gep.iv, align 438  %iv.next = add nsw i32 %iv, 139  %c.2 = icmp slt i32 %iv.next, %l40  br i1 %c.2, label %loop, label %exit41 42exit:43  ret void44}45 46define void @runtime_check_with_symbolic_max_btc_neg_2(ptr %P, ptr %S, i32 %x, i32 %y) {47; CHECK-LABEL: 'runtime_check_with_symbolic_max_btc_neg_2'48; CHECK-NEXT:    loop:49; CHECK-NEXT:      Memory dependences are safe with run-time checks50; CHECK-NEXT:      Dependences:51; CHECK-NEXT:      Run-time memory checks:52; CHECK-NEXT:      Check 0:53; CHECK-NEXT:        Comparing group GRP0:54; CHECK-NEXT:          %gep.iv = getelementptr inbounds i32, ptr %P, i32 %iv55; CHECK-NEXT:        Against group GRP1:56; CHECK-NEXT:        ptr %S57; CHECK-NEXT:      Grouped accesses:58; CHECK-NEXT:        Group GRP0:59; CHECK-NEXT:          (Low: ((4 * %y) + %P) High: inttoptr (i32 -1 to ptr))60; CHECK-NEXT:            Member: {((4 * %y) + %P),+,4}<%loop>61; CHECK-NEXT:        Group GRP1:62; CHECK-NEXT:          (Low: %S High: (4 + %S))63; CHECK-NEXT:            Member: %S64; CHECK-EMPTY:65; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.66; CHECK-NEXT:      SCEV assumptions:67; CHECK-EMPTY:68; CHECK-NEXT:      Expressions re-written:69;70entry:71  br label %loop72 73loop:74  %iv = phi i32 [ %y, %entry ], [ %iv.next, %loop ]75  %gep.iv = getelementptr inbounds i32, ptr %P, i32 %iv76  %l = load i32, ptr %S77  store i32 %l, ptr %gep.iv, align 478  %iv.next = add nsw i32 %iv, 179  %a = and i32 %l, -280  %c.2 = icmp slt i32 %iv.next, %a81  br i1 %c.2, label %loop, label %exit82 83exit:84  ret void85}86 87define i32 @check_no_dep_via_bounds_compare_symbolic_max_btc_neg_1(ptr %P, i32 %x, i32 %y) {88; CHECK-LABEL: 'check_no_dep_via_bounds_compare_symbolic_max_btc_neg_1'89; CHECK-NEXT:    loop:90; 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 loop91; CHECK-NEXT:  Unknown data dependence.92; CHECK-NEXT:      Dependences:93; CHECK-NEXT:        Unknown:94; CHECK-NEXT:            store i64 0, ptr %gep.iv, align 4 ->95; CHECK-NEXT:            %l.2 = load i32, ptr %gep.P.4, align 496; CHECK-EMPTY:97; CHECK-NEXT:        Unknown:98; CHECK-NEXT:            %l = load i32, ptr %gep.iv, align 4 ->99; CHECK-NEXT:            store i64 0, ptr %gep.iv, align 4100; CHECK-EMPTY:101; CHECK-NEXT:      Run-time memory checks:102; CHECK-NEXT:      Grouped accesses:103; CHECK-EMPTY:104; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.105; CHECK-NEXT:      SCEV assumptions:106; CHECK-EMPTY:107; CHECK-NEXT:      Expressions re-written:108;109entry:110  %gep.P.4 = getelementptr inbounds nuw i8, ptr %P, i32 4111  %gep.P.8 = getelementptr inbounds nuw i8, ptr %P, i32 8112  br label %loop113 114loop:115  %1 = phi i32 [ %x, %entry ], [ %sel, %loop.latch ]116  %iv = phi i32 [ %y, %entry ], [ %iv.next, %loop.latch ]117  %gep.iv = getelementptr inbounds i64, ptr %gep.P.8, i32 %iv118  %l = load i32, ptr %gep.iv, align 4119  %c.1 = icmp eq i32 %l, 3120  br i1 %c.1, label %loop.latch, label %if.then121 122if.then:                                          ; preds = %for.body123  store i64 0, ptr %gep.iv, align 4124  %l.2 = load i32, ptr %gep.P.4125  br label %loop.latch126 127loop.latch:128  %sel = phi i32 [ %l.2, %if.then ], [ %1, %loop ]129  %iv.next = add nsw i32 %iv, 1130  %c.2 = icmp slt i32 %iv.next, %sel131  br i1 %c.2, label %loop, label %exit132 133exit:134  %res = phi i32 [ %iv.next, %loop.latch ]135  ret i32 %res136}137 138; Evaluating at symbolic max BTC wraps around to a positive139; offset: (2 + (2 * %y) + %P).140define void @runtime_check_with_symbolic_max_wraps_to_positive_offset(ptr %P, ptr %S, i32 %x, i32 %y) {141; CHECK-LABEL: 'runtime_check_with_symbolic_max_wraps_to_positive_offset'142; CHECK-NEXT:    loop:143; CHECK-NEXT:      Memory dependences are safe with run-time checks144; CHECK-NEXT:      Dependences:145; CHECK-NEXT:      Run-time memory checks:146; CHECK-NEXT:      Check 0:147; CHECK-NEXT:        Comparing group GRP0:148; CHECK-NEXT:          %gep.iv = getelementptr inbounds i16, ptr %P, i32 %iv149; CHECK-NEXT:        Against group GRP1:150; CHECK-NEXT:        ptr %S151; CHECK-NEXT:      Grouped accesses:152; CHECK-NEXT:        Group GRP0:153; CHECK-NEXT:          (Low: ((2 * %y) + %P) High: inttoptr (i32 -1 to ptr))154; CHECK-NEXT:            Member: {((2 * %y) + %P),+,2}<%loop>155; CHECK-NEXT:        Group GRP1:156; CHECK-NEXT:          (Low: %S High: (4 + %S))157; CHECK-NEXT:            Member: %S158; CHECK-EMPTY:159; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.160; CHECK-NEXT:      SCEV assumptions:161; CHECK-EMPTY:162; CHECK-NEXT:      Expressions re-written:163;164entry:165  br label %loop166 167loop:168  %iv = phi i32 [ %y, %entry ], [ %iv.next, %loop ]169  %gep.iv = getelementptr inbounds i16 , ptr %P, i32 %iv170  %l = load i32, ptr %S171  store i16 0, ptr %gep.iv, align 4172  %iv.next = add nsw i32 %iv, 1173  %a = and i32 %l, 2147483648174  %c.2 = icmp slt i32 %iv.next, %a175  br i1 %c.2, label %loop, label %exit176 177exit:178  ret void179}180