Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationData.java @ 8595:8a1115c92271
Implemented codegen guard definitions can now omit unused parameters.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 01 Apr 2013 21:43:20 +0200 |
parents | a80bf36c6a1e |
children | 5eeade940236 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationData.java Mon Apr 01 12:19:15 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationData.java Mon Apr 01 21:43:20 2013 +0200 @@ -95,6 +95,31 @@ return false; } + @Override + public int compareBySignature(TemplateMethod other) { + if (this == other) { + return 0; + } else if (!(other instanceof SpecializationData)) { + return super.compareBySignature(other); + } + + SpecializationData m2 = (SpecializationData) other; + + if (getOrder() != Specialization.DEFAULT_ORDER && m2.getOrder() != Specialization.DEFAULT_ORDER) { + return getOrder() - m2.getOrder(); + } else if (isUninitialized() ^ m2.isUninitialized()) { + return isUninitialized() ? -1 : 1; + } else if (isGeneric() ^ m2.isGeneric()) { + return isGeneric() ? 1 : -1; + } + + if (getTemplate() != m2.getTemplate()) { + throw new UnsupportedOperationException("Cannot compare two specializations with different templates."); + } + + return super.compareBySignature(m2); + } + public NodeData getNode() { return node; } @@ -165,4 +190,8 @@ return !getGuards().isEmpty(); } + @Override + public String toString() { + return String.format("%s [id = %s, method = %s, guards = %s]", getClass().getSimpleName(), getId(), getMethod(), getGuards()); + } }