@@ -108,18 +108,17 @@ void BoltAddressTranslation::write(const BinaryContext &BC, raw_ostream &OS) {
108
108
for (const BinaryBasicBlock *const BB : FF)
109
109
writeEntriesForBB (Map, *BB, FF.getAddress (), Function.getAddress ());
110
110
111
- ColdMaps .emplace (FF.getAddress (), std::move (Map));
111
+ Maps .emplace (FF.getAddress (), std::move (Map));
112
112
ColdPartSource.emplace (FF.getAddress (), Function.getOutputAddress ());
113
113
}
114
114
}
115
115
116
116
// Output addresses are delta-encoded
117
117
uint64_t PrevAddress = 0 ;
118
118
writeMaps</* Cold=*/ false >(Maps, PrevAddress, OS);
119
- writeMaps</* Cold=*/ true >(ColdMaps , PrevAddress, OS);
119
+ writeMaps</* Cold=*/ true >(Maps , PrevAddress, OS);
120
120
121
- outs () << " BOLT-INFO: Wrote " << Maps.size () + ColdMaps.size ()
122
- << " BAT maps\n " ;
121
+ outs () << " BOLT-INFO: Wrote " << Maps.size () << " BAT maps\n " ;
123
122
outs () << " BOLT-INFO: Wrote " << FuncHashes.size () << " function and "
124
123
<< std::accumulate (FuncHashes.begin (), FuncHashes.end (), 0ull ,
125
124
[](size_t Acc, const auto &B) {
@@ -159,13 +158,19 @@ size_t BoltAddressTranslation::getNumEqualOffsets(const MapTy &Map) const {
159
158
template <bool Cold>
160
159
void BoltAddressTranslation::writeMaps (std::map<uint64_t , MapTy> &Maps,
161
160
uint64_t &PrevAddress, raw_ostream &OS) {
162
- const uint32_t NumFuncs = Maps.size ();
161
+ const uint32_t NumFuncs =
162
+ llvm::count_if (llvm::make_first_range (Maps), [&](const uint64_t Address) {
163
+ return Cold == ColdPartSource.count (Address);
164
+ });
163
165
encodeULEB128 (NumFuncs, OS);
164
166
LLVM_DEBUG (dbgs () << " Writing " << NumFuncs << (Cold ? " cold" : " " )
165
167
<< " functions for BAT.\n " );
166
168
size_t PrevIndex = 0 ;
167
169
for (auto &MapEntry : Maps) {
168
170
const uint64_t Address = MapEntry.first ;
171
+ // Only process cold fragments in cold mode, and vice versa.
172
+ if (Cold != ColdPartSource.count (Address))
173
+ continue ;
169
174
const uint64_t HotInputAddress =
170
175
ReverseMap[Cold ? ColdPartSource[Address] : Address];
171
176
MapTy &Map = MapEntry.second ;
0 commit comments