clang-cl: Implement /GL in terms of -flto.

No documentation yet; the linker needs more work.

Differential Revision: http://reviews.llvm.org/D10270

llvm-svn: 239213
This commit is contained in:
Peter Collingbourne 2015-06-06 02:09:34 +00:00
parent ace2f091fd
commit 8a484c3017
4 changed files with 9 additions and 3 deletions

View File

@ -202,6 +202,7 @@ def _SLASH_Fi : CLCompileJoined<"Fi">,
def _SLASH_Fo : CLCompileJoined<"Fo">, def _SLASH_Fo : CLCompileJoined<"Fo">,
HelpText<"Set output object file, or directory (ends in / or \\)">, HelpText<"Set output object file, or directory (ends in / or \\)">,
MetaVarName<"<file or directory>">; MetaVarName<"<file or directory>">;
def _SLASH_GL : CLFlag<"GL">, Alias<flto>;
def _SLASH_LD : CLFlag<"LD">, HelpText<"Create DLL">; def _SLASH_LD : CLFlag<"LD">, HelpText<"Create DLL">;
def _SLASH_LDd : CLFlag<"LDd">, HelpText<"Create debug DLL">; def _SLASH_LDd : CLFlag<"LDd">, HelpText<"Create debug DLL">;
def _SLASH_link : CLRemainingArgs<"link">, def _SLASH_link : CLRemainingArgs<"link">,
@ -286,7 +287,6 @@ def _SLASH_G2 : CLFlag<"G2">;
def _SLASH_Ge : CLFlag<"Ge">; def _SLASH_Ge : CLFlag<"Ge">;
def _SLASH_Gh : CLFlag<"Gh">; def _SLASH_Gh : CLFlag<"Gh">;
def _SLASH_GH : CLFlag<"GH">; def _SLASH_GH : CLFlag<"GH">;
def _SLASH_GL : CLFlag<"GL">;
def _SLASH_GL_ : CLFlag<"GL-">; def _SLASH_GL_ : CLFlag<"GL-">;
def _SLASH_Gm : CLFlag<"Gm">; def _SLASH_Gm : CLFlag<"Gm">;
def _SLASH_Gm_ : CLFlag<"Gm-">; def _SLASH_Gm_ : CLFlag<"Gm-">;

View File

@ -1744,7 +1744,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
// Determine what the derived output name should be. // Determine what the derived output name should be.
const char *NamedOutput; const char *NamedOutput;
if (JA.getType() == types::TY_Object && if ((JA.getType() == types::TY_Object || JA.getType() == types::TY_LTO_BC) &&
C.getArgs().hasArg(options::OPT__SLASH_Fo, options::OPT__SLASH_o)) { C.getArgs().hasArg(options::OPT__SLASH_Fo, options::OPT__SLASH_o)) {
// The /Fo or /o flag decides the object filename. // The /Fo or /o flag decides the object filename.
StringRef Val = C.getArgs().getLastArg(options::OPT__SLASH_Fo, StringRef Val = C.getArgs().getLastArg(options::OPT__SLASH_Fo,

View File

@ -45,7 +45,7 @@ types::ID types::getPreprocessedType(ID Id) {
} }
const char *types::getTypeTempSuffix(ID Id, bool CLMode) { const char *types::getTypeTempSuffix(ID Id, bool CLMode) {
if (Id == TY_Object && CLMode) if ((Id == TY_Object || Id == TY_LTO_BC) && CLMode)
return "obj"; return "obj";
if (Id == TY_Image && CLMode) if (Id == TY_Image && CLMode)
return "exe"; return "exe";

View File

@ -273,3 +273,9 @@
// RUN: %clang_cl /P /Fifoo.x /obar.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE2 %s // RUN: %clang_cl /P /Fifoo.x /obar.x -### -- %s 2>&1 | FileCheck -check-prefix=FioRACE2 %s
// FioRACE2: "-E" // FioRACE2: "-E"
// FioRACE2: "-o" "bar.x" // FioRACE2: "-o" "bar.x"
// RUN: %clang_cl /c /GL -### -- %s 2>&1 | FileCheck -check-prefix=LTO-DEFAULT %s
// LTO-DEFAULT: "-emit-llvm-bc"{{.*}}"-o" "cl-outputs.obj"
// RUN: %clang_cl /c /GL /Fofoo -### -- %s 2>&1 | FileCheck -check-prefix=LTO-FO %s
// LTO-FO: "-emit-llvm-bc"{{.*}}"-o" "foo.obj"