1 //===-------------------- IncrementalSourceMgr.cpp ------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// 9 /// \file 10 /// This file defines some implementations for IncrementalSourceMgr. 11 /// 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/MCA/IncrementalSourceMgr.h" 15 #ifndef NDEBUG 16 #include "llvm/Support/Format.h" 17 #endif 18 19 using namespace llvm; 20 using namespace llvm::mca; 21 22 void IncrementalSourceMgr::clear() { 23 Staging.clear(); 24 InstStorage.clear(); 25 TotalCounter = 0U; 26 EOS = false; 27 } 28 29 void IncrementalSourceMgr::updateNext() { 30 ++TotalCounter; 31 Instruction *I = Staging.front(); 32 Staging.pop_front(); 33 I->reset(); 34 35 if (InstFreedCB) 36 InstFreedCB(I); 37 } 38 39 #ifndef NDEBUG 40 void IncrementalSourceMgr::printStatistic(raw_ostream &OS) { 41 unsigned MaxInstStorageSize = InstStorage.size(); 42 if (MaxInstStorageSize <= TotalCounter) { 43 auto Ratio = double(MaxInstStorageSize) / double(TotalCounter); 44 OS << "Cache ratio = " << MaxInstStorageSize << " / " << TotalCounter 45 << llvm::format(" (%.2f%%)", (1.0 - Ratio) * 100.0) << "\n"; 46 } else { 47 OS << "Error: Number of created instructions " 48 << "are larger than the number of issued instructions\n"; 49 } 50 } 51 #endif 52