[llvm-commits] CVS: llvm/runtime/libprofile/BasicBlockTracing.c

Brian Gaeke gaeke at cs.uiuc.edu
Mon May 3 18:52:03 PDT 2004


Changes in directory llvm/runtime/libprofile:

BasicBlockTracing.c added (r1.1)

---
Log message:

Add initial implementation of basic block tracing runtime


---
Diffs of the changes:  (+67 -0)

Index: llvm/runtime/libprofile/BasicBlockTracing.c
diff -c /dev/null llvm/runtime/libprofile/BasicBlockTracing.c:1.1
*** /dev/null	Mon May  3 18:52:00 2004
--- llvm/runtime/libprofile/BasicBlockTracing.c	Mon May  3 18:51:50 2004
***************
*** 0 ****
--- 1,67 ----
+ /*===-- BasicBlockTracing.c - Support library for basic block tracing -----===*\
+ |*
+ |*                     The LLVM Compiler Infrastructure
+ |*
+ |* This file was developed by the LLVM research group and is distributed under
+ |* the University of Illinois Open Source License. See LICENSE.TXT for details.
+ |* 
+ |*===----------------------------------------------------------------------===*|
+ |* 
+ |* This file implements the call back routines for the basic block tracing
+ |* instrumentation pass.  This should be used with the -trace-basic-blocks
+ |* LLVM pass.
+ |*
+ \*===----------------------------------------------------------------------===*/
+ 
+ #include "Profiling.h"
+ #include <stdlib.h>
+ #include <stdio.h>
+ 
+ static unsigned *ArrayStart, *ArrayEnd, *ArrayCursor;
+ 
+ /* WriteAndFlushBBTraceData - write out the currently accumulated trace data
+  * and reset the cursor to point to the beginning of the buffer.
+  */
+ static void WriteAndFlushBBTraceData () {
+   write_profiling_data(BBTrace, ArrayStart, (ArrayCursor - ArrayStart));
+   ArrayCursor = ArrayStart;
+ }
+ 
+ /* BBTraceAtExitHandler - When the program exits, just write out any remaining 
+  * data and free the trace buffer.
+  */
+ static void BBTraceAtExitHandler() {
+   WriteAndFlushBBTraceData ();
+   free (ArrayStart);
+ }
+ 
+ /* llvm_trace_basic_block - called upon hitting a new basic block. */
+ void llvm_trace_basic_block (unsigned BBNum) {
+   *ArrayCursor++ = BBNum;
+   if (ArrayCursor == ArrayEnd)
+     WriteAndFlushBBTraceData ();
+ }
+ 
+ /* llvm_start_basic_block_tracing - This is the main entry point of the basic
+  * block tracing library.  It is responsible for setting up the atexit
+  * handler and allocating the trace buffer.
+  */
+ int llvm_start_basic_block_tracing(int argc, const char **argv,
+                               unsigned *arrayStart, unsigned numElements) {
+   int Ret;
+   const unsigned BufferSize = 128 * 1024;
+   unsigned ArraySize;
+ 
+   Ret = save_arguments(argc, argv);
+ 
+   /* Allocate a buffer to contain BB tracing data */
+   ArraySize = BufferSize / sizeof (unsigned);
+   ArrayStart = malloc (ArraySize * sizeof (unsigned));
+   ArrayEnd = ArrayStart + ArraySize;
+   ArrayCursor = ArrayStart;
+ 
+   /* Set up the atexit handler. */
+   atexit (BBTraceAtExitHandler);
+ 
+   return Ret;
+ }





More information about the llvm-commits mailing list