1

LLVM API を使用してループ境界を取得したい。以下はコードの一部です。境界を取得することが正しいかどうかはわかりません。それで、私が考えていない他の状況はありますか?

typedef std::vector<Loop*> LoopNest;
typedef std::vector<const Value*> LoopNestBounds;
...
void getLoopNestBounds(const LoopNest &Nest, LoopNestBounds &LBounds) {
    ScalarEvolution &SE = getAnalysis<ScalarEvolution>();
    for (unsigned d = 0, n = Nestsize(); d != n; ++d) {
        if (SE.hasLoopInvariantBackedgeTakenCount(Nest[d])) {
            const SCEV *C = SE.getBackedgeTakenCount(Nest[d]);
            const SCEVConstant *CC = dyn_cast<const SCEVConstant>(C);
            LBounds.push_back(CC->getValue());
            errs() << CC->getValue()->getValue() << " iterations\n";
        }
        else {
            LBounds.push_back(0);
            errs() << "---- 0 iterations for the nest ----" << "\n";
        }
    }
}

注: LLVM のバージョンは 3.0 です。

4

0 に答える 0