OSDN Git Service

Implement code sinking.
authorNicolas Geoffray <ngeoffray@google.com>
Thu, 16 Feb 2017 22:08:29 +0000 (22:08 +0000)
committerNicolas Geoffray <ngeoffray@google.com>
Mon, 27 Feb 2017 10:27:42 +0000 (10:27 +0000)
commitb813ca14be33f7db8b7049c3b08a1eb776f25d1b
tree4757b96eb5efd3a0e992f7f399ea479e7b5426c8
parent30e015c442c8033390c30d2f293604723c29bc75
Implement code sinking.

Small example of what the optimization does:

Object o = new Object();
if (test) {
  throw new Error(o.toString());
}

will be turned into (note that the first user of 'o'
is the 'new Error' allocation which has 'o' in its
environment):
if (test) {
  Object o = new Obect();
  throw new Error(o.toString());
}

There are other examples in 639-checker-code-sinking.

Ritz individual benchmarks improve on art-jit-cc from
5% (EvaluateComplexFormulas) to 23% (MoveFunctionColumn)
on all platforms.

Test: 639-checker-code-sinking
Test: test-art-host
Test: borg job run
Test: libcore + jdwp

bug:35634932
bug:30933338

Change-Id: Ib99c00c93fe76ffffb17afffb5a0e30a14310652
compiler/Android.bp
compiler/optimizing/code_sinking.cc [new file with mode: 0644]
compiler/optimizing/code_sinking.h [new file with mode: 0644]
compiler/optimizing/common_dominator.h
compiler/optimizing/optimizing_compiler.cc
compiler/optimizing/optimizing_compiler_stats.h
test/639-checker-code-sinking/expected.txt [new file with mode: 0644]
test/639-checker-code-sinking/info.txt [new file with mode: 0644]
test/639-checker-code-sinking/src/Main.java [new file with mode: 0644]