mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-16 11:30:51 +00:00
1feb5854ae
Track new virtual registers by register number, rather than by the live interval created for them. This is the first step in separating the creation of new virtual registers and new live intervals. Eventually live intervals will be created and populated on demand after the virtual registers have been created and used in instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188434 91177308-0d34-0410-b5e6-96231b3b80d8
73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
//===- LiveDebugVariables.h - Tracking debug info variables ----*- c++ -*--===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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_CODEGEN_LIVEDEBUGVARIABLES_H
|
|
#define LLVM_CODEGEN_LIVEDEBUGVARIABLES_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
|
|
|
namespace llvm {
|
|
|
|
class LiveInterval;
|
|
class LiveIntervals;
|
|
class VirtRegMap;
|
|
|
|
class LiveDebugVariables : public MachineFunctionPass {
|
|
void *pImpl;
|
|
public:
|
|
static char ID; // Pass identification, replacement for typeid
|
|
|
|
LiveDebugVariables();
|
|
~LiveDebugVariables();
|
|
|
|
/// renameRegister - Move any user variables in OldReg to NewReg:SubIdx.
|
|
/// @param OldReg Old virtual register that is going away.
|
|
/// @param NewReg New register holding the user variables.
|
|
/// @param SubIdx If NewReg is a virtual register, SubIdx may indicate a sub-
|
|
/// register.
|
|
void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx);
|
|
|
|
/// 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();
|
|
|
|
private:
|
|
|
|
virtual bool runOnMachineFunction(MachineFunction &);
|
|
virtual void releaseMemory();
|
|
virtual void getAnalysisUsage(AnalysisUsage &) const;
|
|
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif // LLVM_CODEGEN_LIVEDEBUGVARIABLES_H
|