dotgnu-libjit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-libjit] Libjit bug: reuses of variables


From: simone campanoni
Subject: [Dotgnu-libjit] Libjit bug: reuses of variables
Date: Mon, 28 Sep 2009 12:36:24 +0200

Hi all,
   I am Simone Campanoni and I am using Libjit within ILDJIT project.

I think I have found a bug on this library.

Consider the following program:
=============================================================
#include <stdio.h>                                                                                                                                                                                        
#include <jit/jit.h>                                                                                                                                                                                      
#include <assert.h>                                                                                                                                                                                       

int main(int argc, char** argv){
   jit_context_t        context;           
   jit_function_t       f_main;            
   jit_type_t           signature_main;    
   jit_type_t           params[1];         
   jit_value_t          temp, value, value2, value2_bool, falseValue;
   jit_value_t          return_value_1, return_value_2, return_value_0;
   jit_label_t          label;                                        
   jit_label_t          label2;                                       
   int                  inputValue;                                   
   int                  *pointerInputValue;                           
   int                  result;                                       

   result       = 0;             
   label        = jit_label_undefined;
   label2       = jit_label_undefined;

   context = jit_context_create();
   params[0]            = jit_type_int;      
   signature_main     = jit_type_create_signature(jit_abi_cdecl, jit_type_int, params, 1, 1);
   f_main               = jit_function_create(context, signature_main);
   jit_function_set_optimization_level(f_main, 0);                    

   falseValue           = jit_value_create_nint_constant(f_main, jit_type_int, 0);
   value                = jit_value_get_param(f_main, 0);
   return_value_0       = jit_value_create(f_main, jit_type_int);
   return_value_1       = jit_value_create(f_main, jit_type_int);
   return_value_2       = jit_value_create(f_main, jit_type_int);
   temp                 = jit_value_create_nint_constant(f_main, jit_type_int, 0);
   jit_insn_store(f_main, return_value_0, temp);
   temp                 = jit_value_create_nint_constant(f_main, jit_type_int, 1);
   jit_insn_store(f_main, return_value_1, temp);
   temp                 = jit_value_create_nint_constant(f_main, jit_type_int, 2);
   jit_insn_store(f_main, return_value_2, temp);

   value2               = jit_insn_lt(f_main, value, falseValue);
   value2_bool          = jit_insn_to_bool(f_main, value2);
   jit_insn_branch_if_not(f_main, value2_bool, &label);

   jit_insn_return(f_main, return_value_1);

   jit_insn_label(f_main, &label);

   jit_insn_branch_if_not(f_main, value2_bool, &label2);

   jit_insn_return(f_main, return_value_2);

   jit_insn_label(f_main, &label2);
   jit_insn_return(f_main, return_value_0);

   jit_function_compile(f_main);

   inputValue           = 1;
   pointerInputValue    = &inputValue;
   jit_function_apply(f_main, &pointerInputValue, &result);

   return result;
}

=============================================================

The compiled program should return 0; otherwise, it returns 2.
Looking at the intermediate code of Libjit, you can see that the problem is that the evaluation of the _expression_ '' value < falseValue'' is not stored in varialbe value2_bool.

I hope this is useful to debug Libjit library.

Best regards,
Simone Campanoni

reply via email to

[Prev in Thread] Current Thread [Next in Thread]