mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Added getDefaultSubtargetFeatures method to SubtargetFeatures class which returns a correct feature string for given triple.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89236 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -21,6 +21,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include "llvm/ADT/Triple.h"
|
||||||
#include "llvm/System/DataTypes.h"
|
#include "llvm/System/DataTypes.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@ -106,6 +107,10 @@ public:
|
|||||||
|
|
||||||
// Dump feature info.
|
// Dump feature info.
|
||||||
void dump() const;
|
void dump() const;
|
||||||
|
|
||||||
|
/// Retrieve a formatted string of the default features for
|
||||||
|
/// the specified target triple.
|
||||||
|
static std::string getDefaultSubtargetFeatures(const Triple &Triple);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End namespace llvm
|
} // End namespace llvm
|
||||||
|
@ -357,3 +357,30 @@ void SubtargetFeatures::print(raw_ostream &OS) const {
|
|||||||
void SubtargetFeatures::dump() const {
|
void SubtargetFeatures::dump() const {
|
||||||
print(errs());
|
print(errs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getDefaultSubtargetFeatures - Return a string listing
|
||||||
|
/// the features associated with the target triple.
|
||||||
|
///
|
||||||
|
/// FIXME: This is an inelegant way of specifying the features of a
|
||||||
|
/// subtarget. It would be better if we could encode this information
|
||||||
|
/// into the IR. See <rdar://5972456>.
|
||||||
|
///
|
||||||
|
std::string SubtargetFeatures::getDefaultSubtargetFeatures(
|
||||||
|
const Triple& Triple) {
|
||||||
|
switch (Triple.getVendor()) {
|
||||||
|
case Triple::Apple:
|
||||||
|
switch (Triple.getArch()) {
|
||||||
|
case Triple::ppc: // powerpc-apple-*
|
||||||
|
return std::string("altivec");
|
||||||
|
case Triple::ppc64: // powerpc64-apple-*
|
||||||
|
return std::string("64bit,altivec");
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string("");
|
||||||
|
}
|
||||||
|
@ -305,7 +305,8 @@ bool LTOCodeGenerator::determineTarget(std::string& errMsg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// construct LTModule, hand over ownership of module and target
|
// construct LTModule, hand over ownership of module and target
|
||||||
std::string FeatureStr = getFeatureString(Triple.c_str());
|
const std::string FeatureStr =
|
||||||
|
SubtargetFeatures::getDefaultSubtargetFeatures(llvm::Triple(Triple));
|
||||||
_target = march->createTargetMachine(Triple, FeatureStr);
|
_target = march->createTargetMachine(Triple, FeatureStr);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/ModuleProvider.h"
|
#include "llvm/ModuleProvider.h"
|
||||||
#include "llvm/ADT/OwningPtr.h"
|
#include "llvm/ADT/OwningPtr.h"
|
||||||
|
#include "llvm/ADT/Triple.h"
|
||||||
#include "llvm/Bitcode/ReaderWriter.h"
|
#include "llvm/Bitcode/ReaderWriter.h"
|
||||||
#include "llvm/Support/SystemUtils.h"
|
#include "llvm/Support/SystemUtils.h"
|
||||||
#include "llvm/Support/Mangler.h"
|
#include "llvm/Support/Mangler.h"
|
||||||
@ -120,27 +121,6 @@ LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length,
|
|||||||
return makeLTOModule(buffer.get(), errMsg);
|
return makeLTOModule(buffer.get(), errMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getFeatureString - Return a string listing the features associated with the
|
|
||||||
/// target triple.
|
|
||||||
///
|
|
||||||
/// FIXME: This is an inelegant way of specifying the features of a
|
|
||||||
/// subtarget. It would be better if we could encode this information into the
|
|
||||||
/// IR. See <rdar://5972456>.
|
|
||||||
std::string getFeatureString(const char *TargetTriple) {
|
|
||||||
InitializeAllTargets();
|
|
||||||
|
|
||||||
SubtargetFeatures Features;
|
|
||||||
|
|
||||||
if (strncmp(TargetTriple, "powerpc-apple-", 14) == 0) {
|
|
||||||
Features.AddFeature("altivec", true);
|
|
||||||
} else if (strncmp(TargetTriple, "powerpc64-apple-", 16) == 0) {
|
|
||||||
Features.AddFeature("64bit", true);
|
|
||||||
Features.AddFeature("altivec", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Features.getString();
|
|
||||||
}
|
|
||||||
|
|
||||||
LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer,
|
LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer,
|
||||||
std::string& errMsg)
|
std::string& errMsg)
|
||||||
{
|
{
|
||||||
@ -161,7 +141,8 @@ LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
// construct LTModule, hand over ownership of module and target
|
// construct LTModule, hand over ownership of module and target
|
||||||
std::string FeatureStr = getFeatureString(Triple.c_str());
|
const std::string FeatureStr =
|
||||||
|
SubtargetFeatures::getDefaultSubtargetFeatures(llvm::Triple(Triple));
|
||||||
TargetMachine* target = march->createTargetMachine(Triple, FeatureStr);
|
TargetMachine* target = march->createTargetMachine(Triple, FeatureStr);
|
||||||
return new LTOModule(m.take(), target);
|
return new LTOModule(m.take(), target);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,5 @@ private:
|
|||||||
llvm::StringMap<NameAndAttributes> _undefines;
|
llvm::StringMap<NameAndAttributes> _undefines;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern std::string getFeatureString(const char *TargetTriple);
|
|
||||||
|
|
||||||
#endif // LTO_MODULE_H
|
#endif // LTO_MODULE_H
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user