//===- TargetPassConfig.h - Code Generation pass options --------*- C++ -*-===// // // 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 /// Target-Independent Code Generator Pass Configuration Options pass. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_TARGETPASSCONFIG_H #define LLVM_CODEGEN_TARGETPASSCONFIG_H #include "llvm/Pass.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/Error.h" #include <cassert> #include <string> namespace llvm { class LLVMTargetMachine; struct MachineSchedContext; class PassConfigImpl; class ScheduleDAGInstrs; class CSEConfigBase; class PassInstrumentationCallbacks; // The old pass manager infrastructure is hidden in a legacy namespace now. namespace legacy { class PassManagerBase; } // end namespace legacy PassManagerBase; /// Discriminated union of Pass ID types. /// /// The PassConfig API prefers dealing with IDs because they are safer and more /// efficient. IDs decouple configuration from instantiation. This way, when a /// pass is overriden, it isn't unnecessarily instantiated. It is also unsafe to /// refer to a Pass pointer after adding it to a pass manager, which deletes /// redundant pass instances. /// /// However, it is convient to directly instantiate target passes with /// non-default ctors. These often don't have a registered PassInfo. Rather than /// force all target passes to implement the pass registry boilerplate, allow /// the PassConfig API to handle either type. /// /// AnalysisID is sadly char*, so PointerIntPair won't work. class IdentifyingPassPtr { … }; /// Target-Independent Code Generator Pass Configuration Options. /// /// This is an ImmutablePass solely for the purpose of exposing CodeGen options /// to the internals of other CodeGen passes. class TargetPassConfig : public ImmutablePass { … }; void registerCodeGenCallback(PassInstrumentationCallbacks &PIC, LLVMTargetMachine &); } // end namespace llvm #endif // LLVM_CODEGEN_TARGETPASSCONFIG_H