summaryrefslogtreecommitdiffstats
path: root/test/529-checker-unresolved
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2017-01-06 14:40:07 +0000
committerNicolas Geoffray <ngeoffray@google.com>2017-01-11 10:34:10 +0000
commit2b615ba29c4dfcf54aaf44955f2eac60f5080b2e (patch)
tree0a2fe5f9243645a054d4aa094bff5a69cc1abb88 /test/529-checker-unresolved
parentc9a060f2688599d4a402ee6234db46c2e9b7463f (diff)
downloadandroid_art-2b615ba29c4dfcf54aaf44955f2eac60f5080b2e.tar.gz
android_art-2b615ba29c4dfcf54aaf44955f2eac60f5080b2e.tar.bz2
android_art-2b615ba29c4dfcf54aaf44955f2eac60f5080b2e.zip
Make object allocation entrypoints only take a class.
Change motivated by: - Dex cache compression: having the allocation fast path do a dex cache lookup will be too expensive. So instead, rely on the compiler having direct access to the class (either through BSS for AOT, or JIT tables for JIT). - Inlining: the entrypoints relied on the caller of the allocation to have the same dex cache as the outer method (stored at the bottom of the stack). This meant we could not inline methods from a different dex file that do allocations. By avoiding the dex cache lookup in the entrypoint, we can now remove this restriction. Code expansion on average for Docs/Gms/FB/Framework (go/lem numbers): - Around 0.8% on arm64 - Around 1% for x64, arm - Around 1.5% on x86 Test: test-art-host, test-art-target, ART_USE_READ_BARRIER=true/false Test: test-art-host, test-art-target, ART_DEFAULT_GC_TYPE=SS ART_USE_TLAB=true Change-Id: I41f3748bb4d251996aaf6a90fae4c50176f9295f
Diffstat (limited to 'test/529-checker-unresolved')
-rw-r--r--test/529-checker-unresolved/src/Main.java4
1 files changed, 2 insertions, 2 deletions
diff --git a/test/529-checker-unresolved/src/Main.java b/test/529-checker-unresolved/src/Main.java
index 5fd51e1dca..89b9cb45c3 100644
--- a/test/529-checker-unresolved/src/Main.java
+++ b/test/529-checker-unresolved/src/Main.java
@@ -192,13 +192,13 @@ public class Main extends UnresolvedSuperClass {
/// CHECK-START: void Main.testLicm(int) licm (before)
/// CHECK: <<Class:l\d+>> LoadClass loop:B2
/// CHECK-NEXT: <<Clinit:l\d+>> ClinitCheck [<<Class>>] loop:B2
- /// CHECK-NEXT: <<New:l\d+>> NewInstance [<<Clinit>>,<<Method:[i|j]\d+>>] loop:B2
+ /// CHECK-NEXT: <<New:l\d+>> NewInstance [<<Clinit>>] loop:B2
/// CHECK-NEXT: InvokeUnresolved [<<New>>] loop:B2
/// CHECK-START: void Main.testLicm(int) licm (after)
/// CHECK: <<Class:l\d+>> LoadClass loop:none
/// CHECK-NEXT: <<Clinit:l\d+>> ClinitCheck [<<Class>>] loop:none
- /// CHECK: <<New:l\d+>> NewInstance [<<Clinit>>,<<Method:[i|j]\d+>>] loop:B2
+ /// CHECK: <<New:l\d+>> NewInstance [<<Clinit>>] loop:B2
/// CHECK-NEXT: InvokeUnresolved [<<New>>] loop:B2
static public void testLicm(int count) {
// Test to make sure we keep the initialization check after loading an unresolved class.