Mercurial > hg > truffle
diff graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java @ 2938:c7783b6773ea
fixed graph start frame state
new option: DeoptALot
lots of fixes to debug info handling in graalCodeInstaller
fix to uncommon trap stub
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 10 Jun 2011 19:50:16 +0200 |
parents | 9b8f30608e62 |
children | c76db61fbb73 |
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Fri Jun 10 15:12:10 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Fri Jun 10 19:50:16 2011 +0200 @@ -296,12 +296,22 @@ if (Modifier.isSynchronized(compilation.method.accessFlags())) { bci = Instruction.SYNCHRONIZATION_ENTRY_BCI; } + + boolean withReceiver = !Modifier.isStatic(compilation.method.accessFlags()); + CiKind[] arguments = Util.signatureToKinds(compilation.method.signature(), withReceiver ? CiKind.Object : null); + int[] argumentSlots = new int[arguments.length]; + int slot = 0; + for (int arg = 0; arg < arguments.length; arg++) { + argumentSlots[arg] = slot; + slot += arguments[arg].sizeInSlots(); + } + FrameState fs = new FrameState(compilation.method, bci, compilation.method.maxLocals(), 0, 0, compilation.graph); for (Node node : compilation.graph.start().usages()) { if (node instanceof Local) { Local local = (Local) node; int i = local.index(); - fs.storeLocal(i, local); + fs.storeLocal(argumentSlots[i], local); CiValue src = args.locations[i]; assert src.isLegal() : "check"; @@ -313,9 +323,21 @@ setResult(local, dest); } } + assert checkOperands(fs); return fs; } + private boolean checkOperands(FrameState fs) { + boolean withReceiver = !Modifier.isStatic(compilation.method.accessFlags()); + CiKind[] arguments = Util.signatureToKinds(compilation.method.signature(), withReceiver ? CiKind.Object : null); + int slot = 0; + for (CiKind kind : arguments) { + assert fs.localAt(slot) != null : "slot: " + slot; + slot += kind.sizeInSlots(); + } + return true; + } + @Override public void visitCheckCast(CheckCast x) { XirArgument obj = toXirArgument(x.object());