This helped me resolve a bug, so I suppose it's useful in general.

Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com>
---
 jit/trace-jit.c |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/jit/trace-jit.c b/jit/trace-jit.c
index 37fe6d4..ccd434a 100644
--- a/jit/trace-jit.c
+++ b/jit/trace-jit.c
@@ -17,14 +17,14 @@
 #include "jit/statement.h"
 #include "jit/vars.h"
 #include "jit/args.h"
-#include "vm/preload.h"
-#include "vm/object.h"
-#include "vm/bytecodes.h"
-
 #include "lib/buffer.h"
+#include "lib/bitset.h"
+#include "lib/string.h"
+#include "vm/bytecodes.h"
 #include "vm/class.h"
 #include "vm/method.h"
-#include "lib/string.h"
+#include "vm/object.h"
+#include "vm/preload.h"
 #include "vm/vm.h"
 
 #include "arch/stack-frame.h"
@@ -197,6 +197,7 @@ void trace_lir(struct compilation_unit *cu)
        printf("---------  -------   -----------          --------\n");
 
        for_each_basic_block(bb, &cu->bb_list) {
+               printf("[bb %p]:\n", bb);
                for_each_insn(insn, &bb->insn_list) {
                        str = alloc_str();
                        lir_print(insn, str);
@@ -257,6 +258,46 @@ print_var_liveness(struct compilation_unit *cu, struct 
var_info *var)
                printf(" (empty)\n");
 }
 
+static void print_bb_live_sets(struct basic_block *bb)
+{
+       printf("[bb %p]\n", bb);
+
+       printf("          ");
+       for (unsigned int i = 0; i < bb->live_in_set->nr_bits; ++i)
+               printf("%-3d", i);
+       printf("\n");
+
+       printf("live in:  ");
+       for (unsigned long i = 0; i < bb->live_in_set->nr_bits; ++i) {
+               printf("%s", test_bit(bb->live_in_set->bits, i)
+                       ? "***" : "---"); 
+       }
+       printf("\n");
+
+       printf("uses:     ");
+       for (unsigned long i = 0; i < bb->use_set->nr_bits; ++i) {
+               printf("%s", test_bit(bb->use_set->bits, i)
+                       ? "***" : "---"); 
+       }
+       printf("\n");
+
+       printf("defines:  ");
+       for (unsigned long i = 0; i < bb->def_set->nr_bits; ++i) {
+               printf("%s", test_bit(bb->def_set->bits, i)
+                       ? "***" : "---"); 
+       }
+       printf("\n");
+
+       printf("live out: ");
+       for (unsigned long i = 0; i < bb->live_out_set->nr_bits; ++i) {
+               printf("%s", test_bit(bb->live_out_set->bits, i)
+                       ? "***" : "---");
+       }
+       printf("\n");
+
+       printf("\n");
+}
+
 void trace_liveness(struct compilation_unit *cu)
 {
        struct basic_block *bb;
@@ -281,6 +322,10 @@ void trace_liveness(struct compilation_unit *cu)
                print_var_liveness(cu, var);
 
        printf("\n");
+
+       for_each_basic_block(bb, &cu->bb_list)
+               print_bb_live_sets(bb);
+       printf("\n");
 }
 
 void trace_regalloc(struct compilation_unit *cu)
-- 
1.6.0.6


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to