gallivm: Register the JIT engine with oprofile on debug/profile builds.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 3 Jun 2010 13:21:25 +0000 (14:21 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 3 Jun 2010 13:32:56 +0000 (14:32 +0100)
src/gallium/auxiliary/gallivm/lp_bld_init.c
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp

index 174e20e11d9c6d2eb813b39d1afe3641281a2c63..0a690ea7476953732073c842da76e7c6b060137a 100644 (file)
@@ -75,6 +75,10 @@ enum LLVM_CodeGenOpt_Level {
 };
 
 
+extern void
+lp_register_oprofile_jit_event_listener(LLVMExecutionEngineRef EE);
+
+
 void
 lp_build_init(void)
 {
@@ -109,6 +113,10 @@ lp_build_init(void)
          LLVMDisposeMessage(error);
          assert(0);
       }
+
+#if defined(DEBUG) || defined(PROFILE)
+      lp_register_oprofile_jit_event_listener(lp_build_engine);
+#endif
    }
 
    if (!lp_build_target)
index db0ca606e580b30da40a788f58190fd0f2c951c6..f004c0ae45141d5b56c116f611c8cb1960a57082 100644 (file)
 #define __STDC_CONSTANT_MACROS
 #endif
 
-#include "llvm-c/Core.h"
+#include <llvm-c/Core.h>
+#include <llvm-c/ExecutionEngine.h>
+#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/ExecutionEngine/JITEventListener.h>
 
 #include "pipe/p_config.h"
 #include "util/u_debug.h"
@@ -98,3 +101,21 @@ lp_debug_dump_value(LLVMValueRef value)
 
 
 #endif
+
+
+/**
+ * Register the engine with oprofile.
+ *
+ * This allows to see the LLVM IR function names in oprofile output.
+ *
+ * To actually work LLVM needs to be built with the --with-oprofile configure
+ * option.
+ *
+ * Also a oprofile:oprofile user:group is necessary. Which is not created by
+ * default on some distributions.
+ */
+extern "C" void
+lp_register_oprofile_jit_event_listener(LLVMExecutionEngineRef EE)
+{
+   llvm::unwrap(EE)->RegisterJITEventListener(llvm::createOProfileJITEventListener());
+}