mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 11:49:50 +00:00
LiveRangeCalc: Slightly improve map usage; NFC
- DenseMap should be faster than std::map - Use the `InsertRes = insert() if (!InsertRes.inserted)` pattern rather than the `if (!X.contains(...)) { X.insert(...); }` to save one map lookup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306436 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
32f1f18b64
commit
41308c99e9
@ -24,7 +24,7 @@ void LiveRangeCalc::resetLiveOutMap() {
|
||||
unsigned NumBlocks = MF->getNumBlockIDs();
|
||||
Seen.clear();
|
||||
Seen.resize(NumBlocks);
|
||||
EntryInfoMap.clear();
|
||||
EntryInfos.clear();
|
||||
Map.resize(NumBlocks);
|
||||
}
|
||||
|
||||
@ -433,15 +433,18 @@ bool LiveRangeCalc::findReachingDefs(LiveRange &LR, MachineBasicBlock &UseMBB,
|
||||
}
|
||||
|
||||
// Prepare the defined/undefined bit vectors.
|
||||
auto EF = EntryInfoMap.find(&LR);
|
||||
if (EF == EntryInfoMap.end()) {
|
||||
EntryInfoMap::iterator Entry;
|
||||
bool DidInsert;
|
||||
std::tie(Entry, DidInsert) = EntryInfos.insert(
|
||||
std::make_pair(&LR, std::make_pair(BitVector(), BitVector())));
|
||||
if (DidInsert) {
|
||||
// Initialize newly inserted entries.
|
||||
unsigned N = MF->getNumBlockIDs();
|
||||
EF = EntryInfoMap.insert({&LR, {BitVector(), BitVector()}}).first;
|
||||
EF->second.first.resize(N);
|
||||
EF->second.second.resize(N);
|
||||
Entry->second.first.resize(N);
|
||||
Entry->second.second.resize(N);
|
||||
}
|
||||
BitVector &DefOnEntry = EF->second.first;
|
||||
BitVector &UndefOnEntry = EF->second.second;
|
||||
BitVector &DefOnEntry = Entry->second.first;
|
||||
BitVector &UndefOnEntry = Entry->second.second;
|
||||
|
||||
// Multiple values were found, so transfer the work list to the LiveIn array
|
||||
// where UpdateSSA will use it as a work list.
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/BitVector.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/IndexedMap.h"
|
||||
#include "llvm/CodeGen/LiveInterval.h"
|
||||
|
||||
@ -65,7 +66,8 @@ class LiveRangeCalc {
|
||||
/// registers do not overlap), but the defined/undefined information must
|
||||
/// be kept separate for each individual range.
|
||||
/// By convention, EntryInfoMap[&LR] = { Defined, Undefined }.
|
||||
std::map<LiveRange*,std::pair<BitVector,BitVector>> EntryInfoMap;
|
||||
typedef DenseMap<LiveRange*,std::pair<BitVector,BitVector>> EntryInfoMap;
|
||||
EntryInfoMap EntryInfos;
|
||||
|
||||
/// Map each basic block where a live range is live out to the live-out value
|
||||
/// and its defining block.
|
||||
|
Loading…
Reference in New Issue
Block a user