diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/CodeGen/LiveDebugVariables.h')
-rw-r--r-- | contrib/llvm-project/llvm/lib/CodeGen/LiveDebugVariables.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/CodeGen/LiveDebugVariables.h b/contrib/llvm-project/llvm/lib/CodeGen/LiveDebugVariables.h new file mode 100644 index 000000000000..0cbe10c6a422 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/CodeGen/LiveDebugVariables.h @@ -0,0 +1,64 @@ +//===- LiveDebugVariables.h - Tracking debug info variables -----*- 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 +// +//===----------------------------------------------------------------------===// +// +// This file provides the interface to the LiveDebugVariables analysis. +// +// The analysis removes DBG_VALUE instructions for virtual registers and tracks +// live user variables in a data structure that can be updated during register +// allocation. +// +// After register allocation new DBG_VALUE instructions are emitted to reflect +// the new locations of user variables. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H +#define LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H + +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/Support/Compiler.h" + +namespace llvm { + +template <typename T> class ArrayRef; +class LiveIntervals; +class VirtRegMap; + +class LLVM_LIBRARY_VISIBILITY LiveDebugVariables : public MachineFunctionPass { + void *pImpl = nullptr; + +public: + static char ID; // Pass identification, replacement for typeid + + LiveDebugVariables(); + ~LiveDebugVariables() override; + + /// splitRegister - Move any user variables in OldReg to the live ranges in + /// NewRegs where they are live. Mark the values as unavailable where no new + /// register is live. + void splitRegister(unsigned OldReg, ArrayRef<unsigned> NewRegs, + LiveIntervals &LIS); + + /// emitDebugValues - Emit new DBG_VALUE instructions reflecting the changes + /// that happened during register allocation. + /// @param VRM Rename virtual registers according to map. + void emitDebugValues(VirtRegMap *VRM); + + /// dump - Print data structures to dbgs(). + void dump() const; + +private: + bool runOnMachineFunction(MachineFunction &) override; + void releaseMemory() override; + void getAnalysisUsage(AnalysisUsage &) const override; + bool doInitialization(Module &) override; +}; + +} // end namespace llvm + +#endif // LLVM_LIB_CODEGEN_LIVEDEBUGVARIABLES_H |