brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · d3eda21 Raw
311 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 42; RUN: opt -passes='print<access-info>' -disable-output  < %s 2>&1 | FileCheck %s3 4define void @forward_dist_7(ptr %A, ptr noalias %B) {5; CHECK-LABEL: 'forward_dist_7'6; CHECK-NEXT:    loop:7; 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 loop8; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.9; CHECK-NEXT:      Dependences:10; CHECK-NEXT:        ForwardButPreventsForwarding:11; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->12; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 413; CHECK-EMPTY:14; CHECK-NEXT:      Run-time memory checks:15; CHECK-NEXT:      Grouped accesses:16; CHECK-EMPTY:17; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.18; CHECK-NEXT:      SCEV assumptions:19; CHECK-EMPTY:20; CHECK-NEXT:      Expressions re-written:21;22entry:23  br label %loop24 25loop:26  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]27  %gep.1  = getelementptr i32, ptr %A, i64 %iv28  %gep.2  = getelementptr i32, ptr %gep.1, i64 729  store i32 0, ptr %gep.2, align 430  %l = load i32, ptr %gep.131  store i32 %l, ptr %B32  %next = add nuw nsw i64 %iv, 133  %ec = icmp eq i64 %iv, 100034  br i1 %ec, label %exit, label %loop35 36exit:37  ret void38}39 40define void @forward_dist_9(ptr %A, ptr noalias %B) {41; CHECK-LABEL: 'forward_dist_9'42; CHECK-NEXT:    loop:43; 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 loop44; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.45; CHECK-NEXT:      Dependences:46; CHECK-NEXT:        ForwardButPreventsForwarding:47; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->48; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 449; CHECK-EMPTY:50; CHECK-NEXT:      Run-time memory checks:51; CHECK-NEXT:      Grouped accesses:52; CHECK-EMPTY:53; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.54; CHECK-NEXT:      SCEV assumptions:55; CHECK-EMPTY:56; CHECK-NEXT:      Expressions re-written:57;58entry:59  br label %loop60 61loop:62  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]63  %gep.1  = getelementptr i32, ptr %A, i64 %iv64  %gep.2  = getelementptr i32, ptr %gep.1, i64 965  store i32 0, ptr %gep.2, align 466  %l = load i32, ptr %gep.167  store i32 %l, ptr %B68  %next = add nuw nsw i64 %iv, 169  %ec = icmp eq i64 %iv, 100070  br i1 %ec, label %exit, label %loop71 72exit:73  ret void74}75 76define void @forward_dist_11(ptr %A, ptr noalias %B) {77; CHECK-LABEL: 'forward_dist_11'78; CHECK-NEXT:    loop:79; 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 loop80; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.81; CHECK-NEXT:      Dependences:82; CHECK-NEXT:        ForwardButPreventsForwarding:83; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->84; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 485; CHECK-EMPTY:86; CHECK-NEXT:      Run-time memory checks:87; CHECK-NEXT:      Grouped accesses:88; CHECK-EMPTY:89; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.90; CHECK-NEXT:      SCEV assumptions:91; CHECK-EMPTY:92; CHECK-NEXT:      Expressions re-written:93;94entry:95  br label %loop96 97loop:98  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]99  %gep.1  = getelementptr i32, ptr %A, i64 %iv100  %gep.2  = getelementptr i32, ptr %gep.1, i64 9101  store i32 0, ptr %gep.2, align 4102  %l = load i32, ptr %gep.1103  store i32 %l, ptr %B104  %next = add nuw nsw i64 %iv, 1105  %ec = icmp eq i64 %iv, 1000106  br i1 %ec, label %exit, label %loop107 108exit:109  ret void110}111 112define void @forward_dist_13(ptr %A, ptr noalias %B) {113; CHECK-LABEL: 'forward_dist_13'114; CHECK-NEXT:    loop:115; 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 loop116; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.117; CHECK-NEXT:      Dependences:118; CHECK-NEXT:        ForwardButPreventsForwarding:119; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->120; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 4121; CHECK-EMPTY:122; CHECK-NEXT:      Run-time memory checks:123; CHECK-NEXT:      Grouped accesses:124; CHECK-EMPTY:125; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.126; CHECK-NEXT:      SCEV assumptions:127; CHECK-EMPTY:128; CHECK-NEXT:      Expressions re-written:129;130entry:131  br label %loop132 133loop:134  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]135  %gep.1  = getelementptr i32, ptr %A, i64 %iv136  %gep.2  = getelementptr i32, ptr %gep.1, i64 13137  store i32 0, ptr %gep.2, align 4138  %l = load i32, ptr %gep.1139  store i32 %l, ptr %B140  %next = add nuw nsw i64 %iv, 1141  %ec = icmp eq i64 %iv, 1000142  br i1 %ec, label %exit, label %loop143 144exit:145  ret void146}147 148define void @forward_dist_15(ptr %A, ptr noalias %B) {149; CHECK-LABEL: 'forward_dist_15'150; CHECK-NEXT:    loop:151; 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 loop152; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.153; CHECK-NEXT:      Dependences:154; CHECK-NEXT:        ForwardButPreventsForwarding:155; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->156; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 4157; CHECK-EMPTY:158; CHECK-NEXT:      Run-time memory checks:159; CHECK-NEXT:      Grouped accesses:160; CHECK-EMPTY:161; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.162; CHECK-NEXT:      SCEV assumptions:163; CHECK-EMPTY:164; CHECK-NEXT:      Expressions re-written:165;166entry:167  br label %loop168 169loop:170  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]171  %gep.1  = getelementptr i32, ptr %A, i64 %iv172  %gep.2  = getelementptr i32, ptr %gep.1, i64 13173  store i32 0, ptr %gep.2, align 4174  %l = load i32, ptr %gep.1175  store i32 %l, ptr %B176  %next = add nuw nsw i64 %iv, 1177  %ec = icmp eq i64 %iv, 1000178  br i1 %ec, label %exit, label %loop179 180exit:181  ret void182}183 184define void @forward_dist_17(ptr %A, ptr noalias %B) {185; CHECK-LABEL: 'forward_dist_17'186; CHECK-NEXT:    loop:187; 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 loop188; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.189; CHECK-NEXT:      Dependences:190; CHECK-NEXT:        ForwardButPreventsForwarding:191; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->192; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 4193; CHECK-EMPTY:194; CHECK-NEXT:      Run-time memory checks:195; CHECK-NEXT:      Grouped accesses:196; CHECK-EMPTY:197; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.198; CHECK-NEXT:      SCEV assumptions:199; CHECK-EMPTY:200; CHECK-NEXT:      Expressions re-written:201;202entry:203  br label %loop204 205loop:206  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]207  %gep.1  = getelementptr i32, ptr %A, i64 %iv208  %gep.2  = getelementptr i32, ptr %gep.1, i64 17209  store i32 0, ptr %gep.2, align 4210  %l = load i32, ptr %gep.1211  store i32 %l, ptr %B212  %next = add nuw nsw i64 %iv, 1213  %ec = icmp eq i64 %iv, 1000214  br i1 %ec, label %exit, label %loop215 216exit:217  ret void218}219 220define void @forward_dist_19(ptr %A, ptr noalias %B) {221; CHECK-LABEL: 'forward_dist_19'222; CHECK-NEXT:    loop:223; 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 loop224; CHECK-NEXT:  Forward loop carried data dependence that prevents store-to-load forwarding.225; CHECK-NEXT:      Dependences:226; CHECK-NEXT:        ForwardButPreventsForwarding:227; CHECK-NEXT:            store i32 0, ptr %gep.2, align 4 ->228; CHECK-NEXT:            %l = load i32, ptr %gep.1, align 4229; CHECK-EMPTY:230; CHECK-NEXT:      Run-time memory checks:231; CHECK-NEXT:      Grouped accesses:232; CHECK-EMPTY:233; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.234; CHECK-NEXT:      SCEV assumptions:235; CHECK-EMPTY:236; CHECK-NEXT:      Expressions re-written:237;238entry:239  br label %loop240 241loop:242  %iv = phi i64 [ 0, %entry ], [ %next, %loop ]243  %gep.1  = getelementptr i32, ptr %A, i64 %iv244  %gep.2  = getelementptr i32, ptr %gep.1, i64 19245  store i32 0, ptr %gep.2, align 4246  %l = load i32, ptr %gep.1247  store i32 %l, ptr %B248  %next = add nuw nsw i64 %iv, 1249  %ec = icmp eq i64 %iv, 1000250  br i1 %ec, label %exit, label %loop251 252exit:253  ret void254}255 256@A = global [37 x [37 x double]] zeroinitializer, align 8257 258define void @unknown_loop_bounds(i64 %x, i64 %y) {259; CHECK-LABEL: 'unknown_loop_bounds'260; CHECK-NEXT:    inner:261; 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 loop262; CHECK-NEXT:  Backward loop carried data dependence that prevents store-to-load forwarding.263; CHECK-NEXT:      Dependences:264; CHECK-NEXT:        BackwardVectorizableButPreventsForwarding:265; CHECK-NEXT:            %l = load double, ptr %gep.0, align 8 ->266; CHECK-NEXT:            store double %l, ptr %gep.1, align 8267; CHECK-EMPTY:268; CHECK-NEXT:      Run-time memory checks:269; CHECK-NEXT:      Grouped accesses:270; CHECK-EMPTY:271; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.272; CHECK-NEXT:      SCEV assumptions:273; CHECK-EMPTY:274; CHECK-NEXT:      Expressions re-written:275; CHECK-NEXT:    outer.header:276; CHECK-NEXT:      Report: loop is not the innermost loop277; CHECK-NEXT:      Dependences:278; CHECK-NEXT:      Run-time memory checks:279; CHECK-NEXT:      Grouped accesses:280; CHECK-EMPTY:281; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.282; CHECK-NEXT:      SCEV assumptions:283; CHECK-EMPTY:284; CHECK-NEXT:      Expressions re-written:285;286entry:287  br label %outer.header288 289outer.header:290  %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]291  %outer.iv.next = add nuw nsw i64 %outer.iv, 1292  br label %inner293 294inner:295  %inner.iv = phi i64 [ 0, %outer.header ], [ %inner.iv.next, %inner ]296  %gep.0 = getelementptr inbounds [37 x [37 x double]], ptr @A, i64 0, i64 %outer.iv, i64 %inner.iv297  %l = load double, ptr %gep.0, align 8298  %gep.1 = getelementptr inbounds [37 x [37 x double]], ptr @A, i64 0, i64 %outer.iv.next, i64 %inner.iv299  store double %l, ptr %gep.1, align 8300  %inner.iv.next = add nuw nsw i64 %inner.iv, 1301  %inner.ec = icmp eq i64 %inner.iv.next, %y302  br i1 %inner.ec, label %outer.latch, label %inner303 304outer.latch:305  %outer.ec = icmp eq i64 %outer.iv.next, %x306  br i1 %outer.ec, label %exit, label %outer.header307 308exit:309  ret void310}311