From: <jik...@li...> - 2013-06-17 19:55:16
|
details: http://hg.code.sourceforge.net/p/jikesrvm/code/rev/a50fc340a7bd changeset: 10643:a50fc340a7bd user: Erik Brangs <eri...@gm...> date: Mon Jun 17 20:39:05 2013 +0200 description: RVM-1036 : Treat checkstore checks similarly to array bound checks and null checks when creating the initial IR from bytecode. The old treatment of checkstore checks was incorrect: checkstore checks were never inserted in inlined code because the respective variable was not set in createChildContext(..). It would have been possible to fix the bug in createChildContext(..) but I don't see a reason to treat checkstore checks differently than the other kinds of checks. details: http://hg.code.sourceforge.net/p/jikesrvm/code/rev/682e77613f2e changeset: 10644:682e77613f2e user: Erik Brangs <eri...@gm...> date: Mon Jun 17 20:41:25 2013 +0200 description: RVM-1036 : Remove the workaround for RVM-1036 because it is no longer necessary. The workaround was previously introduced in commit 5326b398e71b0c0e1cb147a1d5da06f152222ceb. diffstat: rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java | 2 +- rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java | 12 +++++--- testing/tests/opttests/src/CheckStore.java | 13 ---------- 3 files changed, 8 insertions(+), 19 deletions(-) diffs (78 lines): diff --git a/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java b/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java --- a/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java +++ b/rvm/src/org/jikesrvm/compilers/opt/bc2ir/BC2IR.java @@ -3830,7 +3830,7 @@ * @return {@code true} if an unconditional throw is generated, {@code false} otherwise */ private boolean do_CheckStore(Operand ref, Operand elem, TypeReference elemType) { - if (!gc.doesCheckStore) return false; + if (gc.noCheckStoreChecks()) return false; if (CF_CHECKSTORE) { // NOTE: BE WARY OF ADDITIONAL OPTIMZATIONS. diff --git a/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java b/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java --- a/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java +++ b/rvm/src/org/jikesrvm/compilers/opt/bc2ir/GenerationContext.java @@ -200,10 +200,6 @@ * to exploit knowledge the callee BC2IR object had about the result. */ public Operand result; - /** - * Do we do check stores? - */ - boolean doesCheckStore; ////////// // Main public methods @@ -229,7 +225,6 @@ options = opts; inlinePlan = ip; inlineSequence = new InlineSequence(meth); - doesCheckStore = !meth.hasNoCheckStoreAnnotation(); // Create the CFG. Initially contains prologue, epilogue, and exit. cfg = new ControlFlowGraph(0); @@ -545,6 +540,13 @@ } /** + * Should checkstore checks be generated? + */ + boolean noCheckStoreChecks() { + return method.hasNoCheckStoreAnnotation(); + } + + /** * Make a register operand that refers to the given local variable number * and has the given type. * diff --git a/testing/tests/opttests/src/CheckStore.java b/testing/tests/opttests/src/CheckStore.java --- a/testing/tests/opttests/src/CheckStore.java +++ b/testing/tests/opttests/src/CheckStore.java @@ -36,10 +36,6 @@ Object[] n = new Integer[1]; n[0] = new Integer(0); n[0] = input; - - // Unreachable but needed to prevent the opt compiler from removing - // the access that causes the ArrayStoreException - System.out.println(n[0]); } static Object[] global = new Object[2]; @@ -58,15 +54,6 @@ else array = new String[2]; array[0] = elem; - - // Unreachable but needed to prevent the opt compiler from removing - // the access that causes the ArrayStoreException. - // A simple System.out.println(..) is currently not possible here - // because it triggers a bug - see RVM-1036 - if (array[0].hashCode() % 3 == new Object().hashCode()) { - System.out.println("Unreachable."); - } - } } |