| //===-------------------- 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 |