Implement getModuleMatchQuality and getJITMatchQuality so that v8 will be the

default 32/BE target on sparc hosts, and ppc will continue to be the default
on other hosts.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16865 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Brian Gaeke 2004-10-09 05:57:01 +00:00
parent 930f475604
commit 0e2d466ce9
4 changed files with 46 additions and 0 deletions

View File

@ -35,6 +35,25 @@ SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0), JITInfo(*this) {
}
unsigned SparcV8TargetMachine::getJITMatchQuality() {
return 0; // No JIT yet.
}
unsigned SparcV8TargetMachine::getModuleMatchQuality(const Module &M) {
if (M.getEndianness() == Module::BigEndian &&
M.getPointerSize() == Module::Pointer32)
#ifdef __sparc__
return 20; // BE/32 ==> Prefer sparcv8 on sparc
#else
return 5; // BE/32 ==> Prefer ppc elsewhere
#endif
else if (M.getEndianness() != Module::AnyEndianness ||
M.getPointerSize() != Module::AnyPointerSize)
return 0; // Match for some other target
return getJITMatchQuality()/2;
}
/// addPassesToEmitAssembly - Add passes to the specified pass manager
/// to implement a static compiler for this target.
///

View File

@ -23,6 +23,7 @@
namespace llvm {
class IntrinsicLowering;
class Module;
class SparcV8TargetMachine : public TargetMachine {
SparcV8InstrInfo InstrInfo;
@ -40,6 +41,9 @@ public:
return &JITInfo;
}
static unsigned getModuleMatchQuality(const Module &M);
static unsigned getJITMatchQuality();
/// addPassesToEmitMachineCode - Add passes to the specified pass manager to
/// get machine code emitted. This uses a MachineCodeEmitter object to handle
/// actually outputting the machine code and resolving things like the address

View File

@ -35,6 +35,25 @@ SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0), JITInfo(*this) {
}
unsigned SparcV8TargetMachine::getJITMatchQuality() {
return 0; // No JIT yet.
}
unsigned SparcV8TargetMachine::getModuleMatchQuality(const Module &M) {
if (M.getEndianness() == Module::BigEndian &&
M.getPointerSize() == Module::Pointer32)
#ifdef __sparc__
return 20; // BE/32 ==> Prefer sparcv8 on sparc
#else
return 5; // BE/32 ==> Prefer ppc elsewhere
#endif
else if (M.getEndianness() != Module::AnyEndianness ||
M.getPointerSize() != Module::AnyPointerSize)
return 0; // Match for some other target
return getJITMatchQuality()/2;
}
/// addPassesToEmitAssembly - Add passes to the specified pass manager
/// to implement a static compiler for this target.
///

View File

@ -23,6 +23,7 @@
namespace llvm {
class IntrinsicLowering;
class Module;
class SparcV8TargetMachine : public TargetMachine {
SparcV8InstrInfo InstrInfo;
@ -40,6 +41,9 @@ public:
return &JITInfo;
}
static unsigned getModuleMatchQuality(const Module &M);
static unsigned getJITMatchQuality();
/// addPassesToEmitMachineCode - Add passes to the specified pass manager to
/// get machine code emitted. This uses a MachineCodeEmitter object to handle
/// actually outputting the machine code and resolving things like the address