changeset 5754:d5ce56698bb3

Merge.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Tue, 03 Jul 2012 11:16:56 +0200
parents f9c9c01969c0 (diff) a8c6104ef526 (current diff)
children 12e5956a8fdd
files graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRDebugInfo.java graal/com.oracle.graal.nodes/src/com/oracle/graal/cri/CiLoweringTool.java graal/com.oracle.graal.nodes/src/com/oracle/graal/cri/ExtendedRiRuntime.java graal/com.oracle.graal.nodes/src/com/oracle/graal/cri/RiGraphCache.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LookupSwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/TableSwitchNode.java graal/com.oracle.max.cri/src/com/oracle/max/cri/util/MemoryBarriers.java graal/com.oracle.max.cri/src/com/oracle/max/cri/util/UnsignedMath.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/BaseProfilingInfo.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/BaseUnresolvedField.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/BaseUnresolvedMethod.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/CompilationPrinter.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/JniMangle.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/SnapshotProfilingInfo.java graal/com.oracle.max.criutils/src/com/oracle/max/criutils/TypeCheckHints.java
diffstat 6 files changed, 45 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/BigBangTest.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/BigBangTest.java	Tue Jul 03 11:16:56 2012 +0200
@@ -30,14 +30,14 @@
     public void helloWorldTest() {
         BootImageGenerator generator = new BootImageGenerator();
         generator.addEntryMethod(TestPrograms.class, "helloWorldTest");
-        Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{3, 118, 58, 21});
+        Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{3, 148, 66, 24});
     }
 
     @Test
     public void formattedOutputTest() {
         BootImageGenerator generator = new BootImageGenerator();
         generator.addEntryMethod(TestPrograms.class, "formattedOutputTest");
-        Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{15, 979, 346, 98});
+        Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{19, 1668, 611, 179});
     }
 
 
@@ -60,6 +60,13 @@
     public void arrayListTest() {
         BootImageGenerator generator = new BootImageGenerator();
         generator.addEntryMethod(TestPrograms.class, "arrayListTest");
+        Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{2, 28, 5, 3});
+    }
+
+    @Test
+    public void arrayListTestWithCalls() {
+        BootImageGenerator generator = new BootImageGenerator();
+        generator.addEntryMethod(TestPrograms.class, "arrayListTestWithCalls");
         Assert.assertArrayEquals(generator.getBigBang().printState(), new int[]{2, 20, 3, 2});
     }
 }
--- a/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/TestPrograms.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.boot.test/src/com/oracle/graal/boot/TestPrograms.java	Tue Jul 03 11:16:56 2012 +0200
@@ -53,8 +53,26 @@
         newArr[0].testMethod();
     }
 
+    @SuppressWarnings("unchecked")
+    public static void arrayListTestWithCalls() {
+        ArrayList list = createNewArrayList();
+        list.add(new TestObject());
+        TestObject[] newArr = (TestObject[]) list.toArray(new TestObject[0]);
+        TestObject t2 = newArr[0].testMethod();
+        t2.testMethod2();
+    }
+
+    private static ArrayList createNewArrayList() {
+        return new ArrayList();
+    }
+
     public static class TestObject {
-        public void testMethod() {
+        public TestObject testMethod() {
+            return new TestObject();
+        }
+
+        public void testMethod2() {
+
         }
     }
 }
--- a/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/meta/ArrayTypeElement.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/meta/ArrayTypeElement.java	Tue Jul 03 11:16:56 2012 +0200
@@ -52,6 +52,13 @@
         if (type == null) {
             System.out.println("FATAL error: Array access without type!");
             System.out.println(load.array());
+            if (load.array() instanceof ValueProxyNode) {
+                ValueProxyNode valueProxyNode = (ValueProxyNode) load.array();
+                System.out.println("value proxy node stamp " + valueProxyNode.stamp());
+                System.out.println("value proxy node stamp type " + valueProxyNode.objectStamp().type());
+                System.out.println("value proxy source: " + valueProxyNode.value());
+                System.out.println("value proxy source stamp: " + valueProxyNode.value().stamp());
+            }
             System.out.println(((StructuredGraph) load.graph()).method());
             System.exit(-1);
         }
--- a/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/meta/InvokeElement.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.boot/src/com/oracle/graal/boot/meta/InvokeElement.java	Tue Jul 03 11:16:56 2012 +0200
@@ -68,6 +68,7 @@
             ResolvedJavaMethod method = methodCallTarget.targetMethod();
             concreteTargets.add(method);
             MethodElement processedMethod = bb.getProcessedMethod(method);
+            processedMethod.addUsage(bb, this.methodCallTarget.invoke().node());
             processedMethod.postParseGraph(bb);
         }
     }
@@ -94,6 +95,7 @@
                                 bb.getProcessedMethod(method).getParameter(i).postUnionTypes(bb, null, newSeenTypesTemp);
                             }
                         }
+                        processedMethod.addUsage(bb, this.methodCallTarget.invoke().node());
                     }
 
                     // Register new type for receiver.
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Tue Jul 03 11:16:56 2012 +0200
@@ -965,7 +965,11 @@
             return;
         }
 
-        MethodCallTargetNode callTarget = currentGraph.add(new MethodCallTargetNode(invokeKind, targetMethod, args, targetMethod.signature().returnType(method.holder())));
+        JavaType returnType = targetMethod.signature().returnType(method.holder());
+        if (graphBuilderConfig.eagerResolvingForSnippets()) {
+            returnType = returnType.resolve(targetMethod.holder());
+        }
+        MethodCallTargetNode callTarget = currentGraph.add(new MethodCallTargetNode(invokeKind, targetMethod, args, returnType));
         // be conservative if information was not recorded (could result in endless recompiles otherwise)
         if (optimisticOpts.useExceptionProbability() && profilingInfo.getExceptionSeen(bci()) == ExceptionSeen.FALSE) {
             ValueNode result = appendWithBCI(currentGraph.add(new InvokeNode(callTarget, bci(), graphId)));
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Mon Jul 02 18:20:25 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Tue Jul 03 11:16:56 2012 +0200
@@ -158,17 +158,17 @@
 
     public final ObjectStamp objectStamp() {
         assert verifyStamp(ObjectStamp.class);
-        return (ObjectStamp) stamp;
+        return (ObjectStamp) stamp();
     }
 
     public final IntegerStamp integerStamp() {
         assert verifyStamp(IntegerStamp.class);
-        return (IntegerStamp) stamp;
+        return (IntegerStamp) stamp();
     }
 
     public final FloatStamp floatStamp() {
         assert verifyStamp(FloatStamp.class);
-        return (FloatStamp) stamp;
+        return (FloatStamp) stamp();
     }
 
     @Override