Yep, I think this is a dangerous feature, so warn about it.
[libfirm] / firmjni / testprograms / IfElseExample.java
index 5e3fe3d..3378136 100644 (file)
@@ -1,10 +1,14 @@
-/* Copyright (C) 2003 by Universitaet Karlsruhe
-* All rights reserved.
-*
-* Authors: Goetz Lindenmaier
-*
-* testprogram for Java native interface
-*/
+/*
+ * Project:     libFIRM
+ * File name:   firmjni/testprograms/IfElseExample.java
+ * Purpose:     This is an example of how to use the JNI interface of Firm.
+ * Author:      Goetz Lindenmaier
+ * Modified by:
+ * Created:
+ * CVS-ID:      $Id$
+ * Copyright:   (c) 2002 Universitaet Karlsruhe
+ * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ */
 
 import firmjni.*;
 
@@ -29,8 +33,9 @@ class IfElseExample {
 
        System.out.println("\nCreating an IR graph: IfElseExample...");
 
-  /* init library: Java did not support the callback, so ALWAYS use 0 here */
+       /* init library */
        Firm.initFirm(0);
+       Dbginfo.dbgInit();
 
        /** Build type information for the compilation unit. **/
 
@@ -41,18 +46,18 @@ class IfElseExample {
        int owner = Irprog.getGlobType();
 
        /* Basic type information for primitive type int. */
-       int primIntTypeName = Ident.idFromStr("int", 3);
+       int primIntTypeName = Ident.newIdFromStr("int");
        int primIntType = Type.newTypePrimitive(primIntTypeName, Irmode.getModeIs());
 
        /* The type of the method */
-       int tpName = Ident.idFromStr("IF_ELSE_EXAMPLE_main_p", 23);
+       int tpName = Ident.newIdFromStr("IF_ELSE_EXAMPLE_main_p");
        int procMain = Type.newTypeMethod(tpName, 0, 2);
        Type.setMethodResType(procMain, 0, primIntType);
        Type.setMethodResType(procMain, 1, primIntType);
 
        /* An entity representing the method.  Owner of the entity is the global
            class type mentioned above. */
-       int name = Ident.idFromStr("IF_ELSE_EXAMPLE_main", 20);
+       int name = Ident.newIdFromStr("IF_ELSE_EXAMPLE_main");
        int ent = Entity.newEntity (owner, name, procMain);
 
        /** Build code for the procedure. **/
@@ -60,8 +65,8 @@ class IfElseExample {
        int irg = Irgraph.newIrGraph (ent, 2);
 
        /* Generate two constants */
-       int c0 = Ircons.newConst (Irmode.getModeIs(), Tv.tarvalFromLong (Irmode.getModeIs(), 0));
-       int c1 = Ircons.newConst (Irmode.getModeIs(), Tv.tarvalFromLong (Irmode.getModeIs(), 1));
+       int c0 = Ircons.newConst (Irmode.getModeIs(), Tv.newTarvalFromLong (0, Irmode.getModeIs()));
+       int c1 = Ircons.newConst (Irmode.getModeIs(), Tv.newTarvalFromLong (1, Irmode.getModeIs()));
 
        /* Set a and b to constants */
        Ircons.setValue (0, c0);  /* this (0) is variable a */
@@ -69,34 +74,35 @@ class IfElseExample {
 
        /* The expression that evaluates the condition */
        int c2 = Ircons.newConst(Irmode.getModeIs(),
-                                Tv.tarvalFromLong (Irmode.getModeIs(), 2));
+                                Tv.newTarvalFromLong (2, Irmode.getModeIs()));
        int cmpGt = Ircons.newProj(Ircons.newCmp(Ircons.getValue(0, Irmode.getModeIs()), c2),
-                                  Irmode.getModeb(), Irnode.Gt);
+                                  Irmode.getModeb(), Irnode.pn_Cmp_Gt);
+
        int x = Ircons.newCond (cmpGt);
        int f = Ircons.newProj (x, Irmode.getModeX(), 0); /* if condition is false */
        int t = Ircons.newProj (x, Irmode.getModeX(), 1); /* if condition is true */
 
-       Ircons.matureBlock (Irgraph.getIrgCurrentBlock(irg));
+       Ircons.matureImmBlock (Irgraph.getIrgCurrentBlock(irg));
 
        /* generate and fill the then block */
        int b = Ircons.newImmBlock ();
-       Ircons.addInEdge (b, t);
+       Ircons.addImmBlockPred (b, t);
        Ircons.setValue (0, Ircons.getValue(1, Irmode.getModeIs()));
-       Ircons.matureBlock (b);
+       Ircons.matureImmBlock (b);
        int x_then = Ircons.newJmp ();
 
        /* generate and fill the else block */
        b = Ircons.newImmBlock ();
-       Ircons.addInEdge (b, f);
+       Ircons.addImmBlockPred (b, f);
        Ircons.setValue (1, Ircons.newConst (Irmode.getModeIs(),
-                                            Tv.tarvalFromLong (Irmode.getModeIs(), 2)));
-       Ircons.matureBlock (b);
+                                            Tv.newTarvalFromLong (2, Irmode.getModeIs())));
+       Ircons.matureImmBlock (b);
        int x_else = Ircons.newJmp ();
 
        /* generate the join block and add all cfg edges */
        b = Ircons.newImmBlock ();
-       Ircons.addInEdge (b, x_then);
-       Ircons.addInEdge (b, x_else);
+       Ircons.addImmBlockPred (b, x_then);
+       Ircons.addImmBlockPred (b, x_else);
 
        int[] in = new int[2]; /* this is the array containing the return parameters */
        in[0] = Ircons.getValue(0, Irmode.getModeIs());
@@ -105,24 +111,24 @@ class IfElseExample {
 
        /* Now generate all instructions for this block and all its predecessor
           blocks so we can mature it. */
-       Ircons.matureBlock (Irgraph.getIrgCurrentBlock(irg));
+       Ircons.matureImmBlock (Irgraph.getIrgCurrentBlock(irg));
 
        /* This adds the in edge of the end block which originates at the
           return statement.  The return node passes control flow to the
           end block.  */
-       Ircons.addInEdge (Irgraph.getIrgEndBlock(irg), x);
+       Ircons.addImmBlockPred (Irgraph.getIrgEndBlock(irg), x);
        /* Now we can mature the end block as all it's predecessors are known. */
-       Ircons.matureBlock (Irgraph.getIrgEndBlock(irg));
+       Ircons.matureImmBlock (Irgraph.getIrgEndBlock(irg));
 
-       Irvrfy.irgVrfy(irg);
-       Ircons.finalizeCons (irg);
+       Irvrfy.irgVerify(irg, Irvrfy.VRFY_NORMAL);
+       Irgraph.setIrgPhaseState (irg, Irgraph.phase_high);
 
        System.out.println("Done building the graph.  Optimizing it.");
        Irgopt.localOptimizeGraph(irg);
        Irgopt.deadNodeElimination(irg);
 
-       Irdump.dumpIrBlockGraph (irg);
-       Irdump.dumpAllTypes();
+       Irdump.dumpIrBlockGraph (irg, "");
+       Irdump.dumpAllTypes("");
 
        System.out.println("use xvcg to view this graph:");
        System.out.println("/ben/goetz/bin/xvcg GRAPHNAME\n");