From: Daniel Dunbar Date: Thu, 27 May 2010 06:18:05 +0000 (+0000) Subject: Driver: Add support for -m[no-]relax-all, and make it the default at -O0. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9929800b8dfced61e9c97dc8d6e71e144ebf8acc;p=clang Driver: Add support for -m[no-]relax-all, and make it the default at -O0. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104815 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index abab2ddd65..a9a52c01f4 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -139,6 +139,7 @@ def MQ : JoinedOrSeparate<"-MQ">, Group; def MT : JoinedOrSeparate<"-MT">, Group; def Mach : Flag<"-Mach">; def M : Flag<"-M">, Group; +def O0 : Joined<"-O0">, Group; def O4 : Joined<"-O4">, Group; def ObjCXX : Flag<"-ObjC++">, Flags<[DriverOption]>, HelpText<"Treat source input files as Objective-C++ inputs">; @@ -436,6 +437,7 @@ def mno_constant_cfstrings : Flag<"-mno-constant-cfstrings">, Group; def mno_mmx : Flag<"-mno-mmx">, Group; def mno_pascal_strings : Flag<"-mno-pascal-strings">, Group; def mno_red_zone : Flag<"-mno-red-zone">, Group; +def mno_relax_all : Flag<"-mno-relax-all">, Group; def mno_soft_float : Flag<"-mno-soft-float">, Group; def mno_sse2 : Flag<"-mno-sse2">, Group; def mno_sse3 : Flag<"-mno-sse3">, Group; @@ -453,6 +455,7 @@ def marm : Flag<"-marm">, Alias; def mno_warn_nonportable_cfstrings : Flag<"-mno-warn-nonportable-cfstrings">, Group; def mpascal_strings : Flag<"-mpascal-strings">, Group; def mred_zone : Flag<"-mred-zone">, Group; +def mrelax_all : Flag<"-mrelax-all">, Group; def msoft_float : Flag<"-msoft-float">, Group; def msse2 : Flag<"-msse2">, Group; def msse3 : Flag<"-msse3">, Group; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 896811d5d3..ab00f96a83 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -768,6 +768,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-E"); } else if (isa(JA)) { CmdArgs.push_back("-emit-obj"); + + // At -O0, we use -mrelax-all by default. + bool IsOpt = false; + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) + IsOpt = !A->getOption().matches(options::OPT_O0); + if (Args.hasFlag(options::OPT_mrelax_all, + options::OPT_mno_relax_all, + !IsOpt)) + CmdArgs.push_back("-mrelax-all"); } else if (isa(JA)) { // Use PCH if the user requested it, except for C++ (for now). bool UsePCH = D.CCCUsePCH; @@ -1512,6 +1521,15 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-filetype"); CmdArgs.push_back("obj"); + // At -O0, we use -mrelax-all by default. + bool IsOpt = false; + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) + IsOpt = !A->getOption().matches(options::OPT_O0); + if (Args.hasFlag(options::OPT_mrelax_all, + options::OPT_mno_relax_all, + !IsOpt)) + CmdArgs.push_back("-mrelax-all"); + // FIXME: Add -force_cpusubtype_ALL support, once we have it. // FIXME: Add -g support, once we have it.