summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_arm.cc
AgeCommit message (Collapse)Author
2017-02-09Use entrypoint switching on x86 & x86-64 for GC root read barriers.Roland Levillain
For consistency reason (with the ARM and ARM64 implementations), check the read barrier marking entrypoint (`Thread::Current()->pReadBarrierMarkReg ## root.reg()`) instead of `Thread::Current()->GetIsGcMarking()` to decide whether to mark a GC root. This change should have no impact on the performance or the size of the generated code. Test: m test-art-host Bug: 32638713 Change-Id: Ifd71312992fdfd6067447cccb7d95860f3771b57
2017-02-08Change type initialization entrypoints to kSaveEverything.Vladimir Marko
Also avoid the unnecessary read barriers for boot image classes with kBssEntry or kJitTableAddress (the kBssEntry and JIT work missed the `read_barrier_option` flag), fix bit-rotten non-Baker read barriers on ARM and ARM64 and fix bit-rotten ARM64 relative patcher's IsAdrpPatch() used for erratum 843419 workaround. aosp_angler-userdebug with CC: before: arm boot*.oat: 35440420 arm64 boot*.oat: 43504952 after: arm boot*.oat: 35222292 (-218128, -0.62%) arm64 boot*.oat: 43389048 (-115904, -0.26%) aosp_angler-userdebug without CC: before: arm boot*.oat: 31927412 arm64 boot*.oat: 39340512 after: arm boot*.oat: 31708736 (-218676, -0.68%) arm64 boot*.oat: 39211768 (-128744, -0.33%) Test: m test-art-host (non-CC, Baker CC, table lookup CC) Test: m test-art-target on Nexus 6P (non-CC, Baker CC, table lookup CC) Test: Nexus 6P boots (non-CC, Baker CC, table lookup CC) Bug: 30627598 Change-Id: Ida5bbce414844de9e4273e40334165d4494230d4
2017-02-06Merge "Code refactoring around sharpening HLoadClass."Nicolas Geoffray
2017-02-03Code refactoring around sharpening HLoadClass.Nicolas Geoffray
Even if the class is not accessible through the dex cache, we can access it by other means (eg boot class, jit table). So rewrite static field access instruction builder to not bail out if a class cannot be accessed through the dex cache. bug:34966607 test: test-art-host test-art-target Change-Id: I88e4e09951a002b480eb8f271726b56f981291bd
2017-02-03Align allocation entrypoints implementation between arm/arm64/x86/x64.Nicolas Geoffray
x64: - Add art_quick_alloc_initialized_rosalloc x86: - Add art_quick_alloc_initialized_rosalloc - Add art_quick_alloc_initialized{_region}_tlab - Add art_quick_alloc_array_resolved{8,16,32,64}{_region}_tlab arm32: - Add art_quick_alloc_initialized_rosalloc - Add art_quick_alloc_initialized{_region}_tlab - Add art_quick_alloc_array_resolved{8,16,32,64}{_region}_tlab arm64: - Add art_quick_alloc_initialized_rosalloc - Add art_quick_alloc_initialized{_region}_tlab - Add art_quick_alloc_array_resolved{8,16,32,64}_tlab Test: test-art-target test-art-host bug: 30933338 Change-Id: I0dd8667a2921dd0b3403bea5d05304ba5d40627f
2017-01-23Merge "Fix some typos in ART."Treehugger Robot
2017-01-23Merge "ART: Reference.getReferent intrinsic for arm and arm64"Treehugger Robot
2017-01-23Fix some typos in ART.Roland Levillain
Test: m build-art-host Test: m cpplint-art Change-Id: Ifc6ce3d0d645c4a8dca72dd483fc03fc05077130
2017-01-23ART: Reference.getReferent intrinsic for arm and arm64TatWai Chong
Test: m test-art-host Test: m test-art-target Test: export ART_HEAP_POISONING=true; m test-art-host Test: export ART_HEAP_POISONING=true; m test-art-target Bug: 32535355 Change-Id: Ie63317689dd9e03a24e701c30411f8014970173a
2017-01-23Allow multiple HArmDexCacheArrayBase.Nicolas Geoffray
So that even graphs with irreducible loops can use it and avoid loading methods through KDexCacheViaMethod. Test: test-art-target Change-Id: I913eece1c134ebe9ea989064e477f694b8895d8f
2017-01-20Compressed native PC for stack mapsMathieu Chartier
Compress native PC based on instruction alignment. This reduces the size of stack maps, boot.oat is 0.4% smaller for arm64. Test: test-art-host, test-art-target, N6P booting Change-Id: I2b70eecabda88b06fa80a85688fd992070d54278
2017-01-19Revert "Revert "Load the array class in the compiler for allocations.""Nicolas Geoffray
This reverts commit fee255039e30c1c3dfc70c426c3d176221c3cdf9. Change-Id: I02b45f9a659d872feeb35df40b42c1be9878413a
2017-01-19Revert "Load the array class in the compiler for allocations."Hiroshi Yamauchi
libcore test fails. This reverts commit cc99df230feb46ba717252f002d0cc2da6828421. Change-Id: I5bac595acd2b240886062e8c1f11f9095ff6a9ed
2017-01-18Load the array class in the compiler for allocations.Nicolas Geoffray
Removing one other dependency for needing to pass the current method, and having dex_cache_resolved_types_ in ArtMethod. oat file increase: - x64: 0.25% - arm32: 0.30% - x86: 0.28% test: test-art-host, test-art-target Change-Id: Ibca4fa00d3e31954db2ccb1f65a584b8c67cb230
2017-01-16Put the resolved class in HLoadClass.Nicolas Geoffray
To avoid repeated lookups in sharpening/rtp/inlining. Test: test-art-host test-art-target Change-Id: I08d0da36a4bb061cdaa490ea2af3a3217a875bbe
2017-01-16Implement HLoadClass/kBssEntry for boot image.Vladimir Marko
Test: m test-art-host Test: m test-art-host with CC Test: m test-art-target on Nexus 9 Test: Nexus 9 boots. Test: Build aosp_mips64-eng Bug: 30627598 Change-Id: I168f24dedd5fb54a1e4215ecafb947ffb0dc3280
2017-01-16Store resolved types for AOT code in .bss.Vladimir Marko
Test: m test-art-host Test: m test-art-target on Nexus 9. Test: Nexus 9 boots. Test: Build aosp_mips64-eng. Bug: 30627598 Bug: 34193123 Change-Id: I8ec60a98eb488cb46ae3ea56341f5709dad4f623
2017-01-16Make runtime call on main for HLoadClass/kDexCacheViaMethod.Vladimir Marko
Remove dependency of the compiled code on types dex cache array in preparation for changing to a hash-based array. Test: m test-art-host Test: m test-art-target on Nexus 9 Bug: 30627598 Change-Id: I3c426ed762c12eb9eb4bb61ea9a23a0659abf0a2
2017-01-16Remove HLoadClass::LoadKind::kDexCachePcRelative.Vladimir Marko
Test: m test-art-host Test: m test-art-target-run-test-552-checker-sharpening Bug: 30627598 Change-Id: Ic809b0f3a8ed0bd4dc7ab67aa64866f9cdff9bdb
2017-01-15Revert "Revert "ART: Compiler support for invoke-polymorphic.""Orion Hodson
This reverts commit 0fb5af1c8287b1ec85c55c306a1c43820c38a337. This takes us back to the original change and attempts to fix the issues encountered: - Adds transition record push/pop around artInvokePolymorphic. - Changes X86/X64 relocations for MacSDK. - Implements MIPS entrypoint for art_quick_invoke_polymorphic. - Corrects size of returned reference in art_quick_invoke_polymorphic on ARM. Bug: 30550796,33191393 Test: art/test/run-test 953 Test: m test-art-run-test Change-Id: Ib6b93e00b37b9d4ab743a3470ab3d77fe857cda8
2017-01-12Revert "Revert "Make object allocation entrypoints only take a class.""Nicolas Geoffray
This reverts commit f7aaacd97881c6924b8212c7f8fe4a4c8721ef53. Change-Id: I6756cd1e6110bb45231f62f5e388f16c044cb145
2017-01-12Merge "Revert "Make object allocation entrypoints only take a class.""Treehugger Robot
2017-01-12Revert "Make object allocation entrypoints only take a class."Hiroshi Yamauchi
960-default-smali64 is failing. This reverts commit 2b615ba29c4dfcf54aaf44955f2eac60f5080b2e. Change-Id: Iebb8ee5a917fa84c5f01660ce432798524d078ef
2017-01-11Merge "Revert "ART: Compiler support for invoke-polymorphic.""Orion Hodson
2017-01-11Revert "ART: Compiler support for invoke-polymorphic."Orion Hodson
This reverts commit 02e3092f8d98f339588e48691db77f227b48ac1e. Reasons for revert: - Breaks MIPS/MIPS64 build. - Fails under GCStress test on x64. - Different x64 build configuration doesn't like relocation. Change-Id: I512555b38165d05f8a07e8aed528f00302061001
2017-01-11Merge "ART: Compiler support for invoke-polymorphic."Treehugger Robot
2017-01-11ART: Compiler support for invoke-polymorphic.Orion Hodson
Adds basic support to invoke method handles in compiled code. Enables method verification for methods containing invoke-polymorphic. Adds k45cc/k45rc output to Instruction::DumpString() which was found to be missing when enabling verification. Include stack traces in test 957-methodhandle-transforms for failures so they can be easily identified. Bug: 30550796,33191393 Test: art/test/run-test 953 Test: m test-art-run-test Change-Id: Ic9a96ea24906087597d96ad8159a5bc349d06950
2017-01-11Merge "Keep resolved String in HLoadString."Nicolas Geoffray
2017-01-11Make object allocation entrypoints only take a class.Nicolas Geoffray
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
2017-01-10Keep resolved String in HLoadString.Nicolas Geoffray
For the following reasons: - Avoids needing to do a lookup again in CodeGenerator::EmitJitRoots. - Fixes races where we the string was GC'ed before CodeGenerator::EmitJitRoots. - Makes it possible to do GVN on the same string but defined in different dex files. Test: test-art-host, test-art-target Change-Id: If2b5d3079f7555427b1b96ab04546b3373fcf921
2016-12-20Remove soon to be obsolete call kinds for direct calls.Nicolas Geoffray
And remove CompilerDriver::GetCodeAndMethodForDirectCall in preparation of removing non-PIC prebuild and non-PIC on-device boot image compilation. Test: test-art-host test-art-target bug:33192586 Change-Id: Ic48e3e8b9d7605dd0e66f31d458a182198ba9578
2016-12-13Remove obsolete DeduplicateDexCacheAddressLiteral().Vladimir Marko
Test: Rely on TreeHugger Bug: 30627598 Change-Id: Ia3c7a1d528f62b730d7ac1cc7b67f21d9ff06c9e
2016-12-12Revert "Revert "Add kJitTableAddress for HLoadClass.""Nicolas Geoffray
This reverts commit d2d5262c8370309e1f2a009f00aafc24f1cf00a0. Change-Id: I6149d5c7d5df0b0fc5cb646a802a2eea8d01ac08
2016-12-12Revert "Add kJitTableAddress for HLoadClass."Nicolas Geoffray
One test failure after merge. This reverts commit 5b12f7973636bfea29da3956a9baa7a6bbe2b666. Change-Id: I120c49e53274471fc1c82a10d52e99c83f5f85cc
2016-12-12Add kJitTableAddress for HLoadClass.Nicolas Geoffray
This new kind loads classes from the root table associated with JIT compiled code. Also remove kDexCacheAddress, which is replaced by kJitTableAddress. test: ART_TEST_JIT=true test-art-host-jit test-art-target-jit Change-Id: Ia23029688d1a60c178bf2ffa7463927c5d5de4d0
2016-12-01Class Hierarchy Analysis (CHA)Mingyao Yang
The class linker now tracks whether a method has a single implementation and if so, the JIT compiler will try to devirtualize a virtual call for the method into a direct call. If the single-implementation assumption is violated due to additional class linking, compiled code that makes the assumption is invalidated. Deoptimization is triggered for compiled code live on stack. Instead of patching return pc's on stack, a CHA guard is added which checks a hidden should_deoptimize flag for deoptimization. This approach limits the number of deoptimization points. This CL does not devirtualize abstract/interface method invocation. Slides on CHA: https://docs.google.com/a/google.com/presentation/d/1Ax6cabP1vM44aLOaJU3B26n5fTE9w5YU-1CRevIDsBc/edit?usp=sharing Change-Id: I18bf716a601b6413b46312e925a6ad9e4008efa4 Test: ART_TEST_JIT=true m test-art-host/target-run-test test-art-host-gtest
2016-11-29ART: Add dex::StringIndexAndreas Gampe
Add abstraction for uint32_t string index. Test: m test-art-host Change-Id: I917c2881702fe3df112c713f06980f2278ced7ed
2016-11-21ART: Add dex::TypeIndexAndreas Gampe
Add abstraction for uint16_t type index. Test: m test-art-host Change-Id: I47708741c7c579cbbe59ab723c1e31c5fe71f83a
2016-11-21Merge "Revert "Revert "Revert "Revert "JIT root tables."""""Nicolas Geoffray
2016-11-18Revert "Revert "Revert "Revert "JIT root tables.""""Nicolas Geoffray
Test: 626-set-resolved-string, test-art-host, test-art-target Test: run-libcore-tests.sh Test: phone boots and runs This reverts commit 3395fbc20bcd20948bec8958db91b304c17cacd8. Change-Id: I104b73d093e3eb6a271d564cfdb9ab09c1c8cf24
2016-11-16Change iftable to never be nullMathieu Chartier
Simplifies code generation by removing a null check. The null case is rare. Ritzperf code size: 13107624 -> 13095336 Also addressed comments from previous CL. Bug: 32577579 Test: test-art-host, run ritzperf both with CC Change-Id: I2b31e800867112869d7f0643e16c08826296979e
2016-11-15Pass object instead of class to instanceof entrypointMathieu Chartier
Reduces code size. Also avoid read barrier for kArrayCheck case. Bug: 32577579 Test: test-art-host, test-art-target CC Change-Id: Ia890f656fe166b2d39c522b63a8a6469404134ae
2016-11-14Clean up interface check castMathieu Chartier
Changed arm, arm64 to use less labels and removed forward branch in the success case. Cleaned up X86, X86_64 to remove the is_null label. Bug: 12687968 Bug: 32577579 Test: test-art-host, test-art-target CC Change-Id: Iba426dff548b2ef42198fad13efeb075f7c724a7
2016-11-14Revert "Revert "Revert "JIT root tables."""Nicolas Geoffray
libcore failures: dalvikvm32 F 11-14 03:04:06 14870 14870 jit_code_cache.cc:310] Check failed: new_string != nullptr This reverts commit 75afcdd3503a8a8518e5b23d21b6e73306ce39ce. Change-Id: I5a6b6b48aa79a763d1ff1ba4d85d63811254787d
2016-11-11Revert "Revert "JIT root tables.""Nicolas Geoffray
Also contains Revert "Support kJitTableAddress in x86/arm/arm64." This reverts commit 4acd03638fcdb4e5d1666f8eec7eb3bf6d6be035. This reverts commit 997d1217830c0a18b70faeabd53c04700a87d7d9. Test: ART_USE_READ_BARRIER=true/false test-art-host test-art-target Change-Id: I77cb1e9bf8f1b4c58b72d3cf5ca31ced2aaa1ea3
2016-11-11Merge "Use entrypoint switching to reduce code size of GcRoot read barrier"Mathieu Chartier
2016-11-10Use entrypoint switching to reduce code size of GcRoot read barrierMathieu Chartier
Set the read barrier mark register entrypoints to null when the GC is not marking. The compiler uses this to avoid needing to load the is_gc_marking boolean. Code size results on ritzperf CC: arm32: 13439400 -> 13242792 (-1.5%) arm64: 16380544 -> 16208512 (-1.05%) Implemented for arm32 and arm64. TODO: Consider implementing on x86. Bug: 32638713 Bug: 29516974 Test: test-art-host + run ritzperf Change-Id: I527ca5dc4cd43950ba43b872d0ac81e1eb5791eb
2016-11-10Use enum for read barrier options in compilerMathieu Chartier
Enums are just phenomenal. Also fixed a double load error in x86 interface check cast fast path. Test: test-art-host Change-Id: Iea403ce579145b6a294073f3900ad6921c1a0d53
2016-11-10Merge "Avoid read barriers for inlined check cast"Mathieu Chartier
2016-11-10Merge "Change string compression encoding."Treehugger Robot