brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 3af9e73 Raw
45 lines · plain
1; REQUIRES: asserts2; RUN: opt < %s -passes=loop-interchange -S -debug 2>&1 | FileCheck %s3 4; CHECK:       Dependency matrix before interchange:5; CHECK-NEXT:  = *6; CHECK-NEXT:  < *7; CHECK-NEXT:  Processing InnerLoopId8 9; This example is taken from github issue #5417610;11define void @foo(i32 noundef %n, i32 noundef %m, ptr nocapture noundef noalias %aa, ptr nocapture noundef readonly noalias %bb, ptr nocapture noundef writeonly noalias %cc) {12entry:13  %arrayidx7 = getelementptr inbounds i8, ptr %aa, i64 51214  br label %for.cond1.preheader15 16for.cond1.preheader:17  %indvars.iv32 = phi i64 [ 1, %entry ], [ %indvars.iv.next33, %for.cond.cleanup3 ]18  %0 = add nsw i64 %indvars.iv32, -119  %arrayidx9 = getelementptr inbounds [128 x float], ptr %arrayidx7, i64 0, i64 %020  %arrayidx12 = getelementptr inbounds [128 x float], ptr %arrayidx7, i64 0, i64 %indvars.iv3221  br label %for.body422 23for.cond.cleanup:24  ret void25 26for.cond.cleanup3:27  %indvars.iv.next33 = add nuw nsw i64 %indvars.iv32, 128  %exitcond36 = icmp ne i64 %indvars.iv.next33, 12829  br i1 %exitcond36, label %for.cond1.preheader, label %for.cond.cleanup30 31for.body4:32  %indvars.iv = phi i64 [ 1, %for.cond1.preheader ], [ %indvars.iv.next, %for.body4 ]33  %arrayidx6 = getelementptr inbounds [128 x float], ptr %bb, i64 %indvars.iv, i64 %indvars.iv3234  %1 = load float, ptr %arrayidx6, align 435  %2 = load float, ptr %arrayidx9, align 436  %add = fadd fast float %2, %137  store float %add, ptr %arrayidx9, align 438  %3 = load float, ptr %arrayidx12, align 439  %arrayidx16 = getelementptr inbounds [128 x float], ptr %cc, i64 %indvars.iv, i64 %indvars.iv3240  store float %3, ptr %arrayidx16, align 441  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 142  %exitcond = icmp ne i64 %indvars.iv.next, 102443  br i1 %exitcond, label %for.body4, label %for.cond.cleanup344}45