OSDN Git Service

android-x86/art.git
8 years agoam f0170ded: Merge "ART: Add VLOG printing of SetStatus(Error)"
Andreas Gampe [Tue, 25 Aug 2015 05:11:11 +0000 (05:11 +0000)]
am f0170ded: Merge "ART: Add VLOG printing of SetStatus(Error)"

* commit 'f0170ded84fbcd3d9152cdbcf9ffbf74c71b03ba':
  ART: Add VLOG printing of SetStatus(Error)

8 years agoMerge "ART: Add VLOG printing of SetStatus(Error)"
Andreas Gampe [Tue, 25 Aug 2015 05:02:46 +0000 (05:02 +0000)]
Merge "ART: Add VLOG printing of SetStatus(Error)"

8 years agoART: Add VLOG printing of SetStatus(Error)
Andreas Gampe [Tue, 25 Aug 2015 04:09:05 +0000 (21:09 -0700)]
ART: Add VLOG printing of SetStatus(Error)

In verbose:class mode, print a message when a class is set to
erroneous, and dump any pending exception.

Change-Id: I2ebfe4fcd8495c3ff42675bd3c0f80125b23c019

8 years agoam dcff51a0: Merge "Revert "Do a second check for testing intrinsic types.""
Andreas Gampe [Mon, 24 Aug 2015 22:57:53 +0000 (22:57 +0000)]
am dcff51a0: Merge "Revert "Do a second check for testing intrinsic types.""

* commit 'dcff51a0079c5e3abaf0335f7cb9a3dd44044456':
  Revert "Do a second check for testing intrinsic types."

8 years agoMerge "Revert "Do a second check for testing intrinsic types.""
Andreas Gampe [Mon, 24 Aug 2015 22:50:51 +0000 (22:50 +0000)]
Merge "Revert "Do a second check for testing intrinsic types.""

8 years agoRevert "Do a second check for testing intrinsic types."
Andreas Gampe [Mon, 24 Aug 2015 22:49:59 +0000 (22:49 +0000)]
Revert "Do a second check for testing intrinsic types."

This reverts commit 4daa0b4c21eee46362b5114fb2c3800c0c7e7a36.

If the intrinsic has a slow-path, like charAt, the slow-path logic will complain as it only understands direct slow-paths, not virtual calls.

We should either override that decision in the slow-path, or replace the HInvokeVirtual when we're overriding the intrinsic choice.

Bug: 23475673
Change-Id: If55fbc8c82d52e0e7a7aec2674ae2bd2b74b5c77

8 years agoam f7b12e7a: Merge "Move annotations to native."
Jeff Hao [Sat, 22 Aug 2015 00:25:11 +0000 (00:25 +0000)]
am f7b12e7a: Merge "Move annotations to native."

* commit 'f7b12e7ae8f481f3fab27d1a17bded4b4f2ce423':
  Move annotations to native.

8 years agoMerge "Move annotations to native."
Jeff Hao [Sat, 22 Aug 2015 00:17:57 +0000 (00:17 +0000)]
Merge "Move annotations to native."

8 years agoMove annotations to native.
Jeff Hao [Thu, 30 Jul 2015 03:14:10 +0000 (20:14 -0700)]
Move annotations to native.

Art side of this change. There is also a corresponding Libcore change.

Seeing ~2-3x speedup over dalvik KK MR1 in AnnotatedElementBenchmark.
Benchmark  Speedup of Art AOSP to Dalvik KK MR1
GetAllReturnsLargeAnnotation  2.99
GetAllReturnsMarkerAnnotation  2.20
GetAllReturnsNoAnnotation  2.43
GetAllReturnsSmallAnnotation  2.52
GetAllReturnsThreeAnnotations  2.87
GetAnnotationsOnSubclass  2.42
GetDeclaredAnnotationsOnSubclass 2.49
GetFieldAnnotation  2.68
GetFieldAnnotations  2.60
GetMethodAnnotation  2.66
GetMethodAnnotations  2.61
GetParameterAnnotations  2.52
GetTypeAnnotation  2.56
GetTypeAnnotations  2.17
IsFieldAnnotationPresent  3.26
IsMethodAnnotationPresent  4.99
IsTypeAnnotationPresent  1.34

Change-Id: Ibdbb6d23b17eaab6e83c8774b1bb9401e8227941

8 years agoam 2ee4589e: Merge "Correct for signal, native bridge test hard-coded signal handling...
Andreas Gampe [Fri, 21 Aug 2015 23:33:18 +0000 (23:33 +0000)]
am 2ee4589e: Merge "Correct for signal, native bridge test hard-coded signal handling values"

* commit '2ee4589ef330e341f7682833c896fb6ea4f18dea':
  Correct for signal, native bridge test hard-coded signal handling values

8 years agoMerge "Correct for signal, native bridge test hard-coded signal handling values"
Andreas Gampe [Fri, 21 Aug 2015 23:26:39 +0000 (23:26 +0000)]
Merge "Correct for signal, native bridge test hard-coded signal handling values"

8 years agoCorrect for signal, native bridge test hard-coded signal handling values
Agi Csaki [Fri, 21 Aug 2015 19:56:30 +0000 (12:56 -0700)]
Correct for signal, native bridge test hard-coded signal handling values

Added inline assembly to ensure that the instruction causing a segfault
in x86/x86_64 for the 004-SignalTest and 115-native-bridge test always
has a size of 3 bytes, in response to a bug that caused the test to fail
when this instruction had variable sizes.

Bug: 22876261
Change-Id: I474a04782a446439956c22360c71cea2655f8a1b

8 years agoam 300432d2: Merge "Add class flags to class to help GC scanning"
Mathieu Chartier [Fri, 21 Aug 2015 21:23:07 +0000 (21:23 +0000)]
am 300432d2: Merge "Add class flags to class to help GC scanning"

* commit '300432d27ba9dd6961458fb1e1c845766f25c50a':
  Add class flags to class to help GC scanning

8 years agoMerge "Add class flags to class to help GC scanning"
Mathieu Chartier [Fri, 21 Aug 2015 20:50:14 +0000 (20:50 +0000)]
Merge "Add class flags to class to help GC scanning"

8 years agoam 879775bb: Merge "Revert "[MIPS] Use hard float calling convention for managed...
Vladimir Marko [Fri, 21 Aug 2015 18:44:43 +0000 (18:44 +0000)]
am 879775bb: Merge "Revert "[MIPS] Use hard float calling convention for managed code""

* commit '879775bba4903a4d066df3ebeac5cd4faf7da3e4':
  Revert "[MIPS] Use hard float calling convention for managed code"

8 years agoMerge "Revert "[MIPS] Use hard float calling convention for managed code""
Vladimir Marko [Fri, 21 Aug 2015 18:39:54 +0000 (18:39 +0000)]
Merge "Revert "[MIPS] Use hard float calling convention for managed code""

8 years agoRevert "[MIPS] Use hard float calling convention for managed code"
Vladimir Marko [Fri, 21 Aug 2015 18:39:26 +0000 (18:39 +0000)]
Revert "[MIPS] Use hard float calling convention for managed code"

MipsMir2Lir::LockCallTemps() is broken for secondary architecture on aosp_mips64-eng.

This reverts commit a29449dcf57c57fe0876f51367985477317cc557.

Change-Id: I480ea7569d73aea7894fc0a6dd804b1135286a37

8 years agoam e74493cb: Merge "ART: Special form of lock aliasing"
Andreas Gampe [Fri, 21 Aug 2015 17:30:43 +0000 (17:30 +0000)]
am e74493cb: Merge "ART: Special form of lock aliasing"

* commit 'e74493cbc8f33bfd53b792f98f135d3db680f029':
  ART: Special form of lock aliasing

8 years agoAdd class flags to class to help GC scanning
Mathieu Chartier [Wed, 19 Aug 2015 01:35:52 +0000 (18:35 -0700)]
Add class flags to class to help GC scanning

Reduces GC time and pauses by reducing the number of loads required
to scan an object.

Average total GC time before on EvaluateAndApplyChanges (EAAC): 7.452s
After: 7.144s

Average GC pause times before on EAAC: 860.67us
After: 722.75us

Adding the class flags field cause a memory increase of ~24k system
wide on low memory devices.

Change-Id: I3f04212d5787bfbf5e55026584d149f55476105e

8 years agoMerge "ART: Special form of lock aliasing"
Andreas Gampe [Fri, 21 Aug 2015 17:24:14 +0000 (17:24 +0000)]
Merge "ART: Special form of lock aliasing"

8 years agoam 24011e73: Merge "Made CheckJNI check varargs when possible"
Alex Light [Fri, 21 Aug 2015 17:17:16 +0000 (17:17 +0000)]
am 24011e73: Merge "Made CheckJNI check varargs when possible"

* commit '24011e738d77dedb28c1b4d6ff34445cc2acc4a7':
  Made CheckJNI check varargs when possible

8 years agoMerge "Made CheckJNI check varargs when possible"
Alex Light [Fri, 21 Aug 2015 15:43:37 +0000 (15:43 +0000)]
Merge "Made CheckJNI check varargs when possible"

8 years agoam df3269a9: Merge "Stop framework on buildbot devices to avoid lowmemorykiller."
Nicolas Geoffray [Fri, 21 Aug 2015 14:46:55 +0000 (14:46 +0000)]
am df3269a9: Merge "Stop framework on buildbot devices to avoid lowmemorykiller."

* commit 'df3269a9681b5b75d7b3088652428d86a6cc8485':
  Stop framework on buildbot devices to avoid lowmemorykiller.

8 years agoMerge "Stop framework on buildbot devices to avoid lowmemorykiller."
Nicolas Geoffray [Fri, 21 Aug 2015 14:40:47 +0000 (14:40 +0000)]
Merge "Stop framework on buildbot devices to avoid lowmemorykiller."

8 years agoStop framework on buildbot devices to avoid lowmemorykiller.
Nicolas Geoffray [Fri, 21 Aug 2015 14:32:35 +0000 (15:32 +0100)]
Stop framework on buildbot devices to avoid lowmemorykiller.

Change-Id: If7fa58f9bcb67b90cc2473daa280c3c7d0f0f513

8 years agoam 3979bdf4: Merge "Fix TrySplitNonPairOrUnalignedPairIntervalAt."
Nicolas Geoffray [Fri, 21 Aug 2015 14:30:49 +0000 (14:30 +0000)]
am 3979bdf4: Merge "Fix TrySplitNonPairOrUnalignedPairIntervalAt."

* commit '3979bdf446b425e69171db58789819e26542f79d':
  Fix TrySplitNonPairOrUnalignedPairIntervalAt.

8 years agoMerge "Fix TrySplitNonPairOrUnalignedPairIntervalAt."
Nicolas Geoffray [Fri, 21 Aug 2015 14:25:23 +0000 (14:25 +0000)]
Merge "Fix TrySplitNonPairOrUnalignedPairIntervalAt."

8 years agoFix TrySplitNonPairOrUnalignedPairIntervalAt.
Nicolas Geoffray [Thu, 20 Aug 2015 18:52:26 +0000 (19:52 +0100)]
Fix TrySplitNonPairOrUnalignedPairIntervalAt.

We need to both:
1) Look at pair that don't start at an even register.
2) Also remove the other half from the list of actives.

Change-Id: Ia99fa9852c67b8633e8d17a258fe302add54b14a

8 years agoam e75ffdfe: Merge "[MIPS] Use hard float calling convention for managed code"
Vladimir Marko [Fri, 21 Aug 2015 13:36:53 +0000 (13:36 +0000)]
am e75ffdfe: Merge "[MIPS] Use hard float calling convention for managed code"

* commit 'e75ffdfe3fbd4253bf1ffd48350b7f6472500c30':
  [MIPS] Use hard float calling convention for managed code

8 years agoMerge "[MIPS] Use hard float calling convention for managed code"
Vladimir Marko [Fri, 21 Aug 2015 13:31:49 +0000 (13:31 +0000)]
Merge "[MIPS] Use hard float calling convention for managed code"

8 years ago[MIPS] Use hard float calling convention for managed code
Goran Jakovljevic [Wed, 22 Jul 2015 09:08:57 +0000 (11:08 +0200)]
[MIPS] Use hard float calling convention for managed code

Note that this isn't o32 ABI. Same set of registers is used for
arguments ($a0-$a3 and $f12-$f15), but we don't skip registers
and fp arguments are never passed via core registers.

Change-Id: Ifb883ff6e15758b539137898b49ac2f8ee075f49

8 years agoam 28de0f65: Merge "Do a second check for testing intrinsic types."
Nicolas Geoffray [Fri, 21 Aug 2015 10:14:50 +0000 (10:14 +0000)]
am 28de0f65: Merge "Do a second check for testing intrinsic types."

* commit '28de0f652e32e112edab0e5e7dc779943ae488d5':
  Do a second check for testing intrinsic types.

8 years agoMerge "Do a second check for testing intrinsic types."
Nicolas Geoffray [Fri, 21 Aug 2015 10:06:20 +0000 (10:06 +0000)]
Merge "Do a second check for testing intrinsic types."

8 years agoDo a second check for testing intrinsic types.
Nicolas Geoffray [Thu, 20 Aug 2015 13:05:14 +0000 (14:05 +0100)]
Do a second check for testing intrinsic types.

This allows to intrinsify calls made in a different dex file.

Can't easily write a test because it depends on having inlined
a method from boot classpath that calls an intrinsic. Once
String.equals is implemented with the hybrid approach we can write one.

Change-Id: I591d9496e236429943d6bfa7f8b20f576b1cfb9a

8 years agoART: Special form of lock aliasing
Andreas Gampe [Tue, 18 Aug 2015 15:57:44 +0000 (08:57 -0700)]
ART: Special form of lock aliasing

Check whether the instruction immediately before a monitor-enter
is a move-object, establishing previously untracked lock aliasing
in a low-overhead manner.

Bug: 20102779
Bug: 21169615
Bug: 21988678
Bug: 23300986
Change-Id: Ia10d6219357e7bce29f58134637b07d3f4857b2f

8 years agoam 6bd6a830: Merge "ART: (Partially) fix lock aliasing"
Andreas Gampe [Thu, 20 Aug 2015 22:57:42 +0000 (22:57 +0000)]
am 6bd6a830: Merge "ART: (Partially) fix lock aliasing"

* commit '6bd6a830f24033830a910f88928b400a7ed28418':
  ART: (Partially) fix lock aliasing

8 years agoMerge "ART: (Partially) fix lock aliasing"
Andreas Gampe [Thu, 20 Aug 2015 22:52:44 +0000 (22:52 +0000)]
Merge "ART: (Partially) fix lock aliasing"

8 years agoMade CheckJNI check varargs when possible
Alex Light [Wed, 19 Aug 2015 22:23:23 +0000 (15:23 -0700)]
Made CheckJNI check varargs when possible

Several JNI functions such as NewObject and Call*Method take a variable
number of arguments. This patch will make CheckJNI do (limited) dynamic
validation of these arguments. Currently it is limited to checking that
objects are valid and that no value types have illegal values.

Bug: 20344596
Change-Id: I1f81d2bdd80215e0007fc636bac27d5bcc2dba96

8 years agoam 944973e5: Merge "Add a `--showcommands` option to ART\'s buildbot-build.sh."
Roland Levillain [Thu, 20 Aug 2015 17:02:57 +0000 (17:02 +0000)]
am 944973e5: Merge "Add a `--showcommands` option to ART\'s buildbot-build.sh."

* commit '944973e56fd3c04c92d902b05d0148f77ed28a78':
  Add a `--showcommands` option to ART's buildbot-build.sh.

8 years agoMerge "Add a `--showcommands` option to ART's buildbot-build.sh."
Roland Levillain [Thu, 20 Aug 2015 16:57:28 +0000 (16:57 +0000)]
Merge "Add a `--showcommands` option to ART's buildbot-build.sh."

8 years agoAdd a `--showcommands` option to ART's buildbot-build.sh.
Roland Levillain [Thu, 20 Aug 2015 16:49:56 +0000 (17:49 +0100)]
Add a `--showcommands` option to ART's buildbot-build.sh.

Change-Id: Ib562a02b2f96dd5abd580ae751d5d86749144bf3

8 years agoam 113af44c: Merge "Fix indentation in reference type propagation"
David Brazdil [Thu, 20 Aug 2015 16:22:55 +0000 (16:22 +0000)]
am 113af44c: Merge "Fix indentation in reference type propagation"

* commit '113af44c238625500ec5b999a9990f39519e2ae2':
  Fix indentation in reference type propagation

8 years agoMerge "Fix indentation in reference type propagation"
David Brazdil [Thu, 20 Aug 2015 16:16:52 +0000 (16:16 +0000)]
Merge "Fix indentation in reference type propagation"

8 years agoam a05264c1: Merge "ARM64: Minor optimization for conversions from long to int."
Roland Levillain [Thu, 20 Aug 2015 16:16:47 +0000 (16:16 +0000)]
am a05264c1: Merge "ARM64: Minor optimization for conversions from long to int."

* commit 'a05264c142526f74af0cf45e643f7b07500431d8':
  ARM64: Minor optimization for conversions from long to int.

8 years agoMerge "ARM64: Minor optimization for conversions from long to int."
Roland Levillain [Thu, 20 Aug 2015 16:11:31 +0000 (16:11 +0000)]
Merge "ARM64: Minor optimization for conversions from long to int."

8 years agoam 1d4a598e: Merge "Fix formatting comment in Checker"
David Brazdil [Thu, 20 Aug 2015 16:10:50 +0000 (16:10 +0000)]
am 1d4a598e: Merge "Fix formatting comment in Checker"

* commit '1d4a598ed12d86934ceb5e6fd79f80f974f3f23f':
  Fix formatting comment in Checker

8 years agoFix indentation in reference type propagation
David Brazdil [Thu, 20 Aug 2015 16:05:49 +0000 (17:05 +0100)]
Fix indentation in reference type propagation

Change-Id: I5860c4fef55326ac2b510e3e34c4541b691794e0

8 years agoMerge "Fix formatting comment in Checker"
David Brazdil [Thu, 20 Aug 2015 16:05:17 +0000 (16:05 +0000)]
Merge "Fix formatting comment in Checker"

8 years agoFix formatting comment in Checker
David Brazdil [Thu, 20 Aug 2015 15:59:24 +0000 (16:59 +0100)]
Fix formatting comment in Checker

Change-Id: Idf5cf2d4be12a56777039aca3aa1c8563bcb9089

8 years agoam 5e7cd7bf: Merge "Optimizing String.Equals as an intrinsic (ARM)"
Andreas Gampe [Thu, 20 Aug 2015 15:12:52 +0000 (15:12 +0000)]
am 5e7cd7bf: Merge "Optimizing String.Equals as an intrinsic (ARM)"

* commit '5e7cd7bf59501d6f1f90910a9da87effae7b9328':
  Optimizing String.Equals as an intrinsic (ARM)

8 years agoMerge "Optimizing String.Equals as an intrinsic (ARM)"
Andreas Gampe [Thu, 20 Aug 2015 15:08:54 +0000 (15:08 +0000)]
Merge "Optimizing String.Equals as an intrinsic (ARM)"

8 years agoam 8a5ea659: Merge "Fix extra parantheses"
Calin Juravle [Thu, 20 Aug 2015 14:07:14 +0000 (14:07 +0000)]
am 8a5ea659: Merge "Fix extra parantheses"

* commit '8a5ea659d0fdf024181a3ea4aae50b0fb26f6291':
  Fix extra parantheses

8 years agoMerge "Fix extra parantheses"
Calin Juravle [Thu, 20 Aug 2015 14:02:09 +0000 (14:02 +0000)]
Merge "Fix extra parantheses"

8 years agoFix extra parantheses
Calin Juravle [Thu, 20 Aug 2015 14:01:27 +0000 (15:01 +0100)]
Fix extra parantheses

:(

Change-Id: Ie48a54de1276fb9e478cb5927d714b2ff14ae6c6

8 years agoam 07b017dc: Merge "Fix BuildInvoke"
Calin Juravle [Thu, 20 Aug 2015 13:57:49 +0000 (13:57 +0000)]
am 07b017dc: Merge "Fix BuildInvoke"

* commit '07b017dc8720352e9a8658c576bd43f0e9d61067':
  Fix BuildInvoke

8 years agoMerge "Fix BuildInvoke"
Calin Juravle [Thu, 20 Aug 2015 13:52:16 +0000 (13:52 +0000)]
Merge "Fix BuildInvoke"

8 years agoFix BuildInvoke
Calin Juravle [Thu, 20 Aug 2015 13:48:00 +0000 (14:48 +0100)]
Fix BuildInvoke

The invoke should be added to the graph before
PotentiallySimplifyFakeString.

Change-Id: I2afc1d16e6dae60957e7d1386fd028e4f3a5b27a

8 years agoARM64: Minor optimization for conversions from long to int.
Alexandre Rames [Thu, 20 Aug 2015 12:36:35 +0000 (13:36 +0100)]
ARM64: Minor optimization for conversions from long to int.

Change-Id: Ice7febba8dd09a4548ab235fc8aee76d7e7676a1

8 years agoam 431ad293: Merge "Refactor BuildInvoke."
Calin Juravle [Thu, 20 Aug 2015 12:31:02 +0000 (12:31 +0000)]
am 431ad293: Merge "Refactor BuildInvoke."

* commit '431ad2930f906e860bc2a801aec63588bc14f63d':
  Refactor BuildInvoke.

8 years agoMerge "Refactor BuildInvoke."
Calin Juravle [Thu, 20 Aug 2015 12:27:14 +0000 (12:27 +0000)]
Merge "Refactor BuildInvoke."

8 years agoam 4a2f814e: Merge "ART: Expression evaluation in Checker"
David Brazdil [Thu, 20 Aug 2015 12:00:43 +0000 (12:00 +0000)]
am 4a2f814e: Merge "ART: Expression evaluation in Checker"

* commit '4a2f814eecb6d96f6ac97e6dc7a3d64dae4226f5':
  ART: Expression evaluation in Checker

8 years agoRefactor BuildInvoke.
Calin Juravle [Tue, 18 Aug 2015 16:08:12 +0000 (17:08 +0100)]
Refactor BuildInvoke.

BuildInvoke got to be too complex an unreadble. This breaks it down in
smaller pieces.

Change-Id: Ibda63f69f5a1be537ae13e18a5f67c361173f4a6

8 years agoMerge "ART: Expression evaluation in Checker"
David Brazdil [Thu, 20 Aug 2015 11:55:01 +0000 (11:55 +0000)]
Merge "ART: Expression evaluation in Checker"

8 years agoART: Expression evaluation in Checker
David Brazdil [Thu, 20 Aug 2015 10:46:04 +0000 (11:46 +0100)]
ART: Expression evaluation in Checker

It can be useful for tests to evaluate small `assert`-like expressions.
This patch adds such support to Checker, with a new CHECK-EVAL line.
See README file for more details.

Change-Id: I184f7c8e8b53f7e93cfb08fcf9630b4724fa5412

8 years agoam bffabfce: Merge "Be more flexible on the code unit size when inlining."
Nicolas Geoffray [Thu, 20 Aug 2015 10:09:30 +0000 (10:09 +0000)]
am bffabfce: Merge "Be more flexible on the code unit size when inlining."

* commit 'bffabfce093e26bffb9e820a8f6b45474d28787a':
  Be more flexible on the code unit size when inlining.

8 years agoMerge "Be more flexible on the code unit size when inlining."
Nicolas Geoffray [Thu, 20 Aug 2015 10:06:31 +0000 (10:06 +0000)]
Merge "Be more flexible on the code unit size when inlining."

8 years agoBe more flexible on the code unit size when inlining.
Nicolas Geoffray [Wed, 12 Aug 2015 03:03:09 +0000 (20:03 -0700)]
Be more flexible on the code unit size when inlining.

This change increases the maximum code unit size, and fold
parameters in the inlinee in the hope to reduce the overall
size of the graph. We then make sure we don't inline methods
that have more than N HInstructions.

Also, remove the kAccDontInline flag on ArtMethod. The compiler
does not need it anymore.

Change-Id: I4cd3da40e551f30ba83b8b274728b87e67f6812e

8 years agoam 4d786026: Merge "Add support to indicate whether intrinsics require a dex cache"
Andreas Gampe [Thu, 20 Aug 2015 03:12:50 +0000 (03:12 +0000)]
am 4d786026: Merge "Add support to indicate whether intrinsics require a dex cache"

* commit '4d786026efaac41acf8278d1c87d842f7ce06fde':
  Add support to indicate whether intrinsics require a dex cache

8 years agoMerge "Add support to indicate whether intrinsics require a dex cache"
Andreas Gampe [Thu, 20 Aug 2015 03:09:32 +0000 (03:09 +0000)]
Merge "Add support to indicate whether intrinsics require a dex cache"

8 years agoAdd support to indicate whether intrinsics require a dex cache
Agi Csaki [Wed, 19 Aug 2015 21:58:14 +0000 (14:58 -0700)]
Add support to indicate whether intrinsics require a dex cache

A structural change to indicate whether a given intrinsic requires access
to a dex cache.  I updated the needs_environment_ field to indicate
whether an HInvoke needs an environment or a dex cache, and if an HInvoke
represents an intrisified method, we utilize this field to determine if
the HInvoke needs a dex cache.

Bug: 21481923
Change-Id: I9dd25a385e1a1397603da6c4c43f6c1aea511b32

8 years agoOptimizing String.Equals as an intrinsic (ARM)
Agi Csaki [Wed, 19 Aug 2015 00:10:38 +0000 (17:10 -0700)]
Optimizing String.Equals as an intrinsic (ARM)

The second implementation of String.Equals. I added an intrinsic
in ARM which is similar to the original java implementation
of String.equals: an instanceof check, null check, length check, and
reference equality check followed by a loop comparing strings two
characters at a time. After extensive benchmarking, it seems that
comparing strings forward is faster and is worth the additional temp
register required. Additionally, moving the add and sub instructions
that are anyways necessary between branches in the comparison loop
improved benchmarking results.

Interesting benchmarking values:

Optimizing Compiler on Nexus 7
    Intrinsic 1-5 Character Strings = 91.6 ns
    Original 1-5 Character Strings = 285.84 ns
    Intrinsic 15-30 Character Strings = 176 ns
    Original 15-30 Character Strings = 367.67 ns
    Intrinsic 100-1000 Character Strings = 2992.1 ns
    Original 100-1000 Character Strings = 9098.5 ns
    Intrinsic Null Argument = 70.9 ns
    Original Null Argument = 189 ns

Code Expansion:

    Average size of 116 apps without intrinsic = 6880521.11 bytes
    Average size of 116 apps with intrinsic = 6901107.97 bytes
    Overall 0.299% increase in code size

Bug: 21481923
Change-Id: I48df2a74f2a92b56fb9479fbf14276d44e880aed

8 years agoam e1e05e08: Merge "Use thread-local is_gc_marking flags for the CC collector."
Hiroshi Yamauchi [Wed, 19 Aug 2015 20:26:47 +0000 (20:26 +0000)]
am e1e05e08: Merge "Use thread-local is_gc_marking flags for the CC collector."

* commit 'e1e05e0876f303a9f4aca1d8713b7c44f21952b8':
  Use thread-local is_gc_marking flags for the CC collector.

8 years agoMerge "Use thread-local is_gc_marking flags for the CC collector."
Hiroshi Yamauchi [Wed, 19 Aug 2015 20:19:15 +0000 (20:19 +0000)]
Merge "Use thread-local is_gc_marking flags for the CC collector."

8 years agoUse thread-local is_gc_marking flags for the CC collector.
Hiroshi Yamauchi [Tue, 18 Aug 2015 21:47:25 +0000 (14:47 -0700)]
Use thread-local is_gc_marking flags for the CC collector.

The currently global is_marking flag is used to check if the read
barrier slow path needs to be taken for GC roots access. Changing it
to a thread-local flag simplifies the fast path check and makes it
easier to do it in assembly code. It also solves the issue that we
need to avoid accessing the global flag during startup before the heap
or the collector object isn't allocated and initialized.

Bug: 12687968
Change-Id: Ibf0dca12f400bf3490188b12dfe96c7de30583e0

8 years agoam 83f8b5bb: Merge "ART: Enable basic optimizations for try/catch"
David Brazdil [Wed, 19 Aug 2015 19:08:37 +0000 (19:08 +0000)]
am 83f8b5bb: Merge "ART: Enable basic optimizations for try/catch"

* commit '83f8b5bb9e9c52791a02a84d7b0889cab898efe4':
  ART: Enable basic optimizations for try/catch

8 years agoMerge "ART: Enable basic optimizations for try/catch"
David Brazdil [Wed, 19 Aug 2015 19:02:45 +0000 (19:02 +0000)]
Merge "ART: Enable basic optimizations for try/catch"

8 years agoART: Enable basic optimizations for try/catch
David Brazdil [Tue, 18 Aug 2015 16:48:17 +0000 (17:48 +0100)]
ART: Enable basic optimizations for try/catch

Generating code for try/catch methods requires having run at least the
instruction simplifier to remove redundant suspend checks. This patch
enables the first group of optimizations when try/catch is present.

Enabled optimizations:
1) IntrinsicsRecognizer
Does not modify the graph, only sets HInvoke::intrinsic_.

2) ConstantFolding
Does not deal with throwing instructions.

3) InstructionSimplifier
May remove a throwing instruction (e.g. LoadClass in VisitCheckCast),
or may turn a throwing instruction into a non-throwing one (ArraySet).
Their corresponding catch phi inputs are not removed but correctness
is preserved.

4) ReferenceTypePropagation
Does not modify the graph, only sets type properties. Typing of
LoadException from catch handler information was added.

5) DeadCodeElimination
Removing individual instructions is fine (same as 3). Removal of dead
blocks was disabled for try/catch.

Change-Id: I2722c3229eb8aaf326391e07f522dbf5186774b8

8 years agoam 99429ae0: Merge "Revert "Revert "Optimizing: Better invoke-static/-direct dispatch."""
Vladimir Marko [Wed, 19 Aug 2015 18:11:22 +0000 (18:11 +0000)]
am 99429ae0: Merge "Revert "Revert "Optimizing: Better invoke-static/-direct dispatch."""

* commit '99429ae0610e8d67d417542942c4befb35950bd3':
  Revert "Revert "Optimizing: Better invoke-static/-direct dispatch.""

8 years agoMerge "Revert "Revert "Optimizing: Better invoke-static/-direct dispatch."""
Vladimir Marko [Wed, 19 Aug 2015 18:05:46 +0000 (18:05 +0000)]
Merge "Revert "Revert "Optimizing: Better invoke-static/-direct dispatch."""

8 years agoRevert "Revert "Optimizing: Better invoke-static/-direct dispatch.""
Vladimir Marko [Wed, 19 Aug 2015 12:49:41 +0000 (12:49 +0000)]
Revert "Revert "Optimizing: Better invoke-static/-direct dispatch.""

Fixed kCallArtMethod to use correct callee location for
kRecursive. This combination is used when compiling with
debuggable flag set.

This reverts commit b2c431e80e92eb6437788cc544cee6c88c3156df.

Change-Id: Idee0f2a794199ebdf24892c60f8a5dcf057db01c

8 years agoam a35d4c9d: Merge "ART: Refactor try/catch block info, store exception type"
David Brazdil [Wed, 19 Aug 2015 17:18:44 +0000 (17:18 +0000)]
am a35d4c9d: Merge "ART: Refactor try/catch block info, store exception type"

* commit 'a35d4c9d66b372e7ae1014357c48ddfa6104085b':
  ART: Refactor try/catch block info, store exception type

8 years agoMerge "ART: Refactor try/catch block info, store exception type"
David Brazdil [Wed, 19 Aug 2015 17:12:48 +0000 (17:12 +0000)]
Merge "ART: Refactor try/catch block info, store exception type"

8 years agoART: Refactor try/catch block info, store exception type
David Brazdil [Wed, 19 Aug 2015 14:04:01 +0000 (15:04 +0100)]
ART: Refactor try/catch block info, store exception type

This patch replaces HBasicBlock fields storing try/catch info with a
single TryCatchInformation data structure, saving memory for the
majority of non-try/catch blocks. It also changes builder to store
the exception type for catch blocks.

Change-Id: Ib3e43f7db247e6915d67c267fc62410420e230c9

8 years agoART: (Partially) fix lock aliasing
Andreas Gampe [Tue, 18 Aug 2015 15:57:44 +0000 (08:57 -0700)]
ART: (Partially) fix lock aliasing

On monitor-exit, we must unlock all the registers which purport to
be locked at the current lock depth. These are lock aliases.

Bug: 20102779
Bug: 21169615
Bug: 21988678
Bug: 23300986
Change-Id: I6604871fc778d8f0ca9a99f6aad16a99ab62c599

8 years agoam f25f4f95: Merge "Put in place the ARM64 instruction simplification framework."
Calin Juravle [Wed, 19 Aug 2015 16:03:17 +0000 (16:03 +0000)]
am f25f4f95: Merge "Put in place the ARM64 instruction simplification framework."

* commit 'f25f4f95863946053cae46e34fd175cc7a6c3ea5':
  Put in place the ARM64 instruction simplification framework.

8 years agoMerge "Put in place the ARM64 instruction simplification framework."
Calin Juravle [Wed, 19 Aug 2015 15:56:11 +0000 (15:56 +0000)]
Merge "Put in place the ARM64 instruction simplification framework."

8 years agoam a85373e8: Merge "Manually unrelocate odex files generated for test."
Richard Uhler [Wed, 19 Aug 2015 15:24:41 +0000 (15:24 +0000)]
am a85373e8: Merge "Manually unrelocate odex files generated for test."

* commit 'a85373e8ab4a3b090eb60eba05be6f13dcd15567':
  Manually unrelocate odex files generated for test.

8 years agoMerge "Manually unrelocate odex files generated for test."
Richard Uhler [Wed, 19 Aug 2015 15:19:31 +0000 (15:19 +0000)]
Merge "Manually unrelocate odex files generated for test."

8 years agoPut in place the ARM64 instruction simplification framework.
Alexandre Rames [Wed, 19 Aug 2015 14:39:06 +0000 (15:39 +0100)]
Put in place the ARM64 instruction simplification framework.

This commit introduces and runs the empty InstructionSimplifierArm64
pass. Further commits will introduce arm64-specific transformations in
that pass.

Change-Id: I458f8a2b15470297b87fc1f7ff85bd52155d93ef

8 years agoam 32f264e6: Merge "ART: Revisit users in phi elimination"
David Brazdil [Wed, 19 Aug 2015 13:42:56 +0000 (13:42 +0000)]
am 32f264e6: Merge "ART: Revisit users in phi elimination"

* commit '32f264e67afa8654a5570d38b627515fb73fc333':
  ART: Revisit users in phi elimination

8 years agoMerge "ART: Revisit users in phi elimination"
David Brazdil [Wed, 19 Aug 2015 13:38:28 +0000 (13:38 +0000)]
Merge "ART: Revisit users in phi elimination"

8 years agoART: Revisit users in phi elimination
David Brazdil [Wed, 19 Aug 2015 13:17:31 +0000 (14:17 +0100)]
ART: Revisit users in phi elimination

SSA phi elimination visits phis in post order so that loop phis are
visited after their inputs. This prevents elimination of phis with
other phi inputs, exacerbated by the fact that the SSA builder does
create catch phis even if all inputs are the same (unlike with normal
phis). This patch revisits phi users of eliminated phis until no more
phis can be removed.

Change-Id: I403614dd46a8e6f0a5b9dd9e8ddc8832617521eb

8 years agoam 3bf1027c: Merge "JDWP: remove suspend count check on invoke"
Sebastien Hertz [Wed, 19 Aug 2015 13:01:41 +0000 (13:01 +0000)]
am 3bf1027c: Merge "JDWP: remove suspend count check on invoke"

* commit '3bf1027cd09397f1c076f523de7b4553227d36d3':
  JDWP: remove suspend count check on invoke

8 years agoMerge "JDWP: remove suspend count check on invoke"
Sebastien Hertz [Wed, 19 Aug 2015 12:53:38 +0000 (12:53 +0000)]
Merge "JDWP: remove suspend count check on invoke"

8 years agoam d9c4d2e9: Merge "Revert "Optimizing: Better invoke-static/-direct dispatch.""
Vladimir Marko [Wed, 19 Aug 2015 12:50:45 +0000 (12:50 +0000)]
am d9c4d2e9: Merge "Revert "Optimizing: Better invoke-static/-direct dispatch.""

* commit 'd9c4d2e9a9bc01fd82a895091126406081fafb1f':
  Revert "Optimizing: Better invoke-static/-direct dispatch."

8 years agoMerge "Revert "Optimizing: Better invoke-static/-direct dispatch.""
Vladimir Marko [Wed, 19 Aug 2015 12:46:09 +0000 (12:46 +0000)]
Merge "Revert "Optimizing: Better invoke-static/-direct dispatch.""

8 years agoRevert "Optimizing: Better invoke-static/-direct dispatch."
Vladimir Marko [Wed, 19 Aug 2015 12:45:42 +0000 (12:45 +0000)]
Revert "Optimizing: Better invoke-static/-direct dispatch."

Reverting due to failing ndebug tests.

This reverts commit 9b688a095afbae21112df5d495487ac5231b12d0.

Change-Id: Ie4f69da6609df3b7c8443412b6cf7f5c43c2c5d9

8 years agoam 464581ad: Merge "Optimizing: Better invoke-static/-direct dispatch."
Vladimir Marko [Wed, 19 Aug 2015 11:32:43 +0000 (11:32 +0000)]
am 464581ad: Merge "Optimizing: Better invoke-static/-direct dispatch."

* commit '464581adaf895d14f73db3d768729f0c9c6f5366':
  Optimizing: Better invoke-static/-direct dispatch.

8 years agoMerge "Optimizing: Better invoke-static/-direct dispatch."
Vladimir Marko [Wed, 19 Aug 2015 11:27:57 +0000 (11:27 +0000)]
Merge "Optimizing: Better invoke-static/-direct dispatch."

8 years agoOptimizing: Better invoke-static/-direct dispatch.
Vladimir Marko [Wed, 6 May 2015 13:12:42 +0000 (14:12 +0100)]
Optimizing: Better invoke-static/-direct dispatch.

Add framework for different types of loading ArtMethod*
and code pointer retrieval. Implement invoke-static and
invoke-direct calls the same way as Quick. Document the
dispatch kinds in HInvokeStaticOrDirect's new enumerations
MethodLoadKind and CodePtrLocation.

PC-relative loads from dex cache arrays are used only for
x86-64 and arm64. The implementation for other architectures
will be done in separate CLs.

Change-Id: I468ca4d422dbd14748e1ba6b45289f0d31734d94