| //===-------------------- IncrementalSourceMgr.cpp ------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This file defines some implementations for IncrementalSourceMgr. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/MCA/IncrementalSourceMgr.h" |
| #ifndef NDEBUG |
| #include "llvm/Support/Format.h" |
| #endif |
| |
| using namespace llvm; |
| using namespace llvm::mca; |
| |
| void IncrementalSourceMgr::clear() { |
| Staging.clear(); |
| InstStorage.clear(); |
| TotalCounter = 0U; |
| EOS = false; |
| } |
| |
| void IncrementalSourceMgr::updateNext() { |
| ++TotalCounter; |
| Instruction *I = Staging.front(); |
| Staging.pop_front(); |
| I->reset(); |
| |
| if (InstFreedCB) |
| InstFreedCB(I); |
| } |
| |
| #ifndef NDEBUG |
| void IncrementalSourceMgr::printStatistic(raw_ostream &OS) { |
| unsigned MaxInstStorageSize = InstStorage.size(); |
| if (MaxInstStorageSize <= TotalCounter) { |
| auto Ratio = double(MaxInstStorageSize) / double(TotalCounter); |
| OS << "Cache ratio = " << MaxInstStorageSize << " / " << TotalCounter |
| << llvm::format(" (%.2f%%)", (1.0 - Ratio) * 100.0) << "\n"; |
| } else { |
| OS << "Error: Number of created instructions " |
| << "are larger than the number of issued instructions\n"; |
| } |
| } |
| #endif |