mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[lli] Make lli support -mcpu=native for CPU autodetection
llc, opt, and clang can all autodetect the CPU and supported features. lli cannot as far as I could tell. This patch uses the getCPUStr() and introduces a new getCPUFeatureList() and uses those in lli in place of MCPU and MAttrs. Ideally, we would merge getCPUFeatureList and getCPUFeatureStr, but opt and llc need a string and lli wanted a list. Maybe we should just return the SubtargetFeature object and let the caller decide what it needs? Differential Revision: https://reviews.llvm.org/D41833 llvm-svn: 322100
This commit is contained in:
parent
e568747614
commit
b38fcb7fd8
@ -326,6 +326,26 @@ LLVM_ATTRIBUTE_UNUSED static std::string getFeaturesStr() {
|
|||||||
return Features.getString();
|
return Features.getString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVM_ATTRIBUTE_UNUSED static std::vector<std::string> getFeatureList() {
|
||||||
|
SubtargetFeatures Features;
|
||||||
|
|
||||||
|
// If user asked for the 'native' CPU, we need to autodetect features.
|
||||||
|
// This is necessary for x86 where the CPU might not support all the
|
||||||
|
// features the autodetected CPU name lists in the target. For example,
|
||||||
|
// not all Sandybridge processors support AVX.
|
||||||
|
if (MCPU == "native") {
|
||||||
|
StringMap<bool> HostFeatures;
|
||||||
|
if (sys::getHostCPUFeatures(HostFeatures))
|
||||||
|
for (auto &F : HostFeatures)
|
||||||
|
Features.AddFeature(F.first(), F.second);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i != MAttrs.size(); ++i)
|
||||||
|
Features.AddFeature(MAttrs[i]);
|
||||||
|
|
||||||
|
return Features.getFeatures();
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Set function attributes of functions in Module M based on CPU,
|
/// \brief Set function attributes of functions in Module M based on CPU,
|
||||||
/// Features, and command line flags.
|
/// Features, and command line flags.
|
||||||
LLVM_ATTRIBUTE_UNUSED static void
|
LLVM_ATTRIBUTE_UNUSED static void
|
||||||
|
@ -378,8 +378,8 @@ int main(int argc, char **argv, char * const *envp) {
|
|||||||
std::string ErrorMsg;
|
std::string ErrorMsg;
|
||||||
EngineBuilder builder(std::move(Owner));
|
EngineBuilder builder(std::move(Owner));
|
||||||
builder.setMArch(MArch);
|
builder.setMArch(MArch);
|
||||||
builder.setMCPU(MCPU);
|
builder.setMCPU(getCPUStr());
|
||||||
builder.setMAttrs(MAttrs);
|
builder.setMAttrs(getFeatureList());
|
||||||
if (RelocModel.getNumOccurrences())
|
if (RelocModel.getNumOccurrences())
|
||||||
builder.setRelocationModel(RelocModel);
|
builder.setRelocationModel(RelocModel);
|
||||||
if (CMModel.getNumOccurrences())
|
if (CMModel.getNumOccurrences())
|
||||||
|
Loading…
Reference in New Issue
Block a user