We actually don't have spiff anymore
[oota-llvm.git] / runtime / libprofile / EdgeProfiling.c
1 /*===-- EdgeProfiling.c - Support library for edge profiling --------------===*\
2 |*
3 |*                     The LLVM Compiler Infrastructure
4 |*
5 |* This file was developed by the LLVM research group and is distributed under
6 |* the University of Illinois Open Source License. See LICENSE.TXT for details.
7 |* 
8 |*===----------------------------------------------------------------------===*|
9 |* 
10 |* This file implements the call back routines for the edge profiling
11 |* instrumentation pass.  This should be used with the -insert-edge-profiling
12 |* LLVM pass.
13 |*
14 \*===----------------------------------------------------------------------===*/
15
16 #include "Profiling.h"
17 #include <stdlib.h>
18
19 static unsigned *ArrayStart;
20 static unsigned NumElements;
21
22 /* EdgeProfAtExitHandler - When the program exits, just write out the profiling
23  * data.
24  */
25 static void EdgeProfAtExitHandler() {
26   /* Note that if this were doing something more intellegent with the
27      instrumentation, that we could do some computation here to expand what we
28      collected into simple edge profiles.  Since we directly count each edge, we
29      just write out all of the counters directly.
30   */
31   write_profiling_data(Edge, ArrayStart, NumElements);
32 }
33
34
35 /* llvm_start_edge_profiling - This is the main entry point of the edge
36  * profiling library.  It is responsible for setting up the atexit handler.
37  */
38 int llvm_start_edge_profiling(int argc, const char **argv,
39                               unsigned *arrayStart, unsigned numElements) {
40   int Ret = save_arguments(argc, argv);
41   ArrayStart = arrayStart;
42   NumElements = numElements;
43   atexit(EdgeProfAtExitHandler);
44   return Ret;
45 }