110 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -disable-output -passes='print<access-info>' %s 2>&1 | FileCheck %s --check-prefixes=CHECK,FULLDEPTH3; RUN: opt -disable-output -passes='print<access-info>' -max-forked-scev-depth=2 %s 2>&1 | FileCheck %s --check-prefixes=CHECK,DEPTH24 5define void @laa_common_output(ptr %Base, ptr %Dest, ptr %Preds) {6; CHECK-LABEL: 'laa_common_output'7; CHECK-NEXT: for.body:8; CHECK-NEXT: Report: cannot identify array bounds9; CHECK-NEXT: Dependences:10; CHECK-NEXT: Run-time memory checks:11; CHECK-NEXT: Grouped accesses:12; CHECK-EMPTY:13; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.14; CHECK-NEXT: SCEV assumptions:15; CHECK-EMPTY:16; CHECK-NEXT: Expressions re-written:17;18entry:19 br label %for.body20 21for.cond.cleanup: ; preds = %for.body22 ret void23 24for.body: ; preds = %entry, %for.body25 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]26 %i.014 = phi i32 [ 0, %entry ], [ %add, %for.body ]27 %arrayidx = getelementptr inbounds i32, ptr %Preds, i64 %indvars.iv28 %0 = load i32, ptr %arrayidx, align 429 %cmp1.not = icmp eq i32 %0, 030 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 131 %add = add nuw nsw i32 %i.014, 132 %1 = trunc i64 %indvars.iv to i3233 %offset.0 = select i1 %cmp1.not, i32 %add, i32 %134 %idxprom213 = zext i32 %offset.0 to i6435 %arrayidx3 = getelementptr inbounds float, ptr %Base, i64 %idxprom21336 %2 = load float, ptr %arrayidx3, align 437 %arrayidx5 = getelementptr inbounds float, ptr %Dest, i64 %indvars.iv38 store float %2, ptr %arrayidx5, align 439 %exitcond.not = icmp eq i64 %indvars.iv.next, 10040 br i1 %exitcond.not, label %for.cond.cleanup, label %for.body41}42 43define void @laa_divergent_output(ptr %Base, ptr %Dest, ptr %Preds, i64 %extra_offset) {44; FULLDEPTH-LABEL: 'laa_divergent_output'45; FULLDEPTH-NEXT: for.body:46; FULLDEPTH-NEXT: Memory dependences are safe with run-time checks47; FULLDEPTH-NEXT: Dependences:48; FULLDEPTH-NEXT: Run-time memory checks:49; FULLDEPTH-NEXT: Check 0:50; FULLDEPTH-NEXT: Comparing group GRP0:51; FULLDEPTH-NEXT: %arrayidx5 = getelementptr inbounds float, ptr %Dest, i64 %indvars.iv52; FULLDEPTH-NEXT: Against group GRP1:53; FULLDEPTH-NEXT: %arrayidx = getelementptr inbounds i32, ptr %Preds, i64 %indvars.iv54; FULLDEPTH-NEXT: Check 1:55; FULLDEPTH-NEXT: Comparing group GRP0:56; FULLDEPTH-NEXT: %arrayidx5 = getelementptr inbounds float, ptr %Dest, i64 %indvars.iv57; FULLDEPTH-NEXT: Against group GRP2:58; FULLDEPTH-NEXT: %arrayidx3 = getelementptr inbounds float, ptr %Base, i64 %offset59; FULLDEPTH-NEXT: %arrayidx3 = getelementptr inbounds float, ptr %Base, i64 %offset60; FULLDEPTH-NEXT: Grouped accesses:61; FULLDEPTH-NEXT: Group GRP0:62; FULLDEPTH-NEXT: (Low: %Dest High: (400 + %Dest))63; FULLDEPTH-NEXT: Member: {%Dest,+,4}<nuw><%for.body>64; FULLDEPTH-NEXT: Group GRP1:65; FULLDEPTH-NEXT: (Low: %Preds High: (400 + %Preds))66; FULLDEPTH-NEXT: Member: {%Preds,+,4}<nuw><%for.body>67; FULLDEPTH-NEXT: Group GRP2:68; FULLDEPTH-NEXT: (Low: ((4 * %extra_offset) + %Base) High: (404 + (4 * %extra_offset) + %Base))69; FULLDEPTH-NEXT: Member: {(4 + (4 * %extra_offset) + %Base),+,4}<%for.body>70; FULLDEPTH-NEXT: Member: {((4 * %extra_offset) + %Base),+,4}<%for.body>71; FULLDEPTH-EMPTY:72; FULLDEPTH-NEXT: Non vectorizable stores to invariant address were not found in loop.73; FULLDEPTH-NEXT: SCEV assumptions:74; FULLDEPTH-EMPTY:75; FULLDEPTH-NEXT: Expressions re-written:76;77; DEPTH2-LABEL: 'laa_divergent_output'78; DEPTH2-NEXT: for.body:79; DEPTH2-NEXT: Report: cannot identify array bounds80; DEPTH2-NEXT: Dependences:81; DEPTH2-NEXT: Run-time memory checks:82; DEPTH2-NEXT: Grouped accesses:83; DEPTH2-EMPTY:84; DEPTH2-NEXT: Non vectorizable stores to invariant address were not found in loop.85; DEPTH2-NEXT: SCEV assumptions:86; DEPTH2-EMPTY:87; DEPTH2-NEXT: Expressions re-written:88;89entry:90 br label %for.body91 92for.cond.cleanup: ; preds = %for.body93 ret void94 95for.body: ; preds = %entry, %for.body96 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]97 %arrayidx = getelementptr inbounds i32, ptr %Preds, i64 %indvars.iv98 %0 = load i32, ptr %arrayidx, align 499 %cmp.not = icmp eq i32 %0, 0100 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1101 %sel = select i1 %cmp.not, i64 %indvars.iv.next, i64 %indvars.iv102 %offset = add nuw nsw i64 %sel, %extra_offset103 %arrayidx3 = getelementptr inbounds float, ptr %Base, i64 %offset104 %1 = load float, ptr %arrayidx3, align 4105 %arrayidx5 = getelementptr inbounds float, ptr %Dest, i64 %indvars.iv106 store float %1, ptr %arrayidx5, align 4107 %exitcond.not = icmp eq i64 %indvars.iv.next, 100108 br i1 %exitcond.not, label %for.cond.cleanup, label %for.body109}110