brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · 9a329b7 Raw
289 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 4define i32 @completely_before_or_after_true_dep_different_size(ptr %d) {5; CHECK-LABEL: 'completely_before_or_after_true_dep_different_size'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.128 = getelementptr i8, ptr %d, i64 12819  br label %loop20 21loop:22  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]23  %gep.128.iv = getelementptr i64, ptr %gep.128, i64 %iv24  store i64 0, ptr %gep.128.iv, align 825  %gep.iv = getelementptr i32, ptr %d, i64 %iv26  %l = load i32, ptr %gep.iv, align 427  %iv.next = add i64 %iv, 128  %ec = icmp eq i64 %iv.next, 3229  br i1 %ec, label %exit, label %loop30 31exit:32  ret i32 %l33}34 35define i32 @may_overlap_true_dep_different_size(ptr %d) {36; CHECK-LABEL: 'may_overlap_true_dep_different_size'37; CHECK-NEXT:    loop:38; CHECK-NEXT:      Memory dependences are safe with run-time checks39; CHECK-NEXT:      Dependences:40; CHECK-NEXT:      Run-time memory checks:41; CHECK-NEXT:      Check 0:42; CHECK-NEXT:        Comparing group GRP0:43; CHECK-NEXT:          %gep.128.iv = getelementptr i64, ptr %gep.128, i64 %iv44; CHECK-NEXT:        Against group GRP1:45; CHECK-NEXT:          %gep.iv = getelementptr i32, ptr %d, i64 %iv46; CHECK-NEXT:      Grouped accesses:47; CHECK-NEXT:        Group GRP0:48; CHECK-NEXT:          (Low: (127 + %d) High: (383 + %d))49; CHECK-NEXT:            Member: {(127 + %d),+,8}<nw><%loop>50; CHECK-NEXT:        Group GRP1:51; CHECK-NEXT:          (Low: %d High: (128 + %d))52; CHECK-NEXT:            Member: {%d,+,4}<nw><%loop>53; CHECK-EMPTY:54; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.55; CHECK-NEXT:      SCEV assumptions:56; CHECK-EMPTY:57; CHECK-NEXT:      Expressions re-written:58;59entry:60  %gep.128 = getelementptr i8, ptr %d, i64 12761  br label %loop62 63loop:64  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]65  %gep.128.iv = getelementptr i64, ptr %gep.128, i64 %iv66  store i64 0, ptr %gep.128.iv, align 867  %gep.iv= getelementptr i32, ptr %d, i64 %iv68  %l = load i32, ptr %gep.iv, align 469  %iv.next = add i64 %iv, 170  %ec = icmp eq i64 %iv.next, 3271  br i1 %ec, label %exit, label %loop72 73exit:74  ret i32 %l75}76 77define void @completely_after_stores_with_different_sizes(ptr %dst) {78; CHECK-LABEL: 'completely_after_stores_with_different_sizes'79; CHECK-NEXT:    loop:80; CHECK-NEXT:      Memory dependences are safe81; CHECK-NEXT:      Dependences: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.dst.128 = getelementptr nuw i8, ptr %dst, i64 12892  br label %loop93 94loop:95  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]96  %gep.iv = getelementptr i16, ptr %dst, i64 %iv97  store i16 0, ptr %gep.iv, align 298  %gep.dst.128.iv = getelementptr i8, ptr %gep.dst.128, i64 %iv99  store i8 0, ptr %gep.dst.128.iv, align 1100  %iv.next = add i64 %iv, 1101  %ec = icmp eq i64 %iv.next, 64102  br i1 %ec, label %exit, label %loop103 104exit:105  ret void106}107 108 109define void @may_overlap_stores_with_different_sizes(ptr %dst) {110; CHECK-LABEL: 'may_overlap_stores_with_different_sizes'111; CHECK-NEXT:    loop:112; CHECK-NEXT:      Memory dependences are safe with run-time checks113; CHECK-NEXT:      Dependences:114; CHECK-NEXT:      Run-time memory checks:115; CHECK-NEXT:      Check 0:116; CHECK-NEXT:        Comparing group GRP0:117; CHECK-NEXT:          %gep.iv = getelementptr i16, ptr %dst, i64 %iv118; CHECK-NEXT:        Against group GRP1:119; CHECK-NEXT:          %gep.dst.128.iv = getelementptr i8, ptr %gep.dst.128, i64 %iv120; CHECK-NEXT:      Grouped accesses:121; CHECK-NEXT:        Group GRP0:122; CHECK-NEXT:          (Low: %dst High: (130 + %dst))123; CHECK-NEXT:            Member: {%dst,+,2}<nw><%loop>124; CHECK-NEXT:        Group GRP1:125; CHECK-NEXT:          (Low: (128 + %dst)<nuw> High: (193 + %dst))126; CHECK-NEXT:            Member: {(128 + %dst)<nuw>,+,1}<nw><%loop>127; CHECK-EMPTY:128; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.129; CHECK-NEXT:      SCEV assumptions:130; CHECK-EMPTY:131; CHECK-NEXT:      Expressions re-written:132;133entry:134  %gep.dst.128 = getelementptr nuw i8, ptr %dst, i64 128135  br label %loop136 137loop:138  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]139  %gep.iv = getelementptr i16, ptr %dst, i64 %iv140  store i16 0, ptr %gep.iv, align 2141  %gep.dst.128.iv = getelementptr i8, ptr %gep.dst.128, i64 %iv142  store i8 0, ptr %gep.dst.128.iv, align 1143  %iv.next = add i64 %iv, 1144  %ec = icmp eq i64 %iv.next, 65145  br i1 %ec, label %exit, label %loop146 147exit:                            ; preds = %loop148  ret void149}150 151define void @completely_before_or_after_non_const_distance(ptr %dst) {152; CHECK-LABEL: 'completely_before_or_after_non_const_distance'153; CHECK-NEXT:    loop:154; CHECK-NEXT:      Memory dependences are safe155; CHECK-NEXT:      Dependences:156; CHECK-NEXT:      Run-time memory checks:157; CHECK-NEXT:      Grouped accesses:158; 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  %gep.off = getelementptr i8, ptr %dst, i64 576166  br label %loop167 168loop:169  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]170  %iv.mul = mul i64 %iv, 84171  %gep.404 = getelementptr i8, ptr %dst, i64 404172  %gep.iv.mul = getelementptr i8, ptr %gep.404, i64 %iv.mul173  store i32 0, ptr %gep.iv.mul, align 4174  %gep.off.iv = getelementptr i32, ptr %gep.off, i64 %iv175  store i32 0, ptr %gep.off.iv, align 4176  %iv.next = add i64 %iv, 1177  %ec = icmp eq i64 %iv.next, 3178  br i1 %ec, label %exit, label %loop179 180exit:181  ret void182}183 184define void @overlap_non_const_distance(ptr %dst) {185; CHECK-LABEL: 'overlap_non_const_distance'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:  Unknown data dependence.189; CHECK-NEXT:      Dependences:190; CHECK-NEXT:        Unknown:191; CHECK-NEXT:            store i32 0, ptr %gep.iv.mul, align 4 ->192; CHECK-NEXT:            store i32 0, ptr %gep.off.iv, 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  %gep.off = getelementptr i8, ptr %dst, i64 575204  br label %loop205 206loop:207  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]208  %iv.mul = mul i64 %iv, 84209  %gep.404 = getelementptr i8, ptr %dst, i64 404210  %gep.iv.mul = getelementptr i8, ptr %gep.404, i64 %iv.mul211  store i32 0, ptr %gep.iv.mul, align 4212  %gep.off.iv = getelementptr i32, ptr %gep.off, i64 %iv213  store i32 0, ptr %gep.off.iv, align 4214  %iv.next = add i64 %iv, 1215  %ec = icmp eq i64 %iv.next, 3216  br i1 %ec, label %exit, label %loop217 218exit:219  ret void220}221 222define void @accesses_completely_before_or_after_instead_backwards_vectorizable(ptr dereferenceable(800) %dst) {223; CHECK-LABEL: 'accesses_completely_before_or_after_instead_backwards_vectorizable'224; CHECK-NEXT:    loop:225; CHECK-NEXT:      Memory dependences are safe226; CHECK-NEXT:      Dependences:227; CHECK-NEXT:      Run-time memory checks:228; CHECK-NEXT:      Grouped accesses:229; CHECK-EMPTY:230; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.231; CHECK-NEXT:      SCEV assumptions:232; CHECK-EMPTY:233; CHECK-NEXT:      Expressions re-written:234;235entry:236  br label %loop237 238loop:239  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]240  %mul.2 = shl i64 %iv, 1241  %gep.mul.2 = getelementptr i16, ptr %dst, i64 %mul.2242  store i16 0, ptr %gep.mul.2, align 2243  %iv.32 = add i64 %iv, 32244  %gep.iv.32 = getelementptr i16, ptr %dst, i64 %iv.32245  store i16 0, ptr %gep.iv.32, align 2246  %iv.next = add i64 %iv, 1247  %ec = icmp eq i64 %iv, 15248  br i1 %ec, label %exit, label %loop249 250exit:251  ret void252}253 254define void @accesses_may_overlap_backwards_vectorizable(ptr dereferenceable(800) %dst) {255; CHECK-LABEL: 'accesses_may_overlap_backwards_vectorizable'256; CHECK-NEXT:    loop:257; CHECK-NEXT:      Memory dependences are safe with a maximum safe vector width of 128 bits258; CHECK-NEXT:      Dependences:259; CHECK-NEXT:        BackwardVectorizable:260; CHECK-NEXT:            store i16 0, ptr %gep.mul.2, align 2 ->261; CHECK-NEXT:            store i16 0, ptr %gep.iv.32, align 2262; CHECK-EMPTY:263; CHECK-NEXT:      Run-time memory checks:264; CHECK-NEXT:      Grouped accesses:265; CHECK-EMPTY:266; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.267; CHECK-NEXT:      SCEV assumptions:268; CHECK-EMPTY:269; CHECK-NEXT:      Expressions re-written:270;271entry:272  br label %loop273 274loop:275  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]276  %mul.2 = shl i64 %iv, 1277  %gep.mul.2 = getelementptr i16, ptr %dst, i64 %mul.2278  store i16 0, ptr %gep.mul.2, align 2279  %iv.32 = add i64 %iv, 32280  %gep.iv.32 = getelementptr i16, ptr %dst, i64 %iv.32281  store i16 0, ptr %gep.iv.32, align 2282  %iv.next = add i64 %iv, 1283  %ec = icmp eq i64 %iv, 16284  br i1 %ec, label %exit, label %loop285 286exit:287  ret void288}289