Получить информацию об анализе RegionPass из FunctionPass - PullRequest
0 голосов
/ 01 мая 2018

У меня есть RegionPass, результаты анализа которого я хочу использовать в FunctionPass.

class RPass : public RegionPass{
    bool runOnRegion(...) { ... };
}

class FPass : public FunctionPass {
    bool runOnFunction(Function &F){
        // Get a list of regions in the function
        auto RI = &getAnalysis<RegionInfoPass>().getRegionInfo();
        std::deque<Region *> RQ = getRegionList(RI->getTopLevelRegion());

        for(Region *R : RQ){
            /* In this step, I want to get the analysis results 
             * for the Region from the RPass */
            RPass *RPI = &getAnalysis<RPass>(R);
            ...
        }
    }
    void getAnalysisUsage(AnalysisUsage &AU){
        AU.addRequired<RPass>();
        ...
        AU.setPreservesAll();
    }
}

К сожалению, доступны только следующие функции: getAnalysis () и getAnalysis (Function & F) .

* RPass RPI = & getAnalysis (); вызывает ошибку времени выполнения:

Assertion 'ResultPass && "getAnalysis*() called on an analysis that wa not " "'required' by pass!"' failed

и * RPass RPI = & getAnalysis (R); вызывает ошибку компиляции:

error: no matching function for call to 'FPass::getAnalysis(llvm::Region*&)

Есть идеи, как получить необходимую информацию? Документация по написанию пропусков LLVM ведет в тупик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...