1233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames//===-- SlotIndexes.cpp - Slot Indexes Pass ------------------------------===// 2233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// 3233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// The LLVM Compiler Infrastructure 4233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// 5233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// This file is distributed under the University of Illinois Open Source 6233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// License. See LICENSE.TXT for details. 7233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// 8233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames//===----------------------------------------------------------------------===// 9233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 10233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames#include "llvm/CodeGen/SlotIndexes.h" 1110c5f2dad5e11e2502ebc0b9e9ea56e449f42d16Jakob Stoklund Olesen#include "llvm/ADT/Statistic.h" 12233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames#include "llvm/CodeGen/MachineFunction.h" 13233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames#include "llvm/Support/Debug.h" 14233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames#include "llvm/Support/raw_ostream.h" 151caedd056dbc3eda1537ad8251323bd985819b80Dale Johannesen#include "llvm/Target/TargetInstrInfo.h" 16233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 17233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hamesusing namespace llvm; 18233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "slotindexes" 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 21233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hameschar SlotIndexes::ID = 0; 22d13db2c59cc94162d6cf0a04187d408bfef6d4a7Owen AndersonINITIALIZE_PASS(SlotIndexes, "slotindexes", 23ce665bd2e2b581ab0858d1afe359192bac96b868Owen Anderson "Slot index numbering", false, false) 24233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 25979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund OlesenSTATISTIC(NumLocalRenum, "Number of local renumberings"); 26979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund OlesenSTATISTIC(NumGlobalRenum, "Number of global renumberings"); 2710c5f2dad5e11e2502ebc0b9e9ea56e449f42d16Jakob Stoklund Olesen 28233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hamesvoid SlotIndexes::getAnalysisUsage(AnalysisUsage &au) const { 29233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames au.setPreservesAll(); 30233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames MachineFunctionPass::getAnalysisUsage(au); 31233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 32233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 33233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hamesvoid SlotIndexes::releaseMemory() { 34233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames mi2iMap.clear(); 35a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen MBBRanges.clear(); 36233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames idx2MBBMap.clear(); 37613dfb219c167717576b2383ee57573f4d8f53cfLang Hames indexList.clear(); 38613dfb219c167717576b2383ee57573f4d8f53cfLang Hames ileAllocator.Reset(); 39233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 40233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 41233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hamesbool SlotIndexes::runOnMachineFunction(MachineFunction &fn) { 42233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 43233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Compute numbering as follows: 44233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Grab an iterator to the start of the index list. 45233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Iterate over all MBBs, and within each MBB all MIs, keeping the MI 46233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // iterator in lock-step (though skipping it over indexes which have 47233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // null pointers in the instruction field). 48233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // At each iteration assert that the instruction pointed to in the index 49613dfb219c167717576b2383ee57573f4d8f53cfLang Hames // is the same one pointed to by the MI iterator. This 50233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 51233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // FIXME: This can be simplified. The mi2iMap_, Idx2MBBMap, etc. should 52233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // only need to be set up once after the first numbering is computed. 53233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 54233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames mf = &fn; 55233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 56233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Check that the list contains only the sentinal. 57613dfb219c167717576b2383ee57573f4d8f53cfLang Hames assert(indexList.empty() && "Index list non-empty at initial numbering?"); 58233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames assert(idx2MBBMap.empty() && 59233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames "Index -> MBB mapping non-empty at initial numbering?"); 60a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen assert(MBBRanges.empty() && 61233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames "MBB -> Index mapping non-empty at initial numbering?"); 62233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames assert(mi2iMap.empty() && 63233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames "MachineInstr -> Index mapping non-empty at initial numbering?"); 64233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 65233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames unsigned index = 0; 66a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen MBBRanges.resize(mf->getNumBlockIDs()); 67a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen idx2MBBMap.reserve(mf->size()); 68233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 69dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines indexList.push_back(createEntry(nullptr, index)); 7074ab5eeffbd70f2387338e3ee8195be9f73e6dd8Lang Hames 71f451cb870efcf9e0302d25ed05f4cac6bb494e42Dan Gohman // Iterate over the function. 72de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (MachineBasicBlock &MBB : *mf) { 73233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Insert an index for the MBB start. 74613dfb219c167717576b2383ee57573f4d8f53cfLang Hames SlotIndex blockStartIndex(&indexList.back(), SlotIndex::Slot_Block); 75233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 76de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (MachineInstr &MI : MBB) { 77de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (MI.isDebugValue()) 781caedd056dbc3eda1537ad8251323bd985819b80Dale Johannesen continue; 79233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 80233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Insert a store index for the instr. 81de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar indexList.push_back(createEntry(&MI, index += SlotIndex::InstrDist)); 82233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 83233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Save this base index in the maps. 84de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar mi2iMap.insert(std::make_pair( 85de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar &MI, SlotIndex(&indexList.back(), SlotIndex::Slot_Block))); 86233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames } 87233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 88f0cf2d357cf5540f21400e330028045e65e60835Jakob Stoklund Olesen // We insert one blank instructions between basic blocks. 89dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines indexList.push_back(createEntry(nullptr, index += SlotIndex::InstrDist)); 9074ab5eeffbd70f2387338e3ee8195be9f73e6dd8Lang Hames 91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MBBRanges[MBB.getNumber()].first = blockStartIndex; 92de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MBBRanges[MBB.getNumber()].second = SlotIndex(&indexList.back(), 932debd48ca790ac01be6e12e094fdf4fdcadc8364Jakob Stoklund Olesen SlotIndex::Slot_Block); 94de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar idx2MBBMap.push_back(IdxMBBPair(blockStartIndex, &MBB)); 95233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames } 96233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 97233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // Sort the Idx2MBBMap 98233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames std::sort(idx2MBBMap.begin(), idx2MBBMap.end(), Idx2MBBCompare()); 99233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 1001ce6a36610f06a1fb4047ddde1e9bc2f071c0bfbJakob Stoklund Olesen DEBUG(mf->print(dbgs(), this)); 101233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 102233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames // And we're done! 103233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames return false; 104233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 105233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 106b3661585c0f87b6045f0d65b5cac16921ae27086Lang Hamesvoid SlotIndexes::renumberIndexes() { 107fbb8fa247ec13067d9ad3f0c426e2029d15222b2Lang Hames // Renumber updates the index of every element of the index list. 10897af98678cc943050cf23951a66c89e922cf21c4Jakob Stoklund Olesen DEBUG(dbgs() << "\n*** Renumbering SlotIndexes ***\n"); 109979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen ++NumGlobalRenum; 110233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 111fbb8fa247ec13067d9ad3f0c426e2029d15222b2Lang Hames unsigned index = 0; 112fbb8fa247ec13067d9ad3f0c426e2029d15222b2Lang Hames 113613dfb219c167717576b2383ee57573f4d8f53cfLang Hames for (IndexList::iterator I = indexList.begin(), E = indexList.end(); 114613dfb219c167717576b2383ee57573f4d8f53cfLang Hames I != E; ++I) { 115613dfb219c167717576b2383ee57573f4d8f53cfLang Hames I->setIndex(index); 116f0cf2d357cf5540f21400e330028045e65e60835Jakob Stoklund Olesen index += SlotIndex::InstrDist; 117fbb8fa247ec13067d9ad3f0c426e2029d15222b2Lang Hames } 118233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 119233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 120613dfb219c167717576b2383ee57573f4d8f53cfLang Hames// Renumber indexes locally after curItr was inserted, but failed to get a new 121979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen// index. 122613dfb219c167717576b2383ee57573f4d8f53cfLang Hamesvoid SlotIndexes::renumberIndexes(IndexList::iterator curItr) { 123979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen // Number indexes with half the default spacing so we can catch up quickly. 124979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen const unsigned Space = SlotIndex::InstrDist/2; 1254c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar static_assert((Space & 3) == 0, "InstrDist must be a multiple of 2*NUM"); 126979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen 12736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines IndexList::iterator startItr = std::prev(curItr); 128613dfb219c167717576b2383ee57573f4d8f53cfLang Hames unsigned index = startItr->getIndex(); 129979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen do { 130613dfb219c167717576b2383ee57573f4d8f53cfLang Hames curItr->setIndex(index += Space); 131613dfb219c167717576b2383ee57573f4d8f53cfLang Hames ++curItr; 132979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen // If the next index is bigger, we have caught up. 133613dfb219c167717576b2383ee57573f4d8f53cfLang Hames } while (curItr != indexList.end() && curItr->getIndex() <= index); 134979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen 135613dfb219c167717576b2383ee57573f4d8f53cfLang Hames DEBUG(dbgs() << "\n*** Renumbered SlotIndexes " << startItr->getIndex() << '-' 136979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen << index << " ***\n"); 137979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen ++NumLocalRenum; 138979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen} 139979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen 140349cf349987a65be89078913e34126898bcdd138Cameron Zwarich// Repair indexes after adding and removing instructions. 141349cf349987a65be89078913e34126898bcdd138Cameron Zwarichvoid SlotIndexes::repairIndexesInRange(MachineBasicBlock *MBB, 142349cf349987a65be89078913e34126898bcdd138Cameron Zwarich MachineBasicBlock::iterator Begin, 143349cf349987a65be89078913e34126898bcdd138Cameron Zwarich MachineBasicBlock::iterator End) { 144c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich // FIXME: Is this really necessary? The only caller repairIntervalsForRange() 145c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich // does the same thing. 146c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich // Find anchor points, which are at the beginning/end of blocks or at 147c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich // instructions that already have indexes. 148de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar while (Begin != MBB->begin() && !hasIndex(*Begin)) 149c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich --Begin; 150de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar while (End != MBB->end() && !hasIndex(*End)) 151c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich ++End; 152c5b6135fb55362f5c052625043ebf3286f799f86Cameron Zwarich 153349cf349987a65be89078913e34126898bcdd138Cameron Zwarich bool includeStart = (Begin == MBB->begin()); 154349cf349987a65be89078913e34126898bcdd138Cameron Zwarich SlotIndex startIdx; 155349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (includeStart) 156349cf349987a65be89078913e34126898bcdd138Cameron Zwarich startIdx = getMBBStartIdx(MBB); 157349cf349987a65be89078913e34126898bcdd138Cameron Zwarich else 158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar startIdx = getInstructionIndex(*Begin); 159349cf349987a65be89078913e34126898bcdd138Cameron Zwarich 160349cf349987a65be89078913e34126898bcdd138Cameron Zwarich SlotIndex endIdx; 161349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (End == MBB->end()) 162349cf349987a65be89078913e34126898bcdd138Cameron Zwarich endIdx = getMBBEndIdx(MBB); 163349cf349987a65be89078913e34126898bcdd138Cameron Zwarich else 164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar endIdx = getInstructionIndex(*End); 165349cf349987a65be89078913e34126898bcdd138Cameron Zwarich 166349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // FIXME: Conceptually, this code is implementing an iterator on MBB that 167349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // optionally includes an additional position prior to MBB->begin(), indicated 168349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // by the includeStart flag. This is done so that we can iterate MIs in a MBB 169349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // in parallel with SlotIndexes, but there should be a better way to do this. 170f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IndexList::iterator ListB = startIdx.listEntry()->getIterator(); 171f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar IndexList::iterator ListI = endIdx.listEntry()->getIterator(); 172349cf349987a65be89078913e34126898bcdd138Cameron Zwarich MachineBasicBlock::iterator MBBI = End; 173349cf349987a65be89078913e34126898bcdd138Cameron Zwarich bool pastStart = false; 174349cf349987a65be89078913e34126898bcdd138Cameron Zwarich while (ListI != ListB || MBBI != Begin || (includeStart && !pastStart)) { 175349cf349987a65be89078913e34126898bcdd138Cameron Zwarich assert(ListI->getIndex() >= startIdx.getIndex() && 176349cf349987a65be89078913e34126898bcdd138Cameron Zwarich (includeStart || !pastStart) && 177349cf349987a65be89078913e34126898bcdd138Cameron Zwarich "Decremented past the beginning of region to repair."); 178349cf349987a65be89078913e34126898bcdd138Cameron Zwarich 179349cf349987a65be89078913e34126898bcdd138Cameron Zwarich MachineInstr *SlotMI = ListI->getInstr(); 180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MachineInstr *MI = (MBBI != MBB->end() && !pastStart) ? &*MBBI : nullptr; 181349cf349987a65be89078913e34126898bcdd138Cameron Zwarich bool MBBIAtBegin = MBBI == Begin && (!includeStart || pastStart); 182349cf349987a65be89078913e34126898bcdd138Cameron Zwarich 183349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (SlotMI == MI && !MBBIAtBegin) { 184349cf349987a65be89078913e34126898bcdd138Cameron Zwarich --ListI; 185349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (MBBI != Begin) 186349cf349987a65be89078913e34126898bcdd138Cameron Zwarich --MBBI; 187349cf349987a65be89078913e34126898bcdd138Cameron Zwarich else 188349cf349987a65be89078913e34126898bcdd138Cameron Zwarich pastStart = true; 189349cf349987a65be89078913e34126898bcdd138Cameron Zwarich } else if (MI && mi2iMap.find(MI) == mi2iMap.end()) { 190349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (MBBI != Begin) 191349cf349987a65be89078913e34126898bcdd138Cameron Zwarich --MBBI; 192349cf349987a65be89078913e34126898bcdd138Cameron Zwarich else 193349cf349987a65be89078913e34126898bcdd138Cameron Zwarich pastStart = true; 194349cf349987a65be89078913e34126898bcdd138Cameron Zwarich } else { 195349cf349987a65be89078913e34126898bcdd138Cameron Zwarich --ListI; 196349cf349987a65be89078913e34126898bcdd138Cameron Zwarich if (SlotMI) 197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar removeMachineInstrFromMaps(*SlotMI); 198349cf349987a65be89078913e34126898bcdd138Cameron Zwarich } 199349cf349987a65be89078913e34126898bcdd138Cameron Zwarich } 200349cf349987a65be89078913e34126898bcdd138Cameron Zwarich 201349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // In theory this could be combined with the previous loop, but it is tricky 202349cf349987a65be89078913e34126898bcdd138Cameron Zwarich // to update the IndexList while we are iterating it. 203349cf349987a65be89078913e34126898bcdd138Cameron Zwarich for (MachineBasicBlock::iterator I = End; I != Begin;) { 204349cf349987a65be89078913e34126898bcdd138Cameron Zwarich --I; 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MachineInstr &MI = *I; 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!MI.isDebugValue() && mi2iMap.find(&MI) == mi2iMap.end()) 207349cf349987a65be89078913e34126898bcdd138Cameron Zwarich insertMachineInstrInMaps(MI); 208349cf349987a65be89078913e34126898bcdd138Cameron Zwarich } 209349cf349987a65be89078913e34126898bcdd138Cameron Zwarich} 210979869c28e5bc68e2d4d546c7019525177f1d399Jakob Stoklund Olesen 211b720be6a50f4e1b3280d2b029ee38dda14577525Manman Ren#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarLLVM_DUMP_METHOD void SlotIndexes::dump() const { 213613dfb219c167717576b2383ee57573f4d8f53cfLang Hames for (IndexList::const_iterator itr = indexList.begin(); 214613dfb219c167717576b2383ee57573f4d8f53cfLang Hames itr != indexList.end(); ++itr) { 21587b0efc86dcc1dac30fcd6b4d1c51110f707a28cDavid Greene dbgs() << itr->getIndex() << " "; 216233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 217dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (itr->getInstr()) { 21887b0efc86dcc1dac30fcd6b4d1c51110f707a28cDavid Greene dbgs() << *itr->getInstr(); 219233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames } else { 22087b0efc86dcc1dac30fcd6b4d1c51110f707a28cDavid Greene dbgs() << "\n"; 221233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames } 222233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames } 223233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 224a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen for (unsigned i = 0, e = MBBRanges.size(); i != e; ++i) 225a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen dbgs() << "BB#" << i << "\t[" << MBBRanges[i].first << ';' 226a122eaaee22750c4f92c33672e149eb2f0c538cbJakob Stoklund Olesen << MBBRanges[i].second << ")\n"; 227233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 22877e300e8f0b8db8eec448cae9c87d7c5bfad9757Manman Ren#endif 229233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 230233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// Print a SlotIndex to a raw_ostream. 231233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hamesvoid SlotIndex::print(raw_ostream &os) const { 23297af98678cc943050cf23951a66c89e922cf21c4Jakob Stoklund Olesen if (isValid()) 233613dfb219c167717576b2383ee57573f4d8f53cfLang Hames os << listEntry()->getIndex() << "Berd"[getSlot()]; 23497af98678cc943050cf23951a66c89e922cf21c4Jakob Stoklund Olesen else 23597af98678cc943050cf23951a66c89e922cf21c4Jakob Stoklund Olesen os << "invalid"; 236233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 237233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 238b720be6a50f4e1b3280d2b029ee38dda14577525Manman Ren#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 239233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames// Dump a SlotIndex to stderr. 240de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarLLVM_DUMP_METHOD void SlotIndex::dump() const { 24187b0efc86dcc1dac30fcd6b4d1c51110f707a28cDavid Greene print(dbgs()); 24287b0efc86dcc1dac30fcd6b4d1c51110f707a28cDavid Greene dbgs() << "\n"; 243233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames} 24477e300e8f0b8db8eec448cae9c87d7c5bfad9757Manman Ren#endif 245233a60ec40b41027ff429e2f2c27fa2be762f2e9Lang Hames 246