History log of /art/test/570-checker-osr/osr.cc
Revision Date Author Comments
ba17f458e20d82b197536d62e1d61c5300da4932 06-May-2016 Mathieu Chartier <mathieuc@google.com> Fix libarttest to be non debug

Previously both libarttest and libarttestd had debug enabled. This
made it hard to know which one was loaded (couldn't look at
kIsDebugBuild).

Fixes test 136 with ART_TEST_RUN_TEST_NDEBUG configuration.

Bug: 28406866

(cherry picked from commit 48b2b3e57e0510f549e9dc5c5a61f50eec697cf5)

Change-Id: I92983f71374b211f96f5b346fec326ea8543f876
e5de54cfab5f14ba0b8ff25d8d60901c7021943f 20-Apr-2016 Calin Juravle <calin@google.com> Split profile recording from jit compilation

We still use ProfileInfo objects to record profile information. That
gives us the flexibility to add the inline caches in the future and the
convenience of the already implemented GC.

If UseJIT is false and SaveProfilingInfo true, we will only record the
ProfileInfo and never launch compilation tasks.

Bug: 27916886
Change-Id: I6e4768dc5d58f2f85f947b276b4244aa11ce3fca
73ddf81522b8c47cd06f18507969dd0185d9eb9d 19-Apr-2016 Vladimir Marko <vmarko@google.com> Fix 570-checker-osr test for non-debuggable mode.

For non-debuggable mode, we need to create profiling info.

Bug: 28210356

(cherry picked from commit b9d338b96c804a077dc2ed60b36b7ab64dc2c78c)

Change-Id: I5044e94bf78bd982007c8e7a3a9e5ee56f861e9c
3563c44464ca55b2106373b35110e5ecaae38abf 18-Apr-2016 Vladimir Marko <vmarko@google.com> Fix inlining loops in OSR mode.

When compiling a method in OSR mode and the method does not
contain a loop (arguably, a very odd case) but we inline
another method with a loop and then the final DCE re-runs
the loop identification, the inlined loop would previously
be marked as irreducible. However, the SSA liveness analysis
expects irreducible loop to have extra loop Phis which were
already eliminated from the loop before the inner graph was
inlined to the outer graph, so we would fail a DCHECK().

We fix this by not marking inlined loops as irreducible when
compiling in OSR mode.

Bug: 28210356

(cherry picked from commit fd66c50d64c38e40bafde83b4872e27bbff7546d)

Change-Id: I149273b766d1c713c571baad6033c5f70e6dd960
b88d59ef4fe611fe47e50a6a19785e03bbd5f93b 17-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Be a bit smarter with JIT code triggering deoptimization.

Do not re-use an OSR method that triggered deoptimization.
Also add a stack overflow check before doing OSR.

bug:27094810
Change-Id: I6ff6a7fb9b3df9b7c0ff37e3610595efa70ad067
28b75740b52b4aa408b972bb6b4fb7e6546d6a5b 16-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Fix test by checking if we're using JIT.

Change-Id: Ifa98815ee2f8af4f338c9469f5afd74fc01022eb
d186dd8ecb1f25d3786d6b27adcd6b0b9ca04ea0 16-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Re-enable OSR.

1) Fix flaky test by doing explicit ProfilingInfo allocation,
and OSR compilation instead of relying on the system. Also
make sure the method $noinline$inlineCache always starts
with the interpreter, as otherwise we would infinite loop.

2) Ensure the thread doing the OSR cannot be suspended once it
holds an OSR method, as otherwise the jit code cache could
delete the method before the thread had a chance to jump to it.

Change-Id: Ic0dee181a7b23260419a94a7d7405f150433d31a
d9994f069dfeaa32ba929ca78816b5b83e2a4134 11-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Re-enable OSR.

Fixes two bugs:
- Dealing with proxy methods, which the compiler and code cache
does not handle.
- Dealing with phi types, that may have been speculatively optimized
but do not hold once jumping to the compiled code.

Change-Id: I7dcd9976ef7b12128fff95d2b7ed3e69cc42e90a
b331febbab8e916680faba722cc84b66b84218a3 05-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Implement on-stack replacement for arm/arm64/x86/x86_64.""

This reverts commit bd89a5c556324062b7d841843b039392e84cfaf4.

Change-Id: I08d190431520baa7fcec8fbdb444519f25ac8d44
bd89a5c556324062b7d841843b039392e84cfaf4 05-Feb-2016 David Brazdil <dbrazdil@google.com> Revert "Implement on-stack replacement for arm/arm64/x86/x86_64."

DCHECK whether loop headers are covered fails.

This reverts commit 891bc286963892ed96134ca1adb7822737af9710.

Change-Id: I0f9a90630b014b16d20ba1dfba31ce63e6648021
891bc286963892ed96134ca1adb7822737af9710 29-Jan-2016 Nicolas Geoffray <ngeoffray@google.com> Implement on-stack replacement for arm/arm64/x86/x86_64.

High-level overview:
- osr_method_threshold is used to know when to compile a method
in osr mode (-> treat all loops as irreducible).
- branch instructions in the compiler query whether they can
jump to an osr method.
- An osr entry point is found through the stack maps: if a stack
map is duplicated in the CodeInfo, it is an osr entry point.

Change-Id: Ifb39338cd281e2c7eccce67f4e18d46428be71e4