mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-27 13:30:05 +00:00
Refactor the way to get a string containing the features of the target.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52470 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7acf8f288
commit
e424254897
@ -264,22 +264,9 @@ bool LTOCodeGenerator::determineTarget(std::string& errMsg)
|
||||
return true;
|
||||
|
||||
// construct LTModule, hand over ownership of module and target
|
||||
//
|
||||
// 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>.
|
||||
SubtargetFeatures Features;
|
||||
std::string FeatureStr;
|
||||
std::string TargetTriple = _linker.getModule()->getTargetTriple();
|
||||
|
||||
if (strncmp(TargetTriple.c_str(), "powerpc-apple-", 14) == 0) {
|
||||
Features.AddFeature("altivec", true);
|
||||
} else if (strncmp(TargetTriple.c_str(), "powerpc64-apple-", 16) == 0) {
|
||||
Features.AddFeature("64bit", true);
|
||||
Features.AddFeature("altivec", true);
|
||||
}
|
||||
|
||||
_target = march->CtorFn(*mergedModule, Features.getString());
|
||||
std::string FeatureStr =
|
||||
getFeatureString(_linker.getModule()->getTargetTriple().c_str());
|
||||
_target = march->CtorFn(*mergedModule, FeatureStr.c_str());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -116,6 +116,25 @@ LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length,
|
||||
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) {
|
||||
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, std::string& errMsg)
|
||||
{
|
||||
// parse bitcode buffer
|
||||
@ -130,22 +149,8 @@ LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, std::string& errMsg)
|
||||
return NULL;
|
||||
|
||||
// construct LTModule, hand over ownership of module and target
|
||||
//
|
||||
// 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>.
|
||||
SubtargetFeatures Features;
|
||||
std::string FeatureStr;
|
||||
const char *TargetTriple = m->getTargetTriple().c_str();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
TargetMachine* target = march->CtorFn(*m, Features.getString());
|
||||
std::string FeatureStr = getFeatureString(m->getTargetTriple().c_str());
|
||||
TargetMachine* target = march->CtorFn(*m, FeatureStr);
|
||||
return new LTOModule(m.take(), target);
|
||||
}
|
||||
|
||||
|
@ -99,5 +99,7 @@ private:
|
||||
StringSet _undefines;
|
||||
};
|
||||
|
||||
extern std::string getFeatureString(const char *TargetTriple);
|
||||
|
||||
#endif // LTO_MODULE_H
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user