changeset 22920:85b76567ea2c

Merge
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Sun, 01 Nov 2015 22:08:26 -0800
parents 6b81cca49187 (current diff) f84799cc5e03 (diff)
children 21c01c87ddfb
files
diffstat 7 files changed, 274 insertions(+), 263 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.match.processor/src/com/oracle/graal/compiler/match/processor/MatchProcessor.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.compiler.match.processor/src/com/oracle/graal/compiler/match/processor/MatchProcessor.java	Sun Nov 01 22:08:26 2015 -0800
@@ -24,7 +24,6 @@
 
 import java.io.FileWriter;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -595,20 +594,6 @@
 
             out.println("}");
         }
-
-        try {
-            createProviderFile(pkg, matchStatementClassName, originatingElements);
-        } catch (IOException e) {
-            reportExceptionThrow(info.topDeclaringType, e);
-        }
-    }
-
-    private void createProviderFile(String pkg, String providerClassName, Element... originatingElements) throws IOException {
-        String filename = "META-INF/jvmci.providers/" + pkg + "." + providerClassName;
-        FileObject file = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", filename, originatingElements);
-        PrintWriter writer = new PrintWriter(new OutputStreamWriter(file.openOutputStream(), "UTF-8"));
-        writer.println(MatchStatementSet.class.getName());
-        writer.close();
     }
 
     protected PrintWriter createSourceFile(String pkg, String relativeName, Filer filer, Element... originatingElements) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java	Sun Nov 01 22:08:26 2015 -0800
@@ -51,6 +51,25 @@
         return 0;
     }
 
+    @Test
+    public void testSubtractEqualsZeroLong() {
+        test("testSubtractEqualsZeroLongSnippet", "testSubtractEqualsZeroLongReference");
+    }
+
+    public static int testSubtractEqualsZeroLongReference(long a, long b) {
+        if (a == b) {
+            return 1;
+        }
+        return 0;
+    }
+
+    public static int testSubtractEqualsZeroLongSnippet(long a, long b) {
+        if (a - b == 0) {
+            return 1;
+        }
+        return 0;
+    }
+
     /**
      * Tests the canonicalization of (x >>> const) == 0 to x |test| (-1 << const).
      */
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EarlyReadEliminationTest.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EarlyReadEliminationTest.java	Sun Nov 01 22:08:26 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,15 +35,16 @@
 import com.oracle.graal.nodes.ValuePhiNode;
 import com.oracle.graal.nodes.java.LoadFieldNode;
 import com.oracle.graal.nodes.java.StoreFieldNode;
+import com.oracle.graal.nodes.memory.ReadNode;
+import com.oracle.graal.nodes.spi.LoweringTool;
 import com.oracle.graal.phases.common.CanonicalizerPhase;
+import com.oracle.graal.phases.common.LoweringPhase;
 import com.oracle.graal.phases.common.inlining.InliningPhase;
 import com.oracle.graal.phases.tiers.HighTierContext;
 import com.oracle.graal.virtual.phases.ea.EarlyReadEliminationPhase;
 
 public class EarlyReadEliminationTest extends GraalCompilerTest {
 
-    protected StructuredGraph graph;
-
     public static Object staticField;
 
     public static class TestObject {
@@ -87,8 +88,15 @@
 
     @Test
     public void testSimple() {
-        ValueNode result = getReturn("testSimpleSnippet").result();
-        assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty());
+        // Test without lowering.
+        ValueNode result = getReturn("testSimpleSnippet", false).result();
+        assertTrue(result.graph().getNodes().filter(LoadFieldNode.class).isEmpty());
+        assertTrue(result.isConstant());
+        assertDeepEquals(2, result.asJavaConstant().asInt());
+
+        // Test with lowering.
+        result = getReturn("testSimpleSnippet", true).result();
+        assertTrue(result.graph().getNodes().filter(ReadNode.class).isEmpty());
         assertTrue(result.isConstant());
         assertDeepEquals(2, result.asJavaConstant().asInt());
     }
@@ -103,7 +111,7 @@
 
     @Test
     public void testSimpleConflict() {
-        ValueNode result = getReturn("testSimpleConflictSnippet").result();
+        ValueNode result = getReturn("testSimpleConflictSnippet", false).result();
         assertFalse(result.isConstant());
         assertTrue(result instanceof LoadFieldNode);
     }
@@ -116,9 +124,9 @@
 
     @Test
     public void testParam() {
-        ValueNode result = getReturn("testParamSnippet").result();
-        assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty());
-        assertDeepEquals(graph.getParameter(1), result);
+        ValueNode result = getReturn("testParamSnippet", false).result();
+        assertTrue(result.graph().getNodes().filter(LoadFieldNode.class).isEmpty());
+        assertDeepEquals(result.graph().getParameter(1), result);
     }
 
     @SuppressWarnings("all")
@@ -130,9 +138,9 @@
 
     @Test
     public void testMaterialized() {
-        ValueNode result = getReturn("testMaterializedSnippet").result();
-        assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty());
-        assertDeepEquals(graph.getParameter(0), result);
+        ValueNode result = getReturn("testMaterializedSnippet", false).result();
+        assertTrue(result.graph().getNodes().filter(LoadFieldNode.class).isEmpty());
+        assertDeepEquals(result.graph().getParameter(0), result);
     }
 
     @SuppressWarnings("all")
@@ -146,9 +154,15 @@
 
     @Test
     public void testSimpleLoop() {
-        ValueNode result = getReturn("testSimpleLoopSnippet").result();
-        assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty());
-        assertDeepEquals(graph.getParameter(1), result);
+        // Test without lowering.
+        ValueNode result = getReturn("testSimpleLoopSnippet", false).result();
+        assertTrue(result.graph().getNodes().filter(LoadFieldNode.class).isEmpty());
+        assertDeepEquals(result.graph().getParameter(1), result);
+
+        // Now test with lowering.
+        result = getReturn("testSimpleLoopSnippet", true).result();
+        assertTrue(result.graph().getNodes().filter(ReadNode.class).isEmpty());
+        assertDeepEquals(result.graph().getParameter(1), result);
     }
 
     @SuppressWarnings("all")
@@ -164,8 +178,8 @@
 
     @Test
     public void testBadLoop() {
-        ValueNode result = getReturn("testBadLoopSnippet").result();
-        assertDeepEquals(0, graph.getNodes().filter(LoadFieldNode.class).count());
+        ValueNode result = getReturn("testBadLoopSnippet", false).result();
+        assertDeepEquals(0, result.graph().getNodes().filter(LoadFieldNode.class).count());
         assertTrue(result instanceof ProxyNode);
         assertTrue(((ProxyNode) result).value() instanceof ValuePhiNode);
     }
@@ -182,8 +196,8 @@
 
     @Test
     public void testBadLoop2() {
-        ValueNode result = getReturn("testBadLoop2Snippet").result();
-        assertDeepEquals(1, graph.getNodes().filter(LoadFieldNode.class).count());
+        ValueNode result = getReturn("testBadLoop2Snippet", false).result();
+        assertDeepEquals(1, result.graph().getNodes().filter(LoadFieldNode.class).count());
         assertTrue(result instanceof LoadFieldNode);
     }
 
@@ -199,7 +213,7 @@
 
     @Test
     public void testPhi() {
-        processMethod("testPhiSnippet");
+        StructuredGraph graph = processMethod("testPhiSnippet", false);
         assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty());
         List<ReturnNode> returnNodes = graph.getNodes(ReturnNode.TYPE).snapshot();
         assertDeepEquals(2, returnNodes.size());
@@ -217,7 +231,7 @@
 
     @Test
     public void testSimpleStore() {
-        processMethod("testSimpleStoreSnippet");
+        StructuredGraph graph = processMethod("testSimpleStoreSnippet", false);
         assertDeepEquals(1, graph.getNodes().filter(StoreFieldNode.class).count());
     }
 
@@ -235,20 +249,24 @@
 
     @Test
     public void testValueProxy() {
-        processMethod("testValueProxySnippet");
+        StructuredGraph graph = processMethod("testValueProxySnippet", false);
         assertDeepEquals(2, graph.getNodes().filter(LoadFieldNode.class).count());
     }
 
-    ReturnNode getReturn(String snippet) {
-        processMethod(snippet);
+    ReturnNode getReturn(String snippet, boolean doLowering) {
+        StructuredGraph graph = processMethod(snippet, doLowering);
         assertDeepEquals(1, graph.getNodes(ReturnNode.TYPE).count());
         return graph.getNodes(ReturnNode.TYPE).first();
     }
 
-    protected void processMethod(String snippet) {
-        graph = parseEager(getResolvedJavaMethod(snippet), AllowAssumptions.NO);
+    protected StructuredGraph processMethod(String snippet, boolean doLowering) {
+        StructuredGraph graph = parseEager(getResolvedJavaMethod(snippet), AllowAssumptions.NO);
         HighTierContext context = getDefaultHighTierContext();
         new InliningPhase(new CanonicalizerPhase()).apply(graph, context);
+        if (doLowering) {
+            new LoweringPhase(new CanonicalizerPhase(), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context);
+        }
         new EarlyReadEliminationPhase(new CanonicalizerPhase()).apply(graph, context);
+        return graph;
     }
 }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java	Sun Nov 01 22:08:26 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 
 import sun.misc.Unsafe;
 
+import com.oracle.graal.nodes.StructuredGraph;
 import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions;
 import com.oracle.graal.nodes.extended.UnsafeLoadNode;
 import com.oracle.graal.nodes.java.LoadIndexedNode;
@@ -49,7 +50,7 @@
 
     @Test
     public void testIndexed1() {
-        processMethod("testIndexed1Snippet");
+        StructuredGraph graph = processMethod("testIndexed1Snippet", false);
         assertDeepEquals(0, graph.getNodes().filter(LoadIndexedNode.class).count());
     }
 
@@ -69,7 +70,7 @@
 
     @Test
     public void testIndexed2() {
-        processMethod("testIndexed2Snippet");
+        StructuredGraph graph = processMethod("testIndexed2Snippet", false);
         assertDeepEquals(3, graph.getNodes().filter(LoadIndexedNode.class).count());
         assertDeepEquals(7, graph.getNodes().filter(StoreIndexedNode.class).count());
     }
@@ -93,7 +94,7 @@
 
     @Test
     public void testIndexed3() {
-        processMethod("testIndexed3Snippet");
+        StructuredGraph graph = processMethod("testIndexed3Snippet", false);
         assertDeepEquals(3, graph.getNodes().filter(LoadIndexedNode.class).count());
     }
 
@@ -112,7 +113,7 @@
 
     @Test
     public void testIndexed4() {
-        processMethod("testIndexed4Snippet");
+        StructuredGraph graph = processMethod("testIndexed4Snippet", false);
         assertDeepEquals(3, graph.getNodes().filter(LoadIndexedNode.class).count());
     }
 
@@ -128,7 +129,7 @@
 
     @Test
     public void testUnsafe1() {
-        processMethod("testUnsafe1Snippet");
+        StructuredGraph graph = processMethod("testUnsafe1Snippet", false);
         assertDeepEquals(1, graph.getNodes().filter(UnsafeLoadNode.class).count());
     }
 
@@ -141,7 +142,7 @@
 
     @Test
     public void testUnsafe2() {
-        processMethod("testUnsafe2Snippet");
+        StructuredGraph graph = processMethod("testUnsafe2Snippet", false);
         assertDeepEquals(3, graph.getNodes().filter(UnsafeLoadNode.class).count());
     }
 
@@ -157,7 +158,7 @@
 
     @Test
     public void testUnsafe3() {
-        processMethod("testUnsafe3Snippet");
+        StructuredGraph graph = processMethod("testUnsafe3Snippet", false);
         assertDeepEquals(1, graph.getNodes().filter(UnsafeLoadNode.class).count());
     }
 
@@ -171,7 +172,7 @@
 
     @Test
     public void testUnsafe4() {
-        processMethod("testUnsafe4Snippet");
+        StructuredGraph graph = processMethod("testUnsafe4Snippet", false);
         assertDeepEquals(3, graph.getNodes().filter(UnsafeLoadNode.class).count());
     }
 
@@ -187,15 +188,16 @@
 
     @Test
     public void testUnsafe5() {
-        processMethod("testUnsafe5Snippet");
+        StructuredGraph graph = processMethod("testUnsafe5Snippet", false);
         assertDeepEquals(1, graph.getNodes().filter(UnsafeLoadNode.class).count());
     }
 
     @Override
-    protected void processMethod(final String snippet) {
-        graph = parseEager(snippet, AllowAssumptions.NO);
+    protected StructuredGraph processMethod(final String snippet, boolean doLowering) {
+        StructuredGraph graph = parseEager(snippet, AllowAssumptions.NO);
         HighTierContext context = getDefaultHighTierContext();
         new InliningPhase(new CanonicalizerPhase()).apply(graph, context);
         new PartialEscapePhase(false, true, new CanonicalizerPhase(), null).apply(graph, context);
+        return graph;
     }
 }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java	Sun Nov 01 22:08:26 2015 -0800
@@ -112,41 +112,6 @@
         }
     }
 
-    static class ReadCacheEntry extends CacheEntry<ValueNode> {
-
-        private final LocationIdentity location;
-
-        public ReadCacheEntry(ValueNode object, ValueNode offset, LocationIdentity location) {
-            super(object, offset);
-            this.location = location;
-        }
-
-        @Override
-        public CacheEntry<ValueNode> duplicateWithObject(ValueNode newObject) {
-            return new ReadCacheEntry(newObject, identity, location);
-        }
-
-        @Override
-        public boolean conflicts(LocationIdentity other) {
-            return location.equals(other);
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (!(obj instanceof ReadCacheEntry)) {
-                return false;
-            }
-
-            ReadCacheEntry other = (ReadCacheEntry) obj;
-            return this.location.equals(other.location) && super.equals(other);
-        }
-
-        @Override
-        public int hashCode() {
-            return location.hashCode() * 23 + super.hashCode();
-        }
-    }
-
     public ReadEliminationBlockState() {
         readCache = CollectionsFactory.newMap();
     }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java	Thu Oct 29 12:35:30 2015 -0700
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java	Sun Nov 01 22:08:26 2015 -0800
@@ -55,11 +55,9 @@
 import com.oracle.graal.nodes.memory.MemoryCheckpoint;
 import com.oracle.graal.nodes.memory.ReadNode;
 import com.oracle.graal.nodes.memory.WriteNode;
-import com.oracle.graal.nodes.memory.address.OffsetAddressNode;
 import com.oracle.graal.nodes.util.GraphUtil;
 import com.oracle.graal.virtual.phases.ea.ReadEliminationBlockState.CacheEntry;
 import com.oracle.graal.virtual.phases.ea.ReadEliminationBlockState.LoadCacheEntry;
-import com.oracle.graal.virtual.phases.ea.ReadEliminationBlockState.ReadCacheEntry;
 import com.oracle.graal.virtual.phases.ea.ReadEliminationBlockState.UnsafeLoadCacheEntry;
 
 public class ReadEliminationClosure extends EffectsClosure<ReadEliminationBlockState> {
@@ -106,46 +104,46 @@
             }
         } else if (node instanceof ReadNode) {
             ReadNode read = (ReadNode) node;
-            if (read.getAddress() instanceof OffsetAddressNode) {
-                OffsetAddressNode address = (OffsetAddressNode) read.getAddress();
-                if (address.getOffset().isConstant()) {
-                    ValueNode object = GraphUtil.unproxify(address.getBase());
-                    ReadCacheEntry identifier = new ReadCacheEntry(object, address.getOffset(), read.getLocationIdentity());
-                    ValueNode cachedValue = state.getCacheEntry(identifier);
-                    if (cachedValue != null && read.stamp().isCompatible(cachedValue.stamp())) {
-                        // Anchor guard if it is not fixed and different from cachedValue's guard
-                        if (read.getGuard() != null && !(read.getGuard() instanceof FixedNode)) {
-                            if (!(cachedValue instanceof GuardedNode) || ((GuardedNode) cachedValue).getGuard() != read.getGuard()) {
-                                effects.addFixedNodeBefore(new ValueAnchorNode((ValueNode) read.getGuard()), read);
-                            }
+            if (read.getLocationIdentity().isSingle()) {
+                ValueNode object = GraphUtil.unproxify(read.getAddress());
+                LoadCacheEntry identifier = new LoadCacheEntry(object, read.getLocationIdentity());
+                ValueNode cachedValue = state.getCacheEntry(identifier);
+                if (cachedValue != null && read.stamp().isCompatible(cachedValue.stamp())) {
+                    // Anchor guard if it is not fixed and different from cachedValue's guard such
+                    // that it gets preserved.
+                    if (read.getGuard() != null && !(read.getGuard() instanceof FixedNode)) {
+                        if (!(cachedValue instanceof GuardedNode) || ((GuardedNode) cachedValue).getGuard() != read.getGuard()) {
+                            effects.addFixedNodeBefore(new ValueAnchorNode((ValueNode) read.getGuard()), read);
                         }
                     }
+                    effects.replaceAtUsages(read, cachedValue);
+                    addScalarAlias(read, cachedValue);
+                    deleted = true;
+                } else {
+                    state.addCacheEntry(identifier, read);
                 }
             }
         } else if (node instanceof WriteNode) {
             WriteNode write = (WriteNode) node;
-            if (write.getAddress() instanceof OffsetAddressNode) {
-                OffsetAddressNode address = (OffsetAddressNode) write.getAddress();
-                if (address.getOffset().isConstant()) {
-                    ValueNode object = GraphUtil.unproxify(address.getBase());
-                    ReadCacheEntry identifier = new ReadCacheEntry(object, address.getOffset(), write.getLocationIdentity());
-                    ValueNode cachedValue = state.getCacheEntry(identifier);
+            if (write.getLocationIdentity().isSingle()) {
+                ValueNode object = GraphUtil.unproxify(write.getAddress());
+                LoadCacheEntry identifier = new LoadCacheEntry(object, write.getLocationIdentity());
+                ValueNode cachedValue = state.getCacheEntry(identifier);
 
-                    ValueNode value = getScalarAlias(write.value());
-                    if (GraphUtil.unproxify(value) == GraphUtil.unproxify(cachedValue)) {
-                        effects.deleteNode(write);
-                        deleted = true;
-                    }
-                    processIdentity(state, write.getLocationIdentity());
-                    state.addCacheEntry(identifier, value);
-                } else {
-                    processIdentity(state, write.getLocationIdentity());
+                ValueNode value = getScalarAlias(write.value());
+                if (GraphUtil.unproxify(value) == GraphUtil.unproxify(cachedValue)) {
+                    effects.deleteNode(write);
+                    deleted = true;
                 }
+                processIdentity(state, write.getLocationIdentity());
+                state.addCacheEntry(identifier, value);
+            } else {
+                processIdentity(state, write.getLocationIdentity());
             }
         } else if (node instanceof UnsafeAccessNode) {
             if (node instanceof UnsafeLoadNode) {
                 UnsafeLoadNode load = (UnsafeLoadNode) node;
-                if (load.offset().isConstant() && !load.getLocationIdentity().equals(LocationIdentity.any())) {
+                if (load.getLocationIdentity().isSingle()) {
                     ValueNode object = GraphUtil.unproxify(load.object());
                     UnsafeLoadCacheEntry identifier = new UnsafeLoadCacheEntry(object, load.offset(), load.getLocationIdentity());
                     ValueNode cachedValue = state.getCacheEntry(identifier);
@@ -160,7 +158,7 @@
             } else {
                 assert node instanceof UnsafeStoreNode;
                 UnsafeStoreNode write = (UnsafeStoreNode) node;
-                if (write.offset().isConstant() && !write.getLocationIdentity().equals(LocationIdentity.any())) {
+                if (write.getLocationIdentity().isSingle()) {
                     ValueNode object = GraphUtil.unproxify(write.object());
                     UnsafeLoadCacheEntry identifier = new UnsafeLoadCacheEntry(object, write.offset(), write.getLocationIdentity());
                     ValueNode cachedValue = state.getCacheEntry(identifier);
--- a/mx.graal/suite.py	Thu Oct 29 12:35:30 2015 -0700
+++ b/mx.graal/suite.py	Sun Nov 01 22:08:26 2015 -0800
@@ -1,20 +1,37 @@
 import mx
 JDK9 = mx.get_jdk(tag='default').javaCompliance >= "1.9"
-_8_9 = "1.9" if JDK9 else "1.8"
 
 def deps(l):
-    """ Filters out dependencies starting with 'jvmci:' if using JDK9. """
-    return [d for d in l if not JDK9 or not d.startswith("jvmci:")]
+    """
+    If using JDK9, replaces dependencies starting with 'jvmci:' with 'JVMCI'.
+    Otherwise, excludes "JVMCI".
+    """
+    if JDK9:
+        res = []
+        for e in l:
+            if e.startswith("jvmci:"):
+                if not "JVMCI" in res:
+                    res.append("JVMCI")
+            else:
+                res.append(e)
+        return res
+    else:
+        return [d for d in l if d != "JVMCI"]
+
+def libs(d):
+    """
+    If not using JDK9, excludes "JVMCI" library.
+    """
+    if not JDK9:
+        del d["JVMCI"]
+    return d
 
 def suites(l):
     """ Filters out suites named 'jvmci' if using JDK9. """
     return [s for s in l if not JDK9 or not s.get('name') == "jvmci"]
 
-def ap(name):
-    return name + "_PROCESSOR" if JDK9 else "jvmci:JVMCI_" + name + "_PROCESSOR"
-
 suite = {
-  "mxversion" : "5.5.7",
+  "mxversion" : "5.5.14",
   "name" : "graal",
 
   "imports" : {
@@ -41,7 +58,7 @@
 
   "defaultLicense" : "GPLv2-CPE",
 
-  "libraries" : {
+  "libraries" : libs({
 
     # ------------- Libraries -------------
 
@@ -72,16 +89,16 @@
       "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/jmh/jmh-runner-1.10.4.jar"],
     },
 
-    "OPTIONS_PROCESSOR" : {
-      "sha1" : "66a86a977ae5aaaeb2105b94cbb59e039d0d432d",
-      "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-options-processor.jar"],
-    },
-
-    "SERVICE_PROCESSOR" : {
-      "sha1" : "341cb1c52b4e6194d9edc7a91ffc4d41d0258d94",
-      "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-service-processor.jar"],
-    },
-  },
+    # Library that allows Graal to compile against JVMCI without the jvmci suite.
+    # This library is not added to the boot class path at run time and so code
+    # compiled against this library must be run on (JVMCI enabled) JDK9.
+    "JVMCI" : {
+        "sha1" : "f4f0d6cfa751fa644163008810d5123c4c298104",
+        "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-b0e383e27552.jar"],
+        "sourceSha1" : "9781af80d9f43b4f1a5b17802ea8d0c8c50d563c",
+        "sourceUrls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-b0e383e27552.src.zip"],
+     },
+  }),
 
   "projects" : {
 
@@ -103,7 +120,7 @@
         "mx:JUNIT",
       ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
     },
 
     # ------------- Graal -------------
@@ -115,8 +132,8 @@
       "dependencies" : deps([
         "jvmci:JVMCI_API",
       ]),
-      "annotationProcessors" : [ap("OPTIONS")],
-      "javaCompliance" : _8_9,
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
+      "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,Debug",
     },
 
@@ -128,7 +145,7 @@
         "com.oracle.graal.debug",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,Debug,Test",
     },
 
@@ -139,9 +156,9 @@
         "jvmci:JVMCI_SERVICE",
         "jvmci:JVMCI_API",
       ]),
-      "annotationProcessors" : [ap("SERVICE")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_SERVICE_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal",
     },
 
@@ -149,7 +166,7 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal",
     },
 
@@ -157,7 +174,7 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal",
     },
 
@@ -168,7 +185,7 @@
       "dependencies" : [
         "com.oracle.graal.compiler.test",
       ],
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal",
     },
 
@@ -179,7 +196,7 @@
         "jvmci:JVMCI_API",
       ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal",
     },
 
@@ -191,7 +208,7 @@
         "com.oracle.graal.api.runtime",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal,Test",
     },
 
@@ -200,7 +217,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : deps(["jvmci:JVMCI_API"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "API,Graal,Replacements",
     },
 
@@ -215,14 +232,14 @@
         "com.oracle.graal.code",
       ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [
+      "annotationProcessors" : deps([
         "GRAAL_NODEINFO_PROCESSOR",
         "GRAAL_COMPILER_MATCH_PROCESSOR",
         "GRAAL_REPLACEMENTS_VERIFIER",
-        ap("OPTIONS"),
-        ap("SERVICE"),
-      ],
-      "javaCompliance" : _8_9,
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+      ]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,HotSpot",
     },
 
@@ -235,11 +252,11 @@
         "com.oracle.graal.replacements.amd64",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [
-        ap("SERVICE"),
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
         "GRAAL_NODEINFO_PROCESSOR"
-      ],
-      "javaCompliance" : _8_9,
+      ]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,HotSpot,AMD64",
     },
 
@@ -252,8 +269,8 @@
         "com.oracle.graal.replacements.sparc",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [ap("SERVICE")],
-      "javaCompliance" : _8_9,
+      "annotationProcessors" : deps(["jvmci:JVMCI_SERVICE_PROCESSOR"]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,HotSpot,SPARC",
     },
 
@@ -266,7 +283,7 @@
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,HotSpot,Test",
     },
 
@@ -279,7 +296,7 @@
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,HotSpot,AMD64,Test",
     },
 
@@ -287,7 +304,7 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Graph",
     },
 
@@ -298,7 +315,7 @@
       "dependencies" : [
         "com.oracle.graal.nodeinfo",
       ],
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Graph",
     },
 
@@ -310,11 +327,11 @@
         "com.oracle.graal.compiler.common",
         "com.oracle.graal.api.collections",
       ],
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [
-        ap("OPTIONS"),
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
         "GRAAL_NODEINFO_PROCESSOR"
-      ],
+      ]),
       "workingSets" : "Graal,Graph",
     },
 
@@ -328,7 +345,7 @@
         "com.oracle.graal.graph",
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Graph,Test",
     },
 
@@ -337,7 +354,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : deps(["jvmci:JVMCI_API"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Assembler",
     },
 
@@ -348,7 +365,7 @@
         "com.oracle.graal.asm",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Assembler,AMD64",
     },
 
@@ -359,7 +376,7 @@
         "com.oracle.graal.asm",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Assembler,SPARC",
     },
 
@@ -367,7 +384,7 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Java",
     },
 
@@ -380,7 +397,7 @@
         "com.oracle.graal.debug",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Assembler,Test",
     },
 
@@ -392,7 +409,7 @@
         "com.oracle.graal.asm.amd64",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Assembler,AMD64,Test",
     },
 
@@ -403,9 +420,9 @@
         "com.oracle.graal.compiler.common",
         "com.oracle.graal.asm",
       ],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,LIR",
     },
 
@@ -417,7 +434,7 @@
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,LIR",
       "findbugs" : "false",
     },
@@ -430,7 +447,7 @@
         "com.oracle.graal.lir",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,LIR",
     },
 
@@ -441,9 +458,9 @@
         "com.oracle.graal.lir",
         "com.oracle.graal.asm.amd64",
       ],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,LIR,AMD64",
     },
 
@@ -455,7 +472,7 @@
         "com.oracle.graal.lir",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,LIR,SPARC",
     },
 
@@ -464,7 +481,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.nodes"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "workingSets" : "API,Graal",
     },
@@ -479,12 +496,12 @@
         "com.oracle.graal.word",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [
-        ap("OPTIONS"),
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
         "GRAAL_REPLACEMENTS_VERIFIER",
         "GRAAL_NODEINFO_PROCESSOR",
-      ],
+      ]),
       "workingSets" : "Graal,Replacements",
     },
 
@@ -497,7 +514,7 @@
           "com.oracle.graal.compiler",
           ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "annotationProcessors" : [
         "GRAAL_NODEINFO_PROCESSOR",
       ],
@@ -512,7 +529,7 @@
           "com.oracle.graal.compiler",
           ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Replacements,SPARC",
     },
 
@@ -525,7 +542,7 @@
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Replacements,Test",
       "jacoco" : "exclude",
     },
@@ -538,7 +555,7 @@
         "com.oracle.graal.graph",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Replacements",
     },
 
@@ -552,7 +569,7 @@
         "com.oracle.graal.bytecode",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "annotationProcessors" : [
         "GRAAL_NODEINFO_PROCESSOR",
         "GRAAL_REPLACEMENTS_VERIFIER",
@@ -565,7 +582,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.compiler.test"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Graph",
     },
 
@@ -573,9 +590,9 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.nodes"],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Phases",
     },
 
@@ -583,12 +600,12 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.phases"],
-      "annotationProcessors" : [
+      "annotationProcessors" : deps([
         "GRAAL_NODEINFO_PROCESSOR",
-        ap("OPTIONS")
-      ],
+        "jvmci:JVMCI_OPTIONS_PROCESSOR"
+      ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Phases",
     },
 
@@ -601,7 +618,7 @@
         "mx:JUNIT",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Test",
     },
 
@@ -609,12 +626,12 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.phases.common"],
-      "annotationProcessors" : [
-        ap("OPTIONS"),
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
         "GRAAL_NODEINFO_PROCESSOR"
-      ],
+      ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Phases",
     },
 
@@ -623,7 +640,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : ["JMH"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "annotationProcessors" : ["JMH"],
       "workingSets" : "Graal,Bench",
     },
@@ -638,7 +655,7 @@
         "com.oracle.graal.runtime",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "annotationProcessors" : ["JMH"],
       "workingSets" : "Graal,Bench",
     },
@@ -647,9 +664,9 @@
       "subDir" : "graal",
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.phases.common"],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Phases",
     },
 
@@ -661,11 +678,11 @@
         "com.oracle.graal.loop",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [
-        ap("SERVICE"),
-        ap("OPTIONS"),
-      ],
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+      ]),
       "workingSets" : "Graal",
     },
 
@@ -676,7 +693,7 @@
         "com.oracle.graal.compiler",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Codegen",
     },
 
@@ -689,11 +706,12 @@
         "com.oracle.graal.java",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [
+      "annotationProcessors" : deps([
         "GRAAL_NODEINFO_PROCESSOR",
-        "GRAAL_COMPILER_MATCH_PROCESSOR"
-      ],
-      "javaCompliance" : _8_9,
+        "GRAAL_COMPILER_MATCH_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+      ]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,AMD64",
     },
 
@@ -705,7 +723,7 @@
         "jvmci:JVMCI_HOTSPOT"
       ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,AMD64,Test",
     },
 
@@ -717,11 +735,12 @@
         "com.oracle.graal.lir.sparc"
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [
+      "annotationProcessors" : deps([
         "GRAAL_NODEINFO_PROCESSOR",
-        "GRAAL_COMPILER_MATCH_PROCESSOR"
-      ],
-      "javaCompliance" : _8_9,
+        "GRAAL_COMPILER_MATCH_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+      ]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,SPARC",
     },
 
@@ -733,7 +752,7 @@
         "jvmci:JVMCI_HOTSPOT"
       ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,SPARC,Test",
     },
 
@@ -742,7 +761,7 @@
       "sourceDirs" : ["src"],
       "dependencies" : ["com.oracle.graal.compiler"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal",
     },
 
@@ -753,9 +772,9 @@
         "com.oracle.graal.phases",
         "com.oracle.graal.graphbuilderconf",
       ],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Java",
     },
 
@@ -766,7 +785,7 @@
         "com.oracle.graal.nodes",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Java",
     },
 
@@ -776,9 +795,9 @@
       "dependencies" : [
         "com.oracle.graal.debug",
       ],
-      "annotationProcessors" : [ap("OPTIONS")],
+      "annotationProcessors" : deps(["jvmci:JVMCI_OPTIONS_PROCESSOR"]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Java",
     },
 
@@ -790,12 +809,12 @@
         "com.oracle.graal.java",
         "com.oracle.graal.compiler",
       ],
-      "annotationProcessors" : [
-        ap("OPTIONS"),
-        ap("SERVICE")
-      ],
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR"
+      ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Graph",
     },
 
@@ -806,7 +825,7 @@
         "mx:JUNIT",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Test",
     },
 
@@ -823,7 +842,7 @@
       ],
       "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Test",
       "jacoco" : "exclude",
     },
@@ -835,7 +854,7 @@
         "com.oracle.graal.compiler.test",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Test",
       "jacoco" : "exclude",
       "findbugs" : "false",
@@ -853,14 +872,14 @@
         "com.oracle.graal.replacements",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "annotationProcessors" : [
+      "annotationProcessors" : deps([
         "GRAAL_NODEINFO_PROCESSOR",
         "GRAAL_REPLACEMENTS_VERIFIER",
-        ap("OPTIONS"),
-        ap("SERVICE"),
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
         "truffle:TRUFFLE_DSL_PROCESSOR",
-      ],
-      "javaCompliance" : _8_9,
+      ]),
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Truffle",
       "jacoco" : "exclude",
     },
@@ -878,7 +897,7 @@
         "truffle:TRUFFLE_DSL_PROCESSOR"
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal,Truffle,Test",
       "jacoco" : "exclude",
     },
@@ -892,11 +911,11 @@
         "com.oracle.nfi",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [
-        ap("OPTIONS"),
-        ap("SERVICE")
-      ],
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR"
+      ]),
       "workingSets" : "Graal,Truffle",
     },
 
@@ -908,10 +927,10 @@
         "com.oracle.graal.hotspot.amd64",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [
-        ap("SERVICE"),
-      ],
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+      ]),
       "workingSets" : "Graal,Truffle",
     },
 
@@ -923,8 +942,8 @@
         "com.oracle.graal.asm.sparc",
       ],
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
-      "annotationProcessors" : [ap("SERVICE")],
+      "javaCompliance" : "1.8",
+      "annotationProcessors" : deps(["jvmci:JVMCI_SERVICE_PROCESSOR"]),
       "workingSets" : "Graal,Truffle,SPARC",
     },
 
@@ -936,12 +955,12 @@
       "dependencies" : [
         "com.oracle.graal.java",
       ],
-      "annotationProcessors" : [
-        ap("OPTIONS"),
-        ap("SERVICE"),
-      ],
+      "annotationProcessors" : deps([
+        "jvmci:JVMCI_OPTIONS_PROCESSOR",
+        "jvmci:JVMCI_SERVICE_PROCESSOR",
+      ]),
       "checkstyle" : "com.oracle.graal.graph",
-      "javaCompliance" : _8_9,
+      "javaCompliance" : "1.8",
       "workingSets" : "Graal",
     },
   },
@@ -964,6 +983,7 @@
         "com.oracle.graal.api.runtime",
         "com.oracle.graal.graph",
       ],
+      "exclude" : deps(["JVMCI"]),
       "distDependencies" : deps([
         "jvmci:JVMCI_API",
         "GRAAL_NODEINFO",
@@ -975,6 +995,7 @@
       "dependencies" : [
         "com.oracle.graal.compiler",
       ],
+      "exclude" : deps(["JVMCI"]),
       "distDependencies" : [
         "GRAAL_API",
       ],
@@ -993,6 +1014,7 @@
         "com.oracle.graal.replacements.sparc",
         "com.oracle.graal.salver",
       ],
+      "exclude" : deps(["JVMCI"]),
       "distDependencies" : [
         "GRAAL_API",
         "GRAAL_COMPILER",
@@ -1006,6 +1028,7 @@
         "com.oracle.graal.hotspot.sparc",
         "com.oracle.graal.hotspot",
       ],
+      "exclude" : deps(["JVMCI"]),
       "distDependencies" : deps([
         "jvmci:JVMCI_HOTSPOT",
         "GRAAL_COMPILER",
@@ -1032,10 +1055,11 @@
         "GRAAL_HOTSPOT",
         "jvmci:JVMCI_HOTSPOT",
       ]),
-      "exclude" : [
+      "exclude" : deps([
         "mx:JUNIT",
-        "JAVA_ALLOCATION_INSTRUMENTER"
-      ],
+        "JAVA_ALLOCATION_INSTRUMENTER",
+        "JVMCI"
+      ]),
     },
 
     "GRAAL_TRUFFLE" : {