llvm-6502/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h
Alexey Samsonov 447a7ce76c Rewrite calculateDbgValueHistory to make it (hopefully) more transparent.
This change preserves the original algorithm of generating history
for user variables, but makes it more clear.

High-level description of algorithm:
Scan all the machine basic blocks and machine instructions in the order
they are emitted to the object file. Do the following:
1) If we see a DBG_VALUE instruction, add it to the history of the
corresponding user variable. Keep track of all user variables, whose
locations are described by a register.
2) If we see a regular instruction, look at all the registers it clobbers,
and terminate the location range for all variables described by these registers.
3) At the end of the basic block, terminate location ranges for all
user variables described by some register.

Although this change shouldn't be user-visible (the contents of .debug_loc section
should be the same), it changes some internal assumptions about the set
of instructions used to track the variable locations. Watching the bots.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209225 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-20 18:34:54 +00:00

36 lines
1.1 KiB
C++

//===-- llvm/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h ----*- C++ -*--===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef CODEGEN_ASMPRINTER_DBGVALUEHISTORYCALCULATOR_H_
#define CODEGEN_ASMPRINTER_DBGVALUEHISTORYCALCULATOR_H_
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallVector.h"
namespace llvm {
class MachineFunction;
class MachineInstr;
class MDNode;
class TargetRegisterInfo;
// For each user variable, keep a list of DBG_VALUE instructions for it
// in the order of appearance. The list can also contain another
// instructions, which are assumed to clobber the previous DBG_VALUE.
// The variables are listed in order of appearance.
typedef MapVector<const MDNode *, SmallVector<const MachineInstr *, 4>>
DbgValueHistoryMap;
void calculateDbgValueHistory(const MachineFunction *MF,
const TargetRegisterInfo *TRI,
DbgValueHistoryMap &Result);
}
#endif