mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
Move to include/llvm/CodeGen
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5285 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
92ba2aaa58
commit
9f2b7ffe05
@ -1,122 +0,0 @@
|
||||
/* Title: FunctionLiveVarInfo.h -*- C++ -*-
|
||||
Author: Ruchira Sasanka
|
||||
Date: Jun 30, 01
|
||||
Purpose:
|
||||
|
||||
This is the interface for live variable info of a function that is required
|
||||
by any other part of the compiler
|
||||
|
||||
It must be called like:
|
||||
|
||||
FunctionLiveVarInfo FLVI(Function *); // initializes data structures
|
||||
FLVI.analyze(); // do the actural live variable anal
|
||||
|
||||
After the analysis, getInSetOfBB or getOutSetofBB can be called to get
|
||||
live var info of a BB.
|
||||
|
||||
The live var set before an instruction can be obtained in 2 ways:
|
||||
|
||||
1. Use the method getLiveVarSetAfterInst(Instruction *) to get the LV Info
|
||||
just after an instruction. (also exists getLiveVarSetBeforeInst(..))
|
||||
|
||||
This function caluclates the LV info for a BB only once and caches that
|
||||
info. If the cache does not contain the LV info of the instruction, it
|
||||
calculates the LV info for the whole BB and caches them.
|
||||
|
||||
Getting liveVar info this way uses more memory since, LV info should be
|
||||
cached. However, if you need LV info of nearly all the instructions of a
|
||||
BB, this is the best and simplest interfrace.
|
||||
|
||||
|
||||
2. Use the OutSet and applyTranferFuncForInst(const Instruction *const Inst)
|
||||
declared in LiveVarSet and traverse the instructions of a basic block in
|
||||
reverse (using const_reverse_iterator in the BB class).
|
||||
|
||||
This is the most memory efficient method if you need LV info for
|
||||
only several instructions in a BasicBlock. An example is given below:
|
||||
|
||||
|
||||
LiveVarSet LVSet; // this will be the set used to traverse through each BB
|
||||
|
||||
// Initialize LVSet so that it is the same as OutSet of the BB
|
||||
LVSet.setUnion( LVI->getOutSetOfBB( *BBI ) );
|
||||
|
||||
BasicBlock::InstListType::const_reverse_iterator
|
||||
InstIterator = InstListInBB.rbegin(); // get the rev iter for inst in BB
|
||||
|
||||
// iterate over all the instructions in BB in reverse
|
||||
for( ; InstIterator != InstListInBB.rend(); InstIterator++) {
|
||||
|
||||
//...... all code here which uses LVSet ........
|
||||
|
||||
LVSet.applyTranferFuncForInst(*InstIterator);
|
||||
|
||||
// Now LVSet contains live vars ABOVE the current instrution
|
||||
}
|
||||
|
||||
See buildInterferenceGraph() for the above example.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef FUNCTION_LIVE_VAR_INFO_H
|
||||
#define FUNCTION_LIVE_VAR_INFO_H
|
||||
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/CodeGen/ValueSet.h"
|
||||
|
||||
class BBLiveVar;
|
||||
class MachineInstr;
|
||||
|
||||
class FunctionLiveVarInfo : public FunctionPass {
|
||||
// Machine Instr to LiveVarSet Map for providing LVset BEFORE each inst
|
||||
std::map<const MachineInstr *, const ValueSet *> MInst2LVSetBI;
|
||||
|
||||
// Machine Instr to LiveVarSet Map for providing LVset AFTER each inst
|
||||
std::map<const MachineInstr *, const ValueSet *> MInst2LVSetAI;
|
||||
|
||||
// Stored Function that the data is computed with respect to
|
||||
const Function *M;
|
||||
|
||||
// --------- private methods -----------------------------------------
|
||||
|
||||
// constructs BBLiveVars and init Def and In sets
|
||||
void constructBBs(const Function *F);
|
||||
|
||||
// do one backward pass over the CFG
|
||||
bool doSingleBackwardPass(const Function *F, unsigned int iter);
|
||||
|
||||
// calculates live var sets for instructions in a BB
|
||||
void calcLiveVarSetsForBB(const BasicBlock *BB);
|
||||
|
||||
public:
|
||||
// --------- Implement the FunctionPass interface ----------------------
|
||||
|
||||
// runOnFunction - Perform analysis, update internal data structures.
|
||||
virtual bool runOnFunction(Function &F);
|
||||
|
||||
// releaseMemory - After LiveVariable analysis has been used, forget!
|
||||
virtual void releaseMemory();
|
||||
|
||||
// getAnalysisUsage - Provide self!
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
|
||||
// --------- Functions to access analysis results -------------------
|
||||
|
||||
// gets OutSet of a BB
|
||||
const ValueSet &getOutSetOfBB(const BasicBlock *BB) const;
|
||||
|
||||
// gets InSet of a BB
|
||||
const ValueSet &getInSetOfBB(const BasicBlock *BB) const;
|
||||
|
||||
// gets the Live var set BEFORE an instruction
|
||||
const ValueSet &getLiveVarSetBeforeMInst(const MachineInstr *MI,
|
||||
const BasicBlock *BB);
|
||||
|
||||
// gets the Live var set AFTER an instruction
|
||||
const ValueSet &getLiveVarSetAfterMInst(const MachineInstr *MI,
|
||||
const BasicBlock *BB);
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user