1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
/*========================== begin_copyright_notice ============================
Copyright (C) 2017-2021 Intel Corporation
SPDX-License-Identifier: MIT
============================= end_copyright_notice ===========================*/
#pragma once
#include "common/LLVMWarningsPush.hpp"
#include <llvm/IR/LegacyPassManager.h>
#include "common/LLVMWarningsPop.hpp"
#include <list>
#include "Stats.hpp"
#include <string.h>
namespace IGC
{
namespace Debug
{
class Dump;
}
class CodeGenContext;
class IGCPassManager : public llvm::legacy::PassManager
{
public:
IGCPassManager(CodeGenContext* ctx, const char* name = "") : m_pContext(ctx), m_name(name)
{
}
void add(llvm::Pass *P);
private:
CodeGenContext* const m_pContext;
const std::string m_name;
std::list<Debug::Dump> m_irDumps;
void addPrintPass(llvm::Pass* P, bool isBefore);
bool isPrintBefore(llvm::Pass* P);
bool isPrintAfter(llvm::Pass* P);
// List: comma/semicolon-separate list of names.
// Return true if N is in the list.
bool isInList(const llvm::StringRef& N, const llvm::StringRef& List) const;
};
}
void DumpLLVMIR(IGC::CodeGenContext* pContext, const char* dumpName);
|