Refactor the way to get a string containing the features of the target.

llvm-svn: 52470
This commit is contained in:
Bill Wendling 2008-06-18 21:39:02 +00:00
parent 55a8524241
commit 573e0fd68b
3 changed files with 26 additions and 32 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

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