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:
Bill Wendling 2008-06-18 21:39:02 +00:00
parent f7acf8f288
commit e424254897
3 changed files with 26 additions and 32 deletions

View File

@ -264,22 +264,9 @@ bool LTOCodeGenerator::determineTarget(std::string& errMsg)
return true; return true;
// construct LTModule, hand over ownership of module and target // construct LTModule, hand over ownership of module and target
// std::string FeatureStr =
// FIXME: This is an inelegant way of specifying the features of a getFeatureString(_linker.getModule()->getTargetTriple().c_str());
// subtarget. It would be better if we could encode this information _target = march->CtorFn(*mergedModule, FeatureStr.c_str());
// 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());
} }
return false; return false;
} }

View File

@ -116,6 +116,25 @@ 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) {
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) LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, std::string& errMsg)
{ {
// parse bitcode buffer // parse bitcode buffer
@ -130,22 +149,8 @@ LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, std::string& errMsg)
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(m->getTargetTriple().c_str());
// FIXME: This is an inelegant way of specifying the features of a TargetMachine* target = march->CtorFn(*m, FeatureStr);
// 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());
return new LTOModule(m.take(), target); return new LTOModule(m.take(), target);
} }

View File

@ -99,5 +99,7 @@ private:
StringSet _undefines; StringSet _undefines;
}; };
extern std::string getFeatureString(const char *TargetTriple);
#endif // LTO_MODULE_H #endif // LTO_MODULE_H