changeset 16971:7bb9b9f56799

merge
author Michael Haupt <michael.haupt@oracle.com>
date Wed, 27 Aug 2014 12:51:44 +0200
parents 818844f7224d (current diff) 865628e59c55 (diff)
children 3bf348ff55e5
files
diffstat 7 files changed, 69 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedLoopNode.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedLoopNode.java	Wed Aug 27 12:51:44 2014 +0200
@@ -23,7 +23,6 @@
 package com.oracle.graal.truffle;
 
 import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
 
@@ -33,36 +32,24 @@
  */
 public final class OptimizedLoopNode extends LoopNode {
 
-    @CompilationFinal private int loopCount;
-
     public OptimizedLoopNode(RepeatingNode body) {
         super(body);
     }
 
     @Override
     public void executeLoop(VirtualFrame frame) {
+        int loopCount = 0;
         try {
-            do {
-            } while (executeBody(frame));
+            while (executeRepeatingNode(frame)) {
+                if (CompilerDirectives.inInterpreter()) {
+                    loopCount++;
+                }
+            }
         } finally {
-            loopDone();
+            if (CompilerDirectives.inInterpreter()) {
+                getRootNode().reportLoopCount(loopCount);
+            }
         }
     }
 
-    private final boolean executeBody(VirtualFrame frame) {
-        boolean result = executeRepeatNode(frame);
-        if (CompilerDirectives.inInterpreter()) {
-            if (result) {
-                loopCount++;
-            }
-        }
-        return result;
-    }
-
-    private void loopDone() {
-        if (CompilerDirectives.inInterpreter()) {
-            getRootNode().reportLoopCount(loopCount);
-            loopCount = 0;
-        }
-    }
-}
\ No newline at end of file
+}
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java	Wed Aug 27 12:51:44 2014 +0200
@@ -26,12 +26,16 @@
 import static org.hamcrest.CoreMatchers.*;
 import static org.junit.Assert.*;
 
+import org.junit.*;
 import org.junit.experimental.theories.*;
 import org.junit.runner.*;
 
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection0Factory;
-import com.oracle.truffle.api.dsl.test.TypeSystemTest.*;
+import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection1Factory;
+import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode;
+import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
+import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.source.*;
 
@@ -54,7 +58,7 @@
         expectSourceSection(root.getNode(), section);
     }
 
-    private void expectSourceSection(Node root, SourceSection section) {
+    private static void expectSourceSection(Node root, SourceSection section) {
         assertThat(root.getSourceSection(), is(sameInstance(section)));
         for (Node child : root.getChildren()) {
             if (child instanceof ArgumentNode) {
@@ -101,4 +105,33 @@
             return a; // the generic answer to all questions
         }
     }
+
+    @Test
+    public void testCreateCast() {
+        SourceSection section = new NullSourceSection("a", "b");
+        TestRootNode<SourceSection1> root = createRootPrefix(SourceSection1Factory.getInstance(), true, section);
+        expectSourceSection(root.getNode(), section);
+        assertThat((int) executeWith(root, 1), is(1));
+        expectSourceSection(root.getNode(), section);
+    }
+
+    @NodeChild("a")
+    static class SourceSection1 extends ValueNode {
+
+        public SourceSection1(SourceSection section) {
+            super(section);
+        }
+
+        @CreateCast("a")
+        public ValueNode cast(ValueNode node) {
+            assert getSourceSection() != null;
+            return node;
+        }
+
+        @Specialization
+        int do0(int a) {
+            return a;
+        }
+
+    }
 }
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java	Wed Aug 27 12:51:44 2014 +0200
@@ -24,7 +24,6 @@
 
 import static org.junit.Assert.*;
 
-import java.lang.reflect.*;
 import java.util.*;
 
 import com.oracle.truffle.api.*;
@@ -47,41 +46,32 @@
         return nodes;
     }
 
-    static <E extends ValueNode> E createNode(NodeFactory<E> factory, Object... constants) {
+    static <E extends ValueNode> E createNode(NodeFactory<E> factory, boolean prefixConstants, Object... constants) {
         ArgumentNode[] argumentNodes = arguments(factory.getExecutionSignature().size());
 
         List<Object> argumentList = new ArrayList<>();
+        if (prefixConstants) {
+            argumentList.addAll(Arrays.asList(constants));
+        }
         if (ChildrenNode.class.isAssignableFrom(factory.getNodeClass())) {
             argumentList.add(argumentNodes);
         } else {
             argumentList.addAll(Arrays.asList(argumentNodes));
         }
-        argumentList.addAll(Arrays.asList(constants));
+        if (!prefixConstants) {
+            argumentList.addAll(Arrays.asList(constants));
+        }
         return factory.createNode(argumentList.toArray(new Object[argumentList.size()]));
     }
 
-    static <E extends ValueNode> E createGenericNode(NodeFactory<E> factory, Object... constants) {
-        Method createGenericMethod;
-        try {
-            createGenericMethod = factory.getClass().getMethod("createGeneric", factory.getNodeClass());
-        } catch (NoSuchMethodException e) {
-            throw new RuntimeException(e);
-        }
-        try {
-            return factory.getNodeClass().cast(createGenericMethod.invoke(null, createNode(factory, constants)));
-        } catch (IllegalAccessException | InvocationTargetException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
     static <E extends ValueNode> TestRootNode<E> createRoot(NodeFactory<E> factory, Object... constants) {
-        TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, constants));
+        TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, false, constants));
         rootNode.adoptChildren();
         return rootNode;
     }
 
-    static <E extends ValueNode> TestRootNode<E> createGenericRoot(NodeFactory<E> factory, Object... constants) {
-        TestRootNode<E> rootNode = new TestRootNode<>(createGenericNode(factory, constants));
+    static <E extends ValueNode> TestRootNode<E> createRootPrefix(NodeFactory<E> factory, boolean prefixConstants, Object... constants) {
+        TestRootNode<E> rootNode = new TestRootNode<>(createNode(factory, prefixConstants, constants));
         rootNode.adoptChildren();
         return rootNode;
     }
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java	Wed Aug 27 12:51:44 2014 +0200
@@ -28,6 +28,7 @@
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.source.*;
 
 public class TypeSystemTest {
 
@@ -69,6 +70,10 @@
             super(null);
         }
 
+        public ValueNode(SourceSection sourceSection) {
+            super(sourceSection);
+        }
+
         public int executeInt(VirtualFrame frame) throws UnexpectedResultException {
             return SimpleTypesGen.SIMPLETYPES.expectInteger(execute(frame));
         }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java	Wed Aug 27 12:51:44 2014 +0200
@@ -35,7 +35,7 @@
 
     @Override
     public void executeLoop(VirtualFrame frame) {
-        do {
-        } while (executeRepeatNode(frame));
+        while (executeRepeatingNode(frame)) {
+        }
     }
 }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java	Wed Aug 27 12:51:44 2014 +0200
@@ -36,17 +36,17 @@
      */
     @Child protected Node repeatingNode;
 
-    public LoopNode(RepeatingNode repeatintNode) {
-        this.repeatingNode = (Node) repeatintNode;
+    public LoopNode(RepeatingNode repeatingNode) {
+        this.repeatingNode = (Node) repeatingNode;
     }
 
     public abstract void executeLoop(VirtualFrame frame);
 
-    protected final boolean executeRepeatNode(VirtualFrame frame) {
-        return getRepeatNode().executeRepeating(frame);
+    protected final boolean executeRepeatingNode(VirtualFrame frame) {
+        return getRepeatingNode().executeRepeating(frame);
     }
 
-    public final RepeatingNode getRepeatNode() {
+    public final RepeatingNode getRepeatingNode() {
         return (RepeatingNode) repeatingNode;
     }
 
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Wed Aug 27 11:56:35 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Wed Aug 27 12:51:44 2014 +0200
@@ -34,7 +34,6 @@
 import com.oracle.truffle.dsl.processor.*;
 import com.oracle.truffle.dsl.processor.java.model.*;
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror;
-import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.WildcardTypeMirror;
 
 /**
  * THIS IS NOT PUBLIC API.
@@ -217,7 +216,7 @@
     }
 
     public static boolean isSubtype(TypeMirror type1, TypeMirror type2) {
-        if (type1 instanceof CodeTypeMirror && type2 instanceof CodeTypeMirror) {
+        if (type1 instanceof CodeTypeMirror || type2 instanceof CodeTypeMirror) {
             throw new UnsupportedOperationException();
         }
         return ProcessorContext.getInstance().getEnvironment().getTypeUtils().isSubtype(type1, type2);
@@ -1046,11 +1045,7 @@
         }
         int typeParameters = element.getTypeParameters().size();
         if (typeParameters > 0 && declaredType.getTypeArguments().size() != typeParameters) {
-            List<TypeMirror> genericTypes = new ArrayList<>();
-            for (int i = 0; i < typeParameters; i++) {
-                genericTypes.add(new WildcardTypeMirror(null, null));
-            }
-            return new DeclaredCodeTypeMirror(element, genericTypes);
+            return ProcessorContext.getInstance().getEnvironment().getTypeUtils().erasure(type);
         }
         return type;
     }