|
| 1 | +; RUN: opt -S -polly-optree -polly-delicm -polly-opt-isl -polly-schedule-computeout=100000 -debug-only="polly-opt-isl" < %s 2>&1 | FileCheck %s |
| 2 | +; Bailout if the computations of schedule compute exceeds the max scheduling quota. |
| 3 | +; Max compute out is initialized to 300000, Here it is set to 100000 for test purpose. |
| 4 | + |
| 5 | +@a = dso_local local_unnamed_addr global ptr null, align 8 |
| 6 | +@b = dso_local local_unnamed_addr global ptr null, align 8 |
| 7 | +@c = dso_local local_unnamed_addr global ptr null, align 8 |
| 8 | + |
| 9 | +define dso_local void @foo(i32 noundef %I, i32 noundef %J, i32 noundef %K1, i32 noundef %K2, i32 noundef %L1, i32 noundef %L2) local_unnamed_addr { |
| 10 | +entry: |
| 11 | + %j = alloca i32, align 4 |
| 12 | + store volatile i32 0, ptr %j, align 4 |
| 13 | + %j.0.j.0.j.0.54 = load volatile i32, ptr %j, align 4 |
| 14 | + %cmp55 = icmp slt i32 %j.0.j.0.j.0.54, %J |
| 15 | + br i1 %cmp55, label %for.body.lr.ph, label %for.cond.cleanup |
| 16 | + |
| 17 | +for.body.lr.ph: ; preds = %entry |
| 18 | + %0 = load ptr, ptr @a, align 8 |
| 19 | + %1 = load ptr, ptr @b, align 8 |
| 20 | + %2 = load ptr, ptr %1, align 8 |
| 21 | + %cmp352 = icmp slt i32 %L1, %L2 |
| 22 | + %cmp750 = icmp slt i32 %K1, %K2 |
| 23 | + %3 = sext i32 %K1 to i64 |
| 24 | + %4 = sext i32 %L1 to i64 |
| 25 | + br label %for.body |
| 26 | + |
| 27 | +for.cond.cleanup: ; preds = %for.cond.cleanup4, %entry |
| 28 | + ret void |
| 29 | + |
| 30 | +for.body: ; preds = %for.cond.cleanup4, %for.body.lr.ph |
| 31 | + br i1 %cmp352, label %for.cond6.preheader.preheader, label %for.cond.cleanup4 |
| 32 | + |
| 33 | +for.cond6.preheader.preheader: ; preds = %for.body |
| 34 | + %wide.trip.count66 = sext i32 %L2 to i64 |
| 35 | + br label %for.cond6.preheader |
| 36 | + |
| 37 | +for.cond6.preheader: ; preds = %for.cond.cleanup8, %for.cond6.preheader.preheader |
| 38 | + %indvars.iv61 = phi i64 [ %4, %for.cond6.preheader.preheader ], [ %indvars.iv.next62, %for.cond.cleanup8 ] |
| 39 | + br i1 %cmp750, label %for.cond10.preheader.lr.ph, label %for.cond.cleanup8 |
| 40 | + |
| 41 | +for.cond10.preheader.lr.ph: ; preds = %for.cond6.preheader |
| 42 | + %5 = mul nsw i64 %indvars.iv61, 516 |
| 43 | + %6 = mul nsw i64 %indvars.iv61, 516 |
| 44 | + %wide.trip.count = sext i32 %K2 to i64 |
| 45 | + br label %for.cond10.preheader |
| 46 | + |
| 47 | +for.cond.cleanup4: ; preds = %for.cond.cleanup8, %for.body |
| 48 | + %j.0.j.0.j.0.45 = load volatile i32, ptr %j, align 4 |
| 49 | + %inc34 = add nsw i32 %j.0.j.0.j.0.45, 1 |
| 50 | + store volatile i32 %inc34, ptr %j, align 4 |
| 51 | + %j.0.j.0.j.0. = load volatile i32, ptr %j, align 4 |
| 52 | + %cmp = icmp slt i32 %j.0.j.0.j.0., %J |
| 53 | + br i1 %cmp, label %for.body, label %for.cond.cleanup |
| 54 | + |
| 55 | +for.cond10.preheader: ; preds = %for.cond.cleanup12, %for.cond10.preheader.lr.ph |
| 56 | + %indvars.iv = phi i64 [ %3, %for.cond10.preheader.lr.ph ], [ %indvars.iv.next, %for.cond.cleanup12 ] |
| 57 | + %7 = getelementptr float, ptr %0, i64 %indvars.iv |
| 58 | + %arrayidx18 = getelementptr float, ptr %7, i64 %5 |
| 59 | + %8 = load float, ptr %arrayidx18, align 4 |
| 60 | + br label %for.cond14.preheader |
| 61 | + |
| 62 | +for.cond.cleanup8: ; preds = %for.cond.cleanup12, %for.cond6.preheader |
| 63 | + %indvars.iv.next62 = add nsw i64 %indvars.iv61, 1 |
| 64 | + %exitcond67.not = icmp eq i64 %indvars.iv.next62, %wide.trip.count66 |
| 65 | + br i1 %exitcond67.not, label %for.cond.cleanup4, label %for.cond6.preheader |
| 66 | + |
| 67 | +for.cond14.preheader: ; preds = %for.cond.cleanup16, %for.cond10.preheader |
| 68 | + %m.049 = phi i32 [ -2, %for.cond10.preheader ], [ %inc21, %for.cond.cleanup16 ] |
| 69 | + %sum.048 = phi float [ 0.000000e+00, %for.cond10.preheader ], [ %add19, %for.cond.cleanup16 ] |
| 70 | + br label %for.body17 |
| 71 | + |
| 72 | +for.cond.cleanup12: ; preds = %for.cond.cleanup16 |
| 73 | + %9 = getelementptr float, ptr %2, i64 %indvars.iv |
| 74 | + %arrayidx26 = getelementptr float, ptr %9, i64 %6 |
| 75 | + store float %add19, ptr %arrayidx26, align 4 |
| 76 | + %indvars.iv.next = add nsw i64 %indvars.iv, 1 |
| 77 | + %exitcond60.not = icmp eq i64 %indvars.iv.next, %wide.trip.count |
| 78 | + br i1 %exitcond60.not, label %for.cond.cleanup8, label %for.cond10.preheader |
| 79 | + |
| 80 | +for.cond.cleanup16: ; preds = %for.body17 |
| 81 | + %inc21 = add nsw i32 %m.049, 1 |
| 82 | + %exitcond56.not = icmp eq i32 %inc21, 3 |
| 83 | + br i1 %exitcond56.not, label %for.cond.cleanup12, label %for.cond14.preheader |
| 84 | + |
| 85 | +for.body17: ; preds = %for.body17, %for.cond14.preheader |
| 86 | + %n.047 = phi i32 [ -2, %for.cond14.preheader ], [ %inc, %for.body17 ] |
| 87 | + %sum.146 = phi float [ %sum.048, %for.cond14.preheader ], [ %add19, %for.body17 ] |
| 88 | + %add19 = fadd float %sum.146, %8 |
| 89 | + %inc = add nsw i32 %n.047, 1 |
| 90 | + %exitcond.not = icmp eq i32 %inc, 3 |
| 91 | + br i1 %exitcond.not, label %for.cond.cleanup16, label %for.body17 |
| 92 | +} |
| 93 | + |
| 94 | +; CHECK: Schedule optimizer calculation exceeds ISL quota |
0 commit comments