From: Jim Laskey Date: Tue, 12 Dec 2006 16:07:33 +0000 (+0000) Subject: Honor the command line specification for machine type. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=55a7ec33d7cafa703a1b6e6410d7c26d5b7ded0b;p=oota-llvm.git Honor the command line specification for machine type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32483 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/SubtargetFeature.h b/include/llvm/Target/SubtargetFeature.h index 89e6efef376..70315df484b 100644 --- a/include/llvm/Target/SubtargetFeature.h +++ b/include/llvm/Target/SubtargetFeature.h @@ -81,6 +81,9 @@ public: /// Set the CPU string. Replaces previous setting. Setting to "" clears CPU. void setCPU(const std::string &String); + /// Get the CPU string. + const std::string &getCPU() const { return Features[0]; } + /// Setting CPU string only if no string is set. void setCPUIfNone(const std::string &String); diff --git a/include/llvm/Target/TargetSubtarget.h b/include/llvm/Target/TargetSubtarget.h index 3b174c2ee46..875008deaf6 100644 --- a/include/llvm/Target/TargetSubtarget.h +++ b/include/llvm/Target/TargetSubtarget.h @@ -14,6 +14,8 @@ #ifndef LLVM_TARGET_TARGETSUBTARGET_H #define LLVM_TARGET_TARGETSUBTARGET_H +#include + namespace llvm { //===----------------------------------------------------------------------===// @@ -25,10 +27,13 @@ namespace llvm { class TargetSubtarget { TargetSubtarget(const TargetSubtarget&); // DO NOT IMPLEMENT void operator=(const TargetSubtarget&); // DO NOT IMPLEMENT + std::string CPU; // CPU name. protected: // Can only create subclasses... TargetSubtarget(); public: virtual ~TargetSubtarget(); + void setCPU(const std::string &C) { CPU = C; } + const std::string &getCPU() const { return CPU; } }; } // End llvm namespace diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 032782b8ceb..c84c6fb1598 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -542,8 +542,19 @@ bool DarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) { bool DarwinAsmPrinter::doInitialization(Module &M) { - if (Subtarget.isGigaProcessor()) + const std::string &CPU = Subtarget.getCPU(); + + if (CPU != "generic") + O << "\t.machine ppc" << CPU << "\n"; + else if (Subtarget.isGigaProcessor()) O << "\t.machine ppc970\n"; + else if (Subtarget.isPPC64()) + O << "\t.machine ppc64\n"; + else if (Subtarget.hasAltivec()) + O << "\t.machine ppc7400\n"; + else + O << "\t.machine ppc\n"; + AsmPrinter::doInitialization(M); // Darwin wants symbols to be quoted if they have complex names. diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp index a70dbc97287..caff55c4e30 100644 --- a/utils/TableGen/SubtargetEmitter.cpp +++ b/utils/TableGen/SubtargetEmitter.cpp @@ -460,6 +460,7 @@ void SubtargetEmitter::ParseFeaturesFunction(std::ostream &OS) { " const std::string &CPU) {\n" " SubtargetFeatures Features(FS);\n" " Features.setCPUIfNone(CPU);\n" + " setCPU(Features.getCPU());\n" " uint32_t Bits = Features.getBits(SubTypeKV, SubTypeKVSize,\n" " FeatureKV, FeatureKVSize);\n";