当前位置: 首页>>代码示例>>C++>>正文


C++ LiveQueryResult::valueOut方法代码示例

本文整理汇总了C++中LiveQueryResult::valueOut方法的典型用法代码示例。如果您正苦于以下问题:C++ LiveQueryResult::valueOut方法的具体用法?C++ LiveQueryResult::valueOut怎么用?C++ LiveQueryResult::valueOut使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在LiveQueryResult的用法示例。


在下文中一共展示了LiveQueryResult::valueOut方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: pruneValue

void LiveIntervals::pruneValue(LiveInterval *LI, SlotIndex Kill,
                               SmallVectorImpl<SlotIndex> *EndPoints) {
    LiveQueryResult LRQ = LI->Query(Kill);
    VNInfo *VNI = LRQ.valueOut();
    if (!VNI)
        return;

    MachineBasicBlock *KillMBB = Indexes->getMBBFromIndex(Kill);
    SlotIndex MBBStart, MBBEnd;
    std::tie(MBBStart, MBBEnd) = Indexes->getMBBRange(KillMBB);

    // If VNI isn't live out from KillMBB, the value is trivially pruned.
    if (LRQ.endPoint() < MBBEnd) {
        LI->removeSegment(Kill, LRQ.endPoint());
        if (EndPoints) EndPoints->push_back(LRQ.endPoint());
        return;
    }

    // VNI is live out of KillMBB.
    LI->removeSegment(Kill, MBBEnd);
    if (EndPoints) EndPoints->push_back(MBBEnd);

    // Find all blocks that are reachable from KillMBB without leaving VNI's live
    // range. It is possible that KillMBB itself is reachable, so start a DFS
    // from each successor.
    typedef SmallPtrSet<MachineBasicBlock*, 9> VisitedTy;
    VisitedTy Visited;
    for (MachineBasicBlock::succ_iterator
            SuccI = KillMBB->succ_begin(), SuccE = KillMBB->succ_end();
            SuccI != SuccE; ++SuccI) {
        for (df_ext_iterator<MachineBasicBlock*, VisitedTy>
                I = df_ext_begin(*SuccI, Visited), E = df_ext_end(*SuccI, Visited);
                I != E;) {
            MachineBasicBlock *MBB = *I;

            // Check if VNI is live in to MBB.
            std::tie(MBBStart, MBBEnd) = Indexes->getMBBRange(MBB);
            LiveQueryResult LRQ = LI->Query(MBBStart);
            if (LRQ.valueIn() != VNI) {
                // This block isn't part of the VNI segment. Prune the search.
                I.skipChildren();
                continue;
            }

            // Prune the search if VNI is killed in MBB.
            if (LRQ.endPoint() < MBBEnd) {
                LI->removeSegment(MBBStart, LRQ.endPoint());
                if (EndPoints) EndPoints->push_back(LRQ.endPoint());
                I.skipChildren();
                continue;
            }

            // VNI is live through MBB.
            LI->removeSegment(MBBStart, MBBEnd);
            if (EndPoints) EndPoints->push_back(MBBEnd);
            ++I;
        }
    }
}
开发者ID:pumathecapoeirist,项目名称:llvm_qpu,代码行数:59,代码来源:LiveIntervalAnalysis.cpp


注:本文中的LiveQueryResult::valueOut方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。