Mercurial > hg > graal-jvmci-8
changeset 22191:b4971242bd23
[SPARC] Merge nodes load->(sign|zero)extend into a sign/zero extending load
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Thu, 09 Jul 2015 15:34:11 +0200 |
parents | 488d54275360 |
children | b8c1c277a6ef |
files | graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java mx.graal/suite.py |
diffstat | 2 files changed, 44 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Thu Jul 09 14:39:08 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Thu Jul 09 15:34:11 2015 +0200 @@ -25,6 +25,7 @@ import jdk.internal.jvmci.code.*; import jdk.internal.jvmci.common.*; +import jdk.internal.jvmci.debug.*; import jdk.internal.jvmci.meta.*; import com.oracle.graal.compiler.gen.*; @@ -111,12 +112,54 @@ }; } + private ComplexMatchResult emitZeroExtendMemory(Access access, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + Kind toKind = null; + Kind fromKind = null; + if (fromBits == toBits) { + return null; + } else if (toBits > 32) { + toKind = Kind.Long; + } else if (toBits > 16) { + toKind = Kind.Int; + } else { + toKind = Kind.Short; + } + switch (fromBits) { + case 8: + fromKind = Kind.Byte; + break; + case 16: + fromKind = Kind.Short; + break; + case 32: + fromKind = Kind.Int; + break; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + + Kind localFromKind = fromKind; + Kind localToKind = toKind; + return builder -> { + // Loads are always zero extending load + Value v = getLIRGeneratorTool().emitLoad(LIRKind.value(localFromKind), operand(access.getAddress()), getState(access)); + return getLIRGeneratorTool().emitReinterpret(LIRKind.value(localToKind), v); + }; + } + @MatchRule("(SignExtend Read=access)") @MatchRule("(SignExtend FloatingRead=access)") public ComplexMatchResult signExtend(SignExtendNode root, Access access) { return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); } + @MatchRule("(ZeroExtend Read=access)") + @MatchRule("(ZeroExtend FloatingRead=access)") + public ComplexMatchResult zeroExtend(ZeroExtendNode root, Access access) { + return emitZeroExtendMemory(access, root.getInputBits(), root.getResultBits()); + } + @Override public SPARCLIRGenerator getLIRGeneratorTool() { return (SPARCLIRGenerator) super.getLIRGeneratorTool();
--- a/mx.graal/suite.py Thu Jul 09 14:39:08 2015 +0200 +++ b/mx.graal/suite.py Thu Jul 09 15:34:11 2015 +0200 @@ -919,6 +919,7 @@ "com.oracle.graal.compiler", "com.oracle.graal.lir.sparc" ], + "annotationProcessors" : ["com.oracle.graal.compiler.match.processor"], "checkstyle" : "com.oracle.graal.graph", "javaCompliance" : "1.8", "workingSets" : "Graal,SPARC",