llvm-6502/lib/Target/SparcV9/SparcV9CodeEmitter.h
Misha Brukman 9cedd433eb Apparently, the "regType" and "regClass" used in the Sparc backend are not both
correct: empirically, "regType" is wrong for a number of registers. Thus, one
can only rely on the "regClass" to figure out what kind of register one is
dealing with.

This change switches to using only "regClass" and adds a few extra DEBUG() print
statements and a few clean-ups in comments and code, mostly minor.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7103 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-03 18:36:47 +00:00

59 lines
1.9 KiB
C++

//===-- SparcV9CodeEmitter.h ------------------------------------*- C++ -*-===//
//
//
//===----------------------------------------------------------------------===//
#ifndef SPARCV9CODEEMITTER_H
#define SPARCV9CODEEMITTER_H
#include "llvm/BasicBlock.h"
#include "llvm/CodeGen/MachineCodeEmitter.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/Target/TargetMachine.h"
class GlobalValue;
class MachineInstr;
class MachineOperand;
class SparcV9CodeEmitter : public MachineFunctionPass {
TargetMachine &TM;
MachineCodeEmitter &MCE;
BasicBlock *currBB;
// Tracks which instruction references which BasicBlock
std::vector<std::pair<BasicBlock*,
std::pair<unsigned*,MachineInstr*> > > BBRefs;
// Tracks where each BasicBlock starts
std::map<BasicBlock*, long> BBLocations;
// Tracks locations of Constants which are laid out in memory (e.g. FP)
// But we also need to map Constants to ConstantPool indices
std::map<const Constant*, unsigned> ConstantMap;
public:
SparcV9CodeEmitter(TargetMachine &T, MachineCodeEmitter &M);
~SparcV9CodeEmitter();
bool runOnMachineFunction(MachineFunction &F);
void emitWord(unsigned Val);
/// Function generated by the CodeEmitterGenerator using TableGen
///
unsigned getBinaryCodeForInstr(MachineInstr &MI);
private:
int64_t getMachineOpValue(MachineInstr &MI, MachineOperand &MO);
inline unsigned getValueBit(int64_t Val, unsigned bit);
void emitBasicBlock(MachineBasicBlock &MBB);
void* getGlobalAddress(GlobalValue *V, MachineInstr &MI,
bool isPCRelative);
bool isFPInstr(MachineInstr &MI);
unsigned getRealRegNumByType(unsigned fakeReg, unsigned regType,
MachineInstr &MI);
unsigned getRealRegNumByClass(unsigned fakeReg, unsigned regClass,
MachineInstr &MI);
};
#endif