Add a "-gcc-tool-args" option. This option acts like the "-tool-args" option,
but passes the arguments to the "gcc" invocation instead of to the "llc"
invocation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65896 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/bugpoint/ExecutionDriver.cpp b/tools/bugpoint/ExecutionDriver.cpp
index b3c8020..640fe28 100644
--- a/tools/bugpoint/ExecutionDriver.cpp
+++ b/tools/bugpoint/ExecutionDriver.cpp
@@ -111,6 +111,11 @@
   SafeToolArgv("safe-tool-args", cl::Positional,
                cl::desc("<safe-tool arguments>..."),
                cl::ZeroOrMore, cl::PositionalEatsArgs);
+
+  cl::list<std::string>
+  GCCToolArgv("gcc-tool-args", cl::Positional,
+              cl::desc("<gcc-tool arguments>..."),
+              cl::ZeroOrMore, cl::PositionalEatsArgs);
 }
 
 //===----------------------------------------------------------------------===//
@@ -132,7 +137,8 @@
   case AutoPick:
     InterpreterSel = RunCBE;
     Interpreter =
-      AbstractInterpreter::createCBE(getToolName(), Message, &ToolArgv);
+      AbstractInterpreter::createCBE(getToolName(), Message, &ToolArgv,
+                                     &GCCToolArgv);
     if (!Interpreter) {
       InterpreterSel = RunJIT;
       Interpreter = AbstractInterpreter::createJIT(getToolName(), Message,
@@ -141,7 +147,7 @@
     if (!Interpreter) {
       InterpreterSel = RunLLC;
       Interpreter = AbstractInterpreter::createLLC(getToolName(), Message,
-                                                   &ToolArgv);
+                                                   &ToolArgv, &GCCToolArgv);
     }
     if (!Interpreter) {
       InterpreterSel = RunLLI;
@@ -160,7 +166,7 @@
   case RunLLC:
   case LLC_Safe:
     Interpreter = AbstractInterpreter::createLLC(getToolName(), Message,
-                                                 &ToolArgv);
+                                                 &ToolArgv, &GCCToolArgv);
     break;
   case RunJIT:
     Interpreter = AbstractInterpreter::createJIT(getToolName(), Message,
@@ -169,7 +175,7 @@
   case RunCBE:
   case CBE_bug:
     Interpreter = AbstractInterpreter::createCBE(getToolName(), Message,
-                                                 &ToolArgv);
+                                                 &ToolArgv, &GCCToolArgv);
     break;
   case Custom:
     Interpreter = AbstractInterpreter::createCustom(getToolName(), Message,
@@ -196,7 +202,8 @@
       SafeInterpreterSel = RunLLC;
       SafeToolArgs.push_back("--relocation-model=pic");
       SafeInterpreter = AbstractInterpreter::createLLC(Path, Message,
-                                                       &SafeToolArgs);
+                                                       &SafeToolArgs,
+                                                       &GCCToolArgv);
     }
 
     // In "llc-safe" mode, default to using LLC as the "safe" backend.
@@ -205,7 +212,8 @@
       SafeInterpreterSel = RunLLC;
       SafeToolArgs.push_back("--relocation-model=pic");
       SafeInterpreter = AbstractInterpreter::createLLC(Path, Message,
-                                                       &SafeToolArgs);
+                                                       &SafeToolArgs,
+                                                       &GCCToolArgv);
     }
 
     // Pick a backend that's different from the test backend. The JIT and
@@ -215,7 +223,8 @@
         InterpreterSel != RunCBE) {
       SafeInterpreterSel = RunCBE;
       SafeInterpreter = AbstractInterpreter::createCBE(Path, Message,
-                                                       &SafeToolArgs);
+                                                       &SafeToolArgs,
+                                                       &GCCToolArgv);
     }
     if (!SafeInterpreter &&
         InterpreterSel != RunLLC &&
@@ -223,7 +232,8 @@
       SafeInterpreterSel = RunLLC;
       SafeToolArgs.push_back("--relocation-model=pic");
       SafeInterpreter = AbstractInterpreter::createLLC(Path, Message,
-                                                       &SafeToolArgs);
+                                                       &SafeToolArgs,
+                                                       &GCCToolArgv);
     }
     if (!SafeInterpreter) {
       SafeInterpreterSel = AutoPick;
@@ -233,11 +243,13 @@
   case RunLLC:
     SafeToolArgs.push_back("--relocation-model=pic");
     SafeInterpreter = AbstractInterpreter::createLLC(Path, Message,
-                                                     &SafeToolArgs);
+                                                     &SafeToolArgs,
+                                                     &GCCToolArgv);
     break;
   case RunCBE:
     SafeInterpreter = AbstractInterpreter::createCBE(Path, Message,
-                                                     &SafeToolArgs);
+                                                     &SafeToolArgs,
+                                                     &GCCToolArgv);
     break;
   case Custom:
     SafeInterpreter = AbstractInterpreter::createCustom(Path, Message,
@@ -250,7 +262,7 @@
   }
   if (!SafeInterpreter) { std::cout << Message << "\nExiting.\n"; exit(1); }
   
-  gcc = GCC::create(getToolName(), Message);
+  gcc = GCC::create(getToolName(), Message, &GCCToolArgv);
   if (!gcc) { std::cout << Message << "\nExiting.\n"; exit(1); }
 
   // If there was an error creating the selected interpreter, quit with error.
@@ -406,7 +418,7 @@
   }
   try {
     ReferenceOutputFile = executeProgramSafely(Filename);
-    std::cout << "Reference output is: " << ReferenceOutputFile << "\n\n";
+    std::cout << "\nReference output is: " << ReferenceOutputFile << "\n\n";
   } catch (ToolExecutionError &TEE) {
     std::cerr << TEE.what();
     if (Interpreter != SafeInterpreter) {