Index: lib/Analysis/ScopBuilder.cpp =================================================================== --- lib/Analysis/ScopBuilder.cpp +++ lib/Analysis/ScopBuilder.cpp @@ -626,6 +626,13 @@ if (!isa(&Inst) && !isIgnoredIntrinsic(&Inst) && !canSynthesize(&Inst, *scop, &SE, L)) Instructions.push_back(&Inst); + if (MDNode *N = Inst.getMetadata("polly_split_after")) { + errs() << cast(N->getOperand(0))->getString() << "\n"; + Loop *SurroundingLoop = LI.getLoopFor(I->getNodeAs()); + scop->addScopStmt(I->getNodeAs(), SurroundingLoop, + Instructions); + Instructions.clear(); + } } Loop *SurroundingLoop = LI.getLoopFor(I->getNodeAs()); scop->addScopStmt(I->getNodeAs(), SurroundingLoop, Index: test/ScopInfo/statement.ll =================================================================== --- test/ScopInfo/statement.ll +++ test/ScopInfo/statement.ll @@ -29,7 +29,7 @@ Stmt: ; preds = %for.body %idxprom = sext i32 %i.0 to i64 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom - store i32 %i.0, i32* %arrayidx, align 4 + store i32 %i.0, i32* %arrayidx, align 4 !0 %idxprom1 = sext i32 %i.0 to i64 %arrayidx2 = getelementptr inbounds i32, i32* %B, i64 %idxprom1 store i32 %i.0, i32* %arrayidx2, align 4 @@ -42,3 +42,4 @@ for.end: ; preds = %for.cond ret void } +!0 = !{!"polly-split-after"}