mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 20:29:30 +00:00
PTX: Add new PTX-specific register allocator that keeps virtual registers
instead of allocating physical registers. This is part of a work-in-progress overhaul of the PTX register allocation scheme. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140305 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
85500714c4
commit
247ee00bce
@ -16,6 +16,7 @@ add_llvm_target(PTXCodeGen
|
||||
PTXFrameLowering.cpp
|
||||
PTXMCAsmStreamer.cpp
|
||||
PTXMFInfoExtract.cpp
|
||||
PTXRegAlloc.cpp
|
||||
PTXRegisterInfo.cpp
|
||||
PTXSubtarget.cpp
|
||||
PTXTargetMachine.cpp
|
||||
|
@ -43,6 +43,8 @@ namespace llvm {
|
||||
FunctionPass *createPTXMFInfoExtract(PTXTargetMachine &TM,
|
||||
CodeGenOpt::Level OptLevel);
|
||||
|
||||
FunctionPass *createPTXRegisterAllocator();
|
||||
|
||||
} // namespace llvm;
|
||||
|
||||
#endif // PTX_H
|
||||
|
58
lib/Target/PTX/PTXRegAlloc.cpp
Normal file
58
lib/Target/PTX/PTXRegAlloc.cpp
Normal file
@ -0,0 +1,58 @@
|
||||
//===-- PTXRegAlloc.cpp - PTX Register Allocator --------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file contains a register allocator for PTX code.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define DEBUG_TYPE "ptx-reg-alloc"
|
||||
|
||||
#include "PTX.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/CodeGen/RegAllocRegistry.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
// Special register allocator for PTX.
|
||||
class PTXRegAlloc : public MachineFunctionPass {
|
||||
public:
|
||||
static char ID;
|
||||
PTXRegAlloc() : MachineFunctionPass(ID) {
|
||||
initializePHIEliminationPass(*PassRegistry::getPassRegistry());
|
||||
initializeTwoAddressInstructionPassPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
virtual const char* getPassName() const {
|
||||
return "PTX Register Allocator";
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequiredID(PHIEliminationID);
|
||||
AU.addRequiredID(TwoAddressInstructionPassID);
|
||||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
}
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &MF) {
|
||||
// We do not actually do anything (at least not yet).
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
char PTXRegAlloc::ID = 0;
|
||||
|
||||
static RegisterRegAlloc
|
||||
ptxRegAlloc("ptx", "PTX register allocator", createPTXRegisterAllocator);
|
||||
}
|
||||
|
||||
FunctionPass *llvm::createPTXRegisterAllocator() {
|
||||
return new PTXRegAlloc();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user