]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
More stuff.
authorJulian Seward <jseward@acm.org>
Thu, 8 Jul 2004 01:46:01 +0000 (01:46 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 8 Jul 2004 01:46:01 +0000 (01:46 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@64

VEX/priv/ir/ir_defs.c
VEX/priv/main/vex_main.c
VEX/pub/libvex_ir.h
VEX/test_main.c

index c6fc2558d1d28c30c2d21ce05db76f5a7a746121..35d94090ed7a5386a83b8b2b62110c216791b7e8 100644 (file)
@@ -41,7 +41,10 @@ void ppIRConst ( IRConst* con )
 
 void ppIRTemp ( IRTemp tmp )
 {
-  vex_printf( "t%d", tmp);
+   if (tmp == INVALID_IRTEMP)
+      vex_printf("INVALID_IRTEMP");
+   else
+      vex_printf( "t%d", tmp);
 }
 
 
@@ -67,7 +70,9 @@ void ppIRExpr ( IRExpr* e )
 {
   switch (e->tag) {
     case Iex_Get:
-      vex_printf( "GET(%d,%d)", e->Iex.Get.offset, e->Iex.Get.size);
+      vex_printf( "GET(%d,", e->Iex.Get.offset);
+      ppIRType(e->Iex.Get.ty);
+      vex_printf(")");
       break;
     case Iex_Tmp:
       ppIRTemp(e->Iex.Tmp.tmp);
@@ -105,7 +110,7 @@ void ppIRStmt ( IRStmt* s )
 {
   switch (s->tag) {
     case Ist_Put:
-      vex_printf( "PUT(%d,%d) = ", s->Ist.Put.offset, s->Ist.Put.size);
+      vex_printf( "PUT(%d) = ", s->Ist.Put.offset);
       ppIRExpr(s->Ist.Put.expr);
       break;
     case Ist_Tmp:
@@ -220,11 +225,11 @@ IRConst* IRConst_U64 ( ULong u64 )
 
 /* Constructors -- IRExpr */
 
-IRExpr* IRExpr_Get ( Int off, Int sz ) {
+IRExpr* IRExpr_Get ( Int off, IRType ty ) {
    IRExpr* e         = LibVEX_Alloc(sizeof(IRExpr));
    e->tag            = Iex_Get;
    e->Iex.Get.offset = off;
-   e->Iex.Get.size   = sz;
+   e->Iex.Get.ty     = ty;
    return e;
 }
 IRExpr* IRExpr_Tmp ( IRTemp tmp ) {
@@ -265,12 +270,11 @@ IRExpr* IRExpr_Const ( IRConst* con ) {
 
 /* Constructors -- IRStmt */
 
-IRStmt* IRStmt_Put ( Int off, Int sz, IRExpr* value ) {
+IRStmt* IRStmt_Put ( Int off, IRExpr* value ) {
    IRStmt* s         = LibVEX_Alloc(sizeof(IRStmt));
    s->tag            = Ist_Put;
    s->link           = NULL;
    s->Ist.Put.offset = off;
-   s->Ist.Put.size   = sz;
    s->Ist.Put.expr   = value;
    return s;
 }
@@ -364,6 +368,8 @@ IRType lookupIRTypeEnv ( IRTypeEnv* env, IRTemp tmp )
 IRType typeOfIRExpr ( IRTypeEnv* tyenv, IRExpr* e )
 {
    switch (e->tag) {
+      case Iex_Get:
+         return e->Iex.Get.ty;
       case Iex_Tmp:
          return lookupIRTypeEnv(tyenv, e->Iex.Tmp.tmp);
       case Iex_Const:
index edd3fcf099175c3c916e824e3946983dc740d16e..52b4537cb9d756f50d01a4d3bff8708a0f48ab42 100644 (file)
@@ -94,6 +94,7 @@ TranslateResult LibVEX_Translate (
    IRBB*        irbb;
    HInstrArray* vcode;
    HInstrArray* rcode;
+   Int          i;
 
    vassert(vex_initdone);
    LibVEX_Clear(False);
@@ -145,6 +146,13 @@ TranslateResult LibVEX_Translate (
    /* Turn it into virtual-registerised code. */
    vcode = iselBB ( irbb );
 
+   vex_printf("\n-------- Virtual registerised code --------\n");
+   for (i = 0; i < vcode->arr_used; i++) {
+      ppInstr(vcode->arr[i]);
+      vex_printf("\n");
+   }
+   vex_printf("\n");
+
    /* Register allocate. */
    rcode = doRegisterAllocation ( vcode, available_real_regs,
                                  n_available_real_regs,
@@ -152,6 +160,13 @@ TranslateResult LibVEX_Translate (
                                  genSpill, genReload,
                                  ppInstr, ppReg );
 
+   vex_printf("\n-------- Post-regalloc code --------\n");
+   for (i = 0; i < rcode->arr_used; i++) {
+      ppInstr(rcode->arr[i]);
+      vex_printf("\n");
+   }
+   vex_printf("\n");
+
    /* Assemble, etc. */
    LibVEX_Clear(True);
 
index 12d84d1fa967e2d5d8434325dea30e59f8413b80..3a6e604585f5aa67f0bc204e2ed0a9c27c297fa4 100644 (file)
@@ -53,10 +53,12 @@ extern void ppIRConst ( IRConst* );
 
 /* ------------------ Temporaries ------------------ */
 
-typedef Int IRTemp;
+typedef UInt IRTemp;
 
 extern void ppIRTemp ( IRTemp );
 
+#define INVALID_IRTEMP ((IRTemp)0xFFFFFFFF)
+
 
 /* ------------------ Binary and unary ops ------------------ */
 
@@ -98,8 +100,8 @@ typedef
       IRExprTag tag;
       union {
          struct {
-            Int offset;
-            Int size;
+            Int    offset;
+            IRType ty;
          } Get;
          struct {
             IRTemp tmp;
@@ -124,7 +126,7 @@ typedef
    }
    IRExpr;
 
-extern IRExpr* IRExpr_Get   ( Int off, Int sz );
+extern IRExpr* IRExpr_Get   ( Int off, IRType ty );
 extern IRExpr* IRExpr_Tmp   ( IRTemp tmp );
 extern IRExpr* IRExpr_Binop ( IROp op, IRExpr* arg1, IRExpr* arg2 );
 extern IRExpr* IRExpr_Unop  ( IROp op, IRExpr* arg );
@@ -151,7 +153,6 @@ typedef
       union {
          struct {
             Int     offset;
-            Int     size;
             IRExpr* expr;
          } Put;
          struct {
@@ -167,7 +168,7 @@ typedef
    }
    IRStmt;
 
-extern IRStmt* IRStmt_Put  ( Int off, Int sz, IRExpr* value );
+extern IRStmt* IRStmt_Put  ( Int off, IRExpr* value );
 extern IRStmt* IRStmt_Tmp  ( IRTemp tmp, IRExpr* expr );
 extern IRStmt* IRStmt_STle ( IRExpr* addr, IRExpr* value );
 
index 95e1717b8b4bbd31df842e2a31fdfa3132a88373..568333db7f7bb54d7ac81f3c10652333acda4dbe 100644 (file)
@@ -78,7 +78,8 @@ int main ( int argc, char** argv )
       assert(linebuf[0] == '.');
       /* second line is:   . byte byte byte etc */
       //printf("%s", linebuf);
-      printf("Basic Block %d, Start %x, nbytes %d\n", 
+      printf("\n\n============ Basic Block %d, "
+             "Start %x, nbytes %d ============\n\n", 
              bb_number, orig_addr, orig_nbytes);
       assert(orig_nbytes >= 1 && orig_nbytes <= N_ORIGBUF);
       for (i = 0; i < orig_nbytes; i++) {
@@ -250,8 +251,8 @@ int main ( void )
 
    printf("\nAfter\n");
    for (i = 0; i < rcode->arr_used; i++) {
-     ppX86Instr(stdout, rcode->arr[i]);
-     printf("\n");
+      ppX86Instr(stdout, rcode->arr[i]);
+      printf("\n");
    }
    printf("\n");
    }