@@ -130,7 +130,8 @@ std::string sparc::getSparcTargetCPU(const Driver &D, const ArgList &Args,
130130 return " " ;
131131}
132132
133- void sparc::getSparcTargetFeatures (const Driver &D, const ArgList &Args,
133+ void sparc::getSparcTargetFeatures (const Driver &D, const llvm::Triple &Triple,
134+ const ArgList &Args,
134135 std::vector<StringRef> &Features) {
135136 sparc::FloatABI FloatABI = sparc::getSparcFloatABI (D, Args);
136137 if (FloatABI == sparc::FloatABI::Soft)
@@ -150,11 +151,19 @@ void sparc::getSparcTargetFeatures(const Driver &D, const ArgList &Args,
150151 Features.push_back (" -popc" );
151152 }
152153
154+ // Those OSes default to enabling VIS on 64-bit SPARC.
155+ // See also the corresponding code for external assemblers in
156+ // sparc::getSparcAsmModeForCPU().
157+ bool IsSparcV9ATarget =
158+ (Triple.getArch () == llvm::Triple::sparcv9) &&
159+ (Triple.isOSLinux () || Triple.isOSFreeBSD () || Triple.isOSOpenBSD ());
153160 if (Arg *A = Args.getLastArg (options::OPT_mvis, options::OPT_mno_vis)) {
154161 if (A->getOption ().matches (options::OPT_mvis))
155162 Features.push_back (" +vis" );
156163 else
157164 Features.push_back (" -vis" );
165+ } else if (IsSparcV9ATarget) {
166+ Features.push_back (" +vis" );
158167 }
159168
160169 if (Arg *A = Args.getLastArg (options::OPT_mvis2, options::OPT_mno_vis2)) {
0 commit comments