diff options
author | Eric Christopher <echristo@gmail.com> | 2017-04-15 06:15:00 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2017-04-15 06:15:00 +0000 |
commit | d26d8839d8dd4b0513ca6251ab8f341149446c69 (patch) | |
tree | 05e9a7af829d31be3508ec184f2fd54c06f7d344 /clang/lib/Basic/Targets.cpp | |
parent | 908ed7f20c425bf1bd7915f18d5d1408d2e8bb28 (diff) | |
download | bcm5719-llvm-d26d8839d8dd4b0513ca6251ab8f341149446c69.tar.gz bcm5719-llvm-d26d8839d8dd4b0513ca6251ab8f341149446c69.zip |
When we turn on vsx it should also turn on altivec explicitly, same
with disabling it as well as disabling all vsx specific features when
turning off altivec.
Fixes PR32663.
llvm-svn: 300395
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 18f503d091c..a457f6deee7 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -1548,28 +1548,30 @@ bool PPCTargetInfo::hasFeature(StringRef Feature) const { void PPCTargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name, bool Enabled) const { - // If we're enabling direct-move or power8-vector go ahead and enable vsx - // as well. Do the inverse if we're disabling vsx. We'll diagnose any user - // incompatible options. if (Enabled) { - if (Name == "direct-move" || - Name == "power8-vector" || - Name == "float128" || - Name == "power9-vector") { - // power9-vector is really a superset of power8-vector so encode that. - Features[Name] = Features["vsx"] = true; - if (Name == "power9-vector") - Features["power8-vector"] = true; - } else { - Features[Name] = true; - } + // If we're enabling any of the vsx based features then enable vsx and + // altivec. We'll diagnose any problems later. + bool FeatureHasVSX = llvm::StringSwitch<bool>(Name) + .Case("vsx", true) + .Case("direct-move", true) + .Case("power8-vector", true) + .Case("power9-vector", true) + .Case("float128", true) + .Default(false); + if (FeatureHasVSX) + Features["vsx"] = Features["altivec"] = true; + if (Name == "power9-vector") + Features["power8-vector"] = true; + Features[Name] = true; } else { - if (Name == "vsx") { - Features[Name] = Features["direct-move"] = Features["power8-vector"] = + // If we're disabling altivec or vsx go ahead and disable all of the vsx + // features. + if ((Name == "altivec") || (Name == "vsx")) + Features["vsx"] = Features["direct-move"] = Features["power8-vector"] = Features["float128"] = Features["power9-vector"] = false; - } else { - Features[Name] = false; - } + if (Name == "power8-vector") + Features["power9-vector"] = false; + Features[Name] = false; } } |