Mercurial > hg > graal-jvmci-8
changeset 15921:6d8c901814eb
Support for compressed constants in HSAIL backend.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 27 May 2014 12:08:11 +0200 |
parents | 4b835260c746 |
children | 2022366b513c |
files | graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java |
diffstat | 1 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Tue May 27 10:22:28 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Tue May 27 12:08:11 2014 +0200 @@ -94,7 +94,16 @@ @Override public boolean canStoreConstant(Constant c, boolean isCompressed) { - return true; + return !(c instanceof HotSpotObjectConstant); + } + + @Override + public boolean canInlineConstant(Constant c) { + if (c instanceof HotSpotObjectConstant) { + return c.isNull(); + } else { + return super.canInlineConstant(c); + } } private static Kind getMemoryKind(PlatformKind kind) { @@ -229,6 +238,15 @@ if (dst.getPlatformKind() == NarrowOopStamp.NarrowOop) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) { return new MoveToRegOp(Kind.Int, dst, Constant.INT_0); + } else if (src instanceof HotSpotObjectConstant) { + if (HotSpotObjectConstant.isCompressed((Constant) src)) { + Variable uncompressed = newVariable(Kind.Object); + append(new MoveToRegOp(Kind.Object, uncompressed, src)); + CompressEncoding oopEncoding = config.getOopEncoding(); + return new HSAILMove.CompressPointer(dst, newVariable(Kind.Object), uncompressed, oopEncoding.base, oopEncoding.shift, oopEncoding.alignment, true); + } else { + return new MoveToRegOp(Kind.Object, dst, src); + } } else if (isRegister(src) || isStackSlot(dst)) { return new MoveFromRegOp(Kind.Int, dst, src); } else {