From 3ea78c4276dfbf5a078292ad8fd8dc952c4ff8b9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 12 Dec 2004 17:40:28 +0000 Subject: [PATCH] Use the target triple to pick this target. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18830 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCTargetMachine.cpp | 7 ++++++- lib/Target/Sparc/SparcTargetMachine.cpp | 4 ++++ lib/Target/SparcV8/SparcV8TargetMachine.cpp | 4 ++++ lib/Target/SparcV9/SparcV9TargetMachine.cpp | 7 ++++++- lib/Target/X86/X86TargetMachine.cpp | 8 +++++++- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp index b7b67c03f67..01d2d23136c 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -153,9 +153,14 @@ PPC64TargetMachine::PPC64TargetMachine(const Module &M, IntrinsicLowering *IL) PowerPCFrameInfo(*this, true)) {} unsigned PPC32TargetMachine::getModuleMatchQuality(const Module &M) { + // We strongly match "powerpc-*". + std::string TT = M.getTargetTriple(); + if (TT.size() >= 8 && std::string(TT.begin(), TT.begin()+8) == "powerpc-") + return 20; + if (M.getEndianness() == Module::BigEndian && M.getPointerSize() == Module::Pointer32) - return 10; // Direct match + return 10; // Weak match else if (M.getEndianness() != Module::AnyEndianness || M.getPointerSize() != Module::AnyPointerSize) return 0; // Match for some other target diff --git a/lib/Target/Sparc/SparcTargetMachine.cpp b/lib/Target/Sparc/SparcTargetMachine.cpp index a867503573d..7f19114b55d 100644 --- a/lib/Target/Sparc/SparcTargetMachine.cpp +++ b/lib/Target/Sparc/SparcTargetMachine.cpp @@ -41,6 +41,10 @@ unsigned SparcV8TargetMachine::getJITMatchQuality() { } unsigned SparcV8TargetMachine::getModuleMatchQuality(const Module &M) { + std::string TT = M.getTargetTriple(); + if (TT.size() >= 6 && std::string(TT.begin(), TT.begin()+6) == "sparc-") + return 20; + if (M.getEndianness() == Module::BigEndian && M.getPointerSize() == Module::Pointer32) #ifdef __sparc__ diff --git a/lib/Target/SparcV8/SparcV8TargetMachine.cpp b/lib/Target/SparcV8/SparcV8TargetMachine.cpp index a867503573d..7f19114b55d 100644 --- a/lib/Target/SparcV8/SparcV8TargetMachine.cpp +++ b/lib/Target/SparcV8/SparcV8TargetMachine.cpp @@ -41,6 +41,10 @@ unsigned SparcV8TargetMachine::getJITMatchQuality() { } unsigned SparcV8TargetMachine::getModuleMatchQuality(const Module &M) { + std::string TT = M.getTargetTriple(); + if (TT.size() >= 6 && std::string(TT.begin(), TT.begin()+6) == "sparc-") + return 20; + if (M.getEndianness() == Module::BigEndian && M.getPointerSize() == Module::Pointer32) #ifdef __sparc__ diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.cpp b/lib/Target/SparcV9/SparcV9TargetMachine.cpp index 21863d03182..60d4da2898f 100644 --- a/lib/Target/SparcV9/SparcV9TargetMachine.cpp +++ b/lib/Target/SparcV9/SparcV9TargetMachine.cpp @@ -79,9 +79,14 @@ unsigned SparcV9TargetMachine::getJITMatchQuality() { } unsigned SparcV9TargetMachine::getModuleMatchQuality(const Module &M) { + // We strongly match "sparcv9-*". + std::string TT = M.getTargetTriple(); + if (TT.size() >= 8 && std::string(TT.begin(), TT.begin()+8) == "sparcv9-") + return 20; + if (M.getEndianness() == Module::BigEndian && M.getPointerSize() == Module::Pointer64) - return 10; // Direct match + return 10; // Weak match else if (M.getEndianness() != Module::AnyEndianness || M.getPointerSize() != Module::AnyPointerSize) return 0; // Match for some other target diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index 26ffc19123f..0e3eea43924 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/lib/Target/X86/X86TargetMachine.cpp @@ -69,9 +69,15 @@ unsigned X86TargetMachine::getJITMatchQuality() { } unsigned X86TargetMachine::getModuleMatchQuality(const Module &M) { + // We strongly match "i[3-9]86-*". + std::string TT = M.getTargetTriple(); + if (TT.size() >= 5 && TT[0] == 'i' && TT[2] == '8' && TT[3] == '6' && + TT[4] == '-' && TT[1] - '3' < 6) + return 20; + if (M.getEndianness() == Module::LittleEndian && M.getPointerSize() == Module::Pointer32) - return 10; // Direct match + return 10; // Weak match else if (M.getEndianness() != Module::AnyEndianness || M.getPointerSize() != Module::AnyPointerSize) return 0; // Match for some other target