llvm.org GIT mirror llvm / release_90 lib / CodeGen / LiveDebugVariables.h
release_90

Tree @release_90 (Download .tar.gz)

LiveDebugVariables.h @release_90

2de563a
bb7b23f
6b54768
 
 
bb7b23f
 
 
 
 
 
 
 
 
 
 
 
 
 
00e08fc
 
bb7b23f
 
2de563a
bb7b23f
 
 
f6071e1
1feb585
42acf06
 
b453775
2de563a
5d80136
bb7b23f
 
 
 
c16fc54
bb7b23f
f42b661
 
 
1feb585
 
f42b661
bb7b23f
 
42acf06
 
bb7b23f
30e2128
b209206
30e2128
bb7b23f
9f998de
 
 
e27d5a0
bb7b23f
 
2de563a
bb7b23f
2de563a
//===- 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