mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
JumpTable support! What this represents is working asm and jit support for
x86 and ppc for 100% dense switch statements when relocations are non-PIC. This support will be extended and enhanced in the coming days to support PIC, and less dense forms of jump tables. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27947 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include "llvm/CodeGen/SSARegMap.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetFrameInfo.h"
|
||||
@ -113,6 +114,7 @@ MachineFunction::MachineFunction(const Function *F,
|
||||
MFInfo = 0;
|
||||
FrameInfo = new MachineFrameInfo();
|
||||
ConstantPool = new MachineConstantPool(TM.getTargetData());
|
||||
JumpTableInfo = new MachineJumpTableInfo(TM.getTargetData());
|
||||
BasicBlocks.Parent = this;
|
||||
}
|
||||
|
||||
@ -122,6 +124,7 @@ MachineFunction::~MachineFunction() {
|
||||
delete MFInfo;
|
||||
delete FrameInfo;
|
||||
delete ConstantPool;
|
||||
delete JumpTableInfo;
|
||||
delete[] UsedPhysRegs;
|
||||
}
|
||||
|
||||
@ -132,6 +135,9 @@ void MachineFunction::print(std::ostream &OS) const {
|
||||
|
||||
// Print Frame Information
|
||||
getFrameInfo()->print(*this, OS);
|
||||
|
||||
// Print JumpTable Information
|
||||
getJumpTableInfo()->print(OS);
|
||||
|
||||
// Print Constant Pool
|
||||
getConstantPool()->print(OS);
|
||||
@ -333,6 +339,36 @@ void MachineFrameInfo::dump(const MachineFunction &MF) const {
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// MachineJumpTableInfo implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// getJumpTableIndex - Create a new jump table entry in the jump table info
|
||||
/// or return an existing one.
|
||||
///
|
||||
unsigned MachineJumpTableInfo::getJumpTableIndex(
|
||||
std::vector<MachineBasicBlock*> &DestBBs) {
|
||||
for (unsigned i = 0, e = JumpTables.size(); i != e; ++i)
|
||||
if (JumpTables[i].MBBs == DestBBs)
|
||||
return i;
|
||||
|
||||
JumpTables.push_back(MachineJumpTableEntry(DestBBs));
|
||||
return JumpTables.size()-1;
|
||||
}
|
||||
|
||||
|
||||
void MachineJumpTableInfo::print(std::ostream &OS) const {
|
||||
// FIXME: this is lame, maybe we could print out the MBB numbers or something
|
||||
// like {1, 2, 4, 5, 3, 0}
|
||||
for (unsigned i = 0, e = JumpTables.size(); i != e; ++i) {
|
||||
OS << " <jt #" << i << "> has " << JumpTables[i].MBBs.size()
|
||||
<< " entries\n";
|
||||
}
|
||||
}
|
||||
|
||||
void MachineJumpTableInfo::dump() const { print(std::cerr); }
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// MachineConstantPool implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Reference in New Issue
Block a user