[llvm-commits] [gcc-plugin] r81529 - /gcc-plugin/trunk/llvm-backend.cpp

Duncan Sands baldrick at free.fr
Fri Sep 11 10:03:18 PDT 2009


Author: baldrick
Date: Fri Sep 11 12:03:17 2009
New Revision: 81529

URL: http://llvm.org/viewvc/llvm-project?rev=81529&view=rev
Log:
Arrange to call llvm_shutdown and perform other finalization
(currently none) when we have finished.  Also, turn on timer
info using the same logic as in GCC.

Modified:
    gcc-plugin/trunk/llvm-backend.cpp

Modified: gcc-plugin/trunk/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/gcc-plugin/trunk/llvm-backend.cpp?rev=81529&r1=81528&r2=81529&view=diff

==============================================================================
--- gcc-plugin/trunk/llvm-backend.cpp (original)
+++ gcc-plugin/trunk/llvm-backend.cpp Fri Sep 11 12:03:17 2009
@@ -334,7 +334,7 @@
 //TODO  LLVM_SET_IMPLICIT_FLOAT(flag_no_implicit_float)
 //TODO#endif
 
-  if (time_report)
+  if (time_report || !quiet_flag  || flag_detailed_statistics)
     Args.push_back("--time-passes");
   if (fast_math_flags_set_p())
     Args.push_back("--enable-unsafe-fp-math");
@@ -819,11 +819,6 @@
                      Array, Name);
 }
 
-//TODO// llvm_call_llvm_shutdown - Release LLVM global state.
-//TODOvoid llvm_call_llvm_shutdown(void) {
-//TODO  llvm_shutdown();
-//TODO}
-//TODO
 //TODO/// llvm_emit_code_for_current_function - Top level interface for emitting a
 //TODO/// function to the .s file.
 //TODOvoid llvm_emit_code_for_current_function(tree fndecl) {
@@ -1652,6 +1647,17 @@
   return (*Name == 1) ? Name + 1 : Name;
 }
 
+/// FinalizePlugin - Shutdown the plugin.
+static void FinalizePlugin(void) {
+  static bool Finalized = false;
+  if (Finalized)
+    return;
+
+  llvm_shutdown();
+
+  Finalized = true;
+}
+
 /// TakeoverAsmOutput - Obtain exclusive use of the assembly code output file.
 /// Any GCC output will be thrown away.
 static void TakeoverAsmOutput(void) {
@@ -1817,6 +1823,11 @@
 };
 
 
+/// llvm_finish - Run shutdown code when GCC exits.
+static void llvm_finish(void *gcc_data, void *user_data) {
+  FinalizePlugin();
+}
+
 /// llvm_finish_unit - Finish the .s file.  This is called by GCC once the
 /// compilation unit has been completely processed.
 static void llvm_finish_unit(void *gcc_data, void *user_data) {
@@ -1947,6 +1958,10 @@
 //TODO  delete AsmOutStream;
 //TODO  AsmOutStream = 0;
 //TODO  timevar_pop(TV_LLVM_PERFILE);
+
+  // We have finished - shutdown the plugin.  Doing this here ensures that timer
+  // info and other statistics are not intermingled with those produced by GCC.
+  FinalizePlugin();
 }
 
 
@@ -2130,5 +2145,8 @@
   // Finish the .s file once the compilation unit has been completely processed.
   register_callback (plugin_name, PLUGIN_FINISH_UNIT, llvm_finish_unit, NULL);
 
+  // Run shutdown code when GCC exits.
+  register_callback (plugin_name, PLUGIN_FINISH, llvm_finish, NULL);
+
   return 0;
 }





More information about the llvm-commits mailing list