b089eccf503646e6ed2d5bb20d973d9131166655 |
01-Jun-2016 |
Vladimir Marko <vmarko@google.com> |
Delay dex-to-dex compilation until Optimizing is done. This fixes a race between inlining in the Optimizing backend and dex-to-dex quickening where the Optimizing can read the non-quickened opcode and then the quickened field index or vtable index and look up the wrong field or method. Even if we such tearing of the dex instruction does not happen, the possible reordering of dex-to-dex and Optimizing compilation makes the final oat file non-deterministic. Also, remove VerificationResults::RemoveVerifiedMethod() as we have only the Optimizing backend now and as such it was dead code and would have interfered with this change. Bug: 29043547 Bug: 29089975 (cherry picked from commit 492a7fa6df3b197a24099a50f5abf624164f3842) Change-Id: I1337b772dc69318393845a790e5f6d38aa3de60f
erification_results.cc
erification_results.h
|
8c185bf0c6f18a5349bc87a7e3751ba06d90f461 |
23-May-2016 |
Vladimir Marko <vmarko@google.com> |
Compile JNI stubs for verify-profile and interpret-only. This is the intended behavior to have a good JNI transition performance. Bug: 28902384 Change-Id: Iedb2ca343d66cf422ef2dc0527639e81d6ba8960
erification_results.cc
|
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
erification_results.cc
erified_method.cc
|
9d07e3d128ccfa0ef7670feadd424a825e447d1d |
31-Mar-2016 |
Vladimir Marko <vmarko@google.com> |
Clean up OatQuickMethodHeader after Quick removal. This reduces the size of the pre-header by 8 bytes, reducing oat file size and mmapped .text section size. The memory needed to store a CompiledMethod by dex2oat is also reduced, for 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The aosp_flounder-userdebug 32-bit and 64-bit boot.oat are each about 1.1MiB smaller. Disable the broken StubTest.IMT, b/27991555 . Change-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039
ex_to_dex_compiler.cc
|
bf9611f821697b14bf9e170f503c3f47613b046b |
26-Mar-2016 |
Andreas Gampe <agampe@google.com> |
ART: Clean up verifier Clean up verifier post-Quick. Change-Id: I0b05e10dd06edd228fe2068c8afffc4b7d7fdffa
erification_results.cc
erified_method.cc
erified_method.h
|
2e384346d93a747e19fb74f32eba2d1e9403721f |
24-Mar-2016 |
Vladimir Marko <vmarko@google.com> |
Merge "Post-Quick cleanup: Remove CompilationUnit."
|
df739841b781dbd49c247e3795696389c4799020 |
23-Mar-2016 |
Vladimir Marko <vmarko@google.com> |
Post-Quick cleanup: Remove CompilationUnit. Change-Id: I309411b0fffaaed1e218e2c34394bdf6e2f75b48
ex_to_dex_compiler.cc
|
29d38e77c553c6cf71fc4dafe2d22b4e3f814872 |
23-Mar-2016 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "Use compiler filter to determine oat file status."" This reverts commit 845e5064580bd37ad5014f7aa0d078be7265464d. Add an option to change what OatFileManager considers up-to-date. In our tests we're allowed to write to the dalvik-cache, so it cannot be kSpeed. Bug: 27689078 Change-Id: I0c578705a9921114ed1fb00d360cc7448addc93a
erification_results.cc
|
845e5064580bd37ad5014f7aa0d078be7265464d |
23-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Use compiler filter to determine oat file status." Bots are red. Tentative reverting as this is likely the offender. Bug: 27689078 This reverts commit a62d2f04a6ecf804f8a78e722a6ca8ccb2dfa931. Change-Id: I3ec6947a5a4be878ff81f26f17dc36a209734e2a
erification_results.cc
|
a62d2f04a6ecf804f8a78e722a6ca8ccb2dfa931 |
18-Mar-2016 |
Richard Uhler <ruhler@google.com> |
Use compiler filter to determine oat file status. Record the compiler filter in the oat header. Use that to determine when the oat file is up-to-date with respect to a target compiler filter level. New xxx-profile filter levels are added to specify if a profile should be used instead of testing for the presence of a profile file. This change should allow for different compiler-filters to be set for different package manager use cases. Bug: 27689078 Change-Id: Id6706d0ed91b45f307142692ea4316aa9713b023
erification_results.cc
|
3c94f0945ed596ceee39783fa075f013b65e80a1 |
21-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Remove Quick from tree. So long, old friend. Change-Id: I0241c798a34b92bf994fed83888da67d6e7f1891
b_optimizations.cc
b_optimizations.h
ompiler_ir.cc
ompiler_ir.h
ataflow_iterator-inl.h
ataflow_iterator.h
ex_flags.h
ex_types.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
vn_dead_code_elimination_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
ass.h
ass_driver.h
ass_driver_me.h
ass_driver_me_opts.cc
ass_driver_me_opts.h
ass_driver_me_post_opt.cc
ass_driver_me_post_opt.h
ass_manager.cc
ass_manager.h
ass_me.h
ost_opt_passes.cc
ost_opt_passes.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/backend_arm.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/backend_arm64.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/lazy_debug_frame_opcode_writer.cc
uick/lazy_debug_frame_opcode_writer.h
uick/local_optimizations.cc
uick/mips/README.mips
uick/mips/assemble_mips.cc
uick/mips/backend_mips.h
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_cfi_test.cc
uick/quick_cfi_test_expected.inc
uick/quick_compiler.cc
uick/quick_compiler.h
uick/quick_compiler_factory.h
uick/ralloc_util.cc
uick/resource_mask.cc
uick/resource_mask.h
uick/x86/assemble_x86.cc
uick/x86/backend_x86.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/quick_assemble_x86_test.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_location.h
eg_storage.h
eg_storage_eq.h
sa_transformation.cc
ype_inference.cc
ype_inference.h
ype_inference_test.cc
reg_analysis.cc
|
f6a35de9eeefb20f6446f1b4815b4dcb0161d09c |
21-Mar-2016 |
Vladimir Marko <vmarko@google.com> |
Optimizing: Fix register allocator validation memory usage. Also attribute ArenaBitVector allocations to appropriate passes. This was used to track down the source of the excessive memory alloactions. Bug: 27690481 Change-Id: Ib895984cb7c04e24cbc7abbd8322079bab8ab100
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ir_dataflow.cc
ir_graph.cc
ir_optimization.cc
sa_transformation.cc
ype_inference_test.cc
|
f969a209c30e3af636342d2fb7851d82a2529bf7 |
09-Mar-2016 |
Roland Levillain <rpl@google.com> |
Fix and enable java.lang.StringFactory intrinsics. The following intrinsics were not considered by the intrinsics recognizer: - StringNewStringFromBytes - StringNewStringFromChars - StringNewStringFromString This CL enables them and add tests for them. This CL also: - Fixes the locations of the ARM64 & MIPS64 StringNewStringFromString intrinsics. - Fixes the definitions of the FOUR_ARG_DOWNCALL macros on ARM and x86, which are used to implement the art_quick_alloc_string_from_bytes* runtime entry points. - Fixes PC info (stack maps) recording in the StringNewStringFromBytes, StringNewStringFromChars and StringNewStringFromString ARM, ARM64 & MIPS64 intrinsics. Bug: 27425743 Change-Id: I38c00d3f0b2e6b64f7d3fe9146743493bef9e45c
uick/dex_file_method_inliner.cc
|
0e54c0160c84894696c05af6cad9eae3690f9496 |
04-Mar-2016 |
Aart Bik <ajcbik@google.com> |
Unsafe: Recognize intrinsics for 1.8 java.util.concurrent With unit test. Rationale: Recognizing the 1.8 methods as intrinsics is the first step towards providing efficient implementation on all architectures. Where not implemented (everywhere for now), the methods fall back to the JNI native or reference implementation. NOTE: needs iam's CL first! bug=26264765 Change-Id: Ife65e81689821a16cbcdd2bb2d35641c6de6aeb6
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
4cb069fa2fd967312d5884b86bbdac343df9eb28 |
01-Mar-2016 |
Roland Levillain <rpl@google.com> |
Merge "Fix the signature of the IndexOf entry point."
|
42ad288254e660ad091d03fad8c8fbad1d34ec89 |
29-Feb-2016 |
Roland Levillain <rpl@google.com> |
Fix the signature of the IndexOf entry point. The IndexOf entry point was declared as taking four arguments (void*, uint32_t, uint32_t, uint32_t) whereas all actual implementations use three arguments (void*, uint32_t, uint32_t). As that fourth argument is not documented, drop it from the intrinsic declaration to have it match the implementations. Change-Id: I65d747033192025ccd2b9a5e8f8ed05b77a21941
uick/gen_invoke.cc
|
cc3839c15555a2751e13980638fc40e4d3da633e |
29-Feb-2016 |
Roland Levillain <rpl@google.com> |
Improve documentation about StringFactory.newStringFromChars. Make it clear that the native method requires its third argument to be non-null, and therefore that the intrinsics do not need a null check for it. Bug: 27378573 Change-Id: Id2f78ceb0f7674f1066bc3f216b738358ca25542
uick/gen_invoke.cc
|
1bdfdb3e879267dafb4b6811dd70cc8b7511fe15 |
26-Feb-2016 |
Aart Bik <ajcbik@google.com> |
Merge "Implement fp to bits methods as intrinsics."
|
2a6aad9d388bd29bff04aeec3eb9429d436d1873 |
25-Feb-2016 |
Aart Bik <ajcbik@google.com> |
Implement fp to bits methods as intrinsics. Rationale: Better optimization, better performance. Results on libcore benchmark: Most gain is from moving the invariant call out of the loop after we detect everything is a side-effect free intrinsic. But generated code in general case is much cleaner too. Before: timeFloatToIntBits() in 181 ms. timeFloatToRawIntBits() in 35 ms. timeDoubleToLongBits() in 208 ms. timeDoubleToRawLongBits() in 35 ms. After: timeFloatToIntBits() in 36 ms. timeFloatToRawIntBits() in 35 ms. timeDoubleToLongBits() in 35 ms. timeDoubleToRawLongBits() in 34 ms. bug=11548336 Change-Id: I6e001bd3708e800bd75a82b8950fb3a0fc01766e
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
a1de9188a05afdecca8cd04ecc4fefbac8b9880f |
25-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
Optimizing: Reduce memory usage of HInstructions. Pack narrow fields and flags into a single 32-bit field. Change-Id: Ib2f7abf987caee0339018d21f0d498f8db63542d
ompiler_enums.h
|
944da603cde59a4277f3bbc31d860a90842a1a2a |
19-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
ART: Allow method references across oat files for multi-image, 2nd attempt. These were disabled because we didn't have sufficient information about the multi-image layout when processing link-time patches in OatWriter. This CL refactors the ELF file creation so that the information is available. Also clean up ImageWriter to use oat file indexes instead of filenames and avoid reopening the oat file to retrieve the checksum. Change-Id: Icc7b528deca29da1e473c8f079521a36d6c4892f
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
98e6ce44c700abd9375fe17f0aa31fea1e1e938b |
16-Feb-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Remove string init map. Partial revert of the String init change. - Make Quick bailout in the presence of String allocation. - Rely on the compiler for knowing when dex registers alias. bug:27173201 Change-Id: I0bf58ba3825c71cef110b53f3a0a6f567cb2ef9a
ir_optimization.cc
uick/quick_compiler.cc
uick/quick_compiler.h
erified_method.cc
erified_method.h
|
45724f9a0cc38dbb3071beb3eeab96499868b49c |
17-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Allow method references across oat files for multi-image." Breaks Quick tests. This reverts commit 6065402316da2b51eed5fc34cffbd991766bd408. Change-Id: I8a5469ba7cea5f46b85cb489b3e0ef06ed548f03
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
6065402316da2b51eed5fc34cffbd991766bd408 |
16-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
Allow method references across oat files for multi-image. These were disabled because we didn't have sufficient information about the multi-image layout when processing link-time patches in OatWriter. This CL refactors the ELF file creation so that the information is available. Change-Id: I6f2e8dc8572d143c72cc2693bb0ba4fd76f889ab
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
927f40d925e2106598d413ac02e8d80463357258 |
10-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
Merge "Try to substitute constructor chains for IPUTs."
|
354efa6cdf558b2331e8fec539893fa51763806e |
04-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
Try to substitute constructor chains for IPUTs. Match a constructor chain where each constructor either forwards some or all of its arguments to the next (i.e. superclass constructor or a constructor in the same class) and may pass extra zeros (of any type, including null), followed by any number of IPUTs on "this", storing either arguments or zeros, until we reach the contructor of java.lang.Object. When collecting IPUTs from the constructor chain, remove any IPUTs that store the same field as an IPUT that comes later. This is safe in this case even if those IPUTs store volatile fields because the uninitialized object reference wasn't allowed to escape yet. Also remove any IPUTs that store zero values as the allocated object is already zero initialized. Change-Id: If93022310bf04fe38ee741665ac4a65d4c2bb25f
uick/dex_file_method_inliner.cc
|
4fda4eb799c95be266f52aaf3461a440ea86b841 |
05-Feb-2016 |
David Srbecky <dsrbecky@google.com> |
Move code related to debug info generation to its own directory. debug/dwarf/ contains helper classes which hide the details of the DWARF file format. It acts as independent DWARF library. debug/ contains ART-specific code which generates ELF debug sections (which includes non-DWARF sections like .symtab). Change-Id: Id351f604e4e64be2ca395a78324ea02e30481497
uick/lazy_debug_frame_opcode_writer.h
|
d967266cdfc8011c81ba6e9857a247c4a73bd0fc |
03-Sep-2015 |
Lazar Trsic <Lazar.Trsic@imgtec.com> |
MIPS64: Remove unaligned memory access from art generated code Unaligned memory access was caused by sd, ld, ldc1 and sdc1 instructions. Check if offset is unaligned and replace it with two 32 bit memory accesses, if so. Added assembler tests for new instructions, as well as assembler tests for LoadFromOffset, LoadFpuFromOffset, StoreToOffset and StoreFpuToOffset. Change-Id: I0228a4a2ce6c801eeb5b46952b8330e14468deb3
uick/mips/utility_mips.cc
|
78e90155b249588cb800e7f6e5993ebcbd465292 |
28-Jan-2016 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Add option to ensure deterministic compilation"
|
ace0dc1dd5480ad458e622085e51583653853fb9 |
20-Jan-2016 |
Andreas Gampe <agampe@google.com> |
ART: Add option to ensure deterministic compilation To ensure reliable stable generation of a boot image, add a flag for forced determinism, trading compile time for a deterministic output. We have to run certain passes in the compiler-driver single-threaded. It is also necessary to try to make the heap layout deterministic. Switch to nonconcurrent GC, use the free-list implementation for LOS, and try to allocate the main space at a known location. This is best effort at the moment. To allow the compiler phase to be parallelized, const-strings need to be created beforehand. The identity hashcode seed needs to be pinned. Besides the Dex object we also need to null the DexFile pointer in dex caches. For classes, we need to remove the clinit thread ID. Fix oatdump alignment padding accounting. Bug: 26687569 Change-Id: Ia82120e8f715bb3691d861817b12778ac677355a
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
30202b2665adbb3c7b88b06adfe96d2f0e159099 |
27-Jan-2016 |
David Srbecky <dsrbecky@google.com> |
Merge "Revert "Revert "Add option to generate compressed backtrace info."""
|
b1bd048f569aea0c2e76abd999750add2da6280c |
26-Jan-2016 |
Aart Bik <ajcbik@google.com> |
Merge "Recognize common utilities as intrinsics."
|
9724c636467d56632a45fdf6353e3d57d1925501 |
07-Jan-2016 |
Neil Fuller <nfuller@google.com> |
Enable interface default methods by default. This also enables interface static methods. This removes the -Xexperimental:default-methods flag and all places where we explicitly check for its presence. Bug: 24618811 Change-Id: Icd91e377bd6e1a45a1645f810d15de1b0312e31d
uick/quick_compiler.cc
|
59c9454b92c2096a30a2bbdffb64edf33dbdd916 |
25-Jan-2016 |
Aart Bik <ajcbik@google.com> |
Recognize common utilities as intrinsics. Rationale: Recognizing these method calls as intrinsics already has major advantages (compiler knows about no-side-effects/no-throw properties). Next step is, of course, to implement these with native instructions on each architecture. Change-Id: I06fd12973238caec00d67b31b195d7f8807a538e
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
5b1c2ca30dad519be285f0a1e839c23cc4e3a51d |
25-Jan-2016 |
David Srbecky <dsrbecky@google.com> |
Revert "Revert "Add option to generate compressed backtrace info."" This reverts commit 8546cc9aeb05e866e1fb6a9e4130d53ea330baa8. Change-Id: I676fdf9af27fa3b16fa8921778ff8832ab8c437d
uick/codegen_util.cc
|
8546cc9aeb05e866e1fb6a9e4130d53ea330baa8 |
25-Jan-2016 |
David Srbecky <dsrbecky@google.com> |
Revert "Add option to generate compressed backtrace info." This reverts commit 5fdcc3c931b70204fd8c491afa66f57f8428490f. Change-Id: I9c1f5aad6933a46af6717e3a90a51f76111f9c8a
uick/codegen_util.cc
|
5fdcc3c931b70204fd8c491afa66f57f8428490f |
19-Jan-2016 |
David Srbecky <dsrbecky@google.com> |
Add option to generate compressed backtrace info. Add flag --generate-mini-debug-info which generates LZMA compressed .symtab and .debug_frame, which are sufficient to print java backtraces in libunwind. If enabled, it increases the size of boot.oat by about 3.5%. Change-Id: Ic3c2ef7704c05fa328720c6781ca2a9b8e3935a3
uick/codegen_util.cc
|
3f67e692860d281858485d48a4f1f81b907f1444 |
15-Jan-2016 |
Aart Bik <ajcbik@google.com> |
Implemented BitCount as an intrinsic. With unit test. Rationale: Recognizing this important operation as an intrinsic has various advantages: (1) having the no-side-effects/no-throw allows for much more GVN/LICM/BCE. (2) Some architectures, like x86_64, provide direct support for this operation. Performance improvements on X86_64: CheckersEvalBench (32-bit bitboard): 27,210KNS -> 36,798KNS = + 35% ReversiEvalBench (64-bit bitboard): 52,562KNS -> 89,086KNS = + 69% Change-Id: I65d549b0469b7909b12c6611cdc34a8640a5751f
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
0021c310e2e613d6d180acda0d9d422dba8688b0 |
21-Jan-2016 |
Aart Bik <ajcbik@google.com> |
Merge "JIT: Fix incorrect CHECK"
|
91d65e024846717fce3572106cffe9b957b8902c |
19-Jan-2016 |
Roland Levillain <rpl@google.com> |
Fix various typos in ART's comments and string literals. Change-Id: I85d628055b1a61647a77fef730c9631c234e22a2
uick/dex_file_method_inliner.cc
|
c903b6af634927479915eaa9516d493eea23f911 |
18-Jan-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Move --dump-cfg and dump-cfg-append to CompilerOptions. It simplifies passing the option to the JIT. Change-Id: Iee1b722362899e5809ef97be90961e3dda1e16cc
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
51e55914d5b3045718e871401f096d059a2f7d31 |
10-Nov-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
JIT: Fix incorrect CHECK MirMethodLoweringInfo::Resolve() contains a CHECK that fails if the invoke being resolved is String.<init>(). This changes the invoke_type to kDirect, and then CHECKs that it is kVirtual, which doesn't work well. Change-Id: I2c3afa38533fb39f0b1260968c46b251088e75c8 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_method_info.cc
|
7b4199a5fa9f151fbf3af2a34f26d04215a1016c |
14-Jan-2016 |
Alex Light <allight@google.com> |
Merge "Support directly invoking interface default methods"
|
705ad49f353d3f90d8b63625aca2c2035bacdbef |
21-Sep-2015 |
Alex Light <allight@google.com> |
Support directly invoking interface default methods With the Java 8 Language one is allowed to directly call default interface methods of interfaces one (directly) implements through the use of the super keyword. We support this behavior through the invoke-super opcode with the target being an interface. We add 3 tests for this behavior. Currently only supports slow-path interpreter. Invoke-super is currently extremely slow. Bug: 24618811 Change-Id: I7e06e17326f7dbae0116bd7dfefca151f0092bd2
uick/quick_compiler.cc
uick/quick_compiler.h
|
998c21661b5074c293cae818d0ab7c44dcda3a66 |
21-Dec-2015 |
Calin Juravle <calin@google.com> |
Perform profile file analysis in dex2oat Dex2oat can accept now multiple profile files to drive a profile based compilation. --profile-file and --reference-profile-file speficy a pair of profile files which will be evaluated for significant differences before starting the compilation. If the difference is insignificant (according to some internal metric) the compilation is skipped and a message is logged. Multiple pairs of --profile-file and --reference-profile-file can be specified. This effectively enables multi user support since profiles for different users will be kept separately. --reference-profile-file can be left out, case in which the decision is solely based on --profile-file. If both flags are present, then their repetition should form unique pairs. If the compilation is performed and --reference-profile-file is given then its data is merged with the data from the corresponding --profile- file and saved back to the file. If no profile flags are given, dex2oat proceeds as before and compiles the dex files unconditionally. As part of this change - merge ProfileCompilationInfo and OfflineProfilingInfo under the same object. There was no use to keep them separate anymore. - SaveProfilingInfo now merges the data with what was in the file before instead of overwriting it. Bug: 26080105 Change-Id: Ia8c8b55587d468bca5179f78941854285426234d
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
e6d0d8de85f79c8702ee722a04cd89ee7e89aeb7 |
28-Dec-2015 |
Andreas Gampe <agampe@google.com> |
ART: Disable Math.round intrinsics The move to OpenJDK means that Android has caught up with the definition change of Math.round. Disable intrinsics. Bug: 26327751 Change-Id: I00dc6cfca12bd7c95e56a4ab76ffee707d3822dc
uick/arm64/fp_arm64.cc
|
095b1df3d20e806ed7ad8c545b03866c1561d1f6 |
28-Dec-2015 |
Andreas Gampe <agampe@google.com> |
Revert "Make Math.round consistent on arm64." This reverts commit 40041c9a38e3961d8675d117517719458a115520. Needs to be generalized to all platforms. Bug: 26327751 Change-Id: Iae8f1c8846d120d8e3e99b6eb87f3760bf793ec5
uick/arm64/fp_arm64.cc
|
40041c9a38e3961d8675d117517719458a115520 |
27-Dec-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Make Math.round consistent on arm64. OpenJDK seems to have a different rounding implementation than libcore. Temporarily disable the intrinsic. Test that fails: Assert.assertEquals(StrictMath.round(0.49999999999999994d), 1l); Assert.assertEquals(Math.round(0.49999999999999994d), 1l); bug:26327751 Change-Id: Iad2fb847e4a553b8c1f5031f772c81e7e4db9f4c
uick/arm64/fp_arm64.cc
|
dcdc85bbd569f0ee66c331b4219c19304a616214 |
04-Dec-2015 |
Jeff Hao <jeffhao@google.com> |
Dex2oat support for multiple oat file and image file outputs. Multiple changes to dex2oat and the runtime to support a --multi-image option. This generates a separate oat file and image file output for each dex file input. Change-Id: Ie1d6f0b8afa8aed5790065b8c2eb177990c60129
uick/dex_file_method_inliner.cc
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
9865bde5d822f56c4732214c2005dfcaa41f94cf |
21-Dec-2015 |
Mathieu Chartier <mathieuc@google.com> |
Rename NullHandle to ScopedNullHandle This makes it clearer that is invalid to do things like: Handle<T> h = ScopedNullHandle<T>(); Bug: 26233305 Change-Id: I6d8f54eae01ec2e901cb7043afa853ea77db79fe
ype_inference_test.cc
|
17077d888a6752a2e5f8161eee1b2c3285783d12 |
16-Dec-2015 |
Mark P Mendell <mark.p.mendell@intel.com> |
Revert "Revert "X86: Use locked add rather than mfence"" This reverts commit 0da3b9117706760e8722029f407da6d0297cc943. Fix a compilation failure that slipped in somehow. Change-Id: Ide8681cdc921febb296ea47aa282cc195f154049
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
0da3b9117706760e8722029f407da6d0297cc943 |
16-Dec-2015 |
Aart Bik <ajcbik@google.com> |
Revert "X86: Use locked add rather than mfence" This reverts commit 7b3e4f99b25c31048a33a08688557b133ad345ab. Reason: build error on sdk (linux) in git_mirror-aosp-master-with-vendor , please fix first art/compiler/optimizing/code_generator_x86_64.cc:4032:7: error: use of undeclared identifier 'codegen_' codegen_->MemoryFence(); Change-Id: I91f8542cfd944b7425d1981c35872dcdcb901e18
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
7b3e4f99b25c31048a33a08688557b133ad345ab |
19-Nov-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
X86: Use locked add rather than mfence Java semantics for memory ordering can be satisfied using lock addl $0,0(SP) rather than mfence. The locked add synchronizes the memory caches, but doesn't affect device memory. Timing on a micro benchmark with a mfence or lock add $0,0(sp) in a loop with 600000000 iterations: time ./mfence real 0m5.411s user 0m5.408s sys 0m0.000s time ./locked_add real 0m3.552s user 0m3.550s sys 0m0.000s Implement this as an instruction-set-feature lock_add. This is off by default (uses mfence), and enabled for atom & silvermont variants. Generation of mfence can be forced by a parameter to MemoryFence. Change-Id: I5cb4fded61f4cbbd7b7db42a1b6902e43e458911 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
226501b317e148aa8a8983355e85acb59c1eee83 |
11-Dec-2015 |
Calin Juravle <calin@google.com> |
Revert "Revert "Enable profiled guided compilation in dex2oat"" This reverts commit 2306ae0d412cc53cbf64877e4a8c37292dd907d8. Change-Id: I50640009c2fac88ea703812b76549a0e8a6d7584
ir_analysis.cc
ir_graph.h
uick/quick_compiler.cc
|
66278646b5b332142d1474703ac7d945dfbf7c78 |
11-Dec-2015 |
Calin Juravle <calin@google.com> |
Merge "Revert "Enable profiled guided compilation in dex2oat""
|
2306ae0d412cc53cbf64877e4a8c37292dd907d8 |
11-Dec-2015 |
Calin Juravle <calin@google.com> |
Revert "Enable profiled guided compilation in dex2oat" The test still have some flakiness in it which didn't reproduce locally. This reverts commit 500c9be1f261a8a95ae7a25f4f8084f43207f313. Change-Id: I132aff62bf03c2f926aafde6869707573bae9b36
ir_analysis.cc
ir_graph.h
uick/quick_compiler.cc
|
a79c717fd4de0d7361a51bee1e3cf4f2ff5f085a |
11-Dec-2015 |
Calin Juravle <calin@google.com> |
Merge "Enable profiled guided compilation in dex2oat"
|
376cbcc5163b3bb80811b9af6b67b6f8719db9f2 |
11-Dec-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Optimizing: Add direct calls to math intrinsics"
|
a4f1220c1518074db18ca1044e9201492975750b |
06-Aug-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
Optimizing: Add direct calls to math intrinsics Support the double forms of: cos, sin, acos, asin, atan, atan2, cbrt, cosh, exp, expm1, hypot, log, log10, nextAfter, sinh, tan, tanh Add these entries to the vector addressed off the thread pointer. Call the libc routines directly, which means that we have to implement the native ABI, not the ART one. For x86_64, that includes saving XMM12-15 as the native ABI considers them caller-save, while the ART ABI considers them callee-save. We save them by marking them as used by the call to the math function. For x86, this is not an issue, as all the XMM registers are caller-save. Other architectures will call Java as before until they are ready to implement the new intrinsics. Bump the OAT version since we are incompatible with old boot.oat files. Change-Id: Ic6332c3555c09393a17d1ad4daf62932488722fb Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
500c9be1f261a8a95ae7a25f4f8084f43207f313 |
25-Nov-2015 |
Calin Juravle <calin@google.com> |
Enable profiled guided compilation in dex2oat - add parsing of the profile info saved during JIT. - don't compile methods which are not part of the profile info. - delete old profile hooks. - add test for reading/writing profile. The test is disable in: * interpreter modes: the test needs JIT. * no-dex2oat/no-prebuild: we only save profiling info for the primary oat file. In these modes we don't create oat files and thus nothing is saved. Bug:26080105 Change-Id: Ifdc63dc9d4b537fc79e54c3edc3ae3a462bc30fb
ir_analysis.cc
ir_graph.h
uick/quick_compiler.cc
|
53e32d14d7a51198c6ef09120c15bafdd1d055c2 |
10-Dec-2015 |
Andreas Gampe <agampe@google.com> |
ART: Refactor verifier callbacks Change the return type of MethodVerified to void. It was never used anyways. Remove the callbacks calls from the core of the verifier (Verify()). Instead, make the convenience functions do the work, and add a parameter to supply the callback so that the verifier becomes independent of the Runtime-stored one. Fix up calls that now need to provide a callback, but leave places that only run the verifier to get metadata (e.g., register type data, lock state) without callback. This avoids callback calls when in JIT mode. Bug: 26075442 Change-Id: I2c270f01e4de088771d4d4b19dae4f07d77640f0
uick_compiler_callbacks.cc
uick_compiler_callbacks.h
erification_results.cc
erification_results.h
|
9fdb129b90c9a985f606f9d95627b4852171dc11 |
02-Dec-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Enable profiled guided compilation in dex2oat" Test has flakes: +art F 30865 30865 art/runtime/java_vm_ext.cc:466] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0x80 +art F 30865 30865 art/runtime/java_vm_ext.cc:466] string: '��gy�' +art F 30865 30865 art/runtime/java_vm_ext.cc:466] input: '<0x80> 0xd8 0x67 0x79 0x8e 0x7f' +art F 30865 30865 art/runtime/java_vm_ext.cc:466] in call to NewStringUTF +art F 30865 30865 art/runtime/java_vm_ext.cc:466] from java.lang.String Main.getProfileInfoDump(java.lang.String, java.lang.Class, java.lang.Class) This reverts commit 27e17fd81cc30e16e86c9c15498cae7f920c9dfe. Change-Id: Id224b5970c3620c4c71fc0d39ed4a2e4755e5f29
ir_analysis.cc
ir_graph.h
uick/quick_compiler.cc
|
27e17fd81cc30e16e86c9c15498cae7f920c9dfe |
25-Nov-2015 |
Calin Juravle <calin@google.com> |
Enable profiled guided compilation in dex2oat - add parsing of the profile info saved during JIT - don't compile methods which are not part of the profile info. - delete old profile hooks Change-Id: I45a13c3aeb36265d335e57cd160b9ea0fab3cbb5
ir_analysis.cc
ir_graph.h
uick/quick_compiler.cc
|
fb8464ae5f5194dc16278e528cfcbff71498c767 |
02-Nov-2015 |
Mingyao Yang <mingyao@google.com> |
Revert "Revert "Enable store elimination for singleton objects."" This reverts commit 55d02cf056f993aeafebd54e7b7c68c7a48507c9, and makes the following change: Currently we leverage loop side effects to decide whether heap values are killed by the loop. Stores need to be kept if heap values may be killed by loops and the corresponding loads cannot be eliminated. Similar thing need to be done for each predecessor when we merge predecessor heap values. To do that, the HInstanceFieldSet instruction itself is put in the heap value array instead of the value of the store instruction. The store instruction may be added to possibly_removed_stores_ first, but can later be removed from possibly_removed_stores_ when it's found out that the store needs to be kept due to merging/loop side effects. Change-Id: I4f7bb1960f7b47240873e00ff1adac46fc102a02
uick/gen_common.cc
|
0d5a281c671444bfa75d63caf1427a8c0e6e1177 |
13-Nov-2015 |
Roland Levillain <rpl@google.com> |
x86/x86-64 read barrier support for concurrent GC in Optimizing. This first implementation uses slow paths to instrument heap reference loads and GC root loads for the concurrent copying collector, respectively calling the artReadBarrierSlow and artReadBarrierForRootSlow (new) runtime entry points. Notes: - This implementation does not instrument HInvokeVirtual nor HInvokeInterface instructions (for class reference loads), as the corresponding read barriers are not stricly required with the current concurrent copying collector. - Intrinsics which may eventually call (on slow path) are disabled when read barriers are enabled, as the current slow path infrastructure does not support this case. - When read barriers are enabled, the code generated for a HArraySet instruction always go into the array set slow path for object arrays (delegating the operation to the runtime), as we are lacking a mechanism to keep a temporary register live accross a runtime call (needed for the instrumentation of type checking code, which requires two successive read barriers). Bug: 12687968 Change-Id: I14cd6107233c326389120336f93955b28ffbb329
uick/quick_compiler.cc
|
9139e008abe30b7beaf4afd6533228a1dd9b202c |
10-Oct-2015 |
Alex Light <allight@google.com> |
Correct exception behavior for default methods Default methods are defined to throw an IncompatibleClassChangeError (ICCE) when they are called and there is no "best" implementation. Previously we would simply throw an ICCE during class loading as soon as we noticed that this would happen if called. This makes us wait until we actually attempt to execute the method. Furthermore, this allows us to use other, non-conflicting, methods on the object as normal. Furthermore, this makes us correctly throw AbstractMethodErrors in cases where all default implementations of a method are overridden by abstract declarations. Adds 3 tests for this new behavior. Bug: 24618811 Change-Id: Id891958a81f9b3862b2ce5919636aabef7d3422e
erified_method.cc
|
da5b28adf5ba013f0784578a8b97577782e23d95 |
05-Nov-2015 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Add basic image writer support for app images"" No changes, bug fixed in: https://android-review.googlesource.com/#/c/180886/ Bug: 22858531 This reverts commit 4b018565e57c3349a3c1b5ec8ac9dae261c5e00b. Change-Id: I86d9c2b55d535d803c6e1b3b8b4836bf6ff077e5
uick/arm64/call_arm64.cc
|
4b018565e57c3349a3c1b5ec8ac9dae261c5e00b |
05-Nov-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Add basic image writer support for app images" interpreter and jit tests fail. Bug: 22858531 This reverts commit c033474cfbfe1e963c07fa5c38aed02e35ed6f91. Change-Id: Ic12a3e2a1908ac0db52d21a0b44b2508c88b2585
uick/arm64/call_arm64.cc
|
c033474cfbfe1e963c07fa5c38aed02e35ed6f91 |
02-Nov-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add basic image writer support for app images Needed to handle references from app image -> boot image. Generate app images for tests to enable some testing. Bug: 22858531 Change-Id: I1af98b6c4dfcb3a147fb5b0dea64aa4946c7ce57
uick/arm64/call_arm64.cc
|
f31f9739e6cb06298604f5fb723db2ab9a8f2962 |
30-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Refactor code so that JIT can parse compiler options."
|
abbb0f76b07417f13f712f54d5afddb72e3b9931 |
29-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Refactor code so that JIT can parse compiler options. Currently only the CompilerOptions class. We should also do it for the CompilerDriver options. This will fix the flakiness seen on jdwp testing, as the debuggable flag was not passed to the compiler. Change-Id: I4218dd5928c9f4fe2d6191ab11e5598e7cf84bcf
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
9507fa2c9545156747a5eb248bc1af3159bfd8c8 |
29-Oct-2015 |
Mathieu Chartier <mathieuc@google.com> |
Change a few places to use string version of GetTypeId GetTypeId is about 20% faster than GetStringId + integer GetTypeID since it does less binary searches. Change-Id: I876c4ac89ab206acca217b2287b0197ef2e408c2
uick/dex_file_method_inliner.cc
|
55d02cf056f993aeafebd54e7b7c68c7a48507c9 |
29-Oct-2015 |
Andreas Gampe <agampe@google.com> |
Revert "Enable store elimination for singleton objects." This reverts commit 7f43a3d48fc29045875d50e10bbc5d6ffc25d61e. Fails booting. Bug: 25357772 Change-Id: Ied19536f3ce8d81e76885cb6baed4853e2ed6714
uick/gen_common.cc
|
7f43a3d48fc29045875d50e10bbc5d6ffc25d61e |
28-Oct-2015 |
Mingyao Yang <mingyao@google.com> |
Enable store elimination for singleton objects. Enable store elimination for singleton objects. However for finalizable object, don't eliminate stores. Also added a testcase. Change-Id: Icf991e7ded5b490f55f580ef928ece5c45e89902
uick/gen_common.cc
|
35831e8bfa1c0944d4c978d99c4c5b9577945170 |
11-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Reduce memory used by CompiledMethods. Use LengthPrefixedArray<>s instead of SwapVector<>s to store CompiledMethod data and get rid of the unnecessary members of CompiledMethod to reduce dex2oat memory usage. Refactor the deduplication from CompilerDriver to a new class. Use HashSet<> instead of std::set<> for the DedupeSet<> to further decrease the memory usage and improve performance. This reduces the dex2oat memory usage when compiling boot image on Nexus 5 (with Optimizing, -j1) by ~6.75MiB (5%). This also reduces the compile time by ~2.2% (~1.6% dex2oat time; with Optimizing, without -j). Change-Id: I974f1f5e58350de2bf487a2bca3907fa05fb80ea
ex_to_dex_compiler.cc
uick/codegen_util.cc
uick/ralloc_util.cc
|
e5d80f83ae53792bc1eebd4e33e4e99f7c031b0c |
16-Oct-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move ArenaBitVector into the runtime Motivation is using arenas in the verifier. Bug: 10921004 Change-Id: I3c7ed369194b2309a47b12a621e897e0f2f65fcf
vn_dead_code_elimination.cc
ir_graph.h
|
58554b7de4b437ddef7ff550e62c8ec0b16f9264 |
21-Oct-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix left-shift of negative numbers Shifting negative numbers is undefined. Change-Id: I0c32a3fcf372eae74507a5f2383edbfaf5c6830c
ocal_value_numbering_test.cc
|
524e7ea8cd17bad17bd9f3e0ccbb19ad0d4d9c02 |
16-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Remove ArtCode. - Instead use OatQuickMethodHeader. - Various cleanups now that we don't have all those ArtMethod -> ArtCode -> OatQuickMethodHeader indirections. As a consequence of this cleanup, exception handling got a bit faster. ParserCombinators benchmark (exception intensive) on x64: (lower is better) Before: ParserCombinators(RunTime): 1062500.0 us. After: ParserCombinators(RunTime): 833000.0 us. Change-Id: Idac917b6f1b0dc254ad68fb3781cd61bccadb0f3
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
|
4b8f1ecd3aa5a29ec1463ff88fee9db365f257dc |
26-Aug-2015 |
Roland Levillain <rpl@google.com> |
Use ATTRIBUTE_UNUSED more. Use it in lieu of UNUSED(), which had some incorrect uses. Change-Id: If247dce58b72056f6eea84968e7196f0b5bef4da
ir_graph.cc
ass.h
ass_driver.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
erification_results.cc
|
eb7c144a6aff7da673ba53d501c46f00311d4d7f |
31-Aug-2015 |
Alex Light <allight@google.com> |
Add initial default method support to Art This commit starts the process of adding default methods and their associated pieces to ART. This adds full support for calling default methods using invoke-interface and invoke-virtual on objects implementing the interfaces. Verifier is changed to allow this when the runtime is started with -Xexperimental:default-methods. This also adds support for defining and calling static methods on interface classes with invoke-static. Directly calling overridden default methods using invoke-super is not yet supported. This adds 5 new run-tests for this functionality. Bug: 24618811 Change-Id: I35ca800d99d3329348b277789b70ceeeba6e7f03
uick/quick_compiler.cc
|
439ffb8d4fa25b4ac7518a3bd5cbc3f3769ead48 |
12-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Intrinsify System.arraycopy."
|
ee3cf0731d0ef0787bc2947c8e3ca432b513956b |
06-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Intrinsify System.arraycopy. Currently on x64, will do the other architectures in different changes. Change-Id: I15fbbadb450dd21787809759a8b14b21b1e42624
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
4bf9012582f5f9cd16fe68fa8585848016caecc6 |
08-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Do not include endian.h on Mac. Change-Id: I1bb28bd49bd1847c45e93bf2b06c643be6e09926
uick/codegen_util.cc
|
ec7802a102d49ab5c17495118d4fe0bcc7287beb |
01-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
Add DCHECKs to ArenaVector and ScopedArenaVector. Implement dchecked_vector<> template that DCHECK()s element access and insert()/emplace()/erase() positions. Change the ArenaVector<> and ScopedArenaVector<> aliases to use the new template instead of std::vector<>. Remove DCHECK()s that have now become unnecessary from the Optimizing compiler. Change-Id: Ib8506bd30d223f68f52bd4476c76d9991acacadc
uick/codegen_util.cc
uick/lazy_debug_frame_opcode_writer.h
|
7bda3b600d74c9a5746840ebb8534443e486615a |
07-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "Quick: Work around large frame sizes for x86_64." Instead, move the MEMORY_TOOL_MAKE_* calls out-of-line. Bug: 24729377 This reverts commit d4cf1e4fe0624b99df22ed5556dc1d042b32a7e0. Change-Id: I9bccc8bd4a691a2d018b84de8b95bc68fafad4e1
lobal_value_numbering.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ir_analysis.cc
|
d4cf1e4fe0624b99df22ed5556dc1d042b32a7e0 |
07-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Work around large frame sizes for x86_64. Bug: 24729377 Change-Id: Id608aabad60fb7f1a1450a02444bddfb0eb008a6
lobal_value_numbering.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ir_analysis.cc
|
edbff6f51abc2bfb43be78b9a1beaa382c498a1f |
02-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Use an iterative way in DoDFSPreOrderSSARename()"
|
e460d1df1f789c7c8bb97024a8efbd713ac175e9 |
29-Sep-2015 |
Calin Juravle <calin@google.com> |
Revert "Revert "Support unresolved fields in optimizing" The CL also changes the calling convetion for 64bit static field set to use kArg2 instead of kArg1. This allows optimizing to keep the asumptions: - arm pairs are always of form (even_reg, odd_reg) - ecx_edx is not used as a register on x86. This reverts commit e6f49b47b6a4dc9c7684e4483757872cfc7ff1a1. Change-Id: I93159917565824084abc96775f31be1a4249f2f3
uick/gen_invoke.cc
|
a661d7d12ce5736cab1fe1d3b3d559e37b902b5b |
13-Aug-2015 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Use an iterative way in DoDFSPreOrderSSARename() This patch changes the recursion to an iterative implementation. It tries to solve a stack overflow issue when installing Facebook on some devices. The recursion reaches more than 2600 levels when compiling "java.util.Map com.facebook.graphql.model.GraphQLNodeDeserializer.a()". Change-Id: Ibe74359526e10fe6afa833e3bb46b6138aaf5435 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
sa_transformation.cc
|
97a87ec836ff8f480af1166d05b92dad1c5daadd |
29-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Avoid shifting -1 left (undefined behavior). C++11 clarifies that shifting left a negative value is undefined behavior. Fix legacy code that shifted -1 left. Bug: 24489455 Change-Id: Iaf4f26c7cde175f039b6a2cad12af6f0b1624fba
uick/codegen_util.cc
|
6918bf13eb855b3aa8ccdddda2d27ae8c60cec56 |
28-Sep-2015 |
Igor Murashkin <iam@google.com> |
Revert "Revert "lambda: Experimental support for capture-variable and liberate-variable"" This reverts commit 7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4. Change-Id: If806ce5c6c5e96fdb2c3761dee096f74e7e5b001
uick/quick_compiler.cc
|
7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4 |
27-Sep-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "lambda: Experimental support for capture-variable and liberate-variable" Test fails. This reverts commit b72123440d8541362ebdb131436f9dbdda5fd329. Change-Id: Ic9ed92f8c826d8465eb36b746dc44af05caf041c
uick/quick_compiler.cc
|
b72123440d8541362ebdb131436f9dbdda5fd329 |
25-Sep-2015 |
Igor Murashkin <iam@google.com> |
lambda: Experimental support for capture-variable and liberate-variable Supports capturing/liberating any primitive variables. No support for capturing objects/lambdas yet since they would both need GC changes to track roots through closures. Change-Id: Ibfb68bfe4c579dbf93823aac4c0e6ac8f6360c5d
uick/quick_compiler.cc
|
87000a948524cba7538ccc5438f6a9ecbd4e347e |
24-Aug-2015 |
Calin Juravle <calin@google.com> |
Add option to append to the cfg dump. This makes life easier when verifying tests with unresolved classes (which call dex2oat at rutime). Change-Id: I7985b2b7c0f343462e03a26b8395297c810b1d95
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
9af47e27674e70e7f82315d39de5bc659c4e1b83 |
14-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Optimizing: Tag basic block allocations with their source."
|
2d06e08d25bbf8eff1de945736a60810009e59ad |
11-Sep-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix Quick-style LR vs PC core spill mask bug"
|
9ee23f4273efed8d6378f6ad8e63c65e30a17139 |
23-Jul-2015 |
Scott Wakeling <scott.wakeling@linaro.org> |
ARM/ARM64: Intrinsics - numberOfTrailingZeros, rotateLeft, rotateRight Change-Id: I2a07c279756ee804fb7c129416bdc4a3962e93ed
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
501fd635a557645ab05f893c56e1f358e21bab82 |
11-Sep-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix Quick-style LR vs PC core spill mask bug It's always been a bug that Quick marked PC as spilled instead of LR. The root cause was a mutation of the spill mask at frame exit, when LR is being restored into PC to return. A local should have been used to keep the actual spill mask safe and sound. This has only worked because nobody ever uses LR, even after long jumps for exception dispatch. However, single-frame deoptimization needs this to work, and I'd rather fix this than being forced to have machine-specific fixups. Also fix in optimizing, and bump the oat version. Change-Id: Ib032a533408bf464097fc96dcbfc5b6a68bf59a1
uick/arm/call_arm.cc
|
6058455d486219994921b63a2d774dc9908415a2 |
03-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Optimizing: Tag basic block allocations with their source. Replace GrowableArray with ArenaVector in HBasicBlock and, to track the source of allocations, assign one new and two Quick's arena allocation types to these vectors. Rename kArenaAllocSuccessor to kArenaAllocSuccessors. Bug: 23736311 Change-Id: Ib52e51698890675bde61f007fe6039338cf1a025
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization_test.cc
ype_inference_test.cc
|
957fb8930766ae422568e7b1b816159a9e9bc18c |
04-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Move DexCache arrays to native."
|
897ce64153e4758663e464fb5fb339f9a7b496c8 |
04-Sep-2015 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Reduce how often we call FindDexCache"
|
736b560f2d2c89b63dc895888c671b5519afa4c8 |
02-Sep-2015 |
Mathieu Chartier <mathieuc@google.com> |
Reduce how often we call FindDexCache Before host boot.oat -j4 optimizing compile: real 1m17.792s user 3m26.140s sys 0m8.340s After: real 1m12.324s user 3m22.718s sys 0m8.320s Change-Id: If18e9e79e06cdf1676692e5efacb682bf93889c3
ex_to_dex_compiler.cc
ir_analysis.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_optimization.cc
uick/quick_compiler.cc
uick/quick_compiler.h
ype_inference_test.cc
|
05792b98980741111b4d0a24d68cff2a8e070a3a |
03-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Move DexCache arrays to native. This CL has a companion CL in libcore/ https://android-review.googlesource.com/162985 Change-Id: Icbc9e20ad1b565e603195b12714762bb446515fa
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/int_x86.cc
|
145acc5361deb769eed998f057bc23abaef6e116 |
03-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "Optimizing: Tag basic block allocations with their source." Reverting so that we can have more discussion about the STL API. This reverts commit 91e11c0c840193c6822e66846020b6647de243d5. Change-Id: I187fe52f2c16b6e7c5c9d49c42921eb6c7063dba
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization_test.cc
ype_inference_test.cc
|
91e11c0c840193c6822e66846020b6647de243d5 |
02-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Optimizing: Tag basic block allocations with their source. Replace GrowableArray with ArenaVector in HBasicBlock and, to track the source of allocations, assign one new and two Quick's arena allocation types to these vectors. Rename kArenaAllocSuccessor to kArenaAllocSuccessors. Bug: 23736311 Change-Id: I984aef6e615ae2380a532f5c6726af21015f43f5
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization_test.cc
ype_inference_test.cc
|
f9f6441c665b5ff9004d3ed55014f46d416fb1bb |
02-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
Optimizing: Tag Arena allocations with their source. This adds the ability to track where we allocate memory when the kArenaAllocatorCountAllocations flag is turned on. Also move some allocations from native heap to the Arena and remove some unnecessary utilities. Bug: 23736311 Change-Id: I1aaef3fd405d1de444fe9e618b1ce7ecef07ade3
ex_to_dex_compiler.cc
ir_graph.h
uick/codegen_util.cc
|
673ed3d8aedc5462a47ded827c99f35d46525457 |
28-Aug-2015 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Change dex caches to be weak roots"" This reverts commit 81a9087f0df0518c39405b7d18ba5858a6d8b77b. Boot.oat creation time goes from 4.7s to 4.9s on host due to extra locking. Will try to improve this in another CL. Bug: 23602225 Bug: 22720414 Change-Id: I7e25b75cfb63faa196c7b0f60e46cce50bf12021
ir_method_info.cc
|
0760a81257fa427646c309500d603194009265ef |
27-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Propagate verifier failure types to the compilers Add a bit-set encoding of seen failure types to the verifier and make it available. Store this in VerifiedMethod, so that compilers can inspect it and make choices based on failures. Rewrite the current punting of runtime-throw errors to be at the compiler-driver level. Bug: 23502994 Change-Id: I1cfc7cbdf2aec1f14ba18f0169e432ba4ae16883
uick/quick_compiler.cc
erified_method.cc
erified_method.h
|
ff73498a5539d87424a964265e43765e788aec44 |
24-Aug-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
Revert "Revert "[MIPS] Use hard float calling convention for managed code"" This reverts commit 7fee84c087e0f903e7d43bef180df047db1c8051. Fixed issue with temporary registers on Mips32r6. Change-Id: I93018927e6a6036cff2d55e6cda66d3212a4316b
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
|
7fee84c087e0f903e7d43bef180df047db1c8051 |
21-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
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
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
|
a29449dcf57c57fe0876f51367985477317cc557 |
22-Jul-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
[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
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
|
581550137ee3a068a14224870e71aeee924a0646 |
19-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
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
uick/codegen_util.cc
|
d9c4d2e9a9bc01fd82a895091126406081fafb1f |
19-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Revert "Optimizing: Better invoke-static/-direct dispatch.""
|
b2c431e80e92eb6437788cc544cee6c88c3156df |
19-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "Optimizing: Better invoke-static/-direct dispatch." Reverting due to failing ndebug tests. This reverts commit 9b688a095afbae21112df5d495487ac5231b12d0. Change-Id: Ie4f69da6609df3b7c8443412b6cf7f5c43c2c5d9
uick/codegen_util.cc
|
464581adaf895d14f73db3d768729f0c9c6f5366 |
19-Aug-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Optimizing: Better invoke-static/-direct dispatch."
|
9b688a095afbae21112df5d495487ac5231b12d0 |
06-May-2015 |
Vladimir Marko <vmarko@google.com> |
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
uick/codegen_util.cc
|
f71ad9ede9ae322a897e8fe407208dc35c5dee65 |
18-Aug-2015 |
Alex Light <allight@google.com> |
Merge "Svelter libart-compiler"
|
50fa993d67f8a20322c27c1a77e7efcf826531fc |
11-Aug-2015 |
Alex Light <allight@google.com> |
Svelter libart-compiler Added new environment variable ART_{TARGET,HOST}_CODEGEN_ARCHS which may be set to 'all', 'svelte' or a space separated list of architectures. When compiled with ART_{TARGET,HOST}_CODEGEN_ARCHS='all' (the default value) dex2oat will be able to generate output for all supported architectures. When compiled with ART_TARGET_CODEGEN_ARCHS='svelte' only the architectures of the TARGET will be included. When ART_HOST_CODEGEN_ARCHS='svelte' all architectures the target includes and the host architectures will be included on the host dex2oat. If a list of architectures is given only those will be included. Change-Id: I87f4ad0131ab1b37544d8799e947ce4733b6daec
uick/quick_compiler.cc
|
151ab8d096be02b04391fd32460a31ee60ae2b0a |
15-Aug-2015 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "ART: DCHECK zero case for CLZ/CTZ"" This reverts commit 4318d91ea4be673d4deba39d33ac4718d77986a7. Fix up the lit=-1 case in the arm32 Quick backend; add test case. Change-Id: I8d0861133db950090ee959f532ede1448683dfa9
uick/arm/int_arm.cc
|
7c2af0d873b7033adccf8fa7adf259166c53d369 |
13-Aug-2015 |
Roland Levillain <rpl@google.com> |
Merge "Remove unnecessary `explicit` qualifiers on constructors."
|
7da072feb160079734331e994ea52760cb2a3243 |
13-Aug-2015 |
agicsaki <agicsaki@google.com> |
Structure for String.Equals intrinsic Added structure for implementing String.Equals intrinsics. There is no functional change at this point- the intrinsic is marked as unimplemented for all instruction sets and compilers. Bug: 21481923 Change-Id: Ic2a1e22a113ff6091581126f12e926478c011340
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
3887c468d731420e929e6ad3acf190d5431e94fc |
12-Aug-2015 |
Roland Levillain <rpl@google.com> |
Remove unnecessary `explicit` qualifiers on constructors. Change-Id: Id12e392ad50f66a6e2251a68662b7959315dc567
ompiler_ir.h
ir_field_info.h
ir_graph.h
ass_driver_me.h
ass_driver_me_opts.h
ass_driver_me_post_opt.h
uick/lazy_debug_frame_opcode_writer.h
|
548a3ce2625bc1da12034411036e5a94da183696 |
12-Aug-2015 |
Roland Levillain <rpl@google.com> |
Merge "[MIPS] Avoid using odd numbered fp registers"
|
2f2f17399f6bdfc5ec94a875152c31ef79620520 |
09-Aug-2015 |
Serguei Katkov <serguei.i.katkov@intel.com> |
ART: Fix Quick's DCE+GVN DCE_GVN does not take into account the following case: mov a, b ... mov c, b when optimization tries to replace a with c it must ensure that for all uses of a there is no new definition of c before use. Otherwise that use will incorrectly substituted with new c instead of original b. Bug: 23102860 Change-Id: I48ee0bd4386419b0f9c814c21b3537a392518cd1 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
|
fc8156a3df88e259c892d50bf23f7c4f11531844 |
28-Jul-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
[MIPS] Avoid using odd numbered fp registers Don't use odd numbered fp registers for single precision data on MIPS32r6 (64-bit FPU). Bug: 23050326 Change-Id: I35cc19df091149773411e2336b01c170929376bc
uick/mips/target_mips.cc
|
067f1ed7816cf4eb5d6258ca31b387ddb2073ab7 |
07-Aug-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove TODO in BitVector Refactor the BitVector constructor: split it up to remove the possibility to provide contradicting parameters, and add a custom copying constructor. Change-Id: Ie943f279baa007db578aea0f2f33fa93311612ee
vn_dead_code_elimination.cc
|
5eb0d38dabda4d17a315c557f07f457308d28fa7 |
23-Jul-2015 |
Andreas Gampe <agampe@google.com> |
ART: Wire up DexToDexCompiler without extern The extern declaration actually had the wrong signature, a parameter was missing, and we never noticed. Remove the function field and extern. Add a header for the compiler. Use the header file. Change-Id: Ia4d4dd86211da6045709a45c7bf8430471d1b62b
ex_to_dex_compiler.cc
ex_to_dex_compiler.h
|
611d3395e9efc0ab8dbfa4a197fa022fbd8c7204 |
10-Jul-2015 |
Scott Wakeling <scott.wakeling@linaro.org> |
ARM/ARM64: Implement numberOfLeadingZeros intrinsic. Change-Id: I4042fb7a0b75140475dcfca23e8f79d310f5333b
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
aabdf8ad2e8d3de953dff5c7591e7b3df4d4f60b |
03-Aug-2015 |
Roland Levillain <rpl@google.com> |
Revert "Optimizing String.Equals as an intrinsic (x86)" Reverted as it breaks the compilation of boot.{oat,art} on x86 (although this CL may not be the culprit, as the issue seems to come from Optimizing's register allocator). This reverts commit 8ab7bd6c8b10ad58758c33a1dc9326212bd200e9. Change-Id: If7c8b6258d1e690f4d2a06bcc82c92563ac6cdef
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
8ab7bd6c8b10ad58758c33a1dc9326212bd200e9 |
27-Jul-2015 |
agicsaki <agicsaki@google.com> |
Optimizing String.Equals as an intrinsic (x86) The third implementation of String.Equals. I added an intrinsic in x86 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 character by character. Interesting Benchmarking Values: Optimizing Compiler on Nexus Player Intrinsic 15-30 Character Strings: 177 ns Original 15-30 Character Strings: 275 ns Intrinsic Null Argument: 59 ns Original Null Argument: 137 ns Intrinsic 100-1000 Character Strings: 1812 ns Original 100-1000 Character Strings: 6334 ns Bug: 21481923 Change-Id: Ia386e19b9dbfe0dac688b20ec93d8f90f67af47e
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
c60e1b755c5632dfeb04c333489ede52ee5c945f |
30-Jul-2015 |
Andreas Gampe <agampe@google.com> |
ART: Use __ANDROID__ instead of HAVE_ANDROID_OS Use the proper define. Change-Id: I71e291ac25f5d5f0187ac9b6ef2d6872f19e6085
uick/quick_cfi_test.cc
|
0941b9d48a9a8c6d80a1af7a0d0fc9f80fe2b9a1 |
29-Jul-2015 |
Calin Juravle <calin@google.com> |
Fix gtests. Change-Id: I19fd46ed96b4f620209533c96faa18d1077b004b
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
f7efc9ef90c38212f8c4fbece99080f784a53181 |
23-Jul-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Fix Quick/Optimizing suspend check assumption mismatch."
|
d29e8487ff1774b6eb5f0e18d854415c1ee8f6b0 |
22-Jul-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Fix Quick/Optimizing suspend check assumption mismatch. Quick's SuspendCheckElimination (SCE) expects that every method contains a suspend check and it eliminates suspend checks in loops containing an invoke. Optimizing eliminates the suspend check from leaf methods, so the combination of a Quick-compiled loop calling an Optimizing-compiled leaf method can lead to missing suspend checks and potentially leading to ANRs. Enable Quick's kLeafOptimization flag to remove suspend checks from leaf methods and disable Quick's SCE. This aligns the suspend check placement for the two backends and avoids the broken combination. Currently, all methods containing a try-catch are compiled with Quick, so it's relatively easy to create a regression test. However, this test will not be valid when Optimizing starts supporting try-catch. Bug: 22657404 Change-Id: I3bc40bf3f5c1e7d18704d1547b139e939950b770
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
|
90443477f9a0061581c420775ce3b7eeae7468bc |
17-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move to newer clang annotations Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
ir_field_info.h
ir_method_info.h
uick/dex_file_method_inliner.h
uick/quick_compiler.h
uick_compiler_callbacks.h
erification_results.h
erified_method.h
|
cced6ad152cf8ec13f38f2210c1b8445919232d3 |
16-Jul-2015 |
Roland Levillain <rpl@google.com> |
Merge "Use (D)CHECK_ALIGNED more."
|
8f861e399c96abd8f1bc7c8c585d53b0904f371a |
16-Jul-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: DCE should know that array-length can throw NPE"
|
b016c6dd3c30b04104a0a43dc294ce93e5f63874 |
14-Jul-2015 |
Serguei Katkov <serguei.i.katkov@intel.com> |
ART: DCE should know that array-length can throw NPE array-length can throw NPE so it should be taking into account. Bug: 22521944 Change-Id: I6f961560ccbbf81f57f1c597828f2ee18e2c3054 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
|
14d90579f013b374638b599361970557ed4b3f09 |
16-Jul-2015 |
Roland Levillain <rpl@google.com> |
Use (D)CHECK_ALIGNED more. Change-Id: I9d740f6a88d01e028d4ddc3e4e62b0a73ea050af
uick/arm/assemble_arm.cc
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/mips/utility_mips.cc
uick/x86/utility_x86.cc
|
c04c800e7bda94abfadc8c2d30f58c50b261b612 |
14-Jul-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Revert "Revert "Make dex2dex return a CompiledMethod after quickening."""" This reverts commit ed6195a514e3253576af27ea9ba13038509d29ac. Change-Id: Icb58854301e8982147cdebe3edf2e0d9e0a63a56
ex_to_dex_compiler.cc
|
ed6195a514e3253576af27ea9ba13038509d29ac |
13-Jul-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Revert "Make dex2dex return a CompiledMethod after quickening.""" Breaks again in some configurations I don't fully understand yet. This reverts commit f075879649686e59b7a9065c5a061dbfdcdfbecc. Change-Id: I0ac5533825e40b06462ee69b2740e4a96fb5c582
ex_to_dex_compiler.cc
|
f075879649686e59b7a9065c5a061dbfdcdfbecc |
13-Jul-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Make dex2dex return a CompiledMethod after quickening."" This reverts commit 327c5ed30a1f016ef3e1bb26ea7b4abd34eb63b9. Change-Id: I0dc5d92e5d1ef98830fbd3c40ec59a93f9e0422d
ex_to_dex_compiler.cc
|
327c5ed30a1f016ef3e1bb26ea7b4abd34eb63b9 |
13-Jul-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Make dex2dex return a CompiledMethod after quickening." Build failures on arm/arm64. This reverts commit 6920703c8eae0d90528ea09945e742582b6f8198. Change-Id: I0dd5426610150937dac6e4d9dd9aa759bdf7fca4
ex_to_dex_compiler.cc
|
6920703c8eae0d90528ea09945e742582b6f8198 |
09-Jul-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Make dex2dex return a CompiledMethod after quickening. This is the starting piece of pushing more verification and dex2dex data into an .oat file, to lower the dependency on verification results at runtime. Change-Id: I8e1b49a0207714bc5b84d1f606806718c5c7fb69
ex_to_dex_compiler.cc
|
c7d5ae363bc43ebba0f21c6ee4a2164dfbb209a9 |
08-Jul-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Release inputs in Long.reverse intrinsic in x86"
|
575422fa5be7389bdaff5e2d25dd87b1d2d4de85 |
07-Jul-2015 |
Andreas Gampe <agampe@google.com> |
ART: Release inputs in Long.reverse intrinsic in x86 In the worst case we are using two temps each for input and output. Then we do not have a temp left over for the swap operations. The input is dead, however, after the first swap. So try to release it (a no-op if it isn't actually a temp). Bug: 22324327 Change-Id: I1fc50159afdad14160e34abeaf4670958171d6b2
uick/x86/int_x86.cc
|
185a5586c8b796e770e9b4b7ac2befa8ccdaca7e |
06-Jul-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix opsize in LoadArgDirect If the destination register is a reference, use kReference for the op size. Bug: 22244733 Change-Id: Idf52f2ee4c65b5dc41cb66257d95281dc6f32255
uick/mir_to_lir.cc
|
22bb5a2ebc1e2724179faf4660b2735dcb185f21 |
03-Jul-2015 |
Douglas Leung <douglas.leung@imgtec.com> |
Add implicit null pointer and stack overflow checks for Mips. Bug: 21555893 Change-Id: I2a995be128a5603d08753c14956dd8c8240ac63c
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
|
4d02711ea578dbb789abb30cbaf12f9926e13d81 |
01-Jul-2015 |
Roland Levillain <rpl@google.com> |
Implement heap poisoning in ART's Optimizing compiler. - Instrument ARM, ARM64, x86 and x86-64 code generators. - Note: To turn heap poisoning on in Optimizing, set the environment variable `ART_HEAP_POISONING' to "true" before compiling ART. Bug: 12687968 Change-Id: Ib3120b38cf805a8a50207a314b9ccc90c8d93740
uick/quick_compiler.cc
|
2b252dc15995a708aead33aab6d307205d860a88 |
01-Jul-2015 |
Andreas Gampe <agampe@google.com> |
Merge "Quick: Fix a DCHECK to take type conflicts into account."
|
5e6926cf67b50bcab56dc244e09b6f8f608d4ca2 |
27-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix a DCHECK to take type conflicts into account. Bug: 21865466 Change-Id: I010c7058b5a58bea1ec61af5bd6a12c2eb8de1b4
uick/gen_loadstore.cc
|
f7e7327d7a873d21aaae01471f46a4d64d65433b |
27-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Disable GVN, DCE and LVN for type conflicts. Bug: 22136903 Change-Id: I657d4b5e623696e1264c2c6c9ad4e7fd466d759c
ype_inference.cc
|
c83329952b4a313e747c8835a73699e2cae5a6e2 |
26-Jun-2015 |
buzbee <buzbee@google.com> |
ART: Fix kEverything compiler filter Previously the kEverything filter failed to compile class initializers. Now it will. Bug: 19576257 Change-Id: I189d2b5b379aee112c4e95f8d3e6c32abab6ed41
erification_results.cc
|
4824c27988c8eeb302791624bb3ce1d557b0db6c |
24-Jun-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Use a flag from the verifier to know if we should compile. Only used for the lack of bottom type in the aget-object case for now. Could be used for more. bug:21865466 Change-Id: I64c2c84dfa1c0d259631e65e5f44b94e4139e6a7
uick/quick_compiler.cc
erified_method.cc
erified_method.h
|
87dc1b09cee6e972fbe3ad48ba8b5ae68d37085f |
23-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Compiler generated GC map should take care of temp registers."
|
ec3a4e7cdc4f268b40d923227c125429f4ee4884 |
22-Jun-2015 |
Igor Murashkin <iam@google.com> |
Merge "runtime: Partially implement box-lambda and unbox-lambda experimental opcodes"
|
2ee54e249ad21c74f29a161e248bebe7d22fddf1 |
18-Jun-2015 |
Igor Murashkin <iam@google.com> |
runtime: Partially implement box-lambda and unbox-lambda experimental opcodes These opcodes are not yet fully specified, and *will* change before they become shippable. Do not write production code against experimental opcodes. -- Implement partial interpreter support for new dex instructions box/unbox-lambda. * box-lambda will take a closure and convert it into an Object * unbox-lambda will take an Object and convert it to a closure (Currently does not implement object identity or variable capture). All new opcodes are disabled by default, use runtime option -Xexperimental-lambdas to enable them. Change-Id: I3c15ccf8a26ccecd1d35808a8c1b4149220f6019
uick/quick_compiler.cc
|
f8da196097d1b33121a73abcaf443d173ceab8eb |
19-Jun-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix GC map generation edge case Previously we checked the number of bits, but then rounded up to a byte boundary. If ref_bitmap_bits was 65535, it would pass the check but not actually fit in the 13 bits for ref_bitmap_bytes since we rounded up to 8192 bytes. (cherry picked from commit 1626b919005df42ccc90ebe68fc57b7c56d44029) Regression test infeasible due to smali limitations. Bug: 21888453 Change-Id: If4b769431f27ecca14fe7852d017bcde01b3e146
erified_method.cc
|
dde9827f75d1e1e9cd4b7e6b54086aec54f29b5f |
18-Jun-2015 |
Jeff Hao <jeffhao@google.com> |
Fix case where block has no predecessor for StringChange. Removes part that checks for throwing half of instruction. It's no longer necessary. Also adds regression test. Bug: 21902684 (cherry-picked from commit 3e91a44bc9063f7f69b5415e3cf162991f73283f) Change-Id: I8d7308ff227816fb475341c2b74ed84d5695a2f5
ir_optimization.cc
|
e4bb626ff09e409c9482e515716de7cd595ea466 |
19-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Handle total high/low register overlap on arm/mips."
|
8958f7f8702327e713264d0538ab5dec586f3738 |
19-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Handle total high/low register overlap on arm/mips. OpRegCopyWide() in arm and mips backends didn't handle the total register overlap when the registers holding the source and destination pairs are the same but in reverse order. Bug: 21897012 Change-Id: Ia1f0005cbf5cc1c2d30899575dea21b3efa20ae6
uick/arm/int_arm.cc
uick/mips/int_mips.cc
|
f11c420c448baffac6a70ac0884d481ab347e257 |
19-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix optimizations for empty if blocks. If a block ending with if-eqz or if-nez has the same "taken" and "fallthrough", we cannot assume that the value has been checked against zero in one of the succesors. This affects the null check elimination pass as well as GVN. Refactor all those checks to a single function in BasicBlock and check that the "taken" and "falthrough" are different when needed. Bug: 21614284 Change-Id: I8c6ac23e96cdaf5984786a555ebbd28110f095cb
lobal_value_numbering.cc
lobal_value_numbering.h
ir_graph.h
ir_optimization.cc
|
247e97746016b49183b52f4c386bedf7cd53e590 |
18-Jun-2015 |
Igor Murashkin <iam@google.com> |
Merge "interpreter: Add experimental lambda opcodes for invoke/create-lambda"
|
2d1a0a408fd148f7b2a2d670e6942ec3d920f875 |
18-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Don't expect move-exception in every catch block. The dalvik bytecode doesn't require a move-exception in a catch handler that ignores the exception. Bug: 21873167 Change-Id: I3b49218a8c7ff021141387bd929bb2ae798f8509
ir_graph.cc
|
158f35c98e2ec0d40d2c032b8cdce5fb60944a7f |
11-Jun-2015 |
Igor Murashkin <iam@google.com> |
interpreter: Add experimental lambda opcodes for invoke/create-lambda These opcodes are not yet fully specified, and *will* change before they become shippable. Do not write production code against experimental opcodes. -- Implement partial interpreter support for new dex instructions invoke/create-lambda, and a new opcode format 25x. * Does not verify, in fact verification will soft fail when we see those opcodes. * Compilers will punt to interpreter since they don't support new opcodes. * As there is no way to capture/liberate variables yet, the "closure" is just an ArtMethod for the time being. All new opcodes are disabled by default, use runtime option -Xexperimental-lambdas to enable them. For example: dalvikvm ... -Xexperimental-lambdas ... dex2oat --runtime-arg -Xexperimental-lambdas ... Change-Id: I6c996ca32a9b54ec45ec21d7a959b84dfb8a24eb
ir_graph.cc
uick/quick_compiler.cc
|
511d408909b7fe9be3c95e032cc7f426f4a01e6e |
17-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix marking unused registers in DCE. Bug: 21702651 Change-Id: Idca17b465152e0c61704fc49761c7ba89caf5b20
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
|
41f9cc28f2c9edd3903ba6ca1c75b022445552ad |
16-Jun-2015 |
Pavel Vyssotski <pavel.n.vyssotski@intel.com> |
ART: Compiler generated GC map should take care of temp registers. If the compiler use a temp register as a reference it should be added to generated GC map along with other SSA regs. Change-Id: I3c79896dcd72228c9cf2bbbe737642d9ffb7684d Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
uick/codegen_util.cc
|
c449e8b79aaaf156ce055524c41474cc1200ed5a |
11-Jun-2015 |
Igor Murashkin <iam@google.com> |
runtime: Minor cleanup and extra comments around interpreter Change-Id: I24c0b261de8cf737babd9d01bf679482d48c8bc9
erified_method.cc
erified_method.h
|
67c8c942e9dfcabd548351db75e6d3b8b5165afa |
08-Jun-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix LoopRepeatingTopologicalSortIterator. Always push the loop head on the loop head stack. This fixes a bug where we failed to return to an unnatural loop head to recalculate its GVN data. Bug: 17410955 Change-Id: I3a2c3225e5d16268c3f56f7f90228759c7da37a9
ataflow_iterator-inl.h
ir_graph_test.cc
ir_optimization.cc
|
5b3ee56cd63ee9e3c70c0412d044b81ab9c94513 |
14-Apr-2015 |
Roland Levillain <rpl@google.com> |
Delegate long-to-float type conversions to the runtime on ARM. On ARM, translate long-to-float type conversions (from both Quick and Optimizing) as calls to the runtime routine art_l2f, instead of generating ad hoc code, so as to improve the precision of the conversions. Bug: 20413424 Change-Id: I8c414ee1c6f4ff1f32ee78f75734cfd3cf579f71
uick/arm/fp_arm.cc
|
e401d146407d61eeb99f8d6176b2ac13c4df1e33 |
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move mirror::ArtMethod to native Optimizing + quick tests are passing, devices boot. TODO: Test and fix bugs in mips64. Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS. Some of the savings are from removal of virtual methods and direct methods object arrays. Bug: 19264997 Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d
ex_to_dex_compiler.cc
ir_method_info.cc
ir_optimization.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_cfi_test.cc
uick/quick_cfi_test_expected.inc
uick/quick_compiler.cc
uick/quick_compiler.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
ype_inference.cc
ype_inference.h
erified_method.cc
|
8363c772581bf00ebcdc2e38391b4bfae51beb75 |
28-May-2015 |
David Srbecky <dsrbecky@google.com> |
Add --generate-debug-info flag and remove the other two flags. Replace the flags --include-debug-symbols and --include-cfi with single flag called --generate-debug-info (with alias -g). The name "symbol" was not ideal, since depending on context it may be interpreted as "ELF symbols", or "debugging information". This CL also means that we have only the options to include either all debugging information or none. This should be fine, since we can use standard tools to strip anything we do not want. Change-Id: I721fded56d755d7eed0ef36aa84e841a1f5747f8
uick/codegen_util.cc
uick/quick_cfi_test.cc
uick/x86/quick_assemble_x86_test.cc
|
dc31313c4577bb4c00d90774159c84e738ed348d |
26-May-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Clean up arm64 kNumberOfXRegisters usage."
|
80afd02024d20e60b197d3adfbb43cc303cf29e0 |
19-May-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Clean up arm64 kNumberOfXRegisters usage. Avoid undefined behavior for arm64 stemming from 1u << 32 in loops with upper bound kNumberOfXRegisters. Create iterators for enumerating bits in an integer either from high to low or from low to high and use them for <arch>Context::FillCalleeSaves() on all architectures. Refactor runtime/utils.{h,cc} by moving all bit-fiddling functions to runtime/base/bit_utils.{h,cc} (together with the new bit iterators) and all time-related functions to runtime/base/time_utils.{h,cc}. Improve test coverage and fix some corner cases for the bit-fiddling functions. Bug: 13925192 Change-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7
ompiler_ir.cc
ompiler_ir.h
ocal_value_numbering.cc
ocal_value_numbering.h
ir_analysis.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/gen_common.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/resource_mask.cc
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
ype_inference.cc
ype_inference.h
|
9bd88b0933a372e6a7b64b850868e6a7998567e2 |
22-Apr-2015 |
Serban Constantinescu <serban.constantinescu@linaro.org> |
ARM64: Move xSELF from x18 to x19. This patch moves xSELF to callee saved x19 and removes support for ETR (external thread register), previously used across native calls. Change-Id: Icee07fbb9292425947f7de33d10a0ddf98c7899b Signed-off-by: Serban Constantinescu <serban.constantinescu@linaro.org>
uick/arm64/arm64_lir.h
uick/arm64/target_arm64.cc
uick/quick_cfi_test_expected.inc
|
9cacef6e811940c2f21e7e54055379a2c43f0d06 |
14-May-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix marking high words in DCE. This CL properly fixes the high word marking and reverts https://android-review.googlesource.com/150352 which was just covering up the underlying issue. A unit test for the encountered issue is provided, though it does not expose the deficiency in the cover-up CL. Bug: 20640451 Change-Id: Ia19a1134610e271ebbab5679ac0bd0cb0223d462
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
|
ade58e14582c6ab81978e9cfcbbf5e54cc23fe18 |
12-May-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix DCE, clear high word flag in RemoveChange(). Bug: 20640451 Change-Id: Ibab707ff8e60816b9871c3f4096c0bbbf535cbe8
vn_dead_code_elimination.cc
|
83d46ef1eaa8fdecadfdb9564d80e50b42646c37 |
12-May-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix DCE to mark wide register overlaps correctly. Previously we missed some cases of overlap with registers coming from previous blocks. Bug: 20640451 Change-Id: I4b32a7aaea2dea1b0b9560ae3459a4d903683f20
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
vn_dead_code_elimination_test.cc
|
7b4de07fffc6dbbbd986bb21b212fa0c4a2aec58 |
07-May-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix DCE to rename SSA regs for degenerate Phis."
|
e299f167c9559401548eab71678d4b779e46c2fb |
07-May-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Abolish kMirOpCheckPart2. The tricks played with kMirOpCheckPart2 are making the native GC map generation unnecessarily complex. They have caused problems in the past and now there is bad interaction with the DCE. Rather than fixing it time and again, remove the pseudo-insn. (The whole purpose of those tricks seems to be to allow the register tracking to be used for the throwing insn before resetting the tracking for the next block. However, it's questionable whether that's better than processing the throwing insn with the subsequent instructions.) Bug: 20736048 Change-Id: I4767e4609914d3b6990da4416e5093e4ca209780
ompiler_enums.h
ir_dataflow.cc
ir_graph.cc
uick/codegen_util.cc
uick/mir_to_lir.cc
uick/quick_compiler.cc
|
f60715c2c0a2398822a143ffb6b75507bffca703 |
07-May-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix DCE to rename SSA regs for degenerate Phis. If we're inserting a new Phi and all its inputs are the same SSA reg (for example, we allow a single-input Phi), some subsequent insn may actually refer to that reg, so we need to rename it to keep the graph in a consistent state. Change-Id: Ic6a1907c3138f4a7d3b13f9e58e9107ca2d92f17
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
|
a412964bf9f8b2aa78e7a4849990381207140850 |
07-May-2015 |
Jeff Hao <jeffhao@google.com> |
In quick compiler, force string init invoke to be fast path. Was running into an issue where a secondary dex file was falling back on the quick compiler, and IsFastInvoke returned 0 because the referrer_class was nullptr, causing the string init to be slow path. The string init technically does not have to be fast path, but there's no reason to duplicate the logic to call off a thread pointer on the slow path. Bug: 20870917 (cherry picked from commit I47e1524d939eb7e9b1da8186092fafc6e925009e) Change-Id: Ieacd965943759de2b075c30e03cf0a71863f499e
ir_method_info.cc
|
f073a36d1ed866e786f7d7784c709c86b00bc58e |
29-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix for incorrect encode and parse of PEXTRW instruction"
|
e0705f51fdc71e9670a29f8c3a47168f50724b35 |
27-Apr-2015 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
Fix for incorrect encode and parse of PEXTRW instruction The instruction PEXTRW encoded by sequence 66 0F 3A 15 was incorrectly encoded in compiler table and incorrectly parsed by disassembler. Change-Id: Ib4d4db923cb15a76e74f13f6b5514cb0d1cbe164 Signed-off-by: nikolay serdjuk <nikolay.y.serdjuk@intel.com>
uick/x86/assemble_x86.cc
uick/x86/quick_assemble_x86_test.cc
|
2bee20b5f0d783b43c1bbbe281f69a6f9b9e0a98 |
07-Apr-2015 |
Calin Juravle <calin@google.com> |
Quick: Fix crash on fall-through out of method code. Fix Quick crash when the last insn has a fall-through out of the method's code. Allow creation of an out-of-method block and at the end of MIRGraph::InlineMethod() check if that block is reachable. If it is, punt to interpreter. Add tests for unreachable if-lt and packed-switch as the last insn. Also fix MIRGraph::ProcessCanSwitch() to treat the offset to the data as signed. Jumping over the data with a goto and using it from a switch further down is valid. This was also crashing (presumably only on 64-bit dex2oat). Thanks to Stephen Kyle (stephenckyle@googlemail.com) for the bug report. Bug: 19988134 Change-Id: I627f4137f61901897bfb9a5252741c6ded3a1adb
ir_graph.cc
|
3adfc4bbe6c42d574bd2069d8e38a13d5ad98ccf |
28-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Avoid unnecessary GVN work in release builds."
|
a94fb1f99ee3390bca9531b2512f8fc65f13ceee |
28-Apr-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Revert "Revert "[optimizing] Replace FP divide by power of 2"""
|
9d1e19035a59ff8bf05a09ad880ede99806ba73f |
28-Apr-2015 |
Jeff Hao <jeffhao@google.com> |
Merge "Replace String CharArray with internal uint16_t array."
|
848f70a3d73833fc1bf3032a9ff6812e429661d9 |
15-Jan-2014 |
Jeff Hao <jeffhao@google.com> |
Replace String CharArray with internal uint16_t array. Summary of high level changes: - Adds compiler inliner support to identify string init methods - Adds compiler support (quick & optimizing) with new invoke code path that calls method off the thread pointer - Adds thread entrypoints for all string init methods - Adds map to verifier to log when receiver of string init has been copied to other registers. used by compiler and interpreter Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
b_optimizations.h
ir_graph.h
ir_method_info.cc
ir_optimization.cc
ass_driver_me_opts.cc
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/target_x86.cc
erified_method.cc
erified_method.h
|
0d22184ec9e5b1e958c031ac92c7f053de3a13a2 |
27-Apr-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "[optimizing] Replace FP divide by power of 2"" This reverts commit 067cae2c86627d2edcf01b918ee601774bc76aeb. Change-Id: Iaaa8772500ea7d3dce6ae0829dc0dc3bbc9c14ca
uick/mir_to_lir.h
|
295dda5066dfeb5bed88a4a484268f94b060c7fb |
27-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Rely on inferred types in GVN/LVN/DCE."
|
f725550c8df90f8ec07395d9be5177a4be591c12 |
25-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Avoid unnecessary GVN work in release builds. In GVN's post-processing phase, compare LVNs only in debug builds as they should be equal anyway. Remove the Gate() from GVN cleanup pass and remove the DCHECK() from MIRGraph::GlobalValueNumberingCleanup() to make it a no-op if the GVN didn't run. Bug: 16398693 Change-Id: Ia4f1e7e3ecf12d0305966c86e0e7dbae61dab0b7
b_optimizations.cc
b_optimizations.h
lobal_value_numbering.cc
ir_optimization.cc
|
a5e69e87c630c08c0de1740427e60d531ce851b9 |
24-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Rely on inferred types in GVN/LVN/DCE. Fix LVN::GetEndingVregValueNumberImpl() to check whether the requested wideness matches the SSA register type as recorded in MIRGraph::reg_location_. Add DCHECKs that the wideness matches when getting/setting sreg values, update Phi handling in LVN/DCE to use the type from MIRGraph::reg_location_ instead of determining it from the sreg value maps which would now trigger the DCHECKs. Update tests to initialize MIRGraph::reg_location_. Reenable DCE. Bug: 20572509 Change-Id: I1a4d4e32cd57807ca8b56d2f3ed5e1288660b82e
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
uick/quick_compiler.cc
|
711d84008f5b3cda849611102118316c29a75b16 |
26-Apr-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix addpd opcode, add Quick x86 assembler test"
|
c4013ea00d9e63533f3badeed0131bb2eb859c90 |
22-Apr-2015 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Fix addpd opcode, add Quick x86 assembler test This patch fixes the addpd opcode that may be used by vectorizations, and adds an assembler test for the Quick x86 assembler, currently lightly testing addpd, subpd and mulpd. Change-Id: I29455a86212829c75fd75737679280f167da7b5b Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ir_graph.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/quick_assemble_x86_test.cc
|
24d65cce84165c2c3b0e02e09cdb92479ee4e479 |
25-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix missing dependency between GVN and other passes The GVN may be turned off completely, or skip running when the method is too complex. Turn off DCE in that case. The dependent cleanup pass is not an optimization pass, so can't be turned off that way. Check whether the GVN skipped in the gate function. A possible follow-up is proper dependencies between passes. Change-Id: I5b7951ecd6c74ebbfa5b23726a3d2f3ea1a23a47
b_optimizations.cc
b_optimizations.h
ir_optimization.cc
|
3c1c05a1e8eeff783f2854ee31bff8117ee274dd |
25-Apr-2015 |
Roland Levillain <rpl@google.com> |
Disable Quick's GVN-based dead code elimination. Quick's GVN/DCE seems to trouble the builds. Bug: 20572509 Change-Id: I1e315b4eee4443f04c7cb2cef953d8e4eff619ce
uick/quick_compiler.cc
|
ae803f6efbe8378b5423c51ee3c5564cae0e6e59 |
24-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix and enable DCE and improve GVN/DCE cleanup."
|
5ea536aa4a6414db01beaf6f8bd8cb9adc5cfc92 |
20-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Remove ArtMethod* parameter from dex cache entry points. Load the ArtMethod* using an optimized stack walk instead. This reduces the size of the generated code. Three of the entry points are called only from a slow-path and the fourth (InitializeTypeAndVerifyAccess) is rare and already slow enough that the one or two extra loads (depending on whether we already have the ArtMethod* in a register) are insignificant. And as we're starting to use PC-relative addressing of the dex cache arrays (already done by Quick for the boot image), having the ArtMethod* in a register becomes less likely anyway. Change-Id: Ib19b9d204e355e13bf386662a8b158178bf8ad28
uick/gen_common.cc
uick/mir_to_lir.h
|
ad67727a492df635aa54dbe58d6c0de54431f600 |
20-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix and enable DCE and improve GVN/DCE cleanup. When eliminating a move by renaming its source register, check that it doesn't conflict with vreg usage by insns between the defining insn and the move. Improve the GVN/DCE cleanup so that it can handle cases where GVN or DCE is individually disabled in the pass driver but not in the disable_opt flags. Bug: 19419671 Change-Id: I49bb67b81509f51fbaf90c6016c509962be43736
b_optimizations.h
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
vn_dead_code_elimination_test.cc
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
uick/quick_compiler.cc
|
084f7d43f4dc38bfc71446b1a3b07af085d778bf |
23-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix out of temp regs in ArmMir2Lir::GenMulLong(). This fixes running out of temp registers for mul-long that needs a temporary to store the result, i.e. when it's stored to stack location [sp, #offset] with offset >= 1024. The bug is currently not reproducible because ARM_R4_SUSPEND_FLAG is off and thus we have the extra register available. However, the code generation could be cleaned up and make use of that extra register, so pre-emptively fix it anyway. Bug: 20110806 Change-Id: I8362c349961dbe28fc3ec8a9299b66fd72f26779
uick/arm/int_arm.cc
|
c91df2d6339dd4adf2da582372451df19ce2ff44 |
23-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "Revert "Quick: Rewrite type inference pass."" Fix the type of the ArtMethod* SSA register. Bug: 19419671 This reverts commit 1b717f63847de8762e7f7bdd6708fdfae9d24a67. Change-Id: Ie4da3c03a0e0334a39a24718f6dc31f9255cfb53
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.h
ir_optimization.cc
ass_driver_me_post_opt.cc
ost_opt_passes.h
uick/dex_file_method_inliner.cc
ype_inference.cc
ype_inference.h
ype_inference_test.cc
reg_analysis.cc
|
1b717f63847de8762e7f7bdd6708fdfae9d24a67 |
23-Apr-2015 |
Andreas Gampe <agampe@google.com> |
Revert "Quick: Rewrite type inference pass." Breaks arm64, as the method register is not correctly flagged as ref and thus 32bit. Bug: 19419671 This reverts commit e490b01c12d33f3bd5c247b55b47e507cc9c8fab.
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.h
ir_optimization.cc
ass_driver_me_post_opt.cc
ost_opt_passes.h
uick/dex_file_method_inliner.cc
ype_inference.cc
ype_inference.h
ype_inference_test.cc
reg_analysis.cc
|
2cebb24bfc3247d3e9be138a3350106737455918 |
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Replace NULL with nullptr Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
ataflow_iterator-inl.h
ataflow_iterator.h
ex_to_dex_compiler.cc
ir_analysis.cc
ir_dataflow.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.h
ir_optimization.cc
ass_driver.h
ass_driver_me.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_loadstore.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_cfi_test.cc
uick/quick_compiler.cc
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
sa_transformation.cc
erification_results.cc
erified_method.cc
erified_method.h
|
e490b01c12d33f3bd5c247b55b47e507cc9c8fab |
24-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Rewrite type inference pass. Use method signatures, field types and types embedded in dex insns for type inference. Perform the type inference in two phases, first a simple pass that records all types implied by individual insns, and then an iterative pass to propagate those types further via phi, move, if-cc and aget/aput insns. Bug: 19419671 Change-Id: Id38579d48a44fc5eadd13780afb6d370093056f9
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.h
ir_optimization.cc
ass_driver_me_post_opt.cc
ost_opt_passes.h
uick/dex_file_method_inliner.cc
ype_inference.cc
ype_inference.h
ype_inference_test.cc
reg_analysis.cc
|
fac10700fd99516e8a14f751fe35553021ce6982 |
22-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Remove broken Mir2Lir::LocToRegClass(). Its use in intrinsics has been bogus. In all other instances it's been used under the assumption that the inferred type matches the return type of associated calls. However, if the type inference identifies a type mismatch, the assumption doesn't hold and there isn't necessarily a valid value that the function could reasonably return. Bug: 19918641 Change-Id: I050934e6f9eb00427d0b888ee29ae9eeb509bb3f
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
70bef0d8f6aa30b0da5c6ca56e1bc5729f74654b |
15-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Add compiled-methods Add a dex2oat option for compiled-methods, a more granular filter than compiled-classes. Add compiler-driver support for it. Refactor dex2oat to reuse file reading. Add a test to oat_test. Change-Id: I78d0d040bce7738b4bb7aabe7768b5788d2587ac
uick/quick_cfi_test.cc
|
f903680dd74e1f353dae0f4155163839a6386bf9 |
16-Apr-2015 |
Dan Albert <danalbert@google.com> |
Fix value used for shift in quick_cfi_test. The spill mask bit should be shifted by the register number, not the whole register mask. Previously this test was shifting by values well over the width of the type, which is undefined behavior. Change-Id: Idf750be6d95b4487f8f4570b8c7ff9dba38be9f2
uick/quick_cfi_test.cc
|
8aec061f5e58876bcc892d8c0309bc13b5349f5c |
16-Apr-2015 |
Calin Juravle <calin@google.com> |
Merge "Fallback to quick in case of soft verification errors"
|
f1c6d9e87cbfd27702103ccc7c7f08ce784dc872 |
13-Apr-2015 |
Calin Juravle <calin@google.com> |
Fallback to quick in case of soft verification errors Add a regression test: using uninitialized values triggers a soft verification error and optimizing should not crash. Thanks to Stephen Kyle (stephenckyle@googlemail.com) for the bug report. Bug: 19988704 Change-Id: I67174538eed853baff735694b3ae8eb34afe2a39
erified_method.cc
erified_method.h
|
69a503050fb8a7b3a79b2cd2cdc2d8fbc594575d |
14-Apr-2015 |
Zheng Xu <zheng.xu@arm.com> |
ARM64: Remove suspend register. It also clean up build/remove frame used by JNI compiler and generates stp/ldp instead of str/ldr. Also x19 has been unblocked in both quick and optimizing compiler. Change-Id: Idbeac0942265f493266b2ef9b7a65bb4054f0e2d
uick/arm64/arm64_lir.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/quick_cfi_test_expected.inc
|
8dc7324da5bd0f2afd2ab558ab04882329a61fe8 |
12-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Add --include-cfi compiler option. Decouple generation of CFI from the rest of debug symbols. This makes it possible to generate oat with CFI but without the rest of debug symbols. This is in line with intention of the .eh_frame section. The section does not have the .debug_ prefix because it is considered somewhat different to the rest of debug symbols. Change-Id: I32816ecd4f30ac4e0dc69d69a4993e349c737f96
uick/codegen_util.cc
uick/quick_cfi_test.cc
|
7f49e672bc943c49ca8af438ae4bd61b95fe364b |
12-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Remove the --gen-gdb-info compiler option. It is never used. We generally use --include-debug-symbols instead. Change-Id: I933495cd85ab4f7dfcf3ef3cd2d943d4b870ffeb
uick/quick_cfi_test.cc
|
c785344b87221f5e4e6473e5b762e4e61fe65dcf |
27-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move ArtField to native Add linear alloc. Moved ArtField to be native object. Changed image writer to put ArtFields after the mirror section. Savings: 2MB on low ram devices 4MB on normal devices Total PSS measurements before (normal N5, 95s after shell start): Image size: 7729152 bytes 23112 kB: .NonMoving 23212 kB: .NonMoving 22868 kB: .NonMoving 23072 kB: .NonMoving 22836 kB: .NonMoving 19618 kB: .Zygote 19850 kB: .Zygote 19623 kB: .Zygote 19924 kB: .Zygote 19612 kB: .Zygote Avg: 42745.4 kB After: Image size: 7462912 bytes 17440 kB: .NonMoving 16776 kB: .NonMoving 16804 kB: .NonMoving 17812 kB: .NonMoving 16820 kB: .NonMoving 18788 kB: .Zygote 18856 kB: .Zygote 19064 kB: .Zygote 18841 kB: .Zygote 18629 kB: .Zygote 3499 kB: .LinearAlloc 3408 kB: .LinearAlloc 3424 kB: .LinearAlloc 3600 kB: .LinearAlloc 3436 kB: .LinearAlloc Avg: 39439.4 kB No reflection performance changes. Bug: 19264997 Bug: 17643507 Change-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c
ex_to_dex_compiler.cc
ir_field_info.cc
erified_method.cc
|
3773cd046b1c34569f4711666788bf8a389c7857 |
10-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove WriteElf from Compiler As Portable is gone, we only have one elf_writer left. It also allows to put the decision for 32b vs 64b ELF into a central point. Change-Id: Iae67d06df85268b3f0ee5725abc65edd23eb2499
uick/quick_compiler.cc
uick/quick_compiler.h
|
5c9bb1fb851145c124d2bedc82c7effb586ab506 |
10-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Merge "Fix memory leaks in the CFI tests."
|
46325a0fae06ccbf5e0d7a7dd34d6cfe49226a40 |
09-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Fix memory leaks in the CFI tests. Change-Id: Icb98e4995731c7ac5f99d1be20b447161ea4c4bd
uick/quick_cfi_test.cc
|
8f486f3d3f0215a468323f68d1ae30bc283e9bf6 |
10-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix indent in Mips backend Change-Id: Ib8bc6f6bf36079e0b6e4b65ceab8af7dedc60efc
uick/mips/call_mips.cc
uick/mips/int_mips.cc
|
1751f38a8fca421b0d527dbaea3559b940451218 |
10-Apr-2015 |
Andreas Gampe <agampe@google.com> |
Merge "Fix GenDivRemLit() for Mips."
|
3b7b6cc6f26f1fffbad47a7279525198f4e22652 |
09-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: PC-relative loads from dex cache arrays on x86."
|
917f0866f66d3465fa41ddcf9ab09eba2fa78dd3 |
09-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Merge "Implement CFI for Optimizing."
|
ba9715a8657e5a0b6cd201b2aa003685cacbb896 |
09-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Merge "Implement CFI for Quick."
|
c6b4dd8980350aaf250f0185f73e9c42ec17cd57 |
07-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Implement CFI for Optimizing. CFI is necessary for stack unwinding in gdb, lldb, and libunwind. Change-Id: I1a3480e3a4a99f48bf7e6e63c4e83a80cfee40a2
uick/codegen_util.cc
uick/lazy_debug_frame_opcode_writer.cc
uick/lazy_debug_frame_opcode_writer.h
|
1961b609bfefaedb71cee3651c4f931cc3e7393d |
08-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: PC-relative loads from dex cache arrays on x86. Rewrite all PC-relative addressing on x86 and implement PC-relative loads from dex cache arrays. Don't adjust the base to point to the start of the method, let it point to the anchor, i.e. the target of the "call +0" insn. Change-Id: Ic22544a8bc0c5e49eb00a75154dc8f3ead816989
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
1576be32be4a99a1cffdaaf209a3cd67e8b2f88a |
08-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Clean up temp use counting."
|
87b7c52ac660119b8dea46967974b76c86d0750b |
08-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Clean up temp use counting. For the boot image on arm64 and x86-64 we're using true PC-relative addressing, so pc_rel_temp_ is nullptr and CanUsePcRelDexCacheArrayLoad() returns true, but we're not actually using the ArtMethod* so fix the AnalyzeMIR() to take it into account. Also don't count intrinsic invokes towards ArtMethod* uses. To avoid repeated method inliner inquiries about whether a method is intrinsic or special (requiring lock acquisition), cache that information in MirMethodLoweringInfo. As part of that cleanup, take quickened invokes into account for suspend check elimination. Change-Id: I5b4ec124221c0db1314c8e72675976c110ebe7ca
b_optimizations.h
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/ralloc_util.cc
|
1109fb3cacc8bb667979780c2b4b12ce5bb64549 |
07-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Implement CFI for Quick. CFI is necessary for stack unwinding in gdb, lldb, and libunwind. Change-Id: Ic3b84c9dc91c4bae80e27cda02190f3274e95ae8
ir_graph.h
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/int_arm64.cc
uick/codegen_util.cc
uick/lazy_debug_frame_opcode_writer.cc
uick/lazy_debug_frame_opcode_writer.h
uick/mips/call_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_cfi_test.cc
uick/quick_cfi_test_expected.inc
uick/quick_compiler.cc
uick/quick_compiler.h
uick/x86/call_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
cde8e5da3e774a2494b051043130c0495eca09ef |
08-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Merge "Remove the old CFI infrastructure."
|
c7399c82c27f85a2df2653e1eb8c0b60f2cfd934 |
08-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove LLVM cruft Change-Id: I133ebed6101bf12a0642ed71e13f332c0c4f14e7
ir_graph.cc
|
7fa6e279dfda5b2f21e4c234f562a49a5fe5d218 |
07-Apr-2015 |
Douglas Leung <douglas.leung@imgtec.com> |
Fix GenDivRemLit() for Mips. This bug was reported by Ingenic where the result is incorrect if we divide a number by an unsigned 16-bit constant with its MSB bit (bit 15) set. Change-Id: I53d2599918cc47b1a9809160310716dca67ef243
uick/mips/int_mips.cc
|
40f65560b5ecd79aeaadc16b03834d11aea1e0a5 |
08-Apr-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix 64-bit ELF file support"
|
3c54b0023fca579aae006dfa607fb14de5846c42 |
08-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix 64-bit ELF file support The API wasn't cross-compile-safe, 32-bit patchoat would fail for negative delta applied to a 64-bit ELF file. Add 64-bit ELF file output to the compilers, behind a flag, currently off by default (preserving current behavior). Bug: 20095017 Change-Id: I2cde7b4c7cc83413c76692d7b745868d644a604c
uick/quick_compiler.cc
|
8c57831b2b07185ee1986b9af68a351e1ca584c3 |
07-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Remove the old CFI infrastructure. Change-Id: I12a17a8a1c39ffccaa499c328ebac36e4d74dc4e
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
cc23481b66fd1f2b459d82da4852073e32f033aa |
07-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Promote pointer to dex cache arrays on arm. Do the use-count analysis on temps (ArtMethod* and the new PC-relative temp) in Mir2Lir, rather than MIRGraph. MIRGraph isn't really supposed to know how the ArtMethod* is used by the backend. Change-Id: Iaf56a46ae203eca86281b02b54f39a80fe5cc2dd
ir_dataflow.cc
ir_graph.h
ir_optimization.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
|
e5c76c515a481074aaa6b869aa16490a47ba98bc |
06-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
PC-relative loads from dex cache arrays for arm. Change-Id: Ic25df4b51a901ff1d2ca356b5eec71d4acc5d9b7
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
|
3477307fdf93a1ef9a80d4e096125705c47e8024 |
07-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Use PC-relative dex cache array loads for SGET/SPUT. Change-Id: I890284b73f69120ada5cf9b9ef4a717af3273cd2
uick/gen_common.cc
uick/mir_to_lir.h
|
65b798ea10dd716c1bb3dda029f9bf255435af72 |
06-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Enable more Clang warnings Change-Id: Ie6aba02f4223b1de02530e1515c63505f37e184c
vn_dead_code_elimination.cc
uick/arm64/utility_arm64.cc
uick/mips/utility_mips.cc
|
e8aae00fa400efbb8f998a5dbf68eb42810889c1 |
06-Apr-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Add Clang's -Wused-but-marked-unused"
|
ca71458862be8505330b7fd5649a062f31d143dc |
04-Apr-2015 |
Andreas Gampe <agampe@google.com> |
ART: Add Clang's -Wused-but-marked-unused Add detection of wrong unused annotations. Fix our codebase. Change-Id: I85cc20f2eac71c1ec6c5c7cd6efb08454a629634
ocal_value_numbering.cc
|
b207e1473dda1730604a28db2b4fa52f2998aeae |
02-Apr-2015 |
Vladimir Marko <vmarko@google.com> |
Pass linker patches around as const. Change-Id: I0eabd713d29475db9eb6e186f331dbfb00e0cf6b
uick/codegen_util.cc
|
e8a339e5058962805c2b428fedb1d6ede5aeb501 |
02-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Merge "Write .debug_line section using the new DWARF library."
|
dc56cc509d8e1718ad321f7a91661dbe85ec8cef |
27-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
PC-relative loads from dex cache arrays for x86-64. Change-Id: I6cfe22c7e69512b3c0f95b073aaa572db74ec189
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
6f7158927fee233255f8e96719c374694b10cad3 |
30-Mar-2015 |
David Srbecky <dsrbecky@google.com> |
Write .debug_line section using the new DWARF library. Also simplify dex to java mapping and handle mapping in prologues and epilogues. Change-Id: I410f06024580f2a8788f2c93fe9bca132805029a
ompiler_enums.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/codegen_util.cc
uick/mips/call_mips.cc
uick/mir_to_lir.cc
uick/x86/call_x86.cc
|
ef3456f872539df65c4c88ca346713f74366d803 |
31-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Cortex-A53 Erratum 843419 workaround in OatWriter."
|
c74658b6cf6af53480b3fa07950dcc0a9231ef6a |
31-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Cortex-A53 Erratum 843419 workaround in OatWriter. Bug: 19983916 Change-Id: I572248d035200bb04f74eb3ae065e862572628a0
uick/arm64/int_arm64.cc
|
f93c6fe65c4c5e601cce467e87bbe71a87c5bac0 |
31-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Fixed layout for dex caches in boot image."
|
20f85597828194c12be10d3a927999def066555e |
19-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Fixed layout for dex caches in boot image. Define a fixed layout for dex cache arrays (type, method, string and field arrays) for dex caches in the boot image. This gives those arrays fixed offsets from the boot image code and allows PC-relative addressing of their elements. Use the PC-relative load on arm64 for relevant instructions, i.e. invoke-static, invoke-direct, const-string, const-class, check-cast and instance-of. This reduces the arm64 boot.oat on Nexus 9 by 1.1MiB. This CL provides the infrastructure and shows on the arm64 the gains that we can achieve by having fixed dex cache arrays' layout. To fully use this for the boot images, we need to implement the PC-relative addressing for other architectures. To achieve similar gains for apps, we need to move the dex cache arrays to a .bss section of the oat file. These changes will be implemented in subsequent CLs. (Also remove some compiler_driver.h dependencies to reduce incremental build times.) Change-Id: Ib1859fa4452d01d983fd92ae22b611f45a85d69b
ir_field_info.cc
ir_graph.cc
ir_method_info.cc
uick/arm/call_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/x86/call_x86.cc
|
4585f876eb5dfb936bd0d6cb6acd78a1f2182ba6 |
28-Mar-2015 |
Andreas Gampe <agampe@google.com> |
ART: Some runtime cleanup Use an enum for the compiler-callback mode. Refactor and remove some unnecessary includes in runtime.h. Change-Id: If2245fa470171311b8e05b677cf6bb28f209585a
uick_compiler_callbacks.h
|
86787d0bc2c5ad3b9c3b880b0fe2325d2b8bd672 |
28-Mar-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: PathClassLoader for compiler"
|
81c6f8db12b203878a7d72444ead2bc7cf5c47ad |
26-Mar-2015 |
Andreas Gampe <agampe@google.com> |
ART: PathClassLoader for compiler Use an actual PathClassLoader when compiling apps, instead of a side structure and cutout. This CL sets up a minimal object 'cluster' that recreates the Java side of a regular ClassLoader such that the Class-Linker will recognize it and use the internal native fast-path. This CL removes the now unnecessary compile-time-classpath and replaces it with a single 'compiling-the-boot-image' flag in the compiler callbacks. Note: This functionality is *only* intended for the compiler, as the objects have not been completely initialized. Bug: 19781184 Change-Id: I7f36af12dd7852d21281110a25c119e8c0669c1d
uick_compiler_callbacks.h
|
1095793154d2ff33323ba9edaa4f83373bdb6c8e |
24-Mar-2015 |
Goran Jakovljevic <Goran.Jakovljevic@imgtec.com> |
[MIPS] Refactoring code for quick compiler Code from compiler/dex/quick/mips64 is merged with code in mips folder. Change-Id: I785983c21549141306484647da86a0bb4815daaa
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mips64/assemble_mips64.cc
uick/mips64/backend_mips64.h
uick/mips64/call_mips64.cc
uick/mips64/codegen_mips64.h
uick/mips64/fp_mips64.cc
uick/mips64/int_mips64.cc
uick/mips64/mips64_lir.h
uick/mips64/target_mips64.cc
uick/mips64/utility_mips64.cc
uick/quick_compiler.cc
|
356a1811f2f79d98194475fdbfb5f6b7768455b5 |
27-Mar-2015 |
Pavel Vyssotski <pavel.n.vyssotski@intel.com> |
Quick: Finding upper half of kMirOpCheckPart2 should passthough empty blocks Mir2Lir::InitReferenceVRegs trying to find throwing instruction for kMirOpCheckPart2 should traverse possible empty blocks which compiler optimizations could generate between them. Change-Id: I2ab29dd36635fd4c4ef2dd81b51e571e206775e6 Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
uick/codegen_util.cc
|
410f5cfe4ff70bc8a151216afae4e204f51aff37 |
25-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix "select" pattern to update data used for GC maps."
|
6e07183e822a32856da9eb60006989496e06a9cc |
25-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix "select" pattern to update data used for GC maps. Follow-up to https://android-review.googlesource.com/143222 Change-Id: I1c12af9a19f76e64fd209f6cc2eaec5587b3083b
ir_optimization.cc
uick/codegen_util.cc
uick/mir_to_lir.h
|
da4d79bc9a4aeb9da7c6259ce4c9c1c3bf545eb8 |
24-Mar-2015 |
Roland Levillain <rpl@google.com> |
Unify ART's various implementations of bit_cast. ART had several implementations of art::bit_cast: 1. one in runtime/base/casts.h, declared as: template <class Dest, class Source> inline Dest bit_cast(const Source& source); 2. another one in runtime/utils.h, declared as: template<typename U, typename V> static inline V bit_cast(U in); 3. and a third local version, in runtime/memory_region.h, similar to the previous one: template<typename Source, typename Destination> static Destination MemoryRegion::local_bit_cast(Source in); This CL removes versions 2. and 3. and changes their callers to use 1. instead. That version was chosen over the others as: - it was the oldest one in the code base; and - its syntax was closer to the standard C++ cast operators, as it supports the following use: bit_cast<Destination>(source) since `Source' can be deduced from `source'. Change-Id: I7334fd5d55bf0b8a0c52cb33cfbae6894ff83633
uick/arm64/fp_arm64.cc
uick/gen_common.cc
|
f6737f7ed741b15cfd60c2530dab69f897540735 |
23-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Clean up Mir2Lir codegen. Clean up WrapPointer()/UnwrapPointer() and OpPcRelLoad(). Change-Id: I1a91f01e1e779599c77f3f6efcac2a6ad34629cf
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/mips/assemble_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips64/assemble_mips64.cc
uick/mips64/codegen_mips64.h
uick/mips64/int_mips64.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
274395fe6649d83d723c4b912a46291b2987efd6 |
24-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Create GC map based on compiler data."
|
ea379885b01d6985cff09d0efd438d03de5f9fa1 |
21-Mar-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Add Mips32r6 backend support"
|
cd8f6377821370cb471fb21ae095dfaa204e4410 |
21-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Remove some spammy logging Did not provide useful info and or was redundant. Change-Id: I42da705debc43460cdd3fdf16e9e9ceb2c137001
ass_manager.cc
|
027f0ff64c2512b9a5f1f54f3fea1bec481eb0f5 |
28-Feb-2015 |
Douglas Leung <douglas.leung@imgtec.com> |
ART: Add Mips32r6 backend support Add Mips32r6 compiler support. Don't use deprecated Mips32r2 instructions if running in Mips32r6 mode. Change-Id: I54e689aa8c026ccb75c4af515aa2794f471c9f67
uick/mips/assemble_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
|
767c752fddc64e280dba507457e4f06002b5f678 |
20-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Create GC map based on compiler data. The Quick compiler and verifier sometimes disagree on dalvik register types (fp/core/ref) for 0/null constants and merged registers involving 0/null constants. Since the verifier is more lenient it can mark a register as a reference for GC where Quick considers it a floating point register or a dead register (which would have a ref/fp conflict if not dead). If the compiler used an fp register to hold the zero value, the core register or stack location used by GC based on the verifier data can hold an invalid value. Previously, as a workaround we stored the fp zero value also in the stack location or core register where GC would look for it. This wasn't precise and may have missed some cases. To fix this properly, we now generate GC maps based on the compiler's notion of references if register promotion is enabled. Bug: https://code.google.com/p/android/issues/detail?id=147187 Change-Id: Id3a2f863b16bdb8969df7004c868773084aec421
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_loadstore.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
0b40ecf156e309aa17c72a28cd1b0237dbfb8746 |
20-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Clean up slow paths. Change-Id: I278d42be77b02778c4a419ae9024b37929915b64
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips64/call_mips64.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/int_x86.cc
|
d7cbf8a6629942e7bd315ffae7e1c77b082f3e11 |
19-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Change RETURN_VOID_BARRIER to RETURN_VOID_NO_BARRIER We want to default to having a barrier for the case where we don't dex to dex. Bug: 19762303 Change-Id: I60348d89eaf0b9e1e480298afcecbb5f52e8661b
ex_to_dex_compiler.cc
ir_analysis.cc
ir_dataflow.cc
uick/mir_to_lir.cc
uick/quick_compiler.cc
|
22fe45de11ed7afdf21400d2de3abd23f3a62800 |
18-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Eliminate check-cast guaranteed by instance-of. Eliminate check-cast if the result of an instance-of with the very same type on the same value is used to branch to the check-cast's block or a dominator of it. Note that there already exists a verifier-based elimination of check-cast but it excludes check-cast on interfaces. This new optimization works for interface types and, since it's GVN-based, it can better recognize when the same reference is used for instance-of and check-cast. Change-Id: Ib315199805099d1cb0534bb4a90dc51baa409685
ompiler_enums.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
ocal_value_numbering.cc
ir_graph.h
ir_optimization.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
216eaa2927f424821a03d7c4c6bf701fdb48e865 |
17-Mar-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Fall back to Quick when Optimizing cannot compile. Currently applies when seeing unresolved types/methods/fields, and methods with try/catch. Change-Id: I93b12d440b39f0b9faf98f08f2bfddedfeff7182
ir_graph.cc
ir_graph.h
ass_driver_me_opts.cc
ass_driver_me_opts.h
uick/quick_compiler.cc
|
f2674eac59c02dc2046c7080a799c03ccf66384d |
16-Mar-2015 |
Andrew Hsieh <andrewhsieh@google.com> |
Fixed maybe used uninitialized GCC 4.9 found that ops[1].op maybe uninitialized in ArmMir2Lir::GetEasyMultiplyTwoOps, but used unconditionally in ArmMir2Lir::GenEasyMultiplyTwoOps Change-Id: Icf8fdf3b888bd54ccb252e95637774889c7a0f9d
uick/arm/int_arm.cc
|
921d6eb3c4e12a2000fe490c4e58d0e6e0628b90 |
14-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix 32 bit loads of 64 bit direct code pointers Fixes 64 bit problems for JIT since the JIT code cache isn't always in the low 2GB. (cherry picked from commit 0d2ac187be10838c008e6aaa03e5e55014e9087e) Change-Id: Ifd37d6a86166a91be1b258da7329c888fd82e4b9
uick/arm64/call_arm64.cc
uick/mips64/call_mips64.cc
uick/x86/call_x86.cc
|
15b9d5274399736ac09705f0507df24fac4f00c1 |
12-Mar-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
API change in StackVisitor::GetVReg*. - Remove GetVReg() and SetVReg() that were expecting to always succeed. - Change Quick-only methods to take a FromQuickCode suffix. - Change deopt to use dead values when GetVReg does not succeed: the optimizing compiler will not have a location for uninitialized Dex registers and potentially dead registers. Change-Id: Ida05773a97aff8aa69e0caf42ea961f80f854b77
uick/ralloc_util.cc
|
091d238936809f6668ca6b7606c62bc224add430 |
06-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix incompatible class change error for JIT stress mode There was a problem with miranda methods, when we would dequicken to one of these, it wouldn't resolve as virtual during the method lowering resolve. The solution is to try resolving as interface if we fail to resolve as virtual. Fixed a bug in dequickening where unreachable register lines with quick invokes would cause CHECK failuers. In this case we punt to the interpreter (test 435-try-*). Added test regression test. Example failure: java.lang.IncompatibleClassChangeError: The method 'void Main$TheInterface.m()' was expected to be of type virtual but instead was found to be of type interface (declaration of 'java.lang.reflect.ArtMethod' appears in out/host/linux-x86/framework/core-libart-hostdex.jar) at Main.DoStuff(Main.java:37) at Main.main(Main.java:44) Bug: 17950037 Change-Id: I39c32cc8849bf02032a4f61a7ce57462b7fcac75
ex_to_dex_compiler.cc
ir_method_info.cc
erified_method.cc
erified_method.h
|
9c8d96163670c0c615daa17a55b3b91b937c12ba |
10-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix dex2dex logic There was a bug in the dex2dex logic where would only dex2dex if IsCandidateForCompilation was true or method verifier had check casts. The bug was caused by not adding verification results, which caused verification_results_->GetVerifiedMethod to not have verified methods in most cases for interpreter-only and verify-none compilation. Caffeinemark interpret-only before: Sieve score = 1184 Loop score = 630 Logic score = 3519 String score = 1532 Float score = 882 Method score = 686 Overall score = 1159 After: Sieve score = 2820 Loop score = 1942 Logic score = 4694 String score = 1679 Float score = 2288 Method score = 1294 Overall score = 2244 Bug: 17950037 Change-Id: I535ab8784b434b0a8e3f66e3ab4936d10a1b04bf
erification_results.cc
|
6ad40cd6f28c5d3a75929a20eb18da32ef0ab421 |
10-Mar-2015 |
Goran Jakovljevic <goran.jakovljevic@imgtec.com> |
[MIPS64] Fix GenInlinedPeek and GenInlinedPoke functions. Change-Id: I4994bb2f9075cb3b6488e5a5b88dbed17b80595a
uick/mips64/int_mips64.cc
|
9b34b244ecddd8a35c922ed87bc3df0ca4db0282 |
09-Mar-2015 |
Mathieu Chartier <mathieuc@google.com> |
Trim arenas for JIT Moved arena pool into the runtime. Added arena trimming to arena pool. When called, this madvises the used memory. Changed the JIT compiler to trim arenas after compilation. Changed the arena mmap name to dalvik-LinearAlloc. Native PSS before: 80353 kB: Native 80775 kB: Native 78116 kB: Native After: 73357 kB: Native 70181 kB: Native 70306 kB: Native Bug: 17950037 Bug: 17643507 Bug: 19264997 Change-Id: I63e7a898fd6e909c2c677fa57b5917a7b1398930
uick/quick_compiler.cc
|
6ea651f0f4c7de4580beb2e887d86802c1ae0738 |
24-Feb-2015 |
Maja Gagic <maja.gagic@imgtec.com> |
Initial support for quick compiler on MIPS64r6. Change-Id: I6f43027b84e4a98ea320cddb972d9cf39bf7c4f8
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips64/assemble_mips64.cc
uick/mips64/backend_mips64.h
uick/mips64/call_mips64.cc
uick/mips64/codegen_mips64.h
uick/mips64/fp_mips64.cc
uick/mips64/int_mips64.cc
uick/mips64/mips64_lir.h
uick/mips64/target_mips64.cc
uick/mips64/utility_mips64.cc
uick/quick_compiler.cc
uick/ralloc_util.cc
|
66b26662ad0c52c648c9b5ea4a99149091e842b4 |
05-Mar-2015 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: AddVectorReduce should store result in memory carefully"
|
d37f91902048b23ad5fe5b20aba0ebc92e0b4896 |
04-Mar-2015 |
Andreas Gampe <agampe@google.com> |
ART: Do not produce CFI when not asked for Insignificant time savings on the host, but also reduces native allocation size. Change-Id: Iea3d335e5375a0076306059d094e5b994e24b9e6
uick/codegen_util.cc
|
085b733d15ec09afa27b85358acb89d9bc02e843 |
24-Feb-2015 |
Maxim Kazantsev <maxim.kazantsev@intel.com> |
ART: AddVectorReduce should store result in memory carefully When generating AddVectorReduce, in some cirsumstances we add value reduced from vector directly to memory. We must ensure that local LIR optimizations are aware about it. Change-Id: I8fe19939f67dcd184b08f63026b0da18007d34b8
uick/x86/target_x86.cc
|
e15ea086439b41a805d164d2beb07b4ba96aaa97 |
10-Feb-2015 |
Hiroshi Yamauchi <yamauchi@google.com> |
Reserve bits in the lock word for read barriers. This prepares for the CC collector to use the standard object header model by storing the read barrier state in the lock word. Bug: 19355854 Bug: 12687968 Change-Id: Ia7585662dd2cebf0479a3e74f734afe5059fb70f
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
|
8376830b762fbe974a9ddd2d43c640655883c7ab |
27-Feb-2015 |
buzbee <buzbee@google.com> |
Merge "Handle another untyped dex CONST issue"
|
335c55527846fc9019246163be0ac1ac02e95057 |
04-Feb-2015 |
Ningsheng Jian <ningsheng.jian@arm.com> |
ARM: Fix LIR flags in encoding map. Also correct memory reference type for PC relative load. Change-Id: I7a5258f2ed718448dc3e6e7fda6569b3f0c2fe46
uick/arm/assemble_arm.cc
uick/arm/int_arm.cc
uick/arm64/assemble_arm64.cc
|
71ef04481d1bc1b8381f8e997a0f0f9988419e34 |
26-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Change already inline error to warning There is a race condition in the JIT where the JIT and another running thread can both verify the same method at the same time. This causes the inline method to be added twice and the LOG(ERROR) was causing occasional test failures. Bug: 17950037 Bug: 18713034 Change-Id: I7f94384106ca5c621a5cf7d2ba36910d923d110c
uick/dex_file_method_inliner.cc
|
4f9bbe2a654165aedab62041101ae41d54c04e39 |
26-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Fix JIT for vmdebug test 99"
|
2d873b67f97c31da984c17ccbd94441c6264cafc |
20-Feb-2015 |
Nikola Veljkovic <Nikola.Veljkovic@imgtec.com> |
[MIPS] Fix mips32 trampoline problem. Reserve argument slots (for $a0-$a3) on the stack in the InvokeTrampoline() function, for entrypoints that contain direct reference to native implementation. Called function may use this space to store $a0-$a3 regs. This fixes the Settings app crash on mips32, when navigating to: Settings->Apps->(swipe) On SD card. Change-Id: If53ce822fd3ef6ef9839c89b556f76fac0792190
uick/mips/utility_mips.cc
|
c0d5f89d99c55ab63d6757fbd71dbfe95d347c1f |
25-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Fix JIT for vmdebug test 99 Test was flaky due to JIT re-compiliation after deoptimization resulting in some invalid PC offsets. Bug: 17950037 Change-Id: I276c84c918579259ce47ef873892c3c5dcf0c977
erification_results.cc
|
f58c11c92df59f7ec7d9f2dfadc7e400b790883d |
14-Feb-2015 |
Douglas Leung <douglas.leung@imgtec.com> |
Fix argument register allocation for mips32. Change-Id: Ic21b0371d7cafb9b67217b92bb2edb735a43d1b0
uick/gen_invoke.cc
|
7e6a233f5d2268de0bf1600eed77c05753615f52 |
24-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Delete bad DCHECK The declaring class of a super field could be in a different dex file. Fixes sdk build. Change-Id: I8258d64eeff6539afb52448595f5a6ec4c71a6bc
uick/gen_common.cc
|
e5f13e57ff8fa36342beb33830b3ec5942a61cca |
24-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Add JIT"" Added missing EntryPointToCodePointer. This reverts commit a5ca888d715cd0c6c421313211caa1928be3e399. Change-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/quick_compiler.cc
erification_results.cc
erified_method.cc
erified_method.h
reg_analysis.cc
|
a5ca888d715cd0c6c421313211caa1928be3e399 |
24-Feb-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Add JIT" Sorry, run-test crashes on target: 0-05 12:15:51.633 I/DEBUG (27995): Abort message: 'art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast<uintptr_t>(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc=71e3366b code=0x71e3362d size=ad000000' 10-05 12:15:51.633 I/DEBUG (27995): r0 00000000 r1 0000542b r2 00000006 r3 00000000 10-05 12:15:51.633 I/DEBUG (27995): r4 00000006 r5 b6f9addc r6 00000002 r7 0000010c 10-05 12:15:51.633 I/DEBUG (27995): r8 b63fe1e8 r9 be8e1418 sl b6427400 fp b63fcce0 10-05 12:15:51.633 I/DEBUG (27995): ip 0000542b sp be8e1358 lr b6e9a27b pc b6e9c280 cpsr 40070010 10-05 12:15:51.633 I/DEBUG (27995): Bug: 17950037 This reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4. Change-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/quick_compiler.cc
erification_results.cc
erified_method.cc
erified_method.h
reg_analysis.cc
|
2535abe7d1fcdd0e6aca782b1f1932a703ed50a4 |
17-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add JIT Currently disabled by default unless -Xjit is passed in. The proposed JIT is a method JIT which works by utilizing interpreter instrumentation to request compilation of hot methods async during runtime. JIT options: -Xjit / -Xnojit -Xjitcodecachesize:N -Xjitthreshold:integervalue The JIT has a shared copy of a compiler driver which is accessed by worker threads to compile individual methods. Added JIT code cache and data cache, currently sized at 2 MB capacity by default. Most apps will only fill a small fraction of this cache however. Added support to the compiler for compiling interpreter quickened byte codes. Added test target ART_TEST_JIT=TRUE and --jit for run-test. TODO: Clean up code cache. Delete compiled methods after they are added to code cache. Add more optimizations related to runtime checks e.g. direct pointers for invokes. Add method recompilation. Move instrumentation to DexFile to improve performance and reduce memory usage. Bug: 17950037 Change-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca
lobal_value_numbering_test.cc
vn_dead_code_elimination_test.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/quick_compiler.cc
erification_results.cc
erified_method.cc
erified_method.h
reg_analysis.cc
|
4de86d0987139153ae0e2d50dbbefde2ce34ee87 |
20-Feb-2015 |
buzbee <buzbee@google.com> |
Handle another untyped dex CONST issue The lack of typing for dex byte code instructions causes problems for the Quick compiler's register allocation scheme. In Quick, Dalvik virtual registers can have multiple "home locations" depending on type. Because CONST operators are untyped and their result can be used in multiple type contexts, the code generator must ensure that any CONST #0 definitions of potential floating point uses are also flushed to the associated reference view for the vreg (if it exists) to support GC. Previously, this issue was believed to have been fixed by c/255389 (see internal b/7250540). However, the earlier fix failed to account for const definitions propogating to other vregs via MOVE. This CL addresses that case by applying the earlier workaround to MOVE operators. Note that there are a few other places where we attempt to deal with this general problem. First, the verifier will disable compilation for dex code sequences which have type mismatches on non-const operations. Second, during vreg analysis we detect type mismatches on Phi insertion, and disable register promotion if there is a mismatch. b.android.com/147187 Change-Id: I70f27a59e6f84a89777db91ceacaa94a42f5e952
uick/mir_to_lir.cc
|
55693289c9f6c616e195e7b4ea3fe8e10c0681a6 |
20-Jan-2015 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
ART: Some conditions should be stricter in GenInlinedMinMax() When we inline Min or Max intrinsics of long data type in 32-bit mode we should care about register overlap cases. I.e. when result and operands share partially or entirely same registers. We consider three cases: a) If result is between two operands, then we fail to inline because implementation tends to be overcomplicated. b) Since we always copy the first operand into result, we should check whether result and the second operand share same registers. If so, we swap the second with the first one. c) If operands share same registers then we just copy the first operand into result and stop. The algorithm requires many registers. Therefore, we try to reuse some of them. This also needs check for overlap. Change-Id: I1e327acedfdc63d9b434b21b41d75bb86c41f1d0
uick/x86/int_x86.cc
|
d7a5e553e0ee0a2090c719312f7d24dae3746cec |
20-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Fix core spill mask for x86 special suspend. Bug: 19445246 Change-Id: I7dd734e64a4bfa5980fa1be9903e3fd0c2be3749
uick/x86/call_x86.cc
|
6aa7fe620a95b4404a4fed451e46ebf0cdd66204 |
19-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Replace a few std::vector with ArenaVector in Mir2Lir."
|
80b96d1a76790527f72a660ac03d9c215eed17ce |
19-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Replace a few std::vector with ArenaVector in Mir2Lir. Change-Id: I7867d60afc60f57cdbbfd312f02883854d65c805
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/target_x86.cc
|
6561551f094f79ce569160b29131b07be7aa3363 |
19-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Move arenas into runtime"
|
b666f4805c8ae707ea6fd7f6c7f375e0b000dba8 |
18-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move arenas into runtime Moved arena pool into the runtime. Motivation: Allow GC to use arena allocators, recycle arena pool for linear alloc. Bug: 19264997 Change-Id: I8ddbb6d55ee923a980b28fb656c758c5d7697c2f
ompiler_ir.h
lobal_value_numbering.h
vn_dead_code_elimination.h
ocal_value_numbering.h
ir_analysis.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/arm/codegen_arm.h
uick/mir_to_lir.h
uick/resource_mask.cc
sa_transformation.cc
|
6ce3eba0f2e6e505ed408cdc40d213c8a512238d |
16-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Add suspend checks to special methods. Generate suspend checks at the beginning of special methods. If we need to call to runtime, go to the slow path where we create a simplified but valid frame, spill all arguments, call art_quick_test_suspend, restore necessary arguments and return back to the fast path. This keeps the fast path overhead to a minimum. Bug: 19245639 Change-Id: I3de5aee783943941322a49c4cf2c4c94411dbaa2
ir_graph.cc
ir_graph.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
2ee8837c49680fa0c928fb5d5fc6ef7ae6532eea |
19-Feb-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Templatize IsInt & IsUint"
|
ab1eb0d1d047e3478ebb891e5259d2f1d1dd78bd |
14-Feb-2015 |
Andreas Gampe <agampe@google.com> |
ART: Templatize IsInt & IsUint Ensure that things are used correctly. Change-Id: I76f082b32dcee28bbfb4c519daa401ac595873b3
ex_to_dex_compiler.cc
uick/mips/utility_mips.cc
|
698e4a8942b6f6005dd247a73347f8086c8e7e6e |
18-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Distinguish FP and integral constants in LVN."
|
a5c81189a5075c53d649135e0417fc075eeead5a |
18-Feb-2015 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Fix InsertCaseLabel to return boundary_lir always"
|
3dbce6f822cc9fa49505adde0a556fd67996268e |
18-Feb-2015 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Promoted register may be wrong after the load of zero fp constant"
|
22c7f5bc70d0c8f3e5915b7fb98c9f9930cfdff0 |
18-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Distinguish FP and integral constants in LVN. Change-Id: I31a58ff19fb95a2f56420359e50332c1dce6cbc7
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
|
37e05bf384e21a031455c00b5fec668c187acd8d |
18-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Disable DCE until we fix FP/Core reg mismatches. GVN and TypeInference can miss some FP/Core register mismatch: const v0, #X ; marked as float invoke-virtual v0, void foo(float) const v0, #X ; marked as core aput v0, v1, v2 ; float[] not used The second const is eliminated by the DCE because it writes the same value to the same dalvik reg. We replace the SSA register name defined by the first const and used by the invoke-virtual with the one defined by the second const. When we generate code for the invoke-virtual, we get a core location and may need a temporary to set up the FP argument and we may not have an available temporary. This may affect the bug below (more investigation needed). Bug: 19419671 Change-Id: I44abd390706b980c346b36c9828a3bcb4e96726d
uick/quick_compiler.cc
|
0d5fd49f222541d0f8857646bbc51a79ef0439f9 |
11-Feb-2015 |
Vladimir <vladimir.a.ivanov@intel.com> |
ART: Promoted register may be wrong after the load of zero fp constant Because of Dalvik byte code's lack of immediate typing, the same vreg may be used in core, ref and fp operations. To properly support GC, we must ensure that if a constant zero is loaded into a fp view of a vreg, it must also be loaded into the core/ref view. The code that was responsible for ensuring this failed to handle the case of a vreg having a non-promoted fp view and a promoted core/ref view. Change-Id: If77295aa93317e749ceacc8c1dd9e582122c368f Signed-off-by: Vladimir <vladimir.a.ivanov@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/gen_loadstore.cc
|
afba696823ec7c019de72f17cd198e91edd3bf4f |
17-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Dead code elimination based on GVN results."
|
7a01dc2107d4255b445c32867d15d45fcebb3acd |
02-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Dead code elimination based on GVN results. Change-Id: I5b77411a8f088f0b561da14b123cf6b0501c9db5
b_optimizations.h
ex_flags.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
vn_dead_code_elimination.cc
vn_dead_code_elimination.h
vn_dead_code_elimination_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
uick/quick_compiler.cc
|
d532f006f621b65d2a390f9fd946acb39dfd2e8d |
13-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Add tests for wide constants in LVN. Follow up to https://android-review.googlesource.com/132210 Change-Id: I4e29483fb9931ae5670539954b69cdb078843e72
ocal_value_numbering_test.cc
|
bce889940f10319bf67bdc5630c84dd7f6e5c246 |
13-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up Scoped-/ArenaAlocator array allocations."
|
e4fcc5ba2284c201c022b52d27f7a1201d696324 |
13-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Clean up Scoped-/ArenaAlocator array allocations. Change-Id: Id718f8a4450adf1608306286fa4e6b9194022532
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
sa_transformation.cc
reg_analysis.cc
|
47d2e48092717f2439b41d36430b5e1da9f8915e |
06-Feb-2015 |
Serguei Katkov <serguei.i.katkov@intel.com> |
LVN handles const-wide/32 incorrectly Redundant shift to 16 bit should be eliminated otherwise any 32 bit shift of 32 bit constant will result in 0. Change-Id: I4969b54357bc2d9a836e89dd7919199fff966684 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ocal_value_numbering.cc
|
a78ef44266c38cc4895554e973156a7c7896dd87 |
12-Feb-2015 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Fix InsertCaseLabel to return boundary_lir always This patch doesn't return new_label when cu_->verbose, because we will not assign offsets to new_label at this stage. Change-Id: Ie7f625848b0cf7cabfbba694b5c20b0784bc8501 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/codegen_util.cc
|
aa874e0bbfb21aec0661b93cb1c2ce065bc20302 |
10-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Rewrite Phi node insertion."
|
69c37c3b5bc868003115898a3d1754604bb6db96 |
10-Feb-2015 |
Jeff Hao <jeffhao@google.com> |
Merge "Revert "Revert "Allow preopted apps to have sharpened calls for non-x86 architectures."""
|
6a8946ba3d170fee0ff06de42209be4b14e6aff3 |
09-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Rewrite Phi node insertion. Delay Phi node insertion to the SSAConversion pass to allow updating the vreg_to_ssa_map_ with INVALID_SREG when we omit a Phi in the pruned SSA form. Change-Id: I450dee21f7dc4353d25fc66f4d0ee01671de6e0e
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ass_driver_me_post_opt.cc
ost_opt_passes.h
sa_transformation.cc
|
72f53af0307b9109a1cfc0671675ce5d45c66d3a |
12-Nov-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Remove MIRGraph::dex_pc_to_block_map_ This patch removes MIRGraph::dex_pc_to_block_map_, adds a local variable dex_pc_to_block_map inside MIRGraph::InlineMethod(), and updates several functions to pass dex_pc_to_block_map. The goal is to limit the scope of dex_pc_to_block_map and the usage of FindBlock, so that various compiler optimizations cannot rely on dex pc to look up basic blocks to avoid duplicated dex pc issues. Also, this patch changes quick targets to use successor blocks for switch case target generation at Mir2Lir::InstallSwitchTables(). Change-Id: I9f571efebd2706b4e1606279bd61f3b406ecd1c4 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ir_graph.cc
ir_graph.h
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/codegen_util.cc
uick/mips/call_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
a0acc2d5dbf8764b346da3d9e6ce1a91427fc4b5 |
27-Jan-2015 |
Jeff Hao <jeffhao@google.com> |
Revert "Revert "Allow preopted apps to have sharpened calls for non-x86 architectures."" Should really say it allows pre-linked calls instead of sharpened calls. Bug: 19100762 Change-Id: Ia2045a9eda92255e87a7f6187de18d6370b8f060
uick/arm64/call_arm64.cc
|
7d3186247cd382c4f7cf8093961795e8565b00e0 |
04-Feb-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Pass Options should be strings instead of integers"
|
f4b24f7ea507ff41db39154a1e6a681a582e224a |
04-Feb-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "ART: Change x86 long param ABI (Quick/JNI/Opt)"
|
98a26e17bb7ecfcd5c9b96394fdeca0a67cafcb3 |
20-Jan-2015 |
Jean-Philippe Halimi <jean-philippe.halimi@intel.com> |
ART: Pass Options should be strings instead of integers This patch modifies the pass options to handle string values as well as integers. This will allow for more verbose pass customization. Change-Id: Iaf9507ceaae2cef317a23f0783404bacfdcad023 Signed-off-by: Jean-Philippe Halimi <jean-philippe.halimi@intel.com>
ompiler_ir.h
ass_driver_me.h
ass_me.h
|
900e7b36057410cb12cc3c1a066dca04db3c2d45 |
03-Feb-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ARM/ARM64: Dump thread offset."
|
a34e760fa5cc3102ce1998f10816d380c37f43aa |
02-Feb-2015 |
Zheng Xu <zheng.xu@arm.com> |
ARM/ARM64: Dump thread offset. Dump thread offset in compiler verbose log for arm32/arm64 and oatdump for arm64. Before patch : 0x4e: ldr lr, [rSELF, #604] After patch : 0x4e: ldr lr, [rSELF, #604] ; pTestSuspend Change-Id: I514e69dc44b1cf4c8a8fa085b31f93cf6a1b7c91
uick/arm/target_arm.cc
uick/arm64/target_arm64.cc
|
b3cdf93d70256c4b0a9f6ed55ba4601f8c70bad4 |
27-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Fix to X86Mir2Lir::GenReduceVector When generating the result to memory, the existing code didn't set the aliasing correctly. Mark the result as going to a Dalvik VR, and mark it as only a write. Change-Id: I12f3156b7f84548b320a4fc142ff5a87a14e73d1 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/target_x86.cc
|
cc6bb730e9bed0ca2d2f4999d73b9bfccf0fe961 |
02-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "AdvanceMIR does not know how to passthrough the empty block"
|
ea392161b862f2cb93dffa019a32ec7dff47f21f |
29-Jan-2015 |
Serguei Katkov <serguei.i.katkov@intel.com> |
AdvanceMIR does not know how to passthrough the empty block AdvanceMIR utility function could easily traverse the empty blocks to find the next bytecode. Change-Id: I037710b567275799f940b5b9766bcafec570b70e Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ir_optimization.cc
|
14247b687562003721c18aecf3f7aecf2e53d6ce |
01-Feb-2015 |
Brian Carlstrom <bdc@google.com> |
Revert "Allow preopted apps to have sharpened calls for non-x86 architectures." This reverts commit 1e3dfff2b73e142c568625a0310c1764658218c4.
uick/arm64/call_arm64.cc
|
3e6a3bf797e49b7f449256455c7e522e888687d8 |
19-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Change x86 long param ABI (Quick/JNI/Opt) Ensure that we don't pass a long parameter across the last register and the stack: skip the register and allocate it only on the stack. This was requested to simplify the optimizing compiler code generation for x86. Optimizing (Baseline) compiler support for x86 longs: - Remove QuickParameter from Location, as there are no longer any uses of it. Bump oat.h version because we changed an ABI again. I changed IsParamALong() to return false for argument 0 (this argument). I am not sure why it differed from all other tests. I have not tested on ARM. I followed Nicolas's suggestions for setting the value of kSplitPairAcrossRegisterAndStack for different architectures. Change-Id: I2f16b33c1dac58dd4f4f503e9c2309d845f5fb7a Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/target_x86.cc
|
6407d3c115a524986e0ef21182d0ee87039a9a17 |
29-Jan-2015 |
Jeff Hao <jeffhao@google.com> |
Merge "Allow preopted apps to have sharpened calls for non-x86 architectures."
|
5bdab12d8b48ca4c395d9d2c506ebff0df01b734 |
27-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Clean up pass driver Added pass manager to hold the state which used to be in global variables. Static variables caused issues with Runtime.exit since they are destroyed by the global destructors while threads are still executing. Bug: 17950037 Change-Id: Ie0e4546dc9e48909c8df996a5c135be682d50044
ir_graph.cc
ass_driver.h
ass_driver_me.h
ass_driver_me_opts.cc
ass_driver_me_opts.h
ass_driver_me_post_opt.cc
ass_driver_me_post_opt.h
ass_manager.cc
ass_manager.h
ass_me.h
uick/quick_compiler.cc
uick/quick_compiler.h
uick/quick_compiler_factory.h
|
763abfd0d803f8169e97d3da944043c2464aac0a |
28-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Even more Quick cleanup"
|
9c462086269324350516b3394d478f1d71a4b5d1 |
27-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Even more Quick cleanup Remove Backend. Change-Id: I247cc65ccda6a362ba1a8f5e73e7f12ecd980a87
ackend.h
ompiler_ir.cc
ompiler_ir.h
uick/codegen_util.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
|
966c3ae95d3c699ee9fbdbccc1acdaaf02325faf |
27-Jan-2015 |
Mark P Mendell <mark.p.mendell@intel.com> |
Revert "Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)"" This reverts commit 949c91fb91f40a4a80b2b492913cf8541008975e. This time, don't clobber EBX before saving it. Redo some of the macros to make register usage explicit. Change-Id: I8db8662877cd006816e16a28f42444ab7c36bfef
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
1e3dfff2b73e142c568625a0310c1764658218c4 |
27-Jan-2015 |
Jeff Hao <jeffhao@google.com> |
Allow preopted apps to have sharpened calls for non-x86 architectures. Bug: 19100762 Change-Id: Idce391a06a85b881ce138756155b36e3ed7319c1
uick/arm64/call_arm64.cc
|
eb6e852e1ed2b1c13e7b92a38a842dd42d60e82a |
27-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: More Quick cleanup"
|
949c91fb91f40a4a80b2b492913cf8541008975e |
27-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "ART: Implement X86 hard float (Quick/JNI/Baseline)" And the 3 Mac build fixes. Fix conflicts in context_x86.* . This reverts commits 3d2c8e74c27efee58e24ec31441124f3f21384b9 , 34eda1dd66b92a361797c63d57fa19e83c08a1b4 , f601d1954348b71186fa160a0ae6a1f4f1c5aee6 , bc503348a1da573488503cc2819c9e30807bea31 . Bug: 19150481 Change-Id: I6650ee30a7d261159380fe2119e14379e4dc9970
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
0e92f4fa0079dad6d1df69abd13054a9885cba98 |
27-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: More Quick cleanup Remove frontend, move code to QuickCompiler. Fix some includes. Change-Id: Iedd8f339ec76635e48b166e285f7fc571fc948ac
rontend.cc
rontend.h
uick/quick_compiler.cc
|
a2e18ed9397f21c96eae4a26df9ca35a6a97341d |
27-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix inlining of Mir2Lir Missed -inl includes. Change-Id: I39e6d603c7f5d36693aca3816653594488bff63f
uick/arm/assemble_arm.cc
uick/arm64/assemble_arm64.cc
uick/mips/assemble_mips.cc
|
8c1a3a22542bbe6f42649f1af7c579ddbb8134b2 |
27-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Some Quick cleanup"
|
0b9203e7996ee1856f620f95d95d8a273c43a3df |
23-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Some Quick cleanup Make several fields const in CompilationUnit. May benefit some Mir2Lir code that repeats tests, and in general immutability is good. Remove compiler_internals.h and refactor some other headers to reduce overly broad imports (and thus forced recompiles on changes). Change-Id: I898405907c68923581373b5981d8a85d2e5d185a
b_optimizations.h
ompiler_internals.h
ompiler_ir.cc
ompiler_ir.h
ataflow_iterator.h
ex_flags.h
ex_types.h
rontend.cc
rontend.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ir_optimization_test.cc
ass.h
ass_driver.h
ass_driver_me.h
ass_driver_me_opts.cc
ass_driver_me_post_opt.cc
ass_me.h
ost_opt_passes.cc
ost_opt_passes.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/ralloc_util.cc
uick/resource_mask.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_location.h
sa_transformation.cc
erification_results.cc
erified_method.cc
reg_analysis.cc
|
f80b64121d2a138c3863898ec14942fe27c0270e |
26-Jan-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add missing EndTiming in CompileMethod DCHECK failure when running tests with JIT. Bug: 17950037 Change-Id: I4f886758b2a9322c2d7a8e8449e84c9a1709c813
rontend.cc
|
00ca84730a21578dcc6b47bd8e08b78ab9b2dded |
26-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix range check for intrinsic String.charAt() on x86. Bug: 19125146 Change-Id: I274190a7a60cd2e29a854738ed1ec99a9e611969
uick/x86/target_x86.cc
|
3d2c8e74c27efee58e24ec31441124f3f21384b9 |
13-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Implement X86 hard float (Quick/JNI/Baseline) Use XMM0-XMM3 as parameter registers for float/double on X86. X86_64 already uses XMM0-XMM7 for parameters. Change the 'hidden' argument register from XMM0 to XMM7 to avoid a conflict. Add support for FPR save/restore in runtime/arch/x86. Minimal support for Optimizing baseline compiler. Bump the version in runtime/oat.h because this is an ABI change. Change-Id: Ia6fe150e8488b9e582b0178c0dda65fc81d5a8ba Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
ff87d7bdc2c06bece8ea783dd4979360f1d51103 |
20-Jan-2015 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Fix GenInlined functions This patch fixes Mir2Lir::GenInlinedReverseBytes, Mir2Lir::GenInlinedAbsInt, Mir2Lir::GenInlinedAbsLong, Mir2Lir::GenInlinedFloatCvt, Mir2Lir::GenInlinedDoubleCvt, X86Mir2Lir::GenInlinedSqrt, X86Mir2Lir::GenInlinedMinMaxFP, X86Mir2Lir::GenInlinedMinMax, X86Mir2Lir::GenInlinedPeek, and X86Mir2Lir::GenInlinedReverseBits to generate no code, when results are unused. New calls without assignments are added to 082-inline-execute. Change-Id: I7076e9ddbea43545315f2aeb677c63a8a6e95224 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/gen_invoke.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
582f541b35f40b75f2629a41259d2162608647d5 |
21-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix arm64 backend Fix a register size problem after previous commit f681570077563bb529a30f9e7c572b837cecfb83. Change-Id: If04e647324bcd6fe279c25e70214a9f7c5b816ec
uick/arm64/utility_arm64.cc
|
f681570077563bb529a30f9e7c572b837cecfb83 |
20-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Make some helpers non-virtual in Mir2Lir These don't need to be virtual. Change-Id: Idca3c0a4e8b5e045d354974bd993492d6c0e70ba
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
97d9f286971a4c1eec70e08f9f18f990d21780d5 |
20-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Some Quick cleanup"
|
d500b53ff8742f76b63c9f7593082d9e8114b85f |
17-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Some Quick cleanup Move some definitions around. In case a method is already virtual, avoid instruction-set tests. Change-Id: I8d98f098e55ade1bc0cfa32bb2aad006caccd07d
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
|
ddf05aa4c4ed4a86ac51fd5eca87739c3164fd9c |
14-Jan-2015 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
ART: Fix compiler warning at arm/int_arm.cc:644 Clang can report warning: int_arm.cc:644:89: error: 'ops.art::ArmMir2Lir::EasyMultiplyOp::shift' may be used uninitialized in this function OpRegRegRegShift(kOpRsub, r_tmp1, r_src, r_src, EncodeShift(kArmLsl, ops[0].shift)); That warning becomes blocker for libart-compiler.so compilation. This patch fixes the only case where 'shift' member was uninitialized. Change-Id: I6428170994c9f97e7a3d85d752b97dfcdff0c8a4 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/arm/int_arm.cc
|
066f9e4b87d875f02a10fd43d8a251b3c17a64a3 |
16-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Quick: Clean up optimization pass order. Move the TypeInference pass to post-opt passes and make it a PassMEMirSsaRep as we need to rerun the pass if the SSA representation has changed. (Though we currently don't have any pass that would require it.) The results of MethodUseCount and ConstantPropagation passes are used only in the BBOptimization and codegen and stay valid across BBOptimization and SuspendCheckElimination, so move them out of post-opt passes to just before the BBOpt (and reverse the dependency between ConstantPropagation and init reg locations passes). Change-Id: If02c087107cef48d5f9f7c18b0a0ace370fe2647
b_optimizations.cc
b_optimizations.h
ir_optimization.cc
ass_driver_me_opts.cc
ass_driver_me_post_opt.cc
ost_opt_passes.cc
ost_opt_passes.h
reg_analysis.cc
|
71fb52fee246b7d511f520febbd73dc7a9bbca79 |
30-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Optimizing compiler intrinsics Add intrinsics infrastructure to the optimizing compiler. Add almost all intrinsics supported by Quick to the x86-64 backend. Further intrinsics require more assembler support. Change-Id: I48de9b44c82886bb298d16e74e12a9506b8e8807
uick/dex_file_method_inliner.cc
|
8ebdc2bdbbae5dd014bce8d438f0eca02bad9ff9 |
14-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix indentation in Mips backend Fix the indentation to be standard. Change-Id: I39a16716be3429dfef6df0a585e24423b46363a2
uick/mips/assemble_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
|
ea1c64dba97cb367e6594332f2e542bfcf30e295 |
14-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix wide volatile IGET/IPUT on ARM without atomic ldrd/strd."
|
ee5e273e4d0dd91b480c8d5dbcccad15c1b7353c |
13-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Fix wide volatile IGET/IPUT on ARM without atomic ldrd/strd. If ldrd/strd isn't atomic, IPUT_WIDE uses ldrexd+strexd and we need to record the safepoint for the ldrexd rather than strexd. IGET_WIDE was simply missing the memory barrier. Bug: 18993519 Change-Id: I4e9270b994f413c1a047c1c4bb9cce5f29e42cb4
uick/arm/utility_arm.cc
uick/gen_common.cc
|
7774edf4c19734922669fa888923e8c7d7385ea3 |
14-Jan-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Skip r1 on arm if first parameter is a long."
|
8d36591d93920e7b7830c3ffee3759b561f5339e |
13-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Use jalr instead of jr for Mips Use the jalr instruction instead of jr in stubs and compiled code. Change-Id: Idacc5167a5bb0113dc2e7716e4767e5ed07b5e0b
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/utility_mips.cc
|
69c15d340e7e76821bbc5d4494d4cef383774dee |
13-Jan-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Skip r1 on arm if first parameter is a long. Change-Id: I16d927ee0a0b55031ade4c92c0095fd74e18ed5b
uick/arm/target_arm.cc
|
6650de241f63f725830560ec09c5e1f13c0d8488 |
12-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "Revert "ART: Implement hard float for X86""
|
0f9b03c65e0ee8bdc5ddf58af100f5fc356cc98b |
12-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Revert "ART: Implement hard float for X86" This reverts commit 59b9cf7ec0ccc13df91be0bd5c723b8c52410739. Change-Id: I08333b528032480def474286dc368d916a07e17f
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
13428670585d9a7f6b24273fb26c721c2ff6c551 |
12-Jan-2015 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Implement hard float for X86"
|
59b9cf7ec0ccc13df91be0bd5c723b8c52410739 |
09-Jan-2015 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Implement hard float for X86 Use XMM0-XMM3 as parameter registers for float/double on X86. X86_64 already uses XMM0-XMM7 for parameters. Change the 'hidden' argument register from XMM0 to XMM7 to avoid a conflict. This change was requested to simplify the Optimizing compiler implementation. Change-Id: I89ba8ade99b9a8a5b1ad1ee5f5cbfd33d656bfaa Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
425f239c291d435f519a1cf4bdd9ccc9a2c0c070 |
08-Jan-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix handling of long argument spanning register/memory. Comment in arm_lir.h says: * If a 64-bit argument would span the register/memory argument * boundary, it will instead be fully passed in the frame. This change implements such logic for all platforms. We still need to pass the low part in register as well because I haven't ported the jni compilers (x86 and mips) to it. Once the jni compilers are updated, we can remove the register assignment. Note that this greatly simplifies optimizing's register allocator by not having to understand a long spanning register and memory. Change-Id: I59706ca5d47269fc46e5489ac99bd6576e87e7f3
uick/gen_invoke.cc
|
d30feca670d0af02783bbdfd4a29c5078c18bdc5 |
06-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Remove LowestSetBit and IsPowerOfTwo"
|
cfe71e59c667abb35bc2363c49af7f8b549c44d0 |
06-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Fix divide-by-zero for ARM There was an infinite loop in the code generation for a divide by literal zero. Bug: 18887754 Change-Id: Ibd481918d3c6d7bc62fdd1a6807042009f561d95
uick/arm/int_arm.cc
|
7e499925f8b4da46ae51040e9322690f3df992e6 |
06-Jan-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove LowestSetBit and IsPowerOfTwo Remove those functions from Mir2Lir and replace with functionality from utils.h. Change-Id: Ieb67092b22d5d460b5241c7c7931c15b9faf2815
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.h
uick/resource_mask.cc
uick/x86/int_x86.cc
|
3d5872eb090a04a9444b5621d381eec3846f47a3 |
05-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Reorder entrypoint argument order"
|
43a725cde37740f0384f3f73227c54249ba4fe4f |
02-Jan-2015 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Cut filename for DumpCFG"
|
23149ac231d754647e536ff7c274d05f2fb729e2 |
02-Jan-2015 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Ensure FP GET/PUT doesn't use Core register"
|
1cc7dbabd03e0a6c09d68161417a21bd6f9df371 |
18-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Reorder entrypoint argument order Shuffle the ArtMethod* referrer backwards for easier removal. Clean up ARM & MIPS assembly code. Change some macros to make future changes easier. Change-Id: Ie2862b68bd6e519438e83eecd9e1611df51d7945
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
cee97e51ed45401c274cd67bfa6216624a995f6f |
20-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Cut filename for DumpCFG If the name/path is too long, we'd silently fail dumping. Cut the name when it's too long, and write an error message if we still fail opening. Change-Id: Id439a3367a8fdb50027959dd8c183913d074e669
ir_graph.cc
|
5c79aec9d53d1320041d5a52e5115d78d16035b7 |
22-Dec-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Swap-space in the compiler"
|
e21dc3db191df04c100620965bee4617b3b24397 |
09-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Swap-space in the compiler Introduce a swap-space and corresponding allocator to transparently switch native allocations to memory backed by a file. Bug: 18596910 (cherry picked from commit 62746d8d9c4400e4764f162b22bfb1a32be287a9) Change-Id: I131448f3907115054a592af73db86d2b9257ea33
uick/codegen_util.cc
uick/mir_to_lir.h
|
bfe400bb1a28cde991cdb3e39bc27bae6b04b8c2 |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Fix running out of temps when storing invoke-interface result. On ARM, after emitting invoke-interface we didn't have any free temps to use for storing the result, so we would crash if the result was an unpromoted dalvik register with stack location too far from SP. Bug: 18769895 (cherry picked from commit d6bd06c713e8ec69de96510ef57bdf7adb4781ed) Change-Id: Id88f6f3788eaf6ecbc7bd68880b445423f6e4f94
uick/arm/target_arm.cc
uick/arm64/target_arm64.cc
uick/gen_invoke.cc
uick/mips/target_mips.cc
uick/x86/target_x86.cc
|
1c6ea4483982803b3bc3635b7dd71744c1fe1cef |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Move two members out of MIRGraph::temp_::ssa. It turns out they are used outside the SSA transformation by the x86 back-end. This is a partial revert of https://android-review.googlesource.com/120571 Change-Id: Ia5cb2988ab0625d8519901124bd4fc184d5f0886
ir_dataflow.cc
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
a64d0142edd7c325c0a59d170d8c82c8176faa03 |
19-Dec-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Implement FP packed reduce for x86"
|
db75f3c7999395eeeded417e7db06194bf2dc608 |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up dead loops before suspend check elimination."
|
202eaaf26ac4ec67fab479e181dbd2507737ff65 |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up post-opt passes, perform only those we need."
|
341e425599ba32f0776bcd294882e1e30cafa10f |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up dead loops before suspend check elimination. Get rid of BasicBlock::KillUnreachable() and just Kill() unreachable blocks from the DFS order calculation. Bug: 18718277 Change-Id: Icaf7b9c2320530e950f87e1e2e2bd1fa5f53cb98
b_optimizations.h
ir_graph.cc
ir_graph.h
ir_optimization.cc
|
c146d498a184243d9100e94861f519a7378bfa68 |
19-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up MIRGraph::CanThrow()."
|
315cc20c2146b777c278d43987b2eeb61035d6a6 |
18-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up MIRGraph::CanThrow(). Merge with the code from CombineBlocks(). Change-Id: I73c71286acba1b6042f85f0bd19c525450ce9c05
ir_optimization.cc
|
ffda4993af78484feb7a4ce5497c1796463c0ba1 |
18-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up post-opt passes, perform only those we need. Change-Id: If802074d780d91151d236ef52236b6f33ca47258
b_optimizations.cc
b_optimizations.h
lobal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ir_optimization_test.cc
ass_driver_me_post_opt.cc
ost_opt_passes.h
sa_transformation.cc
|
52c489645b6e9ae33623f1ec24143cde5444906e |
16-Dec-2014 |
Calin Juravle <calin@google.com> |
[optimizing compiler] Add support for volatile - for backends: arm, x86, x86_64 - added necessary instructions to assemblies - clean up code gen for field set/get - fixed InstructionDataEquals for some instructions - fixed comments in compiler_enums * 003-opcode test verifies basic volatile functionality Change-Id: I144393efa312dfb2c332cb84056b00edffee338a
ompiler_enums.h
|
6c170c9e884e9dddf61d963d403042ee2a399e7d |
17-Dec-2014 |
Andreas Gampe <agampe@google.com> |
ART: Punt to the interpreter for VerifiedMethod errors In case that the GC map can't be created (because of size restrictions), do not fail the class. Instead punt to the interpreter. Bug: 17791183 (cherry picked from commit f535c69f115c61ffadca1bd2706244d0aa30f9aa) Change-Id: I348bb306dbfc85c235fa93c0c527fba6627551fe
erification_results.cc
erified_method.cc
|
ee690a3dd364c025ebc1767d9f84097bb7473eec |
01-Dec-2014 |
David Brazdil <dbrazdil@google.com> |
ART: Added Checker, a pattern matching test engine This patch adds a Python script which implements a domain-specific mini-language similar to that of LLVM's FileCheck. It is primarily intended for writing tests for the optimizing compiler but could be configured for other use cases too. It is implemented from scratch in order to avoid dependency on LLVM. Checker tests are written in Java and dex2oat is invoked with a flag which dumps the CFG before and after each pass of the optimizing compiler. The output is then compared against assertions in the test's comments parsed by Checker. See comments in tools/checker.py for more details about the currently supported language features. This initial CL implements only one type of assertion - whether the output contains lines matching a desired pattern in the given order - but supports both plain text and regex matching and allows for equivalency testing by matching for the outcome of a previous match. See the tests in compiler/optimizing/test/ConstantFolding.java for examples. Change-Id: I1ad7431b399c38dc0391ccee74d2c643ba0b0675
uick/quick_compiler.cc
|
6f5f5d05caed8465ad15ca5728e2a30c7a080d94 |
07-Dec-2014 |
Maxim Kazantsev <maxim.kazantsev@intel.com> |
ART: Implement FP packed reduce for x86 This patch implements correct FP vector reduction by index. Previous implementation corresponded to packed add reduction. Change-Id: I02a9bcb8e8945937ba7a511b723f23ec30667d34
uick/x86/target_x86.cc
|
55037f186fff482084cd5659ff747339eb17ba4e |
12-Dec-2014 |
Elliott Hughes <enh@google.com> |
Merge "Remove portable."
|
956af0f0cb05422e38c1d22cbef309d16b8a1a12 |
11-Dec-2014 |
Elliott Hughes <enh@google.com> |
Remove portable. Change-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc
rontend.cc
rontend.h
ir_optimization.cc
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
uick/quick_compiler.cc
erification_results.cc
|
dce6539817ce0ec198af549f2a89475fd88a07d3 |
12-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "AArch64: Fix incorrect use of preceding LIR."
|
eb54d850cc713a64e8260d12db03bfd15b42584c |
10-Dec-2014 |
Ningsheng Jian <ningsheng.jian@arm.com> |
AArch64: Fix incorrect use of preceding LIR. In Cortex-A53 erratum 835769 fixup, we should check the LIR for previous emitted instruction, skipping pseudo LIRs and other non-emitting LIRs. Change-Id: I908f4c638650d7ad9c91112b74095bba2d81612e
uick/arm64/assemble_arm64.cc
|
36b58f5ebb85d58f8b5966b8577a6dfe720d1e16 |
10-Dec-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add verifier support for dequickening Also some cleanup. Bug: 17950037 Change-Id: I1f50fe07f1558e9c4f78953b7afa639d7f310b3c
erified_method.cc
erified_method.h
|
a262f7707330dccfb50af6345813083182b61043 |
25-Nov-2014 |
Ningsheng Jian <ningsheng.jian@arm.com> |
ARM: Combine multiply accumulate operations. Try to combine integer multiply and add(sub) into a MAC operation. For AArch64, also try to combine long type multiply and add(sub). Change-Id: Ic85812e941eb5a66abc355cab81a4dd16de1b66e
ompiler_enums.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
|
ffc605cd817e79d6c7602a87543bb31f24d3a99f |
10-Dec-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add missing iget quick for bool, byte, char, short Bug: 17791557 Bug: 17671806 Change-Id: Ifac4fbfba6c3a3f97131e85914b24756fb7f9722
ex_to_dex_compiler.cc
uick/quick_compiler.cc
|
6bb3919e4413ad50f9b7e009829bba292b609e03 |
09-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Redefine the notion of back-egdes."
|
8b858e16563ebf8e522df026a6ab409f1bd9b3de |
27-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Redefine the notion of back-egdes. Redefine a back-edge to really mean an edge to a loop head instead of comparing instruction offsets. Generate suspend checks also on fall-through to a loop head; insert an extra GOTO for these edges. Add suspend checks to fused cmp instructions. Rewrite suspend check elimination to track whether there is an invoke on each path from the loop head to a given back edge, instead of using domination info to look for a basic block with invoke that must be on each path. Ignore invokes to intrinsics and move the optimization to a its own pass. The new loops in 109-suspend-check should prevent intrinsics and fused cmp-related regressions. Bug: 18522004 Change-Id: I96ac818f76ccf9419a6e70e9ec00555f9d487a9e
b_optimizations.h
rontend.cc
rontend.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
ass_driver_me_opts.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
sa_transformation.cc
|
ca5413403192022d734ce76fda9a84aa63eb9148 |
15-Oct-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Ensure FP GET/PUT doesn't use Core register Routine void org.jbox2d.collision.AABB.combine( org.jbox2d.collision.AABB, org.jbox2d.collision.AABB) in the icyrocks application generated code for an iget of a FP field that was loaded into a Core register, and then into an XMM register. This was caused by the Dex code: 0x0030: iget v2, v2, F org.jbox2d.common.Vec2.x // field@3747 I traced this to GenIGet using a reg_class of kAnyReg, and EvalLoc finding that v2 was available in EDX. Since kAnyReg is compatible with EDX, The iget loaded the FP value into EDX, and then into an XMM register for subsequent use. Fix: Pass kSingle/kDouble into IGET/IPUT/SGET/SPUT/AGET/APUT when the source/destination is FP. Change X86Mir2Lir::RegClassForFieldLoadStore to return kFPReg for those cases. This causes EvalLoc to return an XMM register, and the load is done right to the XMM register. Change-Id: Ifbcc9e4d80bc6da8ea4ebf7e6cebaaf672a2766e Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/mir_to_lir.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
52222d132e500235aeaa427e2f4139dc20ed9288 |
08-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Kill unreachable blocks instead of just hiding them."
|
6c964c98400b8c0949d5e369968da2d4809b772f |
08-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Re-factor Quick ABI support"
|
cb873d8fd06b7dde4b69c5987b4eaf541d345a50 |
08-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Kill unreachable blocks instead of just hiding them. This changes the block type from kDalvikByteCode to kDead and properly cleans up predecessors and MIRGraph::catches_. Bug: 18626174 Change-Id: I268bf68f7947604bcb82caf95ee79c6831ee6e2a
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
717a3e447c6f7a922cf9c3efe522747a187a045d |
13-Nov-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Re-factor Quick ABI support Now every architecture must provide a mapper between VRs parameters and physical registers. Additionally as a helper function architecture can provide a bulk copy helper for GenDalvikArgs utility. All other things becomes a common code stuff: GetArgMappingToPhysicalReg, GenDalvikArgsNoRange, GenDalvikArgsRange, FlushIns. Mapper now uses shorty representation of input parameters. This is required due to location are not enough to detect the type of parameter (fp or core). For the details see https://android-review.googlesource.com/#/c/113936/. Change-Id: Ie762b921e0acaa936518ee6b63c9a9d25f83e434 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ir_graph.cc
ir_graph.h
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
b218c858606641050d13f35a2365168b89b44841 |
08-Dec-2014 |
Zheng Xu <zheng.xu@arm.com> |
ART: Clear use count for unused VRs. The use count of temp VR should be cleared when we replace "CMP_XXX vA, vB, vC" and "IF_XXX vA" with "kMirOpFusedCmpXXX vB, vC". Otherwise, the backend may allocate a physical register for the unused vA. Change-Id: I43ad37d0e7161ec3de154de8888caa94603f7715
ir_optimization.cc
|
9af6929d12d843ef1891fc0733746f7fa7ecedd4 |
05-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix code layout pass; don't terminate too early. Change-Id: I0c417fdc2ee8213672a7568fe228e5e2f1c1ab61
ir_optimization.cc
|
27dee8bcd7b4a53840b60818da8d2c819ef199bd |
02-Dec-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86_64 QBE: use RIP addressing Take advantage of RIP addressing in 64 bit mode to improve the code generation for accesses to the constant area as well as packed switches. Avoid computing the address of the start of the method, which is needed in 32 bit mode. To do this, we add a new 'pseudo-register' kRIPReg to minimize the changes needed to get the new addressing mode to be generated. Change-Id: Ia28c93f98b09939806d91ff0bd7392e58996d108 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ompiler_enums.h
uick/codegen_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
989210eb453898bd94bf3527f18f6146b07aa4bb |
04-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Use fewer insns for ARM LDR/STR with large offsets."
|
aed3ad734c47fdccf179ff65971284a0d38583cd |
03-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Use fewer insns for ARM LDR/STR with large offsets. LDR with large offset is frequently used for reading from DexCache arrays, for example for static and direct invokes. STR with large offset is rarely used but it's updated for consistency. Change-Id: I75871416cecbfd7fe7de590922cea0376a2f4019
uick/arm/utility_arm.cc
|
ab972ef472001fa113d54486d7592979e33480b3 |
04-Dec-2014 |
Mathieu Chartier <mathieuc@google.com> |
Remove method verification results right after compiling a method This saves memory since it allows the code arrays from methods compiled in future methods to use the ram we just freed from the verification results. GmsCore.apk: Before: dex2oat took 77.383s (threads: 2) arena alloc=6MB java alloc=30MB native alloc=77MB free=13KB After: dex2oat took 72.180s (threads: 2) arena alloc=6MB java alloc=30MB native alloc=60MB free=13KB Bug: 18596910 Change-Id: I5d6df380e4fe58751a2b304202083f4d30b33b7c (cherry picked from commit 25fda92083d5b93b38cc1f6b12ac6a44d992d6a4)
uick/codegen_util.cc
erification_results.cc
erification_results.h
|
a29f698b1754ee0ea2f46b6f5900e0da840dff79 |
25-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Implement InexpensiveConstantInt(., opcode) for ARM. Fix kThumb2{Add,Sub}RRI12 to be used for their full range. Add ORN for completeness. Change-Id: I49a51541fa9ea085d4674b9131d8dd94da5337f3
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
|
dde815ab8e1a1997ad01cb7f63dd10ef26597f46 |
01-Dec-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: x86 specific clearing higher bits when converting long to int"
|
758662e9d02727d9a88be395a92b476843c44d36 |
01-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix neg-long on ARM for overlapping regs."
|
05d5810c2b20ac83da82cef9a9677884af81147d |
01-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Refactor handling of conditional branches with known result."
|
0a080978fc822c51f06cb615662ee9ddcba4f677 |
01-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Use 16-bit conditional branch in Thumb2."
|
2f340a843ea5b3413c901f8c2365243b68864468 |
01-Dec-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix neg-long on ARM for overlapping regs. Bug: 18569347 Change-Id: I764a4648b7ea5fd92f1ffbb9038b9d101b50d137
uick/arm/int_arm.cc
|
7ab2fce83cd72c0963128b098a78606e77ea15d5 |
28-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Refactor handling of conditional branches with known result. Detect IF_cc and IF_ccZ instructions with known results in the basic block optimization phase (instead for the codegen phase) and replace them with GOTO/NOP. Kill blocks that are unreachable as a result. Change-Id: I169c2fa6f1e8af685f4f3a7fe622f5da862ce329
ir_optimization.cc
uick/codegen_util.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
6af820639c74e769ffc1f54930f6ebc11364f894 |
26-Nov-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART: x86 specific clearing higher bits when converting long to int The following problem description is taken from https://android-review.googlesource.com/107261 If destination and source of long-to-int is the same physical register on 64-bit then we do not emit any instructions but consider that destination is a 32-bit view of source register. As a result high part contains garbage. If the destination is used later as index to array access then this garbage is used in computation of address because address is 64-bit. For all other cases garbage is just ignored. A generic solution (113023) for all hw platforms was suggested but rejected later for the sake of HW specific solution: https://android-review.googlesource.com/113023 https://android-review.googlesource.com/114436 This patch is a rework of patch 113023 to stick with x86_64 specific changes: for 64-bit target this patch forces generating reg-to-reg copy if the src and dest are the same physical registers. This makes the higher bits be zeroed by 32-bit move instruction. Change-Id: Id29af839506ff9319ffba08b2e86e240fef4dafd Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
174636dad59068fc6e879b147ae02ac932f38c6f |
26-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Use 16-bit conditional branch in Thumb2. We were using the 32-bit version because the compilation time impact of having to change the instruction length and reassemble instructions when the target is out of range was too high. However, the assembly phase has been rewritten since making that decision and the compile time impact is now insignificant, so we prefer to save space. Change-Id: Ib90f90d3f4e0c4e310267af272e3b16611026bbe
uick/arm/utility_arm.cc
|
9d5c25acdd1e9635fde8f8bf52a126b4d371dabd |
26-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Use 16-bit Thumb2 PUSH/POP when possible. Generate correct PUSH/POP in Gen{Entry,Exit}Sequence() to avoid extra processing during insn fixup. Change-Id: I396168e2a42faee6980d40779c7de9657531867b
ompiler_enums.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
|
eace45873190a27302b3644c32ec82854b59d299 |
25-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Move dexCacheStrings from ArtMethod to Class Adds one load for const strings which are not direct. Saves >= 60KB of memory avg per app. Image size: -350KB. Bug: 17643507 Change-Id: I2d1a3253d9de09682be9bc6b420a29513d592cc8 (cherry picked from commit f521f423b66e952f746885dd9f6cf8ef2788955d)
uick/gen_common.cc
|
6489d22a44ea7d135c142ee94925570d0333d5e7 |
25-Nov-2014 |
buzbee <buzbee@google.com> |
Quick compiler: handle embedded switch data Although switch data is generally placed at the end of a dex file by dx, it can occur elsewhere (and does via obsfucators). This CL fixes a parsing error related to embedded switch data by ensuring valid dex instructions following the embedded data appear in their own basic blocks. AOSP b/80600 Change-Id: I91ead6b398386bcf168b1088c5bc13a53b18f26e
ir_graph.cc
|
79d43fd465a302252062b1d6dbd32c8a7d79f266 |
25-Nov-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: GenLongArith has to clobber same operands for 2-op instr"
|
071beedcca66eac4032aa74327aa580a97ee3871 |
25-Nov-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Generate switch targets from successor blocks"
|
55c5c3c26baac946750f5b91e8701bfb204d1ce6 |
25-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Skip null check in MarkGCCard() for known non-null values."
|
ce41062ca468ae3abda9580098b4664b6474f605 |
24-Nov-2014 |
Andreas Gampe <agampe@google.com> |
Revert "ART: Remove wrong DCHECK" This reverts commit 5be30072c5a750617dc3f9380776d074f26d9f32. The underlying computation was fixed in AOSP before. Bug: 17772057 Bug: 17763227 Bug: 17762845
uick/arm64/int_arm64.cc
|
743b98cd3d7db1cfd6b3d7f7795e8abd9d07a42d |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Skip null check in MarkGCCard() for known non-null values. Use GVN's knowledge of non-null values to set a new MIR flag for IPUT/SPUT/APUT to skip the value null check. Change-Id: I97a8d1447acb530c9bbbf7b362add366d1486ee1
ompiler_enums.h
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_graph.h
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/int_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
321b987ef037c44c0ed4e0e82661c88959a6239f |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Further cleanup using dex_instruction_utils.h. Change-Id: I85aa9e7d744b37ee3d2531c50470cd3fa87dc864
lobal_value_numbering.cc
ocal_value_numbering.cc
ocal_value_numbering.h
uick/dex_file_method_inliner.cc
reg_analysis.cc
|
d7a6f48736d9ed27d8bab42237ee700a2737db8e |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Eliminate suspend checks on back-edges to return insn."
|
26e7d454b9924f3673b075b05e4c604ad658a062 |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Eliminate suspend checks on back-edges to return insn. This optimization seems to have been broken for a long time. Change-Id: I62ec85c71bb5253917ad9465a952911e917f6b52
lobal_value_numbering.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
|
1c51b2b01f7ac9d64838f46d895a534ea243f625 |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Add div-zero check elimination to LVN/GVN"
|
c2155048075b4916536f3aa23a88cd483b0f64a2 |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Fix NullCheckElimination, BBCombine, and SplitBlock"
|
c12da2d91c26e74786a32e7583d996416a2f3494 |
24-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Rewrite GVN's field id and field type handling."
|
c7a77bfecb77c7a4538775411049e76eb853641c |
30-Oct-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Fix NullCheckElimination, BBCombine, and SplitBlock NullCheckElimination had one issue and one assumption that could be broken: -It ignored that compiler temps may hold references. -Assumed there are no phi nodes even though algorithm can be run even after phi nodes are inserted. BBCombine also had issue in that it did not properly maintain the instruction links. The logic has been updated to use utility methods. SplitBlock has an issue with being called after extended instructions are inserted. Namely, in the case in question, it was called after SpecialMethodInliner was through and although it was doing semantically correct thing, it was hitting dcheck due to the kMirOpNullCheck. Change-Id: Id5863ddb0762064e74bf1d9173b8db5cb47cf3b9 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
ir_optimization.cc
|
da96aeda912ff317de2c41e5a49bd244427238ac |
27-Oct-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Generate switch targets from successor blocks This patch relies on the successor blocks to generate switch targets in GenSmallPackedSwitch and GenSmallSparseSwitch for all quick targets. In x86, we create a new packed switch table by storing basic block ids instead of dex offsets, and we override MarkPackedCaseLabels and InsertCaseLabel to avoid calling FindBlock. Change-Id: Ibb5983db582f0965aba787b520bd106522453564 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/gen_common.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
e0951144d71a4791a5319ec507d84fce373018e0 |
14-Nov-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Add div-zero check elimination to LVN/GVN GVN has been updated to also consider div/rem zero check elimination. This means that whenever a divisor is used in two sequential divisions, the second division will surely not throw exception. The algorithm has been updated to work on global level by considering splits and merges. Obviously, if "div_zero" checked on one path but not the other, at merge point consider that division has not been eliminated. One big deficiency of this algorithm is that it does not consider literals in the divisor. Namely, in cases where the operand is a literal or a constant (literal created by another bytecode), it does not mark as divide by zero checked. However, in reality this is not an issue because none of the backends generate the divide by zero check when the constant value is known. Issue: CAR-868 Category: device enablement Domain: AOSP.ART-ME Origin: internal Upstream-Candidate: yes Change-Id: I617569055c73a45e13e2a83392b99b48f4e33362 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_graph.cc
|
f41b92c7a2fcdd411b9edd7070e4729ea18e0ba6 |
13-Oct-2014 |
Vladimir <vladimir.a.ivanov@intel.com> |
Fix possible array access issue The issue with possible array access in the DisassembleExtendedInstr method should be fixed. The input opcode should be extended one. Additional check for it was added. Also additional CHECK for memory allocation should be added. Change-Id: If114572a5bc99587d5effd588e7bd955c16d8318 Signed-off-by: Vladimir <vladimir.a.ivanov@intel.com>
ir_graph.cc
|
819b3c05b1553dfd9fbde5fdb8f4cf77b5689682 |
22-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Fix crash with unreachable void check-cast"
|
2cfbccdc41a75694cf83c034f66b049d42a83ed6 |
22-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "LSRA: Fix X86 shuffle flags"
|
6b9356cf0feb2a4100798481869fd4d18180c29f |
13-Nov-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
ART: GenLongArith has to clobber same operands for 2-op instr When we generate code for 'add-long/2addr v4, v4' and v4 is in memory, we load v4 in a physical register, do operation and store result in memory. After that, we should clobber the physical register because it is not valid anymore. Change-Id: I80903a831040bbfdf8a07810b6b2e8090fe1158c Signed-off-by: nikolay serdjuk <nikolay.y.serdjuk@intel.com>
uick/x86/int_x86.cc
|
b72c723bfb21e05cb9b0a7999db805df93fcaee8 |
29-Oct-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: X86 vectorized reduce may use incorrect extract index In the case of reduction to memory VR, the extract index is ignored. However, it should not be ignored because it is needed for pextr instruction. Change-Id: I46a0c76218a0553e677225e403786522c079d27d Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
uick/x86/target_x86.cc
|
af6925b7fe5dc5a3c8d52ee3370e86e75400f873 |
31-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite GVN's field id and field type handling. Create a helper unit for dex insn classification and cache dex field type (as encoded in the insn) in the MirFieldInfo. Use this for cleanup and a few additional DCHECKs. Change the GVN's field id to match the field lowering info index (MIR::meta::{i,s}field_lowering_info), except where multiple indexes refer to the same field and we use the lowest of the applicable indexes. Use the MirMethodInfo from MIRGraph to retrieve field type for GVN using this index. This slightly reduces GVN compilation time and prepares for further compilation time improvements. Change-Id: I1b1247cdb8e8b6897254e2180f3230f10159bed5
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_analysis.cc
ir_field_info.cc
ir_field_info.h
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
uick/gen_common.cc
|
f585e549682a98eec12f92033e9634dc162b7df8 |
21-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up MIRGraph pass temporaries. Create a union of pass-specific structs with temporaries instead of shared temporaries with common names. Change-Id: Id80d3b12c48139af1580b0839c21e07e7afd0ed5
ir_graph.cc
ir_graph.h
ir_optimization.cc
sa_transformation.cc
|
4514d2ac529064819d4f02699527764afa140008 |
21-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Add card mark to filled-new-array."
|
bf535be514570fc33fc0a6347a87dcd9097d9bfd |
19-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Add card mark to filled-new-array. Bug: 18032332 Change-Id: I35576b27f9115e4d0b02a11afc5e483b9e93a04a
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/codegen_util.cc
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
8366ca0d7ba3b80a2d5be65ba436446cc32440bd |
17-Nov-2014 |
Elliott Hughes <enh@google.com> |
Fix the last users of TARGET_CPU_SMP. Everyone else assumes SMP. Change-Id: I7ff7faef46fbec6c67d6e446812d599e473cba39
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/x86/target_x86.cc
|
8542ff31bfa778a06316511672dc113a3f19ae5b |
19-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "AArch64: Addressing Cortex-A53 erratum 835769."
|
cee552a858ed2b819f6440e555cc7165200dc0af |
19-Nov-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: X86Mir2Lir::OpRegRegReg should expect kOpMul for r_dest == r_src2 case"
|
d79ac38df2a5e56b8929501803183f70053494bf |
19-Nov-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix x86 special identity"
|
4ee71b2df9eb74531d44528d028378bf0e90ecd7 |
18-Nov-2014 |
Pavel Vyssotski <pavel.n.vyssotski@intel.com> |
ART: X86Mir2Lir::OpRegRegReg should expect kOpMul for r_dest == r_src2 case OpRegRegReg in case of r_dest == r_src2 does not expect kOpMul as valid operation. This provokes abort compiling instruction like "mul-int v0, v1, v0" if both operands are arriving in registers. The fix is to expect kOpMul as comutative operation. Change-Id: I259e49edea4b8b08ca4ed1c61033bbc2b2229078 Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
uick/x86/utility_x86.cc
|
e8f74e58b476520cfc53970304c67b800994e33d |
19-Nov-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix x86 special identity The Quick compiler recognizes and specially handles a set of small methods - including those that simply return one of their arguments. For x86, special identity was broken if the returned argument was a double that was passed half in register and half in memory. internal b/17325447 Change-Id: I3a766977cdc0b4216d8ad65a9870c3250b32471e
uick/mir_to_lir.cc
|
130914ed7175797c4cb851368200c22a6a17fdec |
19-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix no relocate host tests Change-Id: I905bf0327685d2119a2a5d157795e0e3f16286a7
uick/quick_compiler.cc
|
2d7210188805292e463be4bcf7a133b654d7e0ea |
10-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change 64 bit ArtMethod fields to be pointer sized Changed the 64 bit entrypoint and gc map fields in ArtMethod to be pointer sized. This saves a large amount of memory on 32 bit systems. Reduces ArtMethod size by 16 bytes on 32 bit. Total number of ArtMethod on low memory mako: 169957 Image size: 49203 methods -> 787248 image size reduction. Zygote space size: 1070 methods -> 17120 size reduction. App methods: ~120k -> 2 MB savings. Savings per app on low memory mako: 125K+ per app (less active apps -> more image methods per app). Savings depend on how often the shared methods are on dirty pages vs shared. TODO in another CL, delete gc map field from ArtMethod since we should be able to get it from the Oat method header. Bug: 17643507 Change-Id: Ie9508f05907a9f693882d4d32a564460bf273ee8 (cherry picked from commit e832e64a7e82d7f72aedbd7d798fb929d458ee8f)
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
f18b92f1ae57e6eba6b18bee4c34ddbbd8bda74d |
14-Nov-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
LSRA: Fix X86 shuffle flags The shuffle opcodes for X86 have incorrect flags. Fix them. Clean up a couple of the printable string names too to remove an extra "kX86". Change-Id: I52a0ebdb1334cf0904bc2399eaf28b7cda041112 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
65420b244f18a3492a342ee3edaefeb26aed4230 |
27-Oct-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Addressing Cortex-A53 erratum 835769. Some early revisions of the Cortex-A53 have an erratum (835769) whereby it is possible for a 64-bit multiply-accumulate instruction in AArch64 state to generate an incorrect result. The conditions which a portion of code must satisfy in order for the issue to be observed are somewhat complex, but all cases end with a memory (load, store, or prefetch) instruction followed immediately by the multiply-accumulate operation. This commit makes sure to insert a nop instruction before a 64-bit msub instruction, whenever the latter is preceded by a memory instruction. This behaviour should make it impossible for the Arm64 backend to generate a sequence of instructions which matches the erratum conditions. Change-Id: I0022eccd41180183c20231dab6e2671d001a204c
ompiler_enums.h
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/int_arm64.cc
|
5d99e333bcb454add372fe776a00d3172146bd6b |
17-Nov-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: copy dalvikInsn back on throw instruction processing"
|
2431452a13829996a440d7cdc30542e77d622b98 |
12-Nov-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Small improvements. Remove useless branches (branch to the next instruction). Change the implicit stack overflow check to do a 32-bit rather than a 64-bit load. Also put the result in wzr, as we do not need it. Change-Id: I2d29fc62cb757ac5443fdd09282871f734deeef9
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
|
4594ad627a48e249ee1680e954558dea15f0d133 |
14-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix arm64 AGET/APUT to use 32-bit index."
|
d582fa4ea62083a7598dded5b82dc2198b3daac7 |
06-Nov-2014 |
Ian Rogers <irogers@google.com> |
Instruction set features for ARM64, MIPS and X86. Also, refactor how feature strings are handled so they are additive or subtractive. Make MIPS have features for FPU 32-bit and MIPS v2. Use in the quick compiler rather than #ifdefs that wouldn't have worked in cross-compilation. Add SIMD features for x86/x86-64 proposed in: https://android-review.googlesource.com/#/c/112370/ Bug: 18056890 Change-Id: Ic88ff84a714926bd277beb74a430c5c7d5ed7666
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
|
f20076ff813b8012096ff31af236d59db3c0f4e1 |
14-Nov-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Implicit null check should break def tracking"
|
172808c14506f4b46ebf0765e066306b7301760f |
13-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Use correct register class for refs"
|
9c3617a8f7413bb1181e72bc1f7086d986a86e18 |
13-Nov-2014 |
Pavel Vyssotski <pavel.n.vyssotski@intel.com> |
ART: Implicit null check should break def tracking Implicit null check can provoke exception that needs to be sure all VRs are saved on stack. The fix is to reset the def tracking system at the moment of adding an implicit null check. Change-Id: Ie8a32b727086438e04e745d4a3f87f096ff36cac Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
uick/gen_common.cc
|
e08785bd2601d2d62567aacd51e99165120a9c53 |
07-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix arm64 AGET/APUT to use 32-bit index. Change-Id: Iaa230024c934fc0ff7e45dcbebeb6c0e94e1af63
uick/arm64/int_arm64.cc
|
27503548bc8945da875240751dcd4b1495584669 |
06-Nov-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Use correct register class for refs LoadValue requires thar ref location should reguest kRefReg register class. The patch fixes GenFilledNewArray to specify the register class correctly. This is a fix for the crash of dex2oat on 412-new-array unit test. This is a second attempt with an additional fix for arm64. Change-Id: I9f0bb098cd1d1721ef03e8976c1460f8fa49aa2a Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/gen_common.cc
|
81ea72beefbf304cdc02942d131f5a5dab69e648 |
12-Nov-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Fix clobbering low part in 32-bit version of X86Mir2Lir::GenNegDouble"
|
e49e9a08aef6f05c39912aeaa7e60bf61980670c |
12-Nov-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: GenNegLong incorrectly handled register overlap for x86"
|
570570e0edaf8e3c4e93f2a30c13e78b7301d512 |
11-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Revert "Use correct register class for refs""
|
29b55354f5856c353c0717ce2b570fabbec550ee |
11-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Revert "Use correct register class for refs" This reverts commit 5c2555407d823356fb55ea3ffdf281aac00a583e. Change-Id: I0490e9b1a9470e429f31911c9a4f28f71df78cc1
uick/gen_common.cc
|
dbc30bc0e1f0dfcd09cb45ecf883dae51aaf853b |
11-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Use correct register class for refs"
|
5c2555407d823356fb55ea3ffdf281aac00a583e |
06-Nov-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Use correct register class for refs LoadValue requires thar ref location should reguest kRefReg register class. The patch fixes GenFilledNewArray to specify the register class correctly. This is a fix for the crash of dex2oat on 412-new-array unit test. Change-Id: I58d969ddac0d84d4024bf686b5b0c12337ca9a37 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/gen_common.cc
|
a9284c40e4a7621a086326273ef5e3cf87605000 |
11-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "Fix CombineBlocks optimization"
|
d4812a97de5d54d29c2964b2db7c2d52217be60e |
10-Nov-2014 |
Pavel Vyssotski <pavel.n.vyssotski@intel.com> |
ART: Fix clobbering low part in 32-bit version of X86Mir2Lir::GenNegDouble If source registers overlap destination registers the low part of result can be clobbered in current implementation. For example, for 'neg-double v5, v6' bytecode compiler can generates the following instructions: lea ecx, [edx + 0x80000000] mov eax, ecx The fix forces source registers to be temp so there is no need to copy the low part. Change-Id: I986ca17d1dc45c9e9d44a66e501cd354af496fde Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
uick/x86/fp_x86.cc
|
08794a9481dec1da98f1a0c668c6dab3907b342a |
06-Nov-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Fix CombineBlocks optimization (df_attributes & DF_DA) means Get not Put. The patch fixes the condition to eliminate catch block for get/put operations. Change-Id: I48036f3614de5116e27c0d6e9a7a342432c9a828 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ir_optimization.cc
|
c35cda8fc5bb891eb9726a093f5764b75f44ab54 |
11-Nov-2014 |
Ian Rogers <irogers@google.com> |
Fix parentheses, tidy code. Change-Id: I1ce671fa8a402aed3552102cadc96f277346f443
uick/mir_to_lir.cc
|
d24c9346138b7b8723461d94d9866762a59929d9 |
10-Nov-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
ART: GenNegLong incorrectly handled register overlap for x86 There is a bug in the GenNegLong: it should invoke OpRegCopy(temp_reg, rl_result.reg.GetHigh()); instead of OpRegCopy(temp_reg, rl_result.reg); But, anyway there is no need to handle the overlap anymore because it is already handled in OpRegCopyWide() which is invoked from StoreValueWide(). Change-Id: I379ed23434c72a91e875e753708387be6502bc57 Signed-off-by: nikolay serdjuk <nikolay.y.serdjuk@intel.com>
uick/x86/int_x86.cc
|
d45f76e59bf8342491ca02d64721537e06c79f43 |
09-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "Tidy RegStorage for X86."
|
b28c1c06236751aa5c9e64dcb68b3c940341e496 |
08-Nov-2014 |
Ian Rogers <irogers@google.com> |
Tidy RegStorage for X86. Don't use global variables initialized in constructors to hold onto constant values, instead use the TargetReg32 helper. Improve this helper with the use of lookup tables. Elsewhere prefer to use constexpr values as they will have less runtime cost. Add an ostream operator to RegStorage for CHECK_EQ and use. Change-Id: Ib8d092d46c10dac5909ecdff3cc1e18b7e9b1633
ompiler_enums.h
uick/arm/utility_arm.cc
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/mips/utility_mips.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
|
aaf29b32d1aefd10980820a67b2f36f168e68ca8 |
08-Nov-2014 |
Ian Rogers <irogers@google.com> |
Tidy some uses of IsCompilationEnabled. We should be checking IsCompilationEnabled in the compiler, we wouldn't be in the compiler were compilation disabled. Change-Id: Ib498fb6d610e4ed517494df01efa4b64a8c12528
rontend.cc
ir_analysis.cc
|
40d3518414202f33c9569ddd8daceabb30208fc2 |
03-Oct-2014 |
Stephen Kyle <stephen.kyle@arm.com> |
ART: Fix crash with unreachable void check-cast return-void check-cast v0, V return-void The above code sequence will not be rejected for the check-cast of a void type because the check-cast is not reachable. However, when GenerateSafeCastSet() is called from the compiler, this will cause IsAssignableFrom(Conflict, Undefined) to be called, as it scans for all check-casts across the code, regardless of its reachableness. RegType::AssignableFrom() has been changed to handle a Conflict type, whereas previously this would break the check that the lhs type is a ReferenceType. Additionally, GenerateSafeCastSet has been changed to never assess instructions that weren't visited during verification. Included is a new test DEX file, 801-VoidCheckCast, that uses this code sequence. Change-Id: I600055ab670ee48a075ffa867b46d2e74f5aa9c0 Signed-off-by: Stephen Kyle <stephen.kyle@arm.com>
erified_method.cc
|
648c7f61a26da49f929f412cf769e002bc6db488 |
06-Nov-2014 |
Ian Rogers <irogers@google.com> |
am 1991fed6: Merge "Don\'t enable ARM_R4_SUSPEND_FLAG." * commit '1991fed6e39fc97c2dd4d55af33818008b3906a1': Don't enable ARM_R4_SUSPEND_FLAG.
|
8ba17f6ce3853d4bdeee7527c9900e018781cf24 |
28-Oct-2014 |
Ian Rogers <irogers@google.com> |
Don't enable ARM_R4_SUSPEND_FLAG. Bug: 17953517 Change-Id: I4578f1ffbfc987d5d178c7586b6bb99882ed19bb
uick/arm/arm_lir.h
uick/arm/int_arm.cc
|
cae6e6b25be4ee7b7730cc3ddf5b7e8a490f6b6d |
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
am 77dbcdd2: Merge "Fix LoadValue{Wide} to free temp when reg classes are not matched" * commit '77dbcdd24fc99938c37ab0a32373466838ec8880': Fix LoadValue{Wide} to free temp when reg classes are not matched
|
77dbcdd24fc99938c37ab0a32373466838ec8880 |
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "Fix LoadValue{Wide} to free temp when reg classes are not matched"
|
5087696175b1c8808cd94dca1a0ed2e6fe591870 |
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
am 40845d26: Merge "ARM: Strength reduction for floating-point division" * commit '40845d266e1152a846858d94cee70c33b136de68': ARM: Strength reduction for floating-point division
|
68347e807109afb3efd6239623fb7c67eda0b033 |
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
am 211d45e0: Merge "X86 QBE: Mark kX86StartOfMethod as defining reg 0" * commit '211d45e059935a7874a1ec89846f03d35ffba29f': X86 QBE: Mark kX86StartOfMethod as defining reg 0
|
675e09b2753c2fcd521bd8f0230a0abf06e9b0e9 |
23-Oct-2014 |
Ningsheng Jian <ningsheng.jian@arm.com> |
ARM: Strength reduction for floating-point division For floating-point division by power of two constants, generate multiplication by the reciprocal instead. Change-Id: I39c79eeb26b60cc754ad42045362b79498c755be
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
|
211d45e059935a7874a1ec89846f03d35ffba29f |
05-Nov-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86 QBE: Mark kX86StartOfMethod as defining reg 0"
|
9913c84a5d1803b6d81d45774d3e2ebead215ba4 |
05-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
am 970a25ca: Merge "Clean up arena objects in Mir2Lir." * commit '970a25ca627fe13ab381bc4c639868179a3c8f1f': Clean up arena objects in Mir2Lir.
|
080dd413e133ae357ab9572d924f7a884315d535 |
05-Nov-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up arena objects in Mir2Lir. Change-Id: I93fca37be2ae100ddebf80b6ba7a561b187e8886
uick/mir_to_lir.h
|
02c637e8d6952aba19a432e01fc94cece5071e2f |
29-Oct-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Fix LoadValue{Wide} to free temp when reg classes are not matched If the current register mapping does not match the required one we are allocating a new temp and make a copy. After that we are clobbering the old mapping of VR to physical register. However we can also free it for future allocations as soon as it will not used more. This is a fix of the bug I met. The reason of the dex2oat crash was that GenInlinedMinMaxFP loaded two sources to fp registers. It appeared that both of them were live in two pairs of core regs. As a result after loading of them all 4 temps available for x86 platfrom are marked as in use. As a result after an attempt to allocate new temp to load a constant required by GenInlinedMinMaxFP register allocator reported that there is no available temp registers. Change-Id: I9233012e39de1e574761f3d9bd3cad80d743e522 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/gen_loadstore.cc
|
ae1a434fa1740791ba479da668e8372ca3dcb2a6 |
05-Nov-2014 |
Andreas Gampe <agampe@google.com> |
am 78a32333: Merge "ART: More warnings" * commit '78a3233313260665fe82ba56257855e043bca3d4': ART: More warnings
|
277ccbd200ea43590dfc06a93ae184a765327ad0 |
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: More warnings Enable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general, and -Wunused-but-set-parameter for GCC builds. Change-Id: I81bbdd762213444673c65d85edae594a523836e5
ocal_value_numbering.cc
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/assemble_mips.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
sa_transformation.cc
|
cdd98385e84a332c1a92b1b4497393dcf314693d |
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
am ad17d418: Merge "ART: Replace COMPILE_ASSERT with static_assert (compiler)" * commit 'ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3': ART: Replace COMPILE_ASSERT with static_assert (compiler)
|
ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3 |
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Replace COMPILE_ASSERT with static_assert (compiler)"
|
785d2f2116bb57418d81bb55b55a087afee11053 |
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: Replace COMPILE_ASSERT with static_assert (compiler) Replace all occurrences of COMPILE_ASSERT in the compiler tree. Change-Id: Icc40a38c8bdeaaf7305ab3352a838a2cd7e7d840
ocal_value_numbering.h
ir_field_info.h
ir_graph.h
ir_method_info.h
ir_optimization.cc
uick/arm/target_arm.cc
uick/arm64/assemble_arm64.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/resource_mask.cc
|
1525ed874f8611368ef34a9fc5556cc9130ccee6 |
04-Nov-2014 |
Ian Rogers <irogers@google.com> |
am a10a8b56: Merge "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags." * commit 'a10a8b56a01be95b3ec13022d3a155e163a11673': Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.
|
6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f |
31-Oct-2014 |
Ian Rogers <irogers@google.com> |
Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags. Fix associated errors about unused paramenters and implict sign conversions. For sign conversion this was largely in the area of enums, so add ostream operators for the effected enums and fix tools/generate-operator-out.py. Tidy arena allocation code and arena allocated data types, rather than fixing new and delete operators. Remove dead code. Change-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b
ackend.h
ompiler_enums.h
ex_to_dex_compiler.cc
lobal_value_numbering.h
ocal_value_numbering.cc
ocal_value_numbering.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass.h
ass_me.h
ortable/mir_to_gbc.h
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/ralloc_util.cc
uick/resource_mask.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
erification_results.cc
|
56e8e608647133ae248acfec36e704c54c40c620 |
30-Oct-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: copy dalvikInsn back on throw instruction processing The potentially throwing instructions in ART are splitted into CHECK and work portions. On the Mir-To-Lir phase ART copies the instruction info from the work part to CHECK and uses the CHECK part for LIR emitting. But in some cases dalvik registers of the work part might be changed and it may lead to incorrect calculations. This patch adds copying of the whole dalvikInsn structure, instead of the operand field. Change-Id: I17466169ec86e74f9f202785f1c57c0de9e56d06 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/mir_to_lir.cc
|
8ed5c9cbc26e013c1d92592f5adfaef949ca4dd3 |
31-Oct-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
am a9014f97: Merge "Support for CONST_STRING in optimizing compiler." * commit 'a9014f977ae90373f5bad4cf812c2bda810b10f8': Support for CONST_STRING in optimizing compiler.
|
a9014f977ae90373f5bad4cf812c2bda810b10f8 |
31-Oct-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Support for CONST_STRING in optimizing compiler."
|
b5f62b3dc5ac2731ba8ad53cdf3d9bdb14fbf86b |
30-Oct-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Support for CONST_STRING in optimizing compiler. Change-Id: Iab8517bdadd1d15ffbe570010f093660be7c51aa
rontend.cc
|
ed54f6a95bc81e4e8f987e3955731d00c297c480 |
31-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 45664c99: Merge "Avoid signed integer overflow." * commit '45664c995b99e81f6d425206d7a43cb3b898daab': Avoid signed integer overflow.
|
7d4ecd5edba1e4d4147692d67d9177154958801c |
30-Oct-2014 |
Ian Rogers <irogers@google.com> |
Avoid signed integer overflow. Caught by -ftrapv there is a benign integer overflow if a switch has the value max int within it (as in run-test 095). Change-Id: I86bb8ce2f9097cb367c031ec51d58d01b31313e2
uick/gen_common.cc
|
5f70c79c81f171ff0aa126d58bfbe98772ab7e33 |
29-Oct-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86 QBE: Mark kX86StartOfMethod as defining reg 0 kX86StartOfMethod should be marked as writing to register 0, as that is the destination register for the instruction. Change-Id: I99cf24afa4c11d9ccdd4295f3481351e9eb4ee1f Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
9fe60107e9323434b1b2d6ee005854ca4e5108fa |
29-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 7c049c1f: Merge "Remove useless suspend points from arm/arm64 AGET/APUT." * commit '7c049c1f34220b0dc1a7f68f3b30f388bae7bdb9': Remove useless suspend points from arm/arm64 AGET/APUT.
|
fb311f8a0d0eafd535f8d25d262dcea35a8feaa4 |
28-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Remove useless suspend points from arm/arm64 AGET/APUT. Change-Id: Ib17da0c02599b943cb62582a8a25f187272d423b
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
|
a229421dae3659f794a7c82f7dab3effe8badd12 |
28-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 4985fdf0: Merge "Rewrite class initialization check elimination." * commit '4985fdf030e8e78f1c05266e989534cb26812bff': Rewrite class initialization check elimination.
|
3e5c2ff35885165691ea3ae08186efaabfb4046b |
28-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 1ef3495a: Merge "Quick: Fix wide Phi detection in GVN, clean up INVOKEs." * commit '1ef3495abfa2a858b3cc7a1844383c8e7dff0b60': Quick: Fix wide Phi detection in GVN, clean up INVOKEs.
|
0e7217d74914d4feba6bd1c197c883177ea6867c |
28-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 3e3364e2: Merge "Tidy logging code not using UNIMPLEMENTED." * commit '3e3364e267117462894e0c3b7d9b413b25d28057': Tidy logging code not using UNIMPLEMENTED.
|
a660fc15d682912c9dc054f4b7cf53b8d90f337b |
28-Oct-2014 |
Ian Rogers <irogers@google.com> |
am c57a66d5: Merge "ARM: Use hardfp calling convention between java to java call." * commit 'c57a66d5aadfd682c63e34ec1b1f304260f8c333': ARM: Use hardfp calling convention between java to java call.
|
d3ea207df0e26c4e041cbac8770a04e7f58d1c75 |
28-Oct-2014 |
Ian Rogers <irogers@google.com> |
am b62ff579: Merge "ART: Add div/rem zero check elimination flag" * commit 'b62ff579cd870b0bf213765b07d7b404d15ece7b': ART: Add div/rem zero check elimination flag
|
f815266efc0bdc6c3466c341766104ddf84f0a0b |
28-Oct-2014 |
Ian Rogers <irogers@google.com> |
am c6c9e5d4: Merge "ART: Prevent float inference back to SSA in-regs." * commit 'c6c9e5d4511f2b23cab09f9d6f535f96fe33cb9b': ART: Prevent float inference back to SSA in-regs.
|
66c6d7bdfdd535e6ecf4461bba3804f1a7794fcd |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite class initialization check elimination. Split the notion of type being in dex cache away from the class being initialized. Include static invokes in the class initialization elimination pass. Change-Id: Ie3760d8fd55b987f9507f32ef51456a57d79e3fb
ompiler_enums.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
uick/gen_common.cc
|
1ef3495abfa2a858b3cc7a1844383c8e7dff0b60 |
27-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix wide Phi detection in GVN, clean up INVOKEs."
|
3e3364e267117462894e0c3b7d9b413b25d28057 |
25-Oct-2014 |
Ian Rogers <irogers@google.com> |
Merge "Tidy logging code not using UNIMPLEMENTED."
|
5667fdbb6e441dee7534ade18b628ed396daf593 |
23-Oct-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: Use hardfp calling convention between java to java call. This patch default to use hardfp calling convention. Softfp can be enabled by setting kArm32QuickCodeUseSoftFloat to true. We get about -1 ~ +5% performance improvement with different benchmark tests. Hopefully, we should be able to get more performance by address the left TODOs, as some part of the code takes the original assumption which is not optimal. DONE: 1. Interpreter to quick code 2. Quick code to interpreter 3. Transition assembly and callee-saves 4. Trampoline(generic jni, resolution, invoke with access check and etc.) 5. Pass fp arg reg following aapcs(gpr and stack do not follow aapcs) 6. Quick helper assembly routines to handle ABI differences 7. Quick code method entry 8. Quick code method invocation 9. JNI compiler TODO: 10. Rework ArgMap, FlushIn, GenDalvikArgs and affected common code. 11. Rework CallRuntimeHelperXXX(). Change-Id: I9965d8a007f4829f2560b63bcbbde271bdcf6ec2
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
|
b62ff579cd870b0bf213765b07d7b404d15ece7b |
25-Oct-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Add div/rem zero check elimination flag"
|
8fe0e35c546921a3576411948efffb3c813ef686 |
16-Oct-2014 |
Stephen Kyle <stephen.kyle@arm.com> |
ART: Prevent float inference back to SSA in-regs. .method public static getInt(I)I .registers 2 const/4 v0, 0x0 if-ne v0, v0, :after float-to-int v0, v0 :exit add-int/2addr v0, v1 return v0 :after move v1, v0 goto :exit .end method In this code sample, v1 is the single parameter to this method. In one of the phi-nodes inserted between :exit and add-int/2addr, v1's two incoming SSA regs are: - the initial def of v1 as a parameter - the v1 def'd at move v1, v0. During type inference, because the 2nd def is a float (because of the earlier float-to-int v0, v0) this will change the type of the 1st def to a float as well, which is incorrect since the first parameter is known to be non-float. This fix checks during phi-node type-inference if an SSA reg that is the initial def of a parameter vreg is about to be set as float when it was not previously, and skips the inference if so. In this case, when using a hard-float ABI, having the in-reg v1 set as float causes FlushIns() to read the argument to the method from an FP reg, when the argument will be passed in a core reg by any caller. Also included is a smali test for this bug: compare difference between ./run-test --64 800 ./run-test --64 --interpreter 800 when the vreg_analysis patch has not been applied. (Requires 64-bit because 32-bit ARM currently does not use hard-float.) getInt(I)I should return its argument, but it returns an incorrect value. Change-Id: I1d4b5be6a931fe853279e89dd820820f29823da1 Signed-off-by: Stephen Kyle <stephen.kyle@arm.com>
reg_analysis.cc
|
2c4257be8191c5eefde744e8965fcefc80a0a97d |
24-Oct-2014 |
Ian Rogers <irogers@google.com> |
Tidy logging code not using UNIMPLEMENTED. Change-Id: I7a79c1671a6ff8b2040887133b3e0925ef9a3cfe
uick/arm64/utility_arm64.cc
|
4799e0d90003b3ac60e204fc254a97fbf0104bd1 |
24-Oct-2014 |
Ian Rogers <irogers@google.com> |
am aea6888b: Merge "Tidy up logging." * commit 'aea6888b056be21adf762e066c7f33b8939b8a06': Tidy up logging.
|
ab9e1ce005d6b5b8777a8bb9db0fef35891c18a5 |
24-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am b08f4dcf: Merge "X86 Long Min/Max: Avoid calling SRegToVReg with -1" * commit 'b08f4dcf90215ed49e0b796ab3e609bd605be8ba': X86 Long Min/Max: Avoid calling SRegToVReg with -1
|
a4426cff8a81e6af05aa8cc44c162110ccf2d397 |
22-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix wide Phi detection in GVN, clean up INVOKEs. The detection of a wide Phi has been incorrectly looking at the current LVN's wide sreg value map but we only intersect live values and thus very often lose the information. This results in failure to identify identical values, i.e. potential missed optimizations. It also caused the bloating of the global value map with values we would not use. Rewrite the wide Phi detection to use the first merged LVN's notion of wide sreg. For this to work we also need to use the method's shorty to mark wide arguments. Also clean up INVOKEs' processing to avoid another source of bloating the global value map. Bug: 16398693 Change-Id: I76718af7d62a8c6883ef43e4f47058f7eaf479e1
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
|
aea6888b056be21adf762e066c7f33b8939b8a06 |
22-Oct-2014 |
Ian Rogers <irogers@google.com> |
Merge "Tidy up logging."
|
c7dd295a4e0cc1d15c0c96088e55a85389bade74 |
22-Oct-2014 |
Ian Rogers <irogers@google.com> |
Tidy up logging. Move gVerboseMethods to CompilerOptions. Now "--verbose-methods=" option to dex2oat rather than runtime argument "-verbose-methods:". Move ToStr and Dumpable out of logging.h, move LogMessageData into logging.cc except for a forward declaration. Remove ConstDumpable as Dump methods are all const (and make this so if not currently true). Make LogSeverity an enum and improve compile time assertions and type checking. Remove log_severity.h that's only used in logging.h. With system headers gone from logging.h, go add to .cc files missing system header includes. Also, make operator new in ValueObject private for compile time instantiation checking. Change-Id: I3228f614500ccc9b14b49c72b9821c8b0db3d641
ompiler_ir.cc
rontend.cc
|
a65c1dbb8d3511da6c0804f8063c453f744629c2 |
21-Oct-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86 Long Min/Max: Avoid calling SRegToVReg with -1 It is possible that the result of a call to min/max can't be combined with the following move. In that case, the destination will use the default long return value (EAX/EDX), with a s_reg_low value of -1. A debug compiler will assert fail in that case. Fix: A result with no s_reg_low must be unused. Just return with no code generated, like X86 GenInlinedAbsFloat(). Seen compiling GmsCore.apk on the host with a debug backend. Change-Id: I8006e822e8dcb2112d86e4047bb2e3037ba6fece Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
e15f5204642ad7c09b5c41021656379018080818 |
17-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 0008a6fa: Merge "Quick: In GVN, apply modifications early if outside loop." * commit '0008a6fac0843bf8b86cfed76872d4a935bc7a9b': Quick: In GVN, apply modifications early if outside loop.
|
415ac88a6471792a28cf2b457fe4ba9dc099396e |
30-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: In GVN, apply modifications early if outside loop. To improve GVN performance, apply modifications to blocks outside loops during the initial convergence phase. During the post processing phase, apply modifications only to the blocks belonging to loops. Also clean up the check whether to run the LVN and add the capability to limit the maximum number of nested loops we allow the GVN to process. Change-Id: Ie7f1254f91a442397c06a325d5d314d8f58e5012
b_optimizations.h
ataflow_iterator-inl.h
ataflow_iterator.h
rontend.cc
rontend.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass_driver_me.h
ass_me.h
|
54b3aa6b8da05b4cccea2cf56dc1d4eafbb9f765 |
17-Oct-2014 |
Ian Rogers <irogers@google.com> |
am b3f18cf7: Merge "Make ART compile with GCC -O0 again." * commit 'b3f18cf7466f85e15c6b7f005f544867a4d6847a': Make ART compile with GCC -O0 again.
|
b3f18cf7466f85e15c6b7f005f544867a4d6847a |
17-Oct-2014 |
Ian Rogers <irogers@google.com> |
Merge "Make ART compile with GCC -O0 again."
|
6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3 |
15-Oct-2014 |
Ian Rogers <irogers@google.com> |
Make ART compile with GCC -O0 again. Tidy up InstructionSetFeatures so that it has a type hierarchy dependent on architecture. Add to instruction_set_test to warn when InstructionSetFeatures don't agree with ones from system properties, AT_HWCAP and /proc/cpuinfo. Clean-up class linker entry point logic to not return entry points but to test whether the passed code is the particular entrypoint. This works around image trampolines that replicate entrypoints. Bug: 17993736 Change-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23
ompiler_ir.h
uick/arm/utility_arm.cc
uick/gen_common.cc
|
d06e989089c49bef7c08e704747625f9d86e72bd |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 4ffed256: Merge "Quick: Avoid node iteration for passes that don\'t need it." * commit '4ffed256cfae742e36ee735f806137f0d4a2f4b6': Quick: Avoid node iteration for passes that don't need it.
|
2ba01fd23e418018c44c45d94d711e12c9ba6435 |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 9ab7816a: Merge "Quick: Handle kMirOpNullCheck in LVN/GVN." * commit '9ab7816aec7264d79750e93021ab8714822a038f': Quick: Handle kMirOpNullCheck in LVN/GVN.
|
4ffed256cfae742e36ee735f806137f0d4a2f4b6 |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Avoid node iteration for passes that don't need it."
|
a78e66a2c0fb1ce75e3a4edaf0d70c0d1647dbad |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Handle kMirOpNullCheck in LVN/GVN. Change-Id: I0274e98cc61ccd1dbe0bd3e50deeb7d62bd1cb22
ocal_value_numbering.cc
|
c6d1cba59b0d8401cb448a0c2e1f36e35beab3ba |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am f1eb1002: Merge "Quick: Improve the BBCombine pass." * commit 'f1eb10024d616c15af3b0cd81acabe59131be918': Quick: Improve the BBCombine pass.
|
d20557ac06a67e35cda4a865b8382672ab908b55 |
16-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 8fc5acfd: Merge "Rewrite null check elimination to work on dalvik regs." * commit '8fc5acfd382bdc0d7920e8a13439b64344a8988a': Rewrite null check elimination to work on dalvik regs.
|
312eb25273dc0e2f8880d80f00c5b0998febaf7b |
07-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Improve the BBCombine pass. Eliminate exception edges for insns that cannot throw even when inside a try-block. Run the BBCombine pass before the SSA transformation to reduce the compilation time. Bug: 16398693 Change-Id: I8e91df593e316c994679b9d482b0ae20700b9499
b_optimizations.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
ass_driver_me_post_opt.cc
ost_opt_passes.h
sa_transformation.cc
|
7baa6f8783b12bb4b159ed4648145be5912215f2 |
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite null check elimination to work on dalvik regs. And move the null check and class init check elimination before the SSA transformation. The new pass ordering is in anticipation of subsequent changes. (An improved class init check elimination can benefit special method inlining. An improved block combination pass before SSA transformation can improve compilation time.) Also add tests for the NCE. Change-Id: Ie4fb1880e06334a703295aef454b437d58a3e878
b_optimizations.h
ir_dataflow.cc
ir_field_info.h
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
ass_driver_me_opts.cc
ass_driver_me_post_opt.cc
sa_transformation.cc
|
13f4c622077052011a8e2d4514abcfbd4a34c261 |
15-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 5c5efc25: Merge "ART: NullCheckElimination should converge with MIR_IGNORE_NULL_CHECK" * commit '5c5efc253507eb43265997c9afcd778f72b6cef4': ART: NullCheckElimination should converge with MIR_IGNORE_NULL_CHECK
|
aa7b8a329561c6e1f05938ddc5e9c4be795cd8a5 |
15-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Avoid node iteration for passes that don't need it. Change-Id: Ic1f6796a29ba861cee37a31193e07b497b84eb3f
ass.h
ost_opt_passes.h
|
423b137214debfa066522763a8e78511d300c8c9 |
15-Oct-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART: NullCheckElimination should converge with MIR_IGNORE_NULL_CHECK If the MIRGraph::EliminateNullChecksAndInferTypes() function managed to prove that some regs are non-null then it sets the flag MIR_IGNORE_NULL_CHECK and resets this flag for all the other regs. If some previous optimizations have already set MIR_IGNORE_NULL_CHECK then it can be reset by EliminateNullChecksAndInferTypes. This way NullCheckElimination discards some optimization efforts. Optimization passes should not reset MIR_IGNORE_NULL_CHECK unless they 100% sure NullCheck is needed. This patch makes the NCE_TypeInference pass merge its own calculated MIR_IGNORE_NULL_CHECK with the one came from previous optimizations. Technically NCE_TypeInference calculates the flag in a temporary MIR_MARK-th bit by preserving MIR_IGNORE_NULL_CHECK. Then at the end of NCE pass MIR_MARK is or-ed with MIR_IGNORE_NULL_CHECK. Change-Id: Ib26997c70ecf2c158f61496dee9b1fe45c812096 Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
ompiler_enums.h
ir_graph.h
ir_optimization.cc
|
5c5676b26a08454b3f0133783778991bbe5dd681 |
30-Sep-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Add div/rem zero check elimination flag Just as with other throwing bytecodes, it is possible to prove in some cases that a divide/remainder won't throw ArithmeticException. For example, in case two divides with same denominator are in order, then provably the second one cannot throw if the first one did not. This patch adds the elimination flag and updates the signature of several Mir2Lir methods to take the instruction optimization flags into account. Change-Id: I0b078cf7f29899f0f059db1f14b65a37444b84e8 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_enums.h
ir_graph.h
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
61357e47ca5381621d73abf3d5683cfd6af4fa78 |
14-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am c39eb4ae: Merge "Add regression test for null check elimination." * commit 'c39eb4aef19b7fe64283fb3ae7ce6d13cd6c8294': Add regression test for null check elimination.
|
cc4f8f96227b7d2065103ab775e7e7c9a762e624 |
14-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 72ab3cad: Merge "Revert "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK"" * commit '72ab3cadce5002163783d7b76781b9f26413b773': Revert "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK"
|
7cd01f5d496c384874ea8c21eafb2b6479833e6a |
13-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Add regression test for null check elimination. Prompted by https://android-review.googlesource.com/110090 Bug: 17969907 Change-Id: I938c27cda0681b9431d69baf4eafa7ca2f9b5c9c
ir_optimization.cc
|
72ab3cadce5002163783d7b76781b9f26413b773 |
13-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Revert "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK""
|
cb46ee13a5683c2973244da964887a448e61b6ec |
13-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Revert "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK" This reverts commit 504b7882fbb841787e350f2da54b1fa9171ce82a. Change-Id: I41c7a03c49f7904370a64c6ececc89146ff735c8
ir_optimization.cc
|
528c78b28f08425b9eac5773523a3f7889c7fef9 |
10-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 6b0518f6: Merge "Enable -Wimplicit-fallthrough." * commit '6b0518f6cfa79b35c067d8bc4d50d054cfc6656c': Enable -Wimplicit-fallthrough.
|
fc787ecd91127b2c8458afd94e5148e2ae51a1f5 |
10-Oct-2014 |
Ian Rogers <irogers@google.com> |
Enable -Wimplicit-fallthrough. Falling through switch cases on a clang build must now annotate the fallthrough with the FALLTHROUGH_INTENDED macro. Bug: 17731372 Change-Id: I836451cd5f96b01d1ababdbf9eef677fe8fa8324
ocal_value_numbering.cc
ir_graph.cc
uick/arm/assemble_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/assemble_mips.cc
uick/mir_to_lir.cc
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
f625fd5f0257cfa8fef58e94e8544f4a7b55595d |
10-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 182c9f66: Merge "stdint types all the way!" * commit '182c9f660993abf05825a2d532fe5bba420f11f0': stdint types all the way!
|
13735955f39b3b304c37d2b2840663c131262c18 |
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
stdint types all the way! Change-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08
ir_graph.cc
|
8e64ab3941329f7b384ddc1dc68afb4e765273c7 |
09-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am 4ecaf87a: Merge "ART: X86: GenLongArith should handle overlapped VRs" * commit '4ecaf87a2b62f4e51ee4c1f8b32aaea1473187a2': ART: X86: GenLongArith should handle overlapped VRs
|
d8c3e3608a7b47e82186e4f8118541ef06d9eab2 |
08-Oct-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: X86: GenLongArith should handle overlapped VRs In a case, when src and dest VRs are overlapped when we called GenLongArith it may cause the incorrect use of regs. The solution is to map src to an physical reg and work with this reg instead of mem. Renamed BadOverlap() to PartiallyIntersects() for consistency. Change-Id: Ia3fc7f741f0a92556e1b2a1b084506662ef04c9d Signed-off-by: Katkov, Serguei I <serguei.i.katkov@intel.com> Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
1d574adbc331bfe4cd0238345600a2d734a08846 |
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 51205042: Merge "Quick: Reduce memory usage and improve compile time." * commit '51205042343fa4852e01919de01fdcf261af510b': Quick: Reduce memory usage and improve compile time.
|
e7ee7ad455a4a6688eb175d944526a3d0a10808c |
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 2da74f2d: Merge "Quick: Separate null check elimination and type inference." * commit '2da74f2de211b7ecb39464e641fa9794dc1b67f4': Quick: Separate null check elimination and type inference.
|
5229cf17e3240d55f043c0a9308e22d967f897dc |
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Reduce memory usage and improve compile time. Move the def-block-matrix from Arena to ScopedArena. Remove BasicBlockDataFlow::ending_check_v and use a temporary bit matrix instead. Remove unused BasicBlockDataFlow::phi_v. Avoid some BitVector::Copy() at the end of null and clinit check elimination passes when the contents of the source BitVector is no longer needed. Change-Id: I8111b2f8a51e63075aa124b528d61b79b6933274
ir_graph.cc
ir_graph.h
ir_optimization.cc
sa_transformation.cc
|
67c72b8882f539afd1c8643396fce417cadb85d5 |
09-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Separate null check elimination and type inference. Change-Id: I4566ae9354c91ca935481cb4f5b729bba05c1592
b_optimizations.h
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
|
c401ff06f38975a9680fa61f84e93b42187bd716 |
09-Oct-2014 |
Ian Rogers <irogers@google.com> |
am a9b09744: Merge "Don\'t copy fill array data to quick literal pool." * commit 'a9b097443f26a6df1a322a8fef50fdd1f26a410b': Don't copy fill array data to quick literal pool.
|
832336b3c9eb892045a8de1bb12c9361112ca3c5 |
09-Oct-2014 |
Ian Rogers <irogers@google.com> |
Don't copy fill array data to quick literal pool. Currently quick copies the fill array data from the dex file to the literal pool. It then has to go through hoops to pass this PC relative address down to out-of-line code. Instead, pass the offset of the table to the out-of-line code and use the CodeItem data associated with the ArtMethod. This reduces the size of oat code while greatly simplifying it. Unify the FillArrayData implementation in quick, portable and the interpreters. Change-Id: I9c6971cf46285fbf197856627368c0185fdc98ca
ir_graph.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
5bf66fd9e6541d6386235b584d0a3f0c0dc06370 |
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 175b2732: Merge "Header file clean up." * commit '175b2732f7e55a07094c30aa08d946189b4af97e': Header file clean up.
|
7e70b002c4552347ed1af8c002a0e13f08864f20 |
08-Oct-2014 |
Ian Rogers <irogers@google.com> |
Header file clean up. Remove runtime.h from object.h. Move TypeStaticIf to its own header file to avoid bringing utils.h into allocator.h. Move Array::DataOffset into -inl.h as it now has a utils.h dependency. Fix include issues arising from this. Change-Id: I4605b1aa4ff5f8dc15706a0132e15df03c7c8ba0
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/mips/int_mips.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
35d013f642be175b3baf78cd28582aebe9beb69a |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am edc34c88: Merge "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK" * commit 'edc34c88b8f8abd04f9c4668787403608cf0b2d4': ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK
|
176336d0343fc250647d754331b421e154b8b525 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am 254aa0d3: Merge "ART: Fix SelectKind to work with nullptr" * commit '254aa0d3f58b56b227077ef32b4606ebc25eaae4': ART: Fix SelectKind to work with nullptr
|
32a74a44ee462ff27a3640c8d3bfc856a5b5bba9 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am 1293b6b2: Merge "ART: Fix issues with SplitBlock" * commit '1293b6b2adba33e8b5eca5632dd90c9835b2ef42': ART: Fix issues with SplitBlock
|
26cce4cd1e83f626e5a90a7fa2ae7b2f7d47e4c4 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am 893e8558: Merge "Fix to MirGraph::GetSSANameWithConst()" * commit '893e855864b7535f7da92f3942d3f88aaa584dd8': Fix to MirGraph::GetSSANameWithConst()
|
edc34c88b8f8abd04f9c4668787403608cf0b2d4 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK"
|
254aa0d3f58b56b227077ef32b4606ebc25eaae4 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Fix SelectKind to work with nullptr"
|
1293b6b2adba33e8b5eca5632dd90c9835b2ef42 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Fix issues with SplitBlock"
|
893e855864b7535f7da92f3942d3f88aaa584dd8 |
08-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Fix to MirGraph::GetSSANameWithConst()"
|
33c17021c74b4e1911851ca89d634d15ed811d8d |
15-Sep-2014 |
Mathew Zaleski <mathew.zaleski@intel.com> |
ART: Fix issues with SplitBlock The SplitBlock is a public interface from MIRGraph to be able to create two blocks from one. This interface can be called not just during the control flow graph building phase, but later. At that later point, extended instructions may have already been inserted. For example, SpecialMethodInliner can insert kMirOpNullCheck and kMirOpNop, and then another pass tries to split block that contains this. The DCHECK will fail even though the split is semantically correct. Signed-off-by: Mathew Zaleski <mathew.zaleski@intel.com> Conflicts: compiler/dex/mir_graph.cc Change-Id: I8bb3551407907909cda444a3379da2eb9331b9ff
ir_graph.cc
|
54083fb36485e74fdea4ddafb1de4f8686905eee |
08-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 50940ea8: Merge "Implement method calls using relative BL on ARM64." * commit '50940ea8fe668a80c15920d98cae228851ceb990': Implement method calls using relative BL on ARM64.
|
50940ea8fe668a80c15920d98cae228851ceb990 |
08-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Implement method calls using relative BL on ARM64."
|
9c14053a2a6529667c15de00f10f5251bf9f1a59 |
07-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 0d6102a8: Merge "Propagate optimization flags to kMirOpCheck." * commit '0d6102a80ec741d701788decfb701a657d7a98f7': Propagate optimization flags to kMirOpCheck.
|
504b7882fbb841787e350f2da54b1fa9171ce82a |
01-Oct-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART: fix NullCheckElimination to preserve MIR_IGNORE_NULL_CHECK If the MIRGraph::EliminateNullChecksAndInferTypes() function managed to prove that some regs are non-null then it sets the flag MIR_IGNORE_NULL_CHECK and resets this flag for all the other regs. If some previous optimizations have already set MIR_IGNORE_NULL_CHECK then it can be reset by EliminateNullChecksAndInferTypes. This way NullCheckElimination discards some optimization efforts. Optimization passes should not reset MIR_IGNORE_NULL_CHECK unless they 100% sure NullCheck is needed. This patch makes the NCE_TypeInference pass be conservative in resetting MIR_IGNORE_NULL_CHECK. Change-Id: I4ea74020968b5c5bd8e3af48211ffd4c6afd7f80 Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
ir_optimization.cc
|
9944b3b792103cb72df1953b5502ced9bf128305 |
06-Oct-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Fix to MirGraph::GetSSANameWithConst() Don't call ConstantValueWide() for a wide constant if high_word is set, as it will DCHECK if you try to get the value for the high word. Change-Id: I046ee3e6833ceb556a3c2dbc95699882d30d65f9 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_graph.cc
|
cc8cc7c7e2ba24667c0765b29c4417a5bf1d91c4 |
06-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Propagate optimization flags to kMirOpCheck. Bug: 17751474 Change-Id: I9561b641d956e21dac686c7cd414fa0c6a176147
uick/mir_to_lir.cc
|
c9ed6e64f910a3fb3afa34df36c9f8f56691164c |
03-Oct-2014 |
buzbee <buzbee@google.com> |
am dfaf4c39: Merge "Quick compiler: Fix ambiguous LoadValue()" * commit 'dfaf4c39809035bca7af85d2c51a8bd2f381e58e': Quick compiler: Fix ambiguous LoadValue()
|
dfaf4c39809035bca7af85d2c51a8bd2f381e58e |
03-Oct-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: Fix ambiguous LoadValue()"
|
7c02e918e752ab36f0b6cab7528f10c0cf55a4ee |
03-Oct-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Fix ambiguous LoadValue() Internal b/17790197 & hat tip to Stephen Kyle The following custom-edited dex program demonstrated incorrect code generation caused by type confusion. In the example, the constant held in v0 is used in both float and int contexts, and the register class gets confused at the if-eq. .method private static getInt()I .registers 4 const/16 v0, 100 const/4 v1, 1 const/4 v2, 7 :loop if-eq v2, v0, :done add-int v2, v2, v1 goto :loop :done add-float v3, v0, v1 return v2 .end method The bug was introduced in c/96499, "Quick compiler: reference cleanup" That CL created a convenience variant of LoadValue which selected the target register type based on the type of the RegLocation. It should not have done so. The type of a RegLocation is the compiler's best guess of the Dalvik type - and Dalvik allows constants to be used in multiple type contexts. All code generation utilities must specify desired register class based on the capabilities of the instructions to be emitted. In the failing case, OpCmpImmBranch (and GenCompareZeroAndBranch) will be using core registers, so the LoadValue must specify either kCoreReg or kRefReg. The CL deletes the dangerous LoadValue() variant. Change-Id: Ie4ec6e51b19676dbbb9628c72c8b3473a419e7ec
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
7c2ad5af0bdd3cc1069038f8e3422d99aeb5f44c |
24-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Implement method calls using relative BL on ARM64. Change-Id: I9e5d0b6c100b6cddd6bbb7ab07cff77ab104ea31
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/gen_invoke.cc
|
0bc0f416279207214f070a6c88db9b158c15c48a |
03-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 63462448: Merge "AArch64: oat patches should be 32-bit ints." * commit '63462448ca4e377074a10a4720aa22f71154dbe9': AArch64: oat patches should be 32-bit ints.
|
63462448ca4e377074a10a4720aa22f71154dbe9 |
03-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "AArch64: oat patches should be 32-bit ints."
|
12c35535d03dd3140ee75ebadb72e60eecd99c43 |
03-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 20810995: Merge "Remove all uses of MIR_INLINED." * commit '20810995a11f29b8220658ab829791db0810eb9d': Remove all uses of MIR_INLINED.
|
27cc09337cdff14f592f4e22fd235809ebe0d6a7 |
08-Sep-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: oat patches should be 32-bit ints. This makes the arm64 backend consistent with the behaviour of the code in oat_writer.cc and in the patchoat tool. It also reduces the size of boot.oat by 1.6% (aosp_arm64-eng build). Change-Id: Ia0b96737159c08955cd7b776ee396ff578cd58f6
uick/arm64/int_arm64.cc
uick/codegen_util.cc
|
ff0ac4772d489d8780bbb6bb271dc6d5333cca7c |
02-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Remove all uses of MIR_INLINED. They are not needed since https://android-review.googlesource.com/103763 Change-Id: I1dffe5e219db615be9d9aaceb72ad9bd7c69b58e
ocal_value_numbering.cc
ir_dataflow.cc
uick/dex_file_method_inliner.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/x86/utility_x86.cc
|
374e48cf5c68fd3423f3eaa830d8dfa655e945e5 |
02-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 6e301ec8: Merge "Fix build_all_egdes in MIRGraph::ProcessCanThrow()." * commit '6e301ec84ff8cd55a29386cff9b3b00d51675b64': Fix build_all_egdes in MIRGraph::ProcessCanThrow().
|
6e301ec84ff8cd55a29386cff9b3b00d51675b64 |
02-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix build_all_egdes in MIRGraph::ProcessCanThrow()."
|
6f5fab543da14df3769bebe1163e832a73bb54bd |
02-Oct-2014 |
Andreas Gampe <agampe@google.com> |
am 5be30072: ART: Remove wrong DCHECK * commit '5be30072c5a750617dc3f9380776d074f26d9f32': ART: Remove wrong DCHECK
|
5be30072c5a750617dc3f9380776d074f26d9f32 |
02-Oct-2014 |
Andreas Gampe <agampe@google.com> |
ART: Remove wrong DCHECK Bug: 17772057 Bug: 17763227 Bug: 17762845 Change-Id: If5d35b8e3e156173f2e47ae86ff48ebfc01ca02d
uick/arm64/int_arm64.cc
|
8ac41af13c8e48ede6a7c8a3bf2fb1a414326038 |
02-Oct-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Fix SelectKind to work with nullptr This patch fixes SelectKind to return kSelectNone when MIR is nullptr to avoid segmentation fault. Change-Id: I174ff5c153e03c1a1e2ef8bc68f7fb50e8a9bf3f Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ir_optimization.cc
|
dadd95ca1cd1e2152c2ae14e9c8e5b6768f2adcf |
01-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
am 37241e5c: Merge "Quick: Fix LVN/GVN handling of acquire operations." * commit '37241e5c70aa599ff7383ad18af5ddf5694a7144': Quick: Fix LVN/GVN handling of acquire operations.
|
37241e5c70aa599ff7383ad18af5ddf5694a7144 |
01-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Quick: Fix LVN/GVN handling of acquire operations."
|
e767f6ce3997f7634b26e7651bc7b90c060d3965 |
01-Oct-2014 |
Vladimir Marko <vmarko@google.com> |
Fix build_all_egdes in MIRGraph::ProcessCanThrow(). Calculate build_all_edges only after in_try_block has received its final value. This was a minor omission in https://android-review.googlesource.com/100505 Change-Id: Icc9189d2092bbd29fcf1706e4d6074a6d915cebe
ir_graph.cc
|
fa23645319cca1f1c4a7c208f931820f6783b1a4 |
29-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Quick: Fix LVN/GVN handling of acquire operations. Acquire operations, i.e. MONITOR_ENTER and volatile GETs, change the thread's view of the memory, so subsequent loads must get new value names in LVN/GVN. Release operations do not affect this thread's view of the memory, they the only push the modifications for other threads to see. Bug: 17689750 Change-Id: I9442d89b1d2c5252b99b02851b71bb85f871d734
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
|
228f9251668efe5ab303f9fb78841ed138954acb |
01-Oct-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "ART: Overflow of bound check in ArrayCopy intrinsic" into lmp-dev
|
359e437b3dbc2e53b2f8db5a9a8135feade572cc |
01-Oct-2014 |
Ian Rogers <irogers@google.com> |
am 8283e079: Merge "Enable -Wunreachable-code" * commit '8283e079a209e81caafd123a12a525922368fd34': Enable -Wunreachable-code
|
c9feb6af8497ff3060b62bf5ecbf9168295e3a76 |
01-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am f9098ea6: Merge "ART: Fix GenReduceVector and GenSetVector" * commit 'f9098ea6d7326b4d8de2860d18adf74046b80855': ART: Fix GenReduceVector and GenSetVector
|
48aa8a091eae2c220d3883aed97945b14c6dd9e0 |
01-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am 955af682: Merge "ART: Reset bb id to the last list mir" * commit '955af682a64bcf4e66c33efc671325054c25a648': ART: Reset bb id to the last list mir
|
466e978e81c9f2c184b25753184d32450edc1f07 |
01-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am f4ae8d89: Merge "ART: Allow overridable calculation of basic block dataflow" * commit 'f4ae8d8976abd1dcbb33824ced27775bff73f600': ART: Allow overridable calculation of basic block dataflow
|
d1e799e371e486b326970ac416d58e1c0980dd6e |
01-Oct-2014 |
Bill Buzbee <buzbee@android.com> |
am a2a91086: Merge "Update maximum number of reachable blocks in last step" * commit 'a2a91086feb01c1465f063e10da70b7fa37a19eb': Update maximum number of reachable blocks in last step
|
07140838a3ee44a6056cacdc78f2930e019107da |
01-Oct-2014 |
Ian Rogers <irogers@google.com> |
Enable -Wunreachable-code Caught bugs in DeoptimizeStackVisitor and assemble_x86 SIB encoding. Add UNREACHABLE macro to document code expected to be unreachable. Bug: 17731047 Change-Id: I2e363fe5b38a1246354d98be18c902a6031c0b9e
uick/x86/assemble_x86.cc
|
f9098ea6d7326b4d8de2860d18adf74046b80855 |
30-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Fix GenReduceVector and GenSetVector"
|
955af682a64bcf4e66c33efc671325054c25a648 |
30-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Reset bb id to the last list mir"
|
f4ae8d8976abd1dcbb33824ced27775bff73f600 |
30-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Allow overridable calculation of basic block dataflow"
|
a2a91086feb01c1465f063e10da70b7fa37a19eb |
30-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Update maximum number of reachable blocks in last step"
|
6f4dcae28c23a9ac42fd1283ea1c2462f5e1e210 |
29-Sep-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Allow overridable calculation of basic block dataflow Currently dataflow information is not calculated for catch blocks in order to reduce overhead. However, this makes assumption that the lack of this information is only preventing local optimizations to catch block. But in reality this problematic for global optimizations. However, since no optimizations need complete information for now, simply leave logic same but factor it out in separate method. Change-Id: I5c13344c18409bd172a5d9b07577b4a1353cc733 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_dataflow.cc
ir_graph.h
|
6a49776cc11d8daf078d1f6243a4932cd88246e6 |
30-Sep-2014 |
Andreas Gampe <agampe@google.com> |
am 00ade1e5: Merge "ART: Fix some -Wpedantic errors" * commit '00ade1e5eb76318790aad096ded1b7c4e9638785': ART: Fix some -Wpedantic errors
|
00ade1e5eb76318790aad096ded1b7c4e9638785 |
30-Sep-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix some -Wpedantic errors"
|
db7239ccce7748f2b494fb3b91c128b37019a093 |
17-Sep-2014 |
avignate <aleksey.v.ignatenko@intel.com> |
ART: Overflow of bound check in ArrayCopy intrinsic System.arraycopy method is implemented as intrinsic on x86. It has bound check which has a bug to overflow in certain conditions when summ of array offset and number elements to be copied are more than MAX_INT. For the methods like CarArrayBuffer.get it means no OutOfBound exception to be thrown. The proposed solution fixed that. b/17711775 Signed-off-by: avignate <aleksey.v.ignatenko@intel.com> (cherry picked from commit f9f0ed401f7fe4138a71b36719423b908a3b7bfb) Change-Id: I1d4ca900df262d483a94ebea8fa686ea361772c8
uick/x86/target_x86.cc
|
2f8ffda4fa2a2c8002a7cc799ed23fa85cc706ee |
30-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
resolved conflicts for merge of 79705f99 to lmp-dev-plus-aosp Change-Id: I6a87d6f2364ba3ac86d13faaf161dcc65990e4bb
|
4163c53ce38a0f1f88bf3e8d26de9914da38498b |
15-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: address some outstanding TODOs. Fix comments in arm64_lir.h. Rename Arm* to A64* and replace FWIDE, FUNWIDE, ... with WIDE, UNWIDE, ... Change-Id: I4900902e28463ea5e00e34ea40ddfc15704c0bfa
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
|
a1b3453a9ac5c7580de523d980f43ea1f5b4ab47 |
30-Sep-2014 |
Ian Rogers <irogers@google.com> |
am cc6b59ee: Merge "ART: Fix movnti assembler" * commit 'cc6b59ee25d7b9782cc971687715d664a97b05bd': ART: Fix movnti assembler
|
cc6b59ee25d7b9782cc971687715d664a97b05bd |
30-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Fix movnti assembler"
|
c8ccf68b805c92674545f63e0341ba47e8d9701c |
30-Sep-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix some -Wpedantic errors Remove extra semicolons. Dollar signs in C++ identifiers are an extension. Named variadic macros are an extension. Binary literals are a C++14 feature. Enum re-declarations are not allowed. Overflow. Change-Id: I7d16b2217b2ef2959ca69de84eaecc754517714a
lobal_value_numbering.h
ocal_value_numbering.h
uick/quick_compiler.cc
|
775bbef0904b9169334714e8df2e3e2d76927a5b |
29-Sep-2014 |
Ian Rogers <irogers@google.com> |
am 1edf6380: Merge "ART: Deprecate CompilationUnit\'s code_item" * commit '1edf638010c4b15b87f865d180c3b95026827e9a': ART: Deprecate CompilationUnit's code_item
|
343157d5e5f3cb9f7004618f19b65b6af6143636 |
29-Sep-2014 |
Ian Rogers <irogers@google.com> |
am 1ee1458d: Merge "Reduce scope of MIR analysis attributes." * commit '1ee1458dab818d5c44b7eba712918a5071df5d5b': Reduce scope of MIR analysis attributes.
|
02ff2d4187249d26fabe8e5eacc27b99984ee353 |
04-Sep-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
AddIntrinsicSlowPath with resume requires clobbering AddIntrinsicSlowPath with resume results in a call. So all temps must be clobbered at the point where AddIntrinsicSlowPath returns. (cherry-picked from 9863daf4fdc1a08339edac794452dbc719aef4f1) Change-Id: If9eb887e295ff5e59920f4da1cef63258ad490b0 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
1edf638010c4b15b87f865d180c3b95026827e9a |
29-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Deprecate CompilationUnit's code_item"
|
750359753444498d509a756fa9a042e9f3c432df |
12-Sep-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Deprecate CompilationUnit's code_item The code_item field is tracked in both the CompilationUnit and the MIRGraph. However, the existence of this field in CompilationUnit promotes bad practice because it creates assumption only a single code_item can be part of method. This patch deprecates this field and updates MIRGraph methods to make it easy to get same information as before. Part of this is the update to interface GetNumDalvikInsn which ensures to count all code_items in MIRGraph. Some dead code was also removed because it was not friendly to these updates. Change-Id: Ie979be73cc56350321506cfea58f06d688a7fe99 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_ir.cc
ompiler_ir.h
lobal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ir_optimization_test.cc
ortable/mir_to_gbc.cc
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/ralloc_util.cc
|
584cc791cd0e352fb54ad54e72ba002a35dc758f |
29-Sep-2014 |
Ian Rogers <irogers@google.com> |
Reduce scope of MIR analysis attributes. MIR analaysis attributes are only used in MIRGraph::AnalyzeBlock. Reduce the scope to just the file that defines that function. Reduce the size of the attributes from int32 to int16. Remove the use of #defines in favor of enums. Change-Id: I45ba3aa08beae67240507917b584d537a029838e
ir_analysis.cc
ir_graph.h
|
ae9f3e6ef9f97f47416f829448e5281e9a57d8b8 |
23-Sep-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Fix movnti assembler Movnti was receiving rex prefix before its opcode. Additionally, the 64-bit version was missing the rex.w prefix. Change-Id: Ie5c3bbe109765a0b990cafeeea1ee30329daabd0 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
ed184b759d8a7f9cfd212e5c9418ee8ddbb86543 |
27-Sep-2014 |
buzbee <buzbee@google.com> |
am ed34f59c: Merge "Quick compiler: aarch64 codegen & long_min literal" into lmp-dev * commit 'ed34f59c30f97e51e517d8dfb0741ed059014ff6': Quick compiler: aarch64 codegen & long_min literal
|
b504d2f89fdd5c01816bcbad752797cb78de0e99 |
27-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler: aarch64 codegen & long_min literal Int64 overflow during instruction selection caused incorrect code patterns to emitted in some cases of long operations with an immediate value of 0x8000000000000000. The code in question was attempting to determine if the immediate operand would fit in aarch64 immediate instruction variants. Internal b/17630605 Change-Id: I8177021b73e51302bc1032387d83b1dd567ed6db
uick/arm64/utility_arm64.cc
|
53cec00aa6789382621a53b33b13f45bd27148ca |
26-Sep-2014 |
Udayan Banerji <udayan.banerji@intel.com> |
ART: Fix GenReduceVector and GenSetVector For GenReduceVector: We now correctly load non-wide values for non-wide destination registers, and generate reg-reg and reg-mem forms of pextr correctly. For GenSetVector: We use the correct opcode from loading into an xmm from a 64-bit GPR Change-Id: I0a01d1f0b12b32a0dee8f79a0139ffcf6d6cb4d5 Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
uick/x86/target_x86.cc
|
d282d59b482b6c3ecdb6af06eabaa7fd4bae975f |
26-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "Elimination of redundant instructuion"
|
f4da675bbc4615c5f854c81964cac9dd1153baea |
01-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Implement method calls using relative BL on ARM. Store the linker patches with each CompiledMethod instead of keeping them in CompilerDriver. Reorganize oat file creation to apply the patches as we're writing the method code. Add framework for platform-specific relative call patches in the OatWriter. Implement relative call patches for ARM. Change-Id: Ie2effb3d92b61ac8f356140eba09dc37d62290f8
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
db273aa1fc12a0e8a0d5a608df540e5d46a16b78 |
07-Sep-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86: evaluation destination should be after load of source in RA [DO NOT MERGE] In almost most cases working with Register Allocator we must first load source and then evaluate the destination. In this particular case for byte-code shl-int/2addr v10, v10 we first find a destination (memory) then load source (v10 -> physical register) and generate a shift operation on memory. This is ok for this bytecode but RA thinks that v10 is in register (we loaded source) and this is incorrect because updated value in memory and physycal register is not up to date. Change-Id: Ib4c71f70dcbf78b76ca89897e3bd605a89d77d08 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> (cherry picked from commit a464466fea8df617a50055230cfe7a16ea52cc14)
uick/x86/int_x86.cc
|
590c6a4ded1deb378baa253c86070d8eeffdc820 |
23-Sep-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Reset bb id to the last list mir This patch fixes a bug in RemoveMIRList() to reset bb id to the last list mir. Change-Id: I0384d8d22e357b69725f455772f55296c50bc1d3 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ir_graph.cc
|
e39c54ea575ec710d5e84277fcdcc049f8acb3c9 |
22-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Deprecate GrowableArray, use ArenaVector instead. Purge GrowableArray from Quick and Portable. Remove GrowableArray<T>::Iterator. Change-Id: I92157d3a6ea5975f295662809585b2dc15caa1c6
ataflow_iterator-inl.h
ataflow_iterator.h
lobal_value_numbering.cc
lobal_value_numbering_test.cc
ocal_value_numbering_test.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ir_optimization_test.cc
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
ost_opt_passes.cc
uick/arm/call_arm.cc
uick/arm/target_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
sa_transformation.cc
|
b7e9e3207577861030f0d5816baa523ef6bcd1bb |
22-Sep-2014 |
Anton Shamin <anton.shamin@intel.com> |
Elimination of redundant instructuion Elimination of storing offset in phys register (while it's already stored in ECX by default) from two address shift operation. Change-Id: Iaf9abde65f505ab855f73f9da7bd13fa46c64fbb Signed-off-by: Anton Shamin <anton.shamin@intel.com>
uick/x86/int_x86.cc
|
04db94656e4316fe84a19856452c6ca037799d11 |
20-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Address three issues with x86 assembler before enabling load store elimination."
|
8147dcb6b149ba5bba0915fdf0cbcb2dd18d431e |
19-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Overflow of bound check in ArrayCopy intrinsic"
|
87258edd817672daefc1d262af4cfdf732d4e454 |
19-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Slow path should break def tracking"
|
8d050d8cccaa4e7d4a3fde863ccb0411337c9c98 |
19-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AddIntrinsicSlowPath with resume requires clobbering"
|
d872b7945ea07ba93ff984cb42b7388e0551a16c |
19-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Fix instruction flags of kMirOpCheck and kMirOpCheckPart2"
|
f33e4d419e90b9a8514c040e5c8b5780965dd538 |
19-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86 QBE: Make some X86 routines virtual"
|
b7fc629dc562ee9f3df04a112a70b7868664f94d |
10-Sep-2014 |
Udayan Banerji <udayan.banerji@intel.com> |
ART: Fix instruction flags of kMirOpCheck and kMirOpCheckPart2 Since they are just wrappers for correct modeling, it was believed that these instructions do not need flags. However, the flags are needed to correctly reflect their semantic behavior in a manner consistent with all other instructions. Also, missing flags for new extended instructions have also been added. Change-Id: I2282eebf4b9c82b82e26722914645fcc0be49c82 Signed-off-by: Udayan Banerji <udayan.banerji@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
|
497d62e65e703a8875ca5001b34a9740ec93b36f |
17-Sep-2014 |
buzbee <buzbee@google.com> |
ART: skip compilation of huge methods. Besides not being worthwhile to compile, it huge methods could cause overflow of some internal compiler structures. internal b/17524219 (cherry picked from commit bf5d818f7e59ce33521ad81bbab68b1e7a09e0ba) Change-Id: If99b47c3191c69feee319c9d73537e827ba0cc1d
rontend.cc
|
bf5d818f7e59ce33521ad81bbab68b1e7a09e0ba |
17-Sep-2014 |
buzbee <buzbee@google.com> |
ART: skip compilation of huge methods. Besides not being worthwhile to compile, it huge methods could cause overflow of some internal compiler structures. internal b/17524219 Change-Id: I0e47ff4757eec265809598830a2616ac367af77d
rontend.cc
|
f9f0ed401f7fe4138a71b36719423b908a3b7bfb |
17-Sep-2014 |
avignate <aleksey.v.ignatenko@intel.com> |
ART: Overflow of bound check in ArrayCopy intrinsic System.arraycopy method is implemented as intrinsic on x86. It has bound check which has a bug to overflow in certain conditions when summ of array offset and number elements to be copied are more than MAX_INT. For the methods like CarArrayBuffer.get it means no OutOfBound exception to be thrown. The proposed solution fixed that. Change-Id: Id16a26163a61d934b862a8729a52ca5c1a56caec Signed-off-by: avignate <aleksey.v.ignatenko@intel.com>
uick/x86/target_x86.cc
|
88157efc1e16707d4ae10775d4acb15121c50fe7 |
12-Sep-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Add the "time" compilation filter and output compilation stats. A "time" compiler filter means the compiler optimizes for compile time. Change-Id: Id1a207ceb2d95f3548aae5e45d51b80695da2029
ir_analysis.cc
|
0a1174efd81fc25110ad106a84063c62af9ce7e5 |
11-Sep-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86 QBE: Make some X86 routines virtual Add virtual in one place, and move some code into a virtual routine. This allows subclassing and overriding for my purposes. Change-Id: Ie415df943b17b56ad1f057513b2df2a31801a72f Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
c80605d6f13b0f1e5ac5446c755e6d210f06b19a |
11-Sep-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Consider clinit elimination for inlining Currently inliner rejects inlining method if class initialization is needed. However, if it has been proven already that it was done, then inlining can safely proceed. Change-Id: Iaf1638fcfffff1bcf66010dc39090c77e009a1bb Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_optimization.cc
|
ebab3bbcaa09b644acd50ec18d79cb0d239bf347 |
13-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "Compile time performance improvements focusing on interpret-only."
|
7b078e8c04f3e1451dbdd18543c8b9692b5b067e |
10-Sep-2014 |
Ian Rogers <irogers@google.com> |
Compile time performance improvements focusing on interpret-only. Reduce virtual method dispatch in the method verifier and make more code inline-able. Add a StringPiece with const char* equality operator to avoid redundant StringPieces and strlens. Remove back link from register line to verifier and pass as argument to reduce size of RegisterLine. Remove instruction length from instruction flags and compute from the instruction, again to reduce size. Add suspend checks to resolve and verify to allow for more easy monitor inflation and reduce contention on Locks::thread_list_suspend_thread_lock_. Change ThrowEarlierClassFailure to throw pre-allocated exception. Avoid calls to Thread::Current() by passing self. Template specialize IsValidClassName. Make ANR reporting with SIGQUIT run using checkpoints rather than suspending all threads. This makes the stack/lock analysis less lock error prone. Extra Barrier assertions and condition variable time out is now returned as a boolean both from Barrier and ConditionVariable::Wait. 2 threaded host x86-64 interpret-only numbers from 341 samples: Before change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms After change: Avg 139.163% 99% CI 3.027ms to 838.257ms Reduction in average compile time after change is 20.9%. Slow-down without change is 26.5%. Bug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable could return unresolved type when class loading is disabled. Bug: 17398101 Change-Id: Id59ce3cc520701c6ecf612f7152498107bc40684
erified_method.cc
|
98cb689a57882ecef33967b7804f98b8f8fc76f3 |
12-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler (arm64) Fix inline Math.round() Math.round is detected and inlined for arm64. However, the arm64 backend incorrectly modified a source operand in place during the round sequence. Depending on how registers are allocated, that modification could persist. Changed to use a temp register for the intermediate result. Internal b/17411468 Change-Id: I7c636f985e193f8ff838768fde3b741e443bb1bb
uick/arm64/fp_arm64.cc
|
98216e53f8d538b4386b80b896edfa20e9734827 |
12-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler (arm64) Fix inline Math.round() Math.round is detected and inlined for arm64. However, the arm64 backend incorrectly modified a source operand in place during the round sequence. Depending on how registers are allocated, that modification could persist. Changed to use a temp register for the intermediate result. Internal b/17411468 Change-Id: I7c636f985e193f8ff838768fde3b741e443bb1bb
uick/arm64/fp_arm64.cc
|
a870bc5495b20a830ebd8342b49ef148bbff72dd |
09-Sep-2014 |
Haitao Feng <haitao.feng@intel.com> |
ART: Address three issues with x86 assembler before enabling load store elimination. 1) Remove the IS_LOAD attribute from LEA instructions. 2) Change the attribute of fp stack instructions from IS_UNARY_OP to IS_BINARY_OP as operands[1] will be used to compute GetInstructionOffset. 3) Add IS_MOVE attribute for general register move instructions. Change-Id: I7054df47956f2acecf579ff7acfde385fd8ac194 Signed-off-by: Haitao Feng <haitao.feng@intel.com>
uick/mir_to_lir-inl.h
uick/x86/assemble_x86.cc
|
589e046c483ca0dbee6c28fb617997f43ee28b94 |
05-Sep-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Slow path should break def tracking Slow path usually results in invocation of runtime. Runtime should be ensured that all VR on stack are up to date. To do this we reset def tracking system at the moment of adding slow path and as a result actual writes to stack for all VRs will not be optimized away. The decision is conservative to be safe however probably not all runtime calls can potentially require VRs to be on stack. In this case we will need insert reset def tracking in all places where dangerous slow path is used. Change-Id: I2cb7698a12c17354060fdbb944e1da1fb922c23b Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/codegen_util.cc
|
9863daf4fdc1a08339edac794452dbc719aef4f1 |
04-Sep-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
AddIntrinsicSlowPath with resume requires clobbering AddIntrinsicSlowPath with resume results in a call. So all temps must be clobbered at the point where AddIntrinsicSlowPath returns. Change-Id: If9eb887e295ff5e59920f4da1cef63258ad490b0 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
a87a7950ee79f42351992d211517f9f22e9393ee |
11-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "Revert "Add read barriers for the roots in the verifier.""
|
be428b4da47339409aac0cfa153888c384dfaef7 |
11-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Fix variable formatting and CodeLayout's multiple visits"
|
d8f69b086baf6717ce949d1c4de90d73b91083b0 |
10-Sep-2014 |
Ian Rogers <irogers@google.com> |
Revert "Add read barriers for the roots in the verifier." This reverts commit 7da9586b559290e1c16207c6513ffe485de61655. Bug: 17398101 Change-Id: I1d6110fdf0d3a3c9241c8e7e7f4b85a298f9dd8e
erified_method.cc
|
75bcc3780bc40dd7c265e150aff5b891135ff6e3 |
04-Sep-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Fix variable formatting and CodeLayout's multiple visits The CodeLayout pass visits multiple times the same BasicBlock. This patch fixes that issue to reduce its overhead. The patch also fixes cUnit to c_unit in the bb_optimization files. Change-Id: I76afa73dc79b9ee9993223c066a974ca81adf203 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
b_optimizations.h
ir_optimization.cc
|
b5477f0f8080cef4cb8a9dcea4367344ea7cdab4 |
10-Sep-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix kThumb2Vldrd definition to set correct flag. kThumb2Vldrd shoud be set IS_LOAD_OFF4 not IS_LOAD_OFF. Change-Id: I6b8ec3c54513f687a846ba7f3a817f6e439abcc9 Signed-off-by: Junmo Park <junmoz.park@samsung.com>
uick/arm/assemble_arm.cc
|
4e67841e99e4a206133e7010653ccd132682296a |
09-Sep-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change Reference.get() intrinsic to Reference.getReferent(). The reference intrinsic was incorrectly inlining PhantomReference.get(). We now get around this by adding a layer of indirection. Reference.get() now calls getReferent() which is intrinsified and inlined. Requires: https://android-review.googlesource.com/#/c/107100/ Bug: 17429865 (cherry picked from commit cd48f2d86197d4fe87cc88077bc4af5ba66e5295) Change-Id: Ie91e70abf43cedf3c707c7bb8a5059e19d2a2577
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
cd48f2d86197d4fe87cc88077bc4af5ba66e5295 |
09-Sep-2014 |
Mathieu Chartier <mathieuc@google.com> |
Change Reference.get() intrinsic to Reference.getReferent(). The reference intrinsic was incorrectly inlining PhantomReference.get(). We now get around this by adding a layer of indirection. Reference.get() now calls getReferent() which is intrinsified and inlined. Requires: https://android-review.googlesource.com/#/c/107100/ Bug: 17429865 Change-Id: Ie91e70abf43cedf3c707c7bb8a5059e19d2a2577
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
a464466fea8df617a50055230cfe7a16ea52cc14 |
07-Sep-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86: evaluation destination should be after load of source in RA In almost most cases working with Register Allocator we must first load source and then evaluate the destination. In this particular case for byte-code shl-int/2addr v10, v10 we first find a destination (memory) then load source (v10 -> physical register) and generate a shift operation on memory. This is ok for this bytecode but RA thinks that v10 is in register (we loaded source) and this is incorrect because updated value in memory and physycal register is not up to date. Change-Id: Ib4c71f70dcbf78b76ca89897e3bd605a89d77d08 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
90a21f8e76028b9f89e91c436fc6fe9e9a354694 |
07-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Fix handling of unused returns As part of the inlining process, the quick compiler will attempt to eliminate MOVE_RESULT instructions and deliver the result of the inlined function directly to the eventual use. The type of the returned value is determined by the subsequent use (which had already been typed via the size and type inference pass). However, if a method result is never used the code just defaulted to assigning dummy core sink register[s]. This caused a DCHECK failure on some 64-bit systems for methods returning an unused reference (although the generated code was correct). This CL selects sink registers for the unused return case based on the type of the inlined method, and adds another DCHECK to verify that the result of the size & type inference pass matches with the inlined method's type. Internal b/17328561 Change-Id: I9803ad604fe1bdcf9ff9a1d310cf022a7b6deae2
uick/gen_invoke.cc
|
9b868cbfa6d74387a80ce52a426f9a5bc3ddbbaf |
07-Sep-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Make the dominator bitvectors expandable"
|
eacc5f015fab4d6607f72165b0902f49f7d18763 |
01-Sep-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix Thumb2Stm, ldm definition of EncodingMap for arm Thumb2Stm instruction can save r0-r12,r14. But the definition of EncodingMap only set r0-r12. So it is fixed likes Thumb2Stmia. Add new assembler formats kFmtLdmRegList and kFmtStmRegList. Change-Id: Id03118d602f9d49d9d916f3dd9f3198f24ab9c37
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
|
007a065ac5dbb41a271c5cc117fccb6b04b323ae |
06-Sep-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Make the dominator bitvectors expandable The dominator based bitvectors are not expandable. However, if we wish to add BasicBlocks and recalculate, it is required to make them expandable. Change-Id: I250684783c233eca31bb40a5bc971c97fcf7c42d Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
sa_transformation.cc
|
3a91f442218339709bab1b5ae189de40fb546c93 |
02-Sep-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: X86: Improve multiply in div/rem by literal Rewrite the multiplication of the magic number by the dividend to save one instruction by multiplying directly from the dividend, rather than loading the dividend into EAX/RAX first. Change-Id: I7934243d90c0739a7f11a8d70f6fb2c000144587 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
57f2bbda741d2d3d769a50268b4e0b9b54959684 |
04-Sep-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Fix x86_64 GenSelect case when destination is Ref Reference in x86_64 is a 64-bit solo register. As a result, the invocation of OpRegImm results in an error when Select opcode of the kind: ref = boolean ? null : null; because opRegImm does not support 64-bit destination for OpMov. The case above is only possible for ref because no one other constant except null is possible. Bug: 17327895 Change-Id: I7541e744ec1c8619711712fd17be72764efcf3a8 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> (cherry picked from commit 3f51e7d942c22edaab3a7e703a1e6a2dd6a26f77)
uick/x86/int_x86.cc
|
3f51e7d942c22edaab3a7e703a1e6a2dd6a26f77 |
04-Sep-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Fix x86_64 GenSelect case when destination is Ref Reference in x86_64 is a 64-bit solo register. As a result, the invocation of OpRegImm results in an error when Select opcode of the kind: ref = boolean ? null : null; because opRegImm does not support 64-bit destination for OpMov. The case above is only possible for ref because no one other constant except null is possible. Bug: 17327895 Change-Id: I7541e744ec1c8619711712fd17be72764efcf3a8 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
6dccdc2511c9f22d3cc2ea83386ce9db2688fa19 |
18-Aug-2014 |
Maxim Kazantsev <maxim.kazantsev@intel.com> |
ART: Reduce LockCallTemps usage Using FlushAllRegs/LockCallTemps in integer arithmetics causes excess register flushing and clobbering. This patch adds API that allows to flush, clobber and lock only those registers we really need for calculations. Change-Id: Idabaa4fff4d18a33e5040a80f66f2df6432f8be0 Signed-off-by: Max Kazantsev <maxim.kazantsev@intel.com>
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
328c430e923ce8d18532d0fdd26cd233e73763dd |
04-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Vectorization opcode implementation fixes"
|
d73f52b1b9bea825d98830a906511a9e97ab277d |
04-Sep-2014 |
Ian Rogers <irogers@google.com> |
Merge "Add numerator check for integer divide and modulo"
|
fbebc696cb4a6dd7cfaeb978076330ae34ffffac |
02-Sep-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Only call CalculateBasicBlockInformation once CalculateBasicBlockInformation gets called twice now when dirty is true. Change-Id: I8aa0569e4c00ea884a45ecea957a4ae06a328969 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ass_driver_me_opts.cc
|
b3a84e2f308b3ed7d17b8e96fc7adfcac36ebe77 |
28-Jul-2014 |
Lupusoru, Razvan A <razvan.a.lupusoru@intel.com> |
ART: Vectorization opcode implementation fixes This patch fixes the implementation of the x86 vectorization opcodes. Change-Id: I0028d54a9fa6edce791b7e3a053002d076798748 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com> Signed-off-by: Philbert Lin <philbert.lin@intel.com>
ackend.h
ompiler_enums.h
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
ff4cfe07009ac0b0f07475ef2aa91d9aaf9ab291 |
30-Aug-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix SetupResourceMasks to pass correct parameters Calling SetupTargetResourceMasks function with correct parameter. SetupTargetResourceMasks(lir, flags, use_mask, def_mask) is correct order. b/17369806 (cherry-picked from commit sha 2a09504334a3a3b4c47100197df0827cc6740433) Change-Id: I49118c3f2d3d06fac83fa3d5014b7fdaff6a2b00
uick/mir_to_lir-inl.h
|
f72fd02c4ea0f1aa610b8a4f9f51ef86c285b1cf |
03-Sep-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: disable GVN DO NOT MERGE" into lmp-dev
|
2a09504334a3a3b4c47100197df0827cc6740433 |
03-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix SetupResourceMasks to pass correct parameters"
|
4c4f4daafbac15b856da91118d9ea55c9eefa54b |
03-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler: disable GVN DO NOT MERGE Disable global value numbering optimization for lmp (but keep on for master). b/16398693 Change-Id: I125c588c987a81db54a15da1eec9dee2b009956f
rontend.cc
|
4a9467959d4693f805c39536eed3c3bc5e8bbfd8 |
03-Sep-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler, aarch64: Insane sanity checker"
|
de0b996661351450fa4d918706c5322e001c29c9 |
27-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix read-out-of-bounds in the compiler In case of a wide dalvik register, asking for the constant value can lead to a read out of bounds. Bug: 17302671 (cherry picked from commit ade731854d18839823e57fb2d3d67238c5467d15) Change-Id: Ie1849cd67cc418c97cbd7a8524f027f9b66e4c96
ir_graph.h
uick/codegen_util.cc
|
4d05d931d3d608f5047e0d9dfb422df018ace716 |
03-Sep-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix read-out-of-bounds in the compiler" into lmp-dev
|
aa839cc299acd0eaa21e80cc6da6142c5e2dec7e |
30-Aug-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix SetupResourceMasks to pass correct parameters Calling SetupTargetResourceMasks function with correct parameter. SetupTargetResourceMasks(lir, flags, use_mask, def_mask) is correct order. Change-Id: I49118c3f2d3d06fac83fa3d5014b7fdaff6a2b00 Signed-off-by: Junmo Park <junmoz.park@samsung.com>
uick/mir_to_lir-inl.h
|
f77e977b04f1a73a52ea7965789cbda39d7734c4 |
03-Sep-2014 |
buzbee <buzbee@google.com> |
Quick compiler, aarch64: Insane sanity checker Fix bit-mask generation used in the sanity checking code for long division by small constants via multiplication. The failing case was a 64-bit wide mask. The macro was using the desired width of the result as a shift count - and a left shift of a 64-bit integer by 64 bits is undefined. Note that the generated code is correct - it's just the sanity checking code that was wrong. Change-Id: Ic6654662f848d3caab2c3b1ef0d92fe2eb9673f4
uick/arm64/target_arm64.cc
|
7c7686e62d262f1823876cebb3700e20f967dd56 |
02-Sep-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Revert "Revert "ART: Prepare for ELF64."""
|
f9b87b1eece0e03578c4d1b627f1d5e8691a539a |
02-Sep-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "ART: Prepare for ELF64."" Fix was commited in "Fix frame size issue with 64-bit" This reverts commit 7eebd95bddc7c6866ba29010d28b4f8251b43242. Change-Id: I799b7fcab14ae24471d2f9d6d3a5e5cedd4aa7b8
uick/quick_compiler.cc
|
893600ce548fb4cf057e2bdcf8b305eae3338f7d |
01-Sep-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Revert "ART: Prepare for ELF64.""
|
7eebd95bddc7c6866ba29010d28b4f8251b43242 |
01-Sep-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "ART: Prepare for ELF64." Build fails on arm64 with error message: art/compiler/elf_writer_quick.cc:1083:1: error: the frame size of 2016 bytes is larger than 1728 bytes [-Werror=frame-larger-than=] This reverts commit 45b8f1ab2782d02830c77751f883456de799dfb6. Change-Id: I61b2e5f27ba4b2b32eacaec51fb5e5ed12fd8066
uick/quick_compiler.cc
|
59a004328f42c32026a79b59e8eae0f3bf85b59b |
30-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Address issues with kIntrinsicMinMaxDouble for x86"
|
5383613c5deab8d92dcfb85c1b034594394c7cca |
30-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Update CFG dumper to handle extended better"
|
45b8f1ab2782d02830c77751f883456de799dfb6 |
27-Aug-2014 |
Tong Shen <endlessroad@google.com> |
ART: Prepare for ELF64. Make ElfWriterQuick a template class. No functionality change. Change-Id: I62b60dc9795c4795027e80f0bee6b54622ea49e9
uick/quick_compiler.cc
|
e5beb18ca08962ed271f4c1f703e0c52bc8805f3 |
14-Aug-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Address issues with kIntrinsicMinMaxDouble for x86 This patch fixes the following issues: - Makes sure that invoke-static/range is considered for analysis path that decides whether base of code register is needed. - Invalidates the code pointer register in intrinsic implementations of min/max for FP since generated code has diamond shape and Quick does not correctly handle control flow merges. - Reverts the clobbering of base of code register from constant loading path since it reduces performance in linear code that needs the register. - Ensures that no assumption is made on whether base of code register exists in cases like 64-bit where rip register may be used. Change-Id: I96463ae1197e5cfa2a8bd3571163b38fb338a340 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com> Signed-off-by: Haitao Feng <haitao.feng@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/fp_x86.cc
uick/x86/utility_x86.cc
|
1500e6fe209223f920cfbe6857dc4e2f0e0fc9ca |
23-Aug-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Update CFG dumper to handle extended better Change-Id: I0df8ece13deadf247a425beac0c08b2be5d773f9 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ompiler_enums.h
ir_graph.cc
ir_graph.h
|
b41b93a2b7916fb56b50cc6180d80e8d86d78433 |
28-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Fix MIPS build b/16484538 In debug builds, the Quick compiler frequently runs a sanity checker over the register pool. Among other things, it attempts to verify consistent representation of register pairs. However, a register's "wide" flag is meaningful only when the register pair is associated with a Dalvik wide value (sreg != INVALID_SREG) rather than a temp wide value. The MIPS build was tripping over this bad assertion. Fixed here. Note related cl/105461 (cherry-picked from commit sha 3a658077af2a931e5d7f6cd22b777c57112c19df) Change-Id: Id726ff1ea0f5cbcc8dba6fa3aacb3fd4fc043a63
uick/ralloc_util.cc
|
3a658077af2a931e5d7f6cd22b777c57112c19df |
28-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Fix MIPS build In debug builds, the Quick compiler frequently runs a sanity checker over the register pool. Among other things, it attempts to verify consistent representation of register pairs. However, a register's "wide" flag is meaningful only when the register pair is associated with a Dalvik wide value (sreg != INVALID_SREG) rather than a temp wide value. The MIPS build was tripping over this bad assertion. Fixed here. Note related cl/105461 Change-Id: Id726ff1ea0f5cbcc8dba6fa3aacb3fd4fc043a63
uick/ralloc_util.cc
|
2ddd175d74acc316293f5949746c637260437a49 |
26-Aug-2014 |
Yixin Shou <yixin.shou@intel.com> |
Add numerator check for integer divide and modulo Implemented numerator == 0 optimization for integer divide and modulo Change-Id: I6e3bff4a9f68d2790394f7df6106a948003a04c4 Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/x86/int_x86.cc
|
ade731854d18839823e57fb2d3d67238c5467d15 |
27-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix read-out-of-bounds in the compiler In case of a wide dalvik register, asking for the constant value can lead to a read out of bounds. Bug: 17302671 Change-Id: Ie1849cd67cc418c97cbd7a8524f027f9b66e4c96
ir_graph.h
uick/codegen_util.cc
|
8d0d03e24325463f0060abfd05dba5598044e9b1 |
07-Jun-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Change temporaries to positive names Changes compiler temporaries to have positive names. The numbering now puts them above the code VRs (locals + ins, in that order). The patch also introduces APIs to query the number of temporaries, locals and ins. The compiler temp infrastructure suffered from several issues which are also addressed by this patch: -There is no longer a queue of compiler temps. This would be polluted with Method* when post opts were called multiple times. -Sanity checks have been added to allow requesting of temps from BE and to prevent temps after frame is committed. -None of the structures holding temps can overflow because they are allocated to allow holding maximum temps. Thus temps can be requested by BE with no problem. -Since the queue of compiler temps is no longer maintained, it is no longer possible to refer to a temp that has invalid ssa (because it was requested before ssa was run). -The BE can now request temps after all ME allocations and it is guaranteed to actually receive them. -ME temps are now treated like normal VRs in all cases with no special handling. Only the BE temps are handled specially because there are no references to them from MIRs. -Deprecated and removed several fields in CompilationUnit that saved register information and updated callsites to call the new interface from MIRGraph. Change-Id: Ia8b1fec9384a1a83017800a59e5b0498dfb2698c Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ompiler_ir.cc
ompiler_ir.h
rontend.cc
lobal_value_numbering.cc
lobal_value_numbering_test.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
sa_transformation.cc
reg_analysis.cc
|
2cdd2f2f4c18de88c0daeddec362c0471d823b0b |
27-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Added dirty flag to optimizations"
|
bd25d4bff69e4775b7844d48630618b5ad8d3343 |
03-Jul-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Add capability for a pass to have options This patch adds capability to have pass options. These are needed when a pass has multiple flags that can be tweaked. The user is now allowed to pass those options via command line. Since passes are treated as singletons and they are immutable, the overridden options provided by user are set on the compilation unit. Doing this way also allows a selectivity system to tweak the option per compilation instead of doing it globally (due to the single pass existing). The following command line flags have been added: --print-pass-options - This prints all passes that have options along with their defaults. --pass-options= - This is used to pass the overridden options in format of PassName:PassOption:PassOptionSetting Change-Id: Ib5156f5d2ff51a0c64c4ea0fa050bd2170663417 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ompiler_ir.cc
ompiler_ir.h
ass_driver.h
ass_driver_me.h
ass_driver_me_opts.cc
ass_driver_me_post_opt.cc
ass_me.h
|
09321dfb4803669ba6d6f3fef6363a1fd7202eea |
19-Jul-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Added dirty flag to optimizations - Added a dirty flag to the PassMEDataHolder and use it to determine if we want to perform the post-optimization passes or not. Change-Id: I59a85f5198f9224d5fe8893397bfaf68a978d8f1 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
b_optimizations.cc
b_optimizations.h
ass.h
ass_driver_me_opts.cc
ass_me.h
ost_opt_passes.cc
ost_opt_passes.h
|
b5bce7cc9f1130ab4932ba8e6917c362bf871f24 |
25-Jul-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Add non-temporal store support Added non-temporal store support as a hint from the ME. Added the implementation of the memory barrier extended instruction that supports non-temporal stores by explicitly serializing all previous store-to-memory instructions. Change-Id: I8205a92083f9725253d8ce893671a133a0b6849d Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ompiler_enums.h
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
88a6b4149415448b589f155df490ca7a13b01008 |
25-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix DCHECK Cherry-pick from internal 532582 A DCHECK intended to verify the soundness of the mapping between a wide Dalvik value and a pair of temp registers incorrectly fired when the temp register pair was associated with a wide temporary (i.e. - when (SReg() == INVALID_SREG)). In this particular situation, the wideness flag is meaningful only when there is an associated valid vreg. Code rearranged to only perform the DCHECK and reset the partner's wideness bit when we're dealing with a live wide value. b/16484538 Change-Id: I3b8a7bebc5d918c65ea56ae8db0a8a5cd8003386
uick/ralloc_util.cc
|
1ff1747e71f0e1b3dbb181b52c2b4880bfa019fc |
26-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Extending FlagsOf"
|
28b066ad8baa23f918e99d2e9b4771c00b5a3eca |
25-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix DCHECK A DCHECK intended to verify the soundness of the mapping between a wide Dalvik value and a pair of temp registers incorrectly fired when the temp register pair was associated with a wide temporary (i.e. - when (SReg() == INVALID_SREG)). In this particular situation, the wideness flag is meaningful only when there is an associated valid vreg. Code rearranged to only perform the DCHECK and reset the partner's wideness bit when we're dealing with a live wide value. b/16484538 Change-Id: I3b8a7bebc5d918c65ea56ae8db0a8a5cd8003386
uick/ralloc_util.cc
|
fb0ea2df9a52e5db18e1aa85da282938bbd92f2e |
29-Jul-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Extending FlagsOf Modified FlagsOf to handle extended flags. Change-Id: I9e47e0c42816136b2b53512c914200dd9dd11376 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ocal_value_numbering.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
reg_analysis.cc
|
37f05ef45e0393de812d51261dc293240c17294d |
17-Jul-2014 |
Fred Shih <ffred@google.com> |
Reduced memory usage of primitive fields smaller than 4-bytes Reduced memory used by byte and boolean fields from 4 bytes down to a single byte and shorts and chars down to two bytes. Fields are now arranged as Reference followed by decreasing component sizes, with fields shuffled forward as needed. Bug: 8135266 Change-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752
ex_to_dex_compiler.cc
ir_graph.cc
uick/arm64/int_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/x86/utility_x86.cc
|
53c913bb71b218714823c8c87a1f92830c336f61 |
13-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Clean up compiler Clean up the compiler: less extern functions, dis-entangle compilers, hide some compiler specifics, lower global includes. Change-Id: Ibaf88d02505d86994d7845cf0075be5041cc8438
b_optimizations.h
ompiler_internals.h
ompiler_ir.cc
ompiler_ir.h
rontend.cc
rontend.h
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.h
ost_opt_passes.h
uick/arm/backend_arm.h
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/arm64/backend_arm64.h
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/dex_file_method_inliner.cc
uick/mips/backend_mips.h
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/quick_compiler.cc
uick/quick_compiler.h
uick/x86/backend_x86.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
reg_analysis.cc
|
e18aa4316eb9a15cd6b1051f27a1ce49967c170e |
23-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Support MIRGraph constant interface"
|
d04d309276a6d35b34ff9805de3754299bbde4a9 |
04-Aug-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Support MIRGraph constant interface -Adds a helper to be able to ask for a wide constant. -Allows MIRGraph to provide interface to set constants. Change-Id: Id282ee1604a0bd0bce6f495176d6bca35dcd5a00 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.h
ir_optimization.cc
|
a37ad7a6caad2e0a83c72c1103015202cbcaf1a4 |
22-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "GetDalvikDisassembly should work even without SSA info"
|
954c7ea1f72780510753524706111d1a2b26d9cb |
22-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Fix frontend to allow possibility of multiple code units"
|
651c967583bd267456f4d4beb18de06f9aeec679 |
22-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "AArch64: Improve MIR to LIR translation for abs"
|
20acd5b032870564537b81b9801f6afee499186d |
22-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Remove a BasicBlock's fall_through pointer in Hide()"
|
b289d2c7bee5d81dcbd97964cc4dfbfb514e7cb6 |
22-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Implement kMirOpNullCheck"
|
00b3024b350afef115bddea712705bdb4877ac11 |
21-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86: A couple of minor changes for String.indexOf() inlining"
|
0f3e4989b055bfa0bad3e4fad2f4d1a8b5a09901 |
21-Aug-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
GetDalvikDisassembly should work even without SSA info It is good if GetDalvikDisassembly can dump MIR even if SSA register info is not available. Without this patch it crashes. Change-Id: I704c28c891cd2580a7819f7fd972167c3bf67ddc Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ir_graph.cc
|
f588b50986fe34cba26fc3ff3100af384c081dba |
18-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Remove a BasicBlock's fall_through pointer in Hide() Remove the fall_through link that a BasicBlock has to its child when calling its Hide function. Useful for removing the visible link that is there when we dump the CFG. Change-Id: Ie82c48b195d1d62e2984d284dcc29ed7d7444db2 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_graph.cc
|
e77493c7217efdd1a0ecef521a6845a13da0305b |
21-Aug-2014 |
Ian Rogers <irogers@google.com> |
Make common BitVector operations inline-able. Change-Id: Ie25de4fae56c6712539f04172c42e3eff57df7ca
ir_graph.cc
ir_optimization.cc
sa_transformation.cc
|
09ae022f55ab27edf4802baf7a05e76d7dc823a9 |
08-Jul-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Fix frontend to allow possibility of multiple code units This patch addresses a potential problem in frontend which refers to the CompilationUnit's code unit. However, a MIRGraph may have multiple code units and thus it makes sense to refer to the current one being handled. Change-Id: I69ca7b6056652109c969e7c583fc223e45315c96 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
|
7642324bc8a5c839c669aebbb1fba61c05418651 |
04-Aug-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Implement kMirOpNullCheck The semantics of kMirOpNullCheck is to check object for null and throw exception in that case. However, the implementation for it is empty. This has been changed and appropriate dataflow have been added to correctly reflect behavior. In order to allow testing of implementation, the SpecialMethodInliner has been updated to get rid of invoke and use this instead. This helps all optimizations which do not check the MIR_INLINED flag because when invoke is left in, they believe that invoke will still be done. Change-Id: I62e425e42bdbc6357246fb949db5f79de73cf358 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_enums.h
ir_dataflow.cc
uick/dex_file_method_inliner.cc
uick/mir_to_lir.cc
|
9a8a506b1cd639ad4126c19530cd206d8d3923c3 |
07-Aug-2014 |
Martyn Capewell <martyn.capewell@arm.com> |
AArch64: Improve MIR to LIR translation for abs Improve translation by using a shorter and more efficient sequence for integer abs, and replacing UBFM with AND for FP abs in integer registers. Change-Id: Ifc39cd7806ed637d5cfc3284c435b5d501047eb5 Signed-off-by: Alexandre Rames <alexandre.rames@arm.com>
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/mir_to_lir.h
|
5d13f12f3454f07eb83b06b47e884a290e3a7303 |
20-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix Arm64 inline locking code The Arm64 monitor enter code was incorrectly comparing the thread ID to zero rather than the lock value to determine if the inline fast path was doable. As a result, we ended up always using the out-of-line case. internal b/16707253 Change-Id: I499530da84beecf1f3f5c5ebb666e3eb12599ac0
uick/arm64/call_arm64.cc
|
4efefc3b900dfc83ffd098b0c296c835b6837925 |
20-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Improve GVN performance when merging null-checked values."
|
2d2365cdaa54583b47c18a6506ccd0fd723ab6d0 |
19-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Improve GVN performance when merging null-checked values. And ignore the limit on maximum number of processed basic blocks once the GVN has actually converged and we're just applying optimizations. Bug: 16398693 Change-Id: Ie5aa0386ea4e0e9ae2bbf13963e2424e1713b22f
lobal_value_numbering.cc
lobal_value_numbering.h
ocal_value_numbering.cc
ocal_value_numbering.h
|
9be4be5882a05b3aa6ec822901ff4092203d8dc5 |
19-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "AArch64: Add tbz/tbnz and tst."
|
5d7cdec7527f8043bf15e23a0041c40156727243 |
18-Aug-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add tbz/tbnz and tst. Since the branch offset supported by tbz/tbnz is quite small(-32k ~ +32k), it will be replaced by tst and beq/bneq in the fix-up stage if the branch offset is too large. Change-Id: I4cace06bec6425e0f2e1f5f7c471eec08d06bca6
ompiler_enums.h
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
|
a846c1ac65b197844380b8d28377a850dfa1fc94 |
20-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "X86: Fix alias info in GenInlinedIndexOf()." into lmp-dev
|
b5874a47a4d2c4d2971116b031b4068021ffda05 |
19-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
X86: Fix alias info in GenInlinedIndexOf(). For 32-bit X86, GenInlinedIndexOf() pushes and pops EDI. In one branch it then calls Load32Disp() with adjusted stack offset. That calculates wrong alias_info for the generated insn. If left unfixed, this could confuse load hoisting. Bug: 17128502 (cherry picked from commit 74de63bb1cc275b411cae28a96f9b3a78b939bc2) Change-Id: I5dc82b7aae9e9655e75843a952b8ebb04269f46b
uick/x86/target_x86.cc
|
c6a62592836612b09ff1a8021e49b1328d85493b |
20-Aug-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix Arm64 inline locking code" into lmp-dev
|
ebc56bd68743dfffcfeb04f938181b18efaed85c |
20-Aug-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix Arm64 inline locking code The Arm64 monitor enter code was incorrectly comparing the thread ID to zero rather than the lock value to determine if the inline fast path was doable. As a result, we ended up always using the out-of-line case. This fix delivers a 6% improvement to DeltaBlue. b/16707253 Change-Id: I499530da84beecf1f3f5c5ebb666e3eb12599ac0
uick/arm64/call_arm64.cc
|
74de63bb1cc275b411cae28a96f9b3a78b939bc2 |
19-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
X86: Fix alias info in GenInlinedIndexOf(). For 32-bit X86, GenInlinedIndexOf() pushes and pops EDI. In one branch it then calls Load32Disp() with adjusted stack offset. That calculates wrong alias_info for the generated insn. If left unfixed, this could confuse load hoisting. Bug: 17128502 Change-Id: I0ea07b8f5e25410e290304f662d5fd5bf66c0933
uick/x86/target_x86.cc
|
dfa7a6c8711623bf20aad58f57ae980b497ef4d7 |
18-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Disable load/store elimination. DO NOT MERGE The optimization has several issues and it has been effectively disabled by https://android-review.googlesource.com/103511 Disable it completely to avoid wasting compilation time. Bug: 16862804 Change-Id: I42f69ae64170dc44f5fd6455b6a51c9bd3f93672
rontend.cc
|
76bc718dc2cf0279ec5afd08c3a82b6ad61756d8 |
18-Aug-2014 |
Andreas Gampe <agampe@google.com> |
Merge "[MIPS] Fix the code generated by GenSelectConst32"
|
aa1ed01d119ee6d93e6254789c79246e91fcec32 |
16-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART source line debug info in OAT files"
|
e3ea83811d47152c00abea24a9b420651a33b496 |
08-Aug-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART source line debug info in OAT files OAT files have source line information enough for ART runtime needs like jump to/from interpreter and thread suspension. But this information is not enough for finer grained source level debugging and low-level profiling (VTune or perf). This patch adds to OAT files two additional sections: .debug_line - DWARF formatted Elf32 section with detailed source line information (mapping from native PC to Java source lines). In addition to the debugging symbols added using the dex2oat option --include-debug-symbols, the source line information is added to the section .debug_line. The source line info can be read by many Elf reading tools like objdump, readelf, dwarfdump, gdb, perf, VTune, ... gdb can use this debug line information in x86. In 64-bit mode the information can be used if the oat file is mapped in the lower address space (address has higher 32 bits zeroed). Relocation works. Testing: 1. art/test/run-test --host --gdb [--64] 001-HelloWorld 2. in gdb: break Main.java:19 3. in gdb: break Runtime.java:111 4. in gdb: run - stops at void java.lang.Runtime.<init>() 5. in gdb: backtrace - shows call stack down to main() 6. in gdb: continue - stops at void Main.main() (only in 32-bit mode) 7. in gdb: backtrace - shows call stack down to main() 8. objdump -W <oat-file> - addresses are from VMA range of .text section reported by objdump -h <file> 9. dwarfdump -ka <oat-file> - no errors expected Size of aosp-x86-eng boot.oat increased by 11% from 80.5Mb to 89.2Mb with two sections added .debug_line (7.2Mb) and .rel.debug (1.5Mb). Change-Id: Ib8828832686e49782a63d5529008ff4814ed9cda Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/target_x86.cc
|
08f8d4cbc5e673a2a4b6eda08e3133c7bb626772 |
14-Aug-2014 |
Raghu Gandham <raghu.gandham@imgtec.com> |
[MIPS] Fix the code generated by GenSelectConst32 Change-Id: Icc1d0449566435200a10fa3ca5489f78d122bc89
uick/mips/int_mips.cc
|
06839f868c9c4bb1f2f6333f9e88a560e80bcad8 |
15-Aug-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Use RegClassBySize() for field accesses This patch optimizes x86_64 field accesses to use kAnyReg whenever possible via RegClassBySize(). Previously, using kCoreReg is too strict. Change-Id: I55a48765b9bfe6b11c4b09f85c4eb08a6e269f98 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/target_x86.cc
|
03c9785a8a6d712775cf406c4371d0227c44148f |
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Reduce stack usage for overflow checks"" Fixes stack protection issue. Fixes mac build issue. This reverts commit 83b1940e6482b9d8feba5c492507735686650ea5. Change-Id: I7ba17252882b23a740bcda2ea94aacf398255406
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
e470a02792ce584fe0ff1b9a7dd6aebe62ca9be5 |
14-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix intrinsic Math.abs(double) for ARM." into lmp-dev
|
397297f92ff3004cfcd623690d98bc49edf8c032 |
14-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Fix intrinsic Math.abs(double) for ARM. Bug: 16930909 (cherry picked from commit a5f90b6f0f5b33487e71eaeb05508555f17dcf30) Change-Id: I3ee40ffbeeabf53c72ea5781d02cda1b92b13289
uick/arm/fp_arm.cc
|
83b1940e6482b9d8feba5c492507735686650ea5 |
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Revert "Reduce stack usage for overflow checks" This reverts commit 63c051a540e6dfc806f656b88ac3a63e99395429. Change-Id: I282a048994fcd130fe73842b16c21680053c592f
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
63c051a540e6dfc806f656b88ac3a63e99395429 |
26-Jul-2014 |
Dave Allison <dallison@google.com> |
Reduce stack usage for overflow checks This reduces the stack space reserved for overflow checks to 12K, split into an 8K gap and a 4K protected region. GC needs over 8K when running in a stack overflow situation. Also prevents signal runaway by detecting a signal inside code that resulted from a signal handler invokation. And adds a max signal count to the SignalTest to prevent it running forever. Also reduces the number of iterations for the InterfaceTest as this was taking (almost) forever with the --trace option on run-test. Bug: 15435566 Change-Id: Id4fd46f22d52d42a9eb431ca07948673e8fda694 Conflicts: compiler/optimizing/code_generator_x86_64.cc runtime/arch/x86/fault_handler_x86.cc runtime/arch/x86_64/quick_entrypoints_x86_64.S
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
c739de01b905729b8587003a52a55b62358e979d |
13-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "Avoid use of std::string where we have const char*." into lmp-dev
|
cb6b0f31ede2275e79e6199ec391147585a37a2a |
12-Aug-2014 |
Ian Rogers <irogers@google.com> |
Avoid use of std::string where we have const char*. Removing the ClassHelper caused std::string creation for all calls to Class::GetDescriptor and a significant performance regression. Make the std::string an out argument so the caller can maintain it and its life time while allowing GetDescriptor to return the common const char* case. Don't generate GC maps when compilation is disabled. Remove other uses of std::string that are occuring on critical paths. Use the cheaper SkipClass in CompileMethod in CompilerDriver. Specialize the utf8 as utf16 comparison code for the common shorter byte encoding. Force a bit of inlining, remove some UNLIKELYs (they are prone to pessimizing code), add some LIKELYs. x86-64 host 1-thread interpret-only of 57 apks: Before: 29.539s After: 23.467s Regular compile: Before: 1m35.347s After: 1m20.056s Bug: 16853450 Change-Id: Ic705ea24784bee24ab80084d06174cbf87d557ad Conflicts: runtime/utils.cc
rontend.cc
erification_results.cc
erification_results.h
|
b0f05b9654eb005bc8c8e15f615a7f5a312f640c |
17-Jul-2014 |
Dave Allison <dallison@google.com> |
Add implicit checks for x86_64 architecture. This combines the x86 and x86_64 fault handlers into one. It also merges in the change to the entrypoints for X86_64. Replaces generic instruction length calculator with one that only works with the specific instructions we use. Bug: 16256184 Change-Id: I1e8ab5ad43f46060de9597615b423c89a836035c Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/target_x86.cc
|
f40f890ae3acd7b3275355ec90e2814bba8d4fd6 |
14-Aug-2014 |
Yixin Shou <yixin.shou@intel.com> |
Implement inlined shift long for 32bit Added support for x86 inlined shift long for 32bit Change-Id: I6caef60dd7d80227c3057fd6f64b0ecb11025afa Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/x86_lir.h
|
6324ca4706de44b75e5b8ba55473766809c4f132 |
15-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Inline implementation of min() and max() for long in x86"
|
4ab6f50c6de9d77e03ba8eb9a3c19aa06cae0917 |
08-Aug-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
ART: Inline implementation of min() and max() for long in x86 Change-Id: I49de0ee10f79ce49245d6a6c2cd06c5a46b45dca
uick/x86/int_x86.cc
|
b74ff132f217776c1ab698712bc2dbc526297288 |
14-Aug-2014 |
Dave Allison <dallison@google.com> |
Merge "Reduce stack usage for overflow checks"
|
648d7112609dd19c38131b3e71c37bcbbd19d11e |
26-Jul-2014 |
Dave Allison <dallison@google.com> |
Reduce stack usage for overflow checks This reduces the stack space reserved for overflow checks to 12K, split into an 8K gap and a 4K protected region. GC needs over 8K when running in a stack overflow situation. Also prevents signal runaway by detecting a signal inside code that resulted from a signal handler invokation. And adds a max signal count to the SignalTest to prevent it running forever. Also reduces the number of iterations for the InterfaceTest as this was taking (almost) forever with the --trace option on run-test. Bug: 15435566 Change-Id: Id4fd46f22d52d42a9eb431ca07948673e8fda694
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
a5f90b6f0f5b33487e71eaeb05508555f17dcf30 |
14-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Fix intrinsic Math.abs(double) for ARM. Bug: 16930909 Change-Id: I1210cb3aa82a73b9e4d4df1ceddeff78ac1df42b
uick/arm/fp_arm.cc
|
6c6c6f6683cbbb180b8b8c8f55886b067320e1e8 |
13-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "Avoid use of std::string where we have const char*."
|
1ff3c98775a4577cf053dba9a0c2d5c21c07b298 |
12-Aug-2014 |
Ian Rogers <irogers@google.com> |
Avoid use of std::string where we have const char*. Removing the ClassHelper caused std::string creation for all calls to Class::GetDescriptor and a significant performance regression. Make the std::string an out argument so the caller can maintain it and its life time while allowing GetDescriptor to return the common const char* case. Don't generate GC maps when compilation is disabled. Remove other uses of std::string that are occuring on critical paths. Use the cheaper SkipClass in CompileMethod in CompilerDriver. Specialize the utf8 as utf16 comparison code for the common shorter byte encoding. Force a bit of inlining, remove some UNLIKELYs (they are prone to pessimizing code), add some LIKELYs. x86-64 host 1-thread interpret-only of 57 apks: Before: 29.539s After: 23.467s Regular compile: Before: 1m35.347s After: 1m20.056s Bug: 16853450 Change-Id: Ic705ea24784bee24ab80084d06174cbf87d557ad
rontend.cc
erification_results.cc
erification_results.h
|
8c914c02415d7673f75166e1f1efdcdc7fcadc65 |
28-Jul-2014 |
Yixin Shou <yixin.shou@intel.com> |
Implement GenInlinedReverseBits Added support for x86 inlined version of reverse method of int and long Change-Id: I7dbdc13b4afedd56557e9eff038a31517cdb1843 Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
f1770fdeb0911d11489b7d495ce31420ac0cdc61 |
12-Aug-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix missing operation in CombineBlocks explicit throw, conditional branch flags also need to be moved. There are no quick compiler bugs before this CL. So regression test is not necessary. Change-Id: I5f7c0f261fff5f7a46b32763096ab4fe85b2c0c0 Signed-off-by: Junmo Park <junmoz.park@samsung.com>
ir_optimization.cc
|
8bd698fb785b58302be684efcbb24a0b8c6535d7 |
01-Aug-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
x86: A couple of minor changes for String.indexOf() inlining 1. Removed sequence of FlushReg + Clobber + LockTemp for particular registers and added FlushAllRegs. I believe it will make sources more readable and not affect the performance too much. 2. Made MarkPossibleNullPointerException call unconditional Change-Id: I817f77718e15ec76cae35cf9fb04c0e5dcfb2d16
uick/x86/target_x86.cc
|
90223cc2e0bfb5a2b55e9ffed896ef327b9f3d2e |
04-Aug-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix missing operation in SplitBlock If block which contains a conditional branch is divided two, explicit throw, conditional branch flag needs to go to the bottom block. Change-Id: I17a74f469d0c61fb30daa43fdb967ea485b2a6c3 Signed-off-by: Junmo Park <junmoz.park@samsung.com>
ir_graph.cc
|
8c18c2aaedb171f9b03ec49c94b0e33449dc411b |
06-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Generate chained compare-and-branch for short switches Refactor Mir2Lir to generate chained compare-and-branch sequences for short switches on all architectures. Bug: 16241558 (cherry picked from commit 48971b3242e5126bcd800cc9c68df64596b43d13) Change-Id: I0bb3071b8676523e90e0258e9b0e3fd69c1237f4
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
e70f179aca4f13b15be8a47a4d9e5b6c2422c69a |
09-Aug-2014 |
Haitao Feng <haitao.feng@intel.com> |
ART: Fix two small DumpLIRInsn issues for x86_64 port. Change-Id: I81ef32380bfc73d6c2bfc37a7f4903d912a5d9c8 Signed-off-by: Haitao Feng <haitao.feng@intel.com>
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
|
fa9c8ec37c66574654e448513e1bb59af7cb9365 |
07-Aug-2014 |
Zheng Xu <zheng.xu@arm.com> |
Add arraycopy intrinsic for arm and arm64. Implement intrinsic for java.lang.System.arraycopy(char[], int, char[], int, int). Bug: 16241558 (cherry picked from commit 947717a2b085f36ea007ac64f728e19ff1c8db0b) Change-Id: I8199f5c9ce9827f869f0f93aaff7ec359a84d922
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
7204c04dd86ae8ce05690e38737b2abf017a0a69 |
11-Jun-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Implicit StackOverflow/NPE/Suspend checks. This implements implicit stack overflow checks and null pointer exceptions for AArch64. Suspend checks are implemented but not switched on yet. Bug: 16256184 Change-Id: I2eb076f2c0c9d94793d5a898fea49cf409b4eb66 Signed-off-by: Stuart Monteith <stuart.monteith@arm.com>
uick/arm64/call_arm64.cc
|
a7894cdb063edb88f1420a42207e0c4bd27ab4f9 |
06-Aug-2014 |
Dave Allison <dallison@google.com> |
Fix checks for kLiteral in local optimizations. The check for kLiteral (literal load) just checked the kLiteral bit in the def mask. The kEncodeAll mask has the kLiteral bit set so this check was triggering. The fix is to check for only the kLiteral bit being set and no other special bits. The semantics of the special bits in the use/def mask is that only one of them can be set at the same time. Bug: 16824330 Change-Id: I0f1c1157e017870414ffef11767e5433d1fd4401
uick/local_optimizations.cc
|
947717a2b085f36ea007ac64f728e19ff1c8db0b |
07-Aug-2014 |
Zheng Xu <zheng.xu@arm.com> |
Add arraycopy intrinsic for arm and arm64. Implement intrinsic for java.lang.System.arraycopy(char[], int, char[], int, int). Bug: 16241558 Change-Id: I558a9c4403d0c3abb07af1511d394981bbfcabc5
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
52fed5a8f31dac64d09ede03703f40b712a7d766 |
07-Aug-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Emit CFI for x86 & x86_64 JNI compiler."
|
dfd3b47813c14c5f1607cbe7b10a28b1b2f29cbc |
17-Jul-2014 |
Dave Allison <dallison@google.com> |
Add implicit checks for x86_64 architecture. This combines the x86 and x86_64 fault handlers into one. It also merges in the change to the entrypoints for X86_64. Replaces generic instruction length calculator with one that only works with the specific instructions we use. Bug: 16256184 Change-Id: I1e8ab5ad43f46060de9597615b423c89a836035c Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/target_x86.cc
|
547cdfd21ee21e4ab9ca8692d6ef47c62ee7ea52 |
05-Aug-2014 |
Tong Shen <endlessroad@google.com> |
Emit CFI for x86 & x86_64 JNI compiler. Now for host-side x86 & x86_64 ART, we are able to get complete stacktrace with even mixed C/C++ & Java stack frames. Testing: 1. art/test/run-test --host --gdb [--64] --no-relocate 005 2. In gdb, run 'b art::Class_classForName' which is implementation of a Java native method, then 'r' 3. In gdb, run 'bt'. You should see stack frames down to main() Change-Id: I2d17e9aa0f6d42d374b5362a15ea35a2fce96302
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
4b6d27c2079e246cdeb56dca6648539a16493dca |
05-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86: Fix assembler for Pextr"
|
70c3e111652e8031351b31b9fcb704c2925a711d |
07-Aug-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Fix analysis_attributes_ to update missing definitions."
|
81550fa92a02f6c656d13b12dc188fc73ac0fb39 |
07-Aug-2014 |
Dave Allison <dallison@google.com> |
Merge "AArch64: Implicit StackOverflow/NPE/Suspend checks."
|
4fc785398707ede68f29768748b7fe5fa39dde24 |
07-Aug-2014 |
Fred Shih <ffred@google.com> |
Fixed build breakage due to incorrect class TypeId. Fixed incorrect type id being inserted in code buffer and got rid of inefficient pointer wrapping in LoadClassType. Change-Id: I7ee1d957ebcd816445c26199723ac50787d926d7
uick/codegen_util.cc
|
d5c78f44dc53ef9fda47a95ad3e9799be850c2b2 |
11-Jun-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Implicit StackOverflow/NPE/Suspend checks. This implements implicit stack overflow checks and null pointer exceptions for AArch64. Suspend checks are implemented but not switched on yet. Change-Id: I2eb076f2c0c9d94793d5a898fea49cf409b4eb66 Signed-off-by: Stuart Monteith <stuart.monteith@arm.com>
uick/arm64/call_arm64.cc
|
57cd9d3bda952ee2c2cf977fb1e26a0a954e1bab |
07-Aug-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Added support for patching classes from different dex files."
|
e7f82e2515f47f3c3292281312d7031a34a58ffc |
06-Aug-2014 |
Fred Shih <ffred@google.com> |
Added support for patching classes from different dex files. Added support for class patching from different dex files and moved ScopedObjectAccess from the quick compiler to driver. Slight refactoring for clarity. Bug: 16656190 Change-Id: I107fcbce75db42ca61321ea1c5d5f236680a1b3d
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
b9dbab627bdc3570d5f41cfd6de80ff3b70e1783 |
06-Aug-2014 |
Fred Shih <ffred@google.com> |
Revert "Temporary fix for bad LIR generation in GenInlinedGet." This reverts commit eb76e11d836ea953b4e40a28e3e69d3b0f4c86fa. Bug: 16656190 Change-Id: Ie2dd58436b28e79214ef3a7c7651f16fe46a60e8
uick/gen_invoke.cc
|
f768db4c1cb7ec9374e203305cf3582f32147302 |
05-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86: Assembler: Correct r8_form for some cases"
|
adc73cbe869f9560cf84bda2e953a2b267b1438f |
06-Aug-2014 |
Dave Allison <dallison@google.com> |
Fix checks for kLiteral in local optimizations. The check for kLiteral (literal load) just checked the kLiteral bit in the def mask. The kEncodeAll mask has the kLiteral bit set so this check was triggering. The fix is to check for only the kLiteral bit being set and no other special bits. The semantics of the special bits in the use/def mask is that only one of them can be set at the same time. Bug: 16824330 Change-Id: I0f1c1157e017870414ffef11767e5433d1fd4401
uick/local_optimizations.cc
|
cf73835af1421b3346a180c4eb2236d373bf2f2f |
07-Aug-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Revert "Temporary fix for bad LIR generation in GenInlinedGet.""
|
79273802f2b788bcd3eb76edf4df1bcaa57f886f |
06-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework CFA frame initialization and writing code Move eh_frame initialization code and CFI writing code to elf_writer_quick to remove hard-wired dependencies on specific Quick-compiler backends. Change-Id: I27ee8ce7245da33a20c90e0086b8d4fd0a2baf4d
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
1b192268f167f603fc372f02f9067f3ce5d82daf |
06-Aug-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Generate chained compare-and-branch for short switches"
|
48971b3242e5126bcd800cc9c68df64596b43d13 |
06-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Generate chained compare-and-branch for short switches Refactor Mir2Lir to generate chained compare-and-branch sequences for short switches on all architectures. Change-Id: Ie2a572ae69d462ba68a119e9fb93ae538cddd08f
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
f6e8d0304d0b0024f1af8e63c2a3a3ad78761d59 |
05-Aug-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Load double constant using core register"
|
0e63ce19bdb04d31180d7eb4a8bf6605333ade5a |
10-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
x86_64: Load double constant using core register This changes the double const loading scheme for x86_64 in order to reduce number of memory accesses. Change-Id: If6ee34b890287ed616ca4ea5d1c13f06a06293a9 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/utility_x86.cc
|
8081d2b8d7a743729557051d0294e040e61c747a |
31-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Create allocator adapter for using Arena in std containers. Create ArenaAllocatorAdapter, similar to the existing ScopedArenaAllocatorAdapter, for allocating memory for standard containers via the ArenaAllocator. Add the ability to specify allocation kind rather than just kArenaAllocSTL to both adapters. Move the scoped arena allocator to the scoped_arena_containers.h header file. Define template aliases for containers using the new adapter and change a few MIRGraph and Mir2Lir members to use them. Change-Id: I9bbc50248e0fed81729497b848cb29bf68444268
ir_graph.cc
ir_graph.h
uick/codegen_util.cc
uick/mir_to_lir.h
|
6175442a246cded6a9caae4658a0a1dc7cf49071 |
05-Aug-2014 |
Brian Carlstrom <bdc@google.com> |
Merge changes Ibe92d8b5,I9bada598 * changes: Make system use patchoat to relocate during runtime. Temporary fix for bad LIR generation in GenInlinedGet.
|
eb76e11d836ea953b4e40a28e3e69d3b0f4c86fa |
30-Jul-2014 |
Alex Light <allight@google.com> |
Temporary fix for bad LIR generation in GenInlinedGet. In GenInlinedGet we will sometimes try to load a class directly. If we are doing that and find one, but cannot get the direct pointer (due to image compilation or including patch information) we might end up generating incorrect patching code due to the changing of the cu_->dex_file attribute. Bug: 16656190 Change-Id: I9bada598bf4fd972d6164163eedd4a496da306d6
uick/gen_invoke.cc
|
5a5e85693b1d5952d88377be5826068b67b0dcec |
18-Jul-2014 |
DaniilSokolov <daniil.y.sokolov@intel.com> |
ART: Enable x86_64 bit support for intrinsic for System.arraycopy(char[], ..) Implements x86_64 support for intrinsic for java.lang.System.arraycopy(char[], int, char[], int, int). With this fix the intrinsic works on x86 and x86_64 architectures. Change-Id: Icc2889ccd0cf7d821522abb7437893e3149e7c99 Signed-off-by: Daniil Sokolov <daniil.y.sokolov@intel.com>
uick/x86/target_x86.cc
|
c76c614d681d187d815760eb909e5faf488a3c35 |
05-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Refactor long ops in quick compiler Make GenArithOpLong virtual. Let the implementation in gen_common be very basic, without instruction-set checks, and meant as a fall-back. Backends should implement and dispatch to code for better implementations. This allows to remove the GenXXXLong virtual methods from Mir2Lir, and clean up the backends (especially removing some LOG(FATAL) implementations). Change-Id: I6366443c0c325c1999582d281608b4fa229343cf
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
2bc477043b6ab2d7b4719ba8debf0a6a5b10c225 |
31-Jul-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Set REG0_USED on X86 Set8R instruction Since this instruction only affects the low byte of the register, it is preceded by an XOR to zero the upper 3 bytes. Set8R isn't marked as using operand 0 as an input. In practice, this works for now, as the Xor sets the CC and Set8R uses the CC (although not that of the Xor, but of a Cmp generally). This just marks REG0 as using the previous contents of the register, as it is modifying only 1 byte of 4. Change-Id: I7a69cbdb06979da5d5d2ae17fabd7c22c5a17701 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
cf8184164650d7686b9f685850463f5976bc3251 |
24-Jul-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Fix Test32RM This patch fixes Test32RM use flags and the format. Change-Id: I486cb7f27e65caeefccbd3bbcc38257ddca033c8 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/assemble_x86.cc
|
c763e350da562b0c6bebf10599588d4901140e45 |
04-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Implement InexpensiveConstant methods. Implement IsInexpensiveConstant and friends for A64. Also extending the methods to take the opcode with respect to which the constant is inexpensive. Additionally, logical operations (i.e. and, or, xor) can now handle the immediates 0 and ~0 (which are not logical immediates). Change-Id: I46ce1287703765c5ab54983d13c1b3a1f5838622
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
|
e1fa1dd6924e53d10fbf9a2d8d4f7aa4de2d7fc0 |
04-Aug-2014 |
Junmo Park <junmoz.park@samsung.com> |
Fix analysis_attributes_ to update missing definitions. There are some missing definitions for supporting vector opcodes. Change-Id: Ifcddb8b8b7d9a6e93902864488f61721e65da972 Signed-off-by: Junmo Park <junmoz.park@samsung.com>
ir_analysis.cc
|
2eba1fa7e9e5f91e18ae3778d529520bd2c78d55 |
31-Jul-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Add inlining support for ceil(), floor(), rint(), round() This patch adds inlining support for the following Math, StrictMath methods in the ARM64 backend: * double ceil(double) * double floor(double) * double rint(double) * long round(double) * int round(float) Also some cleanup. Change-Id: I9f5a2f4065b1313649f4b0c4380b8176703c3fe1 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/utility_arm64.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
6bbf0967d217ab2b7bdbb78bfd076b8fb07a44e8 |
14-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: Implement the easy long division/remainder by a constant Also optimizes long/int divisions by power-of-two values. Also do some clean-up. Change-Id: Ie414e64aac251c81361ae107d157c14439e6dab5 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
77a5b50148633c2651edb7f35f5254e40cc878dc |
04-Aug-2014 |
Andreas Gampe <agampe@google.com> |
Merge "AArch64: Remove unnecessary work around for sp."
|
cedee4744c2d4f3611a7bb9fe98ef1bf4c37d915 |
01-Jul-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Remove unnecessary work around for sp. Use RegRegRegExtend to encode instruction for "sub/add sp, sp, Xm". Change-Id: I13d3d2d386a7bd827e1396f291a7dcb9bffd5a29
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
|
7906b25f79f24af3a8b8eee0454b4db1278b9b77 |
04-Aug-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Rework ARM64 entry sequence"
|
f29ecd69af2743a425314baa4abd6c44d8d88649 |
29-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework ARM64 entry sequence Try to fold one sub of SP in the ARM64 entry sequence. When the framesize is small, generate a sub over the full frame-size, and adjust the spill offsets accordingly. If the framesize is too large, use a pre-indexed store and fill upwards from there. Change-Id: I1c15ac6276fb62b8164372de02fd92437f605938
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
89c210bf418a152ccabfbbf853ddcce33aea450d |
31-Jul-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Revert "Revert "Enable Load Store Elimination for ARM and ARM64"""
|
fd0c237e7d80ad567399e760203f3cda404bf4c5 |
31-Jul-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86: Assembler: Correct r8_form for some cases Set r8_form to false for instruction formats that don't reference registers. Change-Id: Ib01edef4ef7f22de25a31dc4207889bff97d163d Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
00d1ef41d0d0d438d604d102183a6bfac58643e7 |
31-Jul-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: LoadConstWide should clobber temp reg"
|
54659e3a2c83d3949957a10436e55e525a430a15 |
30-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: LoadConstWide should clobber temp reg If we have 2+ LoadConstWide(FP) calls in one method it is possible that LoadConstWide will load the method poiner only once. In some cases, for example, if we have branches, initialization might not be done and it may lead to a segmentation fault. Change-Id: If45fc2d1109d7ce9bd272f5c56446b2a6884daac Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/utility_x86.cc
|
7da9586b559290e1c16207c6513ffe485de61655 |
30-Jul-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Add read barriers for the roots in the verifier. Note: Because the roots (the class references in RegType objects) can be updated by the read barriers, a lot of uses of type "const RegType" were replaced with "RegType". Bug: 12687968 Change-Id: I6cf37a87f352938d43fb51560a8d927ada104f50
erified_method.cc
|
b19955d3c8fbd9588f7e17299e559d02938154b6 |
29-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Reduce time and memory usage of GVN. Filter out dead sregs in GVN. Reclaim memory after each LVN in the GVN modification phase. Bug: 16398693 Change-Id: I8c88c3009663754e1b66c0ef3f62c3b93276e385
rontend.cc
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_optimization.cc
|
bda2722ba62e5be9f9fd6a6eb0db8259bb383629 |
31-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Build fix Make lint happy, as comments should be separated from code. Change-Id: I4bfd88357302be9a6a104f1152e3b1fda386371e
uick/x86/target_x86.cc
|
cc75c1b38e811cc1cb93ce8f8fcc9a83e20844fb |
31-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "1. Fix CFI for quick compiled code in x86 & x86_64; 2. Emit CFI in .eh_frame instead of .debug_frame."
|
35e1e6ad4b50f1adbe9f93fe467766f042491896 |
30-Jul-2014 |
Tong Shen <endlessroad@google.com> |
1. Fix CFI for quick compiled code in x86 & x86_64; 2. Emit CFI in .eh_frame instead of .debug_frame. With CFI, we can correctly unwind past quick generated code. Now gdb should unwind to main() for both x86 & x86_64 host-side ART. Note that it does not work with relocation yet. Testing: 1. art/test/run-test --host --gdb [--64] --no-relocate 005 2. In gdb, run 'b art_quick_invoke_stub', then 'r', then 'c' a few times 3. In gdb, run 'bt'. You should see stack frames down to main() Change-Id: I5350d4097dc3d360a60cb17c94f1d02b99bc58bb
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
aa910d5ef43256102809e397de305c23f1c315e6 |
31-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix verifier mishandling erroneous array component types The verifier must not assume that component types are not erroneous. Bug: 16661259 Change-Id: I23b2f517259ca9c0b8a1aa38f6348fcd61e0b22e
uick/gen_common.cc
|
63999683329612292d534e6be09dbde9480f1250 |
15-Jul-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
Revert "Revert "Enable Load Store Elimination for ARM and ARM64"" This patch refactors the implementation of the LoadStoreElimination optimisation pass. Please note that this pass was disabled and not functional for any of the backends. The current implementation tracks aliases and handles DalvikRegs as well as Heap memory regions. It has been tested and it is known to optimise out the following: * Load - Load * Store - Load * Store - Store * Load Literals Change-Id: I3aadb12a787164146a95bc314e85fa73ad91e12b
ompiler_enums.h
rontend.cc
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/local_optimizations.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
eg_storage.h
|
1c7c3990fe5fc5f1afe74f3d94e95015d7419186 |
30-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Remove bogus dcheck Mea culpa. Change-Id: I6fd3b678e30354c5ab5ec6da5b3619c26d486563
uick/gen_invoke.cc
|
984305917bf57b3f8d92965e4715a0370cc5bcfb |
28-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework quick entrypoint code in Mir2Lir, cleanup To reduce the complexity of calling trampolines in generic code, introduce an enumeration for entrypoints. Introduce a header that lists the entrypoint enum and exposes a templatized method that translates an enum value to the corresponding thread offset value. Call helpers are rewritten to have an enum parameter instead of the thread offset. Also rewrite LoadHelper and GenConversionCall this way. It is now LoadHelper's duty to select the right thread offset size. Introduce InvokeTrampoline virtual method to Mir2Lir. This allows to further simplify the call helpers, as well as make OpThreadMem specific to X86 only (removed from Mir2Lir). Make GenInlinedCharAt virtual, move a copy to X86 backend, and simplify both copies. Remove LoadBaseIndexedDisp and OpRegMem from Mir2Lir, as they are now specific to X86 only. Remove StoreBaseIndexedDisp from Mir2Lir, as it was only ever used in the X86 backend. Remove OpTlsCmp from Mir2Lir, as it was only ever used in the X86 backend. Remove OpLea from Mir2Lir, as it was only ever defined in the X86 backend. Remove GenImmedCheck from Mir2Lir as it was neither used nor implemented. Change-Id: If0a6182288c5d57653e3979bf547840a4c47626e
ompiler_enums.h
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
c32447bcc8c36ee8ff265ed678c7df86936a9ebe |
27-Jul-2014 |
Bill Buzbee <buzbee@android.com> |
Revert "Enable Load Store Elimination for ARM and ARM64" On extended testing, I'm seeing a CHECK failure at utility_arm.cc:1201. This reverts commit fcc36ba2a2b8fd10e6eebd21ecb6329606443ded. Change-Id: Icae3d49cd7c8fcab09f2f989cbcb1d7e5c6d137a
ompiler_enums.h
rontend.cc
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/local_optimizations.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
eg_storage.h
|
fcc36ba2a2b8fd10e6eebd21ecb6329606443ded |
15-Jul-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
Enable Load Store Elimination for ARM and ARM64 This patch refactors the implementation of the LoadStoreElimination optimisation pass. Please note that this pass was disabled and not functional for any of the backends. The current implementation tracks aliases and handles DalvikRegs as well as Heap memory regions. It has been tested and it is known to optimise out the following: * Load - Load * Store - Load * Store - Store * Load Literals Change-Id: Iefae9b696f87f833ef35c451ed4d49c5a1b6fde0
ompiler_enums.h
rontend.cc
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/local_optimizations.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
eg_storage.h
|
a65d63e4eb81605fd798f1ca038d651b0faa29eb |
27-Jul-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "SetConstantWide should mark both SSA regs as constant"
|
5e3f45bdb987ba7fe7a4114cb5fe8483432015b6 |
27-Jul-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: ReEnable check for a gap between method's arg "in" vregs and rest of its vregs"
|
b07c1f9f4d6088ca2d4c1a10819e57b19acf7f22 |
26-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Special-case cb(n)z even for in-reg constant Call out to OpCmpImmBranch in GenCompareAndBranch if the constant is zero and we are testing == or !=, even when zero has been loaded to a register already. This avoids a register size mismatch on 64b architectures when basically doing a null check, and generally squashes a cmp + branch to a cbz or cbnz on Arm and Mips. X86 is not degraded. Bug: 16562601 Change-Id: I1997760f43dc186a84247ad30ae91053f71d102d
uick/gen_common.cc
|
688e7c5c9f36573dd4da2edd889470d930b0054b |
15-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: ReEnable check for a gap between method's arg "in" vregs and rest of its vregs The Quick backend's runtime model includes a gap between a method's argument ("in") vregs and the rest of its vregs. Handling a range instruction which spans the gap is somewhat complicated, and should not happen in normal usage of dx. Punt to the interpreter if it happened. This issue relates to https://code.google.com/p/android/issues/detail?id=66371 Which was fixed, but the problem returned after some changes in the verify flags set for the range bytecodes. Change-Id: I214f32e7b4227a450257f30607135930d0adff53 Signed-off-by: Katkov, Serguei I <serguei.i.katkov@intel.com> Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
ir_graph.cc
|
b551fdcda9eb128c80de37c4fb978968bec6d4b3 |
25-Jul-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Clean up CalleeSaveMethod frame and the use of temp registers. CalleeSaveMethod frame size changes : SaveAll : 368 -> 176 RefOnly : 176 -> 96 RefsAndArgs : 304 -> 224 JNI register spill size changes : 160 -> 88 In the transition assembly, use registers following the rules: 1. x0-x7 as temp/argument registers. 2. IP0, IP1 as scratch registers. 3. After correct type of callee-save-frame has been setup, all registers are scratch-able(probably except xSELF and xSUSPEND). 4. When restore callee-save-frame, IP0 and IP1 should be untouched. 5. From C to managed code, we assume all callee save register in AAPCS will be restored by managed code except x19(SUSPEND). In quick compiler: 1. Use IP0, IP1 as scratch register. 2. Use IP1 as hidden argument register(IP0 will be scratched by trampoline.) Change-Id: I05ed9d418b01b9e87218a7608536f57e7a286e4c
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/target_arm64.cc
|
75c99e9dd8512a44d97d9818a74a69065ad82df0 |
24-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "x86: GenSelect utility update"
|
9ee4519afd97121f893f82d41d23164fc6c9ed34 |
17-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86: GenSelect utility update The is follow-up https://android-review.googlesource.com/#/c/101396/ to make x86 GenSelectConst32 implementation complete. Change-Id: I69f318e18093f9a5b00f8f00f0f1c2e4ff7a9ab2 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
55fff044d3a4f7196098e25bab1dad106d9b54a2 |
10-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite topological sort order and improve GVN. Rewrite the topological sort order to include a full loop before the blocks that go after the loop. Add a new iterator class LoopRepeatingTopologicalSortIterator that differs from the RepeatingTopologicalSortIterator by repeating only loops and repeating them early. It returns to the loop head if the head needs recalculation when we reach the end of the loop. In GVN, use the new loop-repeating topological sort iterator and for a loop head merge only the preceding blocks' LVNs if we're not currently recalculating this loop. Also fix LocalValueNumbering::InPlaceIntersectMaps() which was keeping only the last element of the intersection, avoid some unnecessary processing during LVN merge and add some missing braces to MIRGraph::InferTypeAndSize(). Bug: 16398693 Change-Id: I4e10d4acb626a5b8a28ec0de106a7b37f9cbca32
b_optimizations.h
ataflow_iterator-inl.h
ataflow_iterator.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ir_graph.cc
ir_graph.h
ir_graph_test.cc
ir_optimization.cc
ir_optimization_test.cc
ass_driver_me.h
ass_me.h
reg_analysis.cc
|
7c66c8dffeb299743e6180b36a74018fa563ab44 |
23-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix null pointer check elimination for catch entries."
|
0a810d2eab27cd097ebd09a44f0ce83aa608285b |
11-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Fix null pointer check elimination for catch entries. Remove the special treatment of catch blocks for null pointer check elimination and class initialization check elimination. In both cases this can help optimizing previously missed cases. In the null check case, this avoids incorrect optimization as exposed by the new test. Bug: 16230771 Change-Id: I834b7a1835d9ca8572f4f8d8516d93913c701ad1
ir_optimization.cc
ir_optimization_test.cc
|
35690630b82dc1dbf4a7ada37225893a550ea1e0 |
16-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86: Fix assembler for Pextr Pextr family instructions use r/m part of rmod byte as destination. This should be handled appropriately. Disassembler works correctly. Change-Id: I89d00cb11ae792e9d28c178ba79a0bc1fa27e3c5 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/assemble_x86.cc
|
597da1f76e542b9699f8e5f8cacfea84f8854429 |
15-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
SetConstantWide should mark both SSA regs as constant Without this change user have no chances to get the highest part of wide reg using utility functions. Change-Id: I2f56229ffb98276768a77c1e4a2913f288999328 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ir_optimization.cc
|
a59dd80f9f48cb750d329d4d4af2d99d72b484d1 |
03-Jul-2014 |
Alex Light <allight@google.com> |
Runtime can now be set to require relocation Add a pair of runtime flags -Xrelocate and -Xnorelocate that can force the runtime to require that all files that are run are relocated, to prevent attacks based on the known art base address. Add support for running patchoat on oat files compiled without an image. Change run-test to have new --prebuild and --relocate flags. Bug: 15358152 Change-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d
uick_compiler_callbacks.h
|
e10a0bd05b195f71cc0ff2d59568d02d29939927 |
22-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Stack overflow checks and NPE checks for optimizing."
|
f12feb8e0e857f2832545b3f28d31bad5a9d3903 |
17-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Stack overflow checks and NPE checks for optimizing. Change-Id: I59e97448bf29778769b79b51ee4ea43f43493d96
uick/mir_to_lir.h
|
7ea6f79bbddd69d5db86a8656a31aaaf64ae2582 |
15-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Throw StackOverflowError in native code Initialize stack-overflow errors in native code to be able to reduce the preserved area size of the stack. Includes a refactoring away from constexpr in instruction_set.h to allow for easy changing of the values. Change-Id: I117cc8485f43da5f0a470f0f5e5b3dc3b5a06246
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mir_to_lir.h
|
2983d230534aee99090d28b2666dae094440f1c4 |
22-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Use vabs/fabs on arm/arm64 for intrinsic abs()."
|
5030d3ee8c6fe10394912ede107cbc8df63b7b16 |
17-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Use vabs/fabs on arm/arm64 for intrinsic abs(). Bug: 11579369 Change-Id: If09da85e22786faa13a2d74f62cee68ea67bd087
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
|
e72ff8022968b23efedc56c0afdc1d24e8a928c2 |
18-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Do not attempt to compile a method with too many registers"
|
0d8ea4661c584fc095129f853d0d72b0fa09cda5 |
18-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Do not attempt to compile a method with too many registers The mir_graph has a hard limit on how many ssa registers it can handle, and will silently fail or fatal out in debug builds when more SSA registers are necessary. This adds a check in the frontend that tries to catch some of these cases, and makes the DCHECK a CHECK to not silently fail. Bug: 16018097 Change-Id: Iad82178945a8f8c34943cc7573fd73d2b4decade
rontend.cc
ir_graph.h
|
72b660ec5df56cad8ff6d526b4377a462fc53ce5 |
18-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Fix GenDalvikArgsRange for 64-bit ref"
|
8e3acdd132aef1391676a5db2696804900aacd8e |
14-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Fix GenDalvikArgsRange for 64-bit ref 32-bit virtual register can be in 64-bit solo register. So we should not compute the size of virtual register basing on size of phyical register. Change-Id: I4e11be13df8469be63808d0ce9d1ca6f80bef483 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/target_x86.cc
|
c3561ae381960cbd52a83b7591504f158ec06920 |
17-Jul-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
Improved implementation of inline of String.indexOf This version pushes EDI only once and only in 32-bit mode. Change-Id: I4e871d3531ac539536f8f53ec09ffb664409c9cc
uick/x86/target_x86.cc
|
03fc5abc4c6372c4583179d35e56f6d521806698 |
18-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: inline Math.Max/Min (float and double)"
|
fd60fbcce909655aad71fa3094aa51d49302f19f |
18-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix GVN to handle normal paths leading to catch entry."
|
11ca61259be6ec8e03eaff1e98905232728b3d45 |
17-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Fix GVN to handle normal paths leading to catch entry. When the catch block is empty, the catch entry is actually the normal path block after the try block. Fix the LVN merge for catch entries that didn't expect it during GVN. Bug: 16360024 Change-Id: I9adfc3445245d3fa3c4809d4df1b7b76fbef5ff2
lobal_value_numbering_test.cc
ocal_value_numbering.cc
|
1222c96fafe98061cfc57d3bd115f46edb64e624 |
15-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: inline Math.Max/Min (float and double) This implements the inlined version of Math.Max/Min intrinsics. Change-Id: I2db8fa7603db3cdf01016ec26811a96f91b1e6ed Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com> Signed-off-by: Shou, Yixin <yixin.shou@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
fb8a07bdf92ab097c1d309a8a6b70dacc81f4478 |
17-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Refactor GenSelect, refactor gen_common accordingly"
|
90969af6deb19b1dbe356d62fe68d8f5698d3d8f |
16-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Refactor GenSelect, refactor gen_common accordingly This adds a GenSelect method meant for selection of constants. The general-purpose GenInstanceof code is refactored to take advantage of this. This cleans up code and squashes a branch-over on ARM64 to a cset. Also add a slow-path for type initialization in GenInstanceof. Change-Id: Ie4494858bb8c26d386cf2e628172b81bba911ae5
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
30ab8a8a6597962adf63f3a438ec34b754cc117e |
17-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Lock an arg reg in GenInlinedGet Must lock an explicit target register so that it doesn't get used for a temp and clobbered. Bug: 16352802 Change-Id: I9e4ac76f92460cdbe59392989d12f8d0321cc624
uick/gen_invoke.cc
|
9791bb427fd812c1268edab6fb3ac7b82ad9fb93 |
17-Jul-2014 |
Jeff Hao <jeffhao@google.com> |
Merge "Fix art test failures for Mips."
|
69dfe51b684dd9d510dbcb63295fe180f998efde |
11-Jul-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Revert "Revert "Add implicit null and stack checks for x86"""" This reverts commit 0025a86411145eb7cd4971f9234fc21c7b4aced1. Bug: 16256184 Change-Id: Ie0760a0c293aa3b62e2885398a8c512b7a946a73
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
d9cb8ae2ed78f957a773af61759432d7a7bf78af |
09-Jul-2014 |
Douglas Leung <douglas@mips.com> |
Fix art test failures for Mips. This patch fixes the following art test failures for Mips: 003-omnibus-opcodes 030-bad-finalizer 041-narrowing 059-finalizer-throw Change-Id: I4e0e9ff75f949c92059dd6b8d579450dc15f4467 Signed-off-by: Douglas Leung <douglas@mips.com>
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
22d5e735f403c57525fe868304c7123f0ce66399 |
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Remove object_utils.h. Break into object_lock, field_helper and method_helper. Clean up header files following this. Also tidy some of the Handle code in response to compiler errors when resolving the changes in this CL. Change-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295
uick/mir_to_lir.cc
|
ebaca192314e21d26b97646fa962e468ff07b893 |
16-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Revert "Revert "Revert "Revert "Add intrinsic for Reference.get()"""""
|
4ee7a665e7f9cd2c5ace2d6304e33f64067b209f |
11-Jul-2014 |
Fred Shih <ffred@google.com> |
Revert "Revert "Revert "Revert "Add intrinsic for Reference.get()"""" Fixed TargetReg issue causing build failure for x86. This reverts commit 9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f. Change-Id: I7e6a526954467aaf68deeed999880dfe9aa5f06e
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
0e359ef64546e472ed7e2292c8a48354f9907a37 |
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "Break apart header files."
|
e63db27db913f1a88e2095a1ee8239b2bb9124e8 |
16-Jul-2014 |
Ian Rogers <irogers@google.com> |
Break apart header files. Create libart-gtest for common runtime and compiler gtest routines. Rename CompilerCallbacksImpl that is quick compiler specific. Rename trace clock source constants to not use the overloaded profiler term. Change-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933
uick_compiler_callbacks.cc
uick_compiler_callbacks.h
|
ed7a0f2fb84b200ab6ef34e30dcbba4c0cf8d435 |
10-Jun-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: improve usage of TargetReg() and friends. TargetReg(arg1) does now always return a 32-bit register. We also avoid using this function directly and rather use the two-arguments overload or TargetPtrReg(). Change-Id: I746b3c29a2a2553b399b5c3e7ee3887c7e7c52c3
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/mir_to_lir.h
|
9522af985466b2a05ef5cdede0808777dea7236e |
15-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Squash a cmp w/ zero and b.ls to cbz (ARM/ARM64) In case of array bounds checks at constant index 0 we generate a compare and a branch. Squash into a cbz. Change-Id: I1c6a6e37a7a2356b2c4580a3387cedb55436e251
uick/arm/int_arm.cc
uick/arm64/int_arm64.cc
|
e50383288a75244255d3ecedcc79ffe9caf774cb |
04-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Support fields in optimizing compiler. - Required support for temporaries, to be only used by baseline compiler. - Also fixed a few invalid assumptions around locations and instructions that don't need materialization. These instructions should not have an Out. Change-Id: Idc4a30dd95dd18015137300d36bec55fc024cf62
ir_field_info.cc
|
cf90ba7ebe00346651f3b7ce1e5b1f785f7caabd |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Add another special case to GenSelect for ARM64"
|
39c8a99a3fdd9876980502ab12ed74a27e6be369 |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add another special case to GenSelect for ARM64 This adds a special case for a select of two constants that have a difference of exactly one. Change-Id: I6e8bea791cb25af1b855d62e2333fd7fe6ac4e3a
uick/arm64/int_arm64.cc
|
6ef2aa67656cf8e67bbd6f0f4aec0402d7158297 |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Rework TargetReg(symbolic_reg, wide)"
|
ccc60264229ac96d798528d2cb7dbbdd0deca993 |
05-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework TargetReg(symbolic_reg, wide) Make the standard implementation in Mir2Lir and the specialized one in the x86 backend return a pair when wide = "true". Introduce WideKind enumeration to improve code readability. Simplify generic code based on this implementation. Change-Id: I670d45aa2572eedfdc77ac763e6486c83f8e26b4
ompiler_enums.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
eg_storage.h
|
421efca6d71ffe348295872743317bf107a9a94a |
11-Jul-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix def use. Add comment to GenPCUseDefEncoding(). Fix def-use flags for several instruction encodings. Change-Id: Ifc5a2484395486c01a64307a4acddc794026d46a
uick/arm64/assemble_arm64.cc
uick/arm64/target_arm64.cc
|
f08f0ca4b9538bff516f354532ced57cf077da66 |
12-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "Improve performance of invokevirtual/invokeinterface with embedded imt/vtable"
|
98d1cc8033251c93786e2fa8c59a2e555a9493be |
16-May-2014 |
Mingyao Yang <mingyao@google.com> |
Improve performance of invokevirtual/invokeinterface with embedded imt/vtable Add an embedded version of imt/vtable into class object. Both tables start at fixed offset within class object so method/entry point can be loaded directly from class object for invokeinterface/invokevirtual. Bug: 8142917 Change-Id: I4240d58cfbe9250107c95c0708c036854c455968
uick/gen_invoke.cc
uick/x86/int_x86.cc
|
af263df7f643e699abf622c64447d31bacc14c34 |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Change GenPCUseDefEncoding(), turn on Load Hoisting for ARM64 This defines the PC resource mask as empty, as the PC is not accessible on ARM64. Unify code paths with x86 in LoadStoreElimination and LoadHoisting. Change-Id: Iea8b9e666f306c7a6ff52b6c5bf7e05b35346b2c
rontend.cc
uick/arm64/target_arm64.cc
uick/local_optimizations.cc
uick/mir_to_lir.h
uick/resource_mask.h
uick/x86/target_x86.cc
|
48f5c47907654350ce30a8dfdda0e977f5d3d39f |
27-Jun-2014 |
Hans Boehm <hboehm@google.com> |
Replace memory barriers to better reflect Java needs. Replaces barriers that enforce ordering of one access type (e.g. Load) with respect to another (e.g. store) with more general ones that better reflect both Java requirements and actual hardware barrier/fence instructions. The old code was inconsistent and unclear about which barriers implied which others. Sometimes multiple barriers were generated and then eliminated; sometimes it was assumed that certain barriers implied others. The new barriers closely parallel those in C++11, though, for now, we use something closer to the old naming. Bug: 14685856 Change-Id: Ie1c80afe3470057fc6f2b693a9831dfe83add831
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/utility_mips.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
b7e78cb6bdc57f2beaa8bccf383289ebdd53e552 |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "AArch64: Fix and enable reverseBytes intrinsic."
|
873c371eea7d8700c8037d790de168b5ed7c20d0 |
11-Jul-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
ART: Fix GenSelect for ARM64 Add CSINV and replace CSNEG in GenSelect. Some tests were failing in 083-complier-regression as CSNEG was used instead of CSINV. CSNEG on xzr yields 0, whereas CSINV negates the bits and yields -1, which was the intention. Change-Id: I60557e34483f98310f7d33f18d8db203fba6e78f Signed-off-by: Stuart Monteith <stuart.monteith@arm.com>
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/int_arm64.cc
|
0f73aa8f64417232e3f3d09e53f49084d2783fe0 |
12-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Update counting VR for promotion"
|
59a42afc2b23d2e241a7e301e2cd68a94fba51e5 |
04-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Update counting VR for promotion For 64-bit it makes sense to compute VR uses together for int and long because core reg is shared. Change-Id: Ie8676ece12c928d090da2465dfb4de4e91411920 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/arm/codegen_arm.h
uick/arm64/codegen_arm64.h
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
|
7c6c2ac4252ac31b42967e0f0233e8d32c5b5abe |
01-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
Aarch64: easy division and remainder for long ints. Also adding test 701 to test easy division and remainder for int and long integers. Change-Id: I8212c84e4d9eb3e9f3f4f1f1c3418537bb13dc55
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
49ab79da140b9ae79f9efca70c42eeaa84e361ff |
11-Jul-2014 |
Sebastien Hertz <shertz@google.com> |
Merge "Revert "Revert "Revert "Add intrinsic for Reference.get()""""
|
9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f |
11-Jul-2014 |
Sebastien Hertz <shertz@google.com> |
Revert "Revert "Revert "Add intrinsic for Reference.get()""" This reverts commit d4415e8bd04c4a9367744ff0149597b4f37a0e0a. Change-Id: I34553ccbdcfea35c7742d21be2a74dc7085ab2a0
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
d4415e8bd04c4a9367744ff0149597b4f37a0e0a |
11-Jul-2014 |
Christopher Ferris <cferris@google.com> |
Revert "Revert "Add intrinsic for Reference.get()"" This reverts commit a9b870b73a155ce70c867d5b3f9758fab0b45f07. Change-Id: Ic2a9b47f2b911bef4b764d10bc33cf000e4b4211
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
a9b870b73a155ce70c867d5b3f9758fab0b45f07 |
11-Jul-2014 |
Christopher Ferris <cferris@google.com> |
Revert "Add intrinsic for Reference.get()" This reverts commit 460503b13bc894828a2d2d47d09e5534b3e91aa1. Change-Id: Ie63f43049307e02e3b90f4e034abc9ea54ca4e24
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
6a1f4ad192e596b6bf43b39c26846300f401a692 |
11-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Revert "Revert "Revert "Add implicit null and stack checks for x86""""
|
0025a86411145eb7cd4971f9234fc21c7b4aced1 |
11-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Revert "Add implicit null and stack checks for x86""" Broke the build. This reverts commit 7fb36ded9cd5b1d254b63b3091f35c1e6471b90e. Change-Id: I9df0e7446ff0913a0e1276a558b2ccf6c8f4c949
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
7fb36ded9cd5b1d254b63b3091f35c1e6471b90e |
10-Jul-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Add implicit null and stack checks for x86"" Fixes x86_64 cross compile issue. Removes command line options and property to set implicit checks - this is hard coded now. This reverts commit 3d14eb620716e92c21c4d2c2d11a95be53319791. Change-Id: I5404473b5aaf1a9c68b7181f5952cb174d93a90d
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
93279da4a8475d187a0a2e75d50c88def5b4b8a5 |
10-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Do not dump hidden basic blocks and add a counter to file naming"
|
5a8ecafb7fa63cf3ebb448bb1c904858e9c29717 |
10-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "x86_64: Enable fp-reg promotion"
|
c380191f3048db2a3796d65db8e5d5a5e7b08c65 |
08-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Enable fp-reg promotion Patch introduces 4 register XMM12-15 available for promotion of fp virtual registers. Change-Id: I3f89ad07fc8ae98b70f550eada09be7b693ffb67 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/codegen_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
03c672f1a8e6cc5bef0348f1d321afb9b26ed53a |
11-Jul-2014 |
Christopher Ferris <cferris@google.com> |
Merge "Revert "Revert "Add intrinsic for Reference.get()"""
|
75cb5a2468dfa79600cec8668fc2e85bbc7334a7 |
11-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix GenSelect and GenFusedLongCmpBranch for ARM64"
|
381f8acbfbad0f84e60b7ebe9fb9584536fb373f |
10-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix GenSelect and GenFusedLongCmpBranch for ARM64 Depending on the result, we need to issue a wide csel. Also need to handle constants, and src and dest being the same. In GenFusedLongCmpBranch there is an ordering issue. If we swap the inputs, we did not Load the second one. Change-Id: Icb9876ca1288602d078b9fb89ea964ec2c910e0c
rontend.cc
uick/arm64/int_arm64.cc
|
7ee5cd1789b098c72010cd26a873f1cd2513e1b1 |
11-Jul-2014 |
Christopher Ferris <cferris@google.com> |
Merge "Revert "Add intrinsic for Reference.get()""
|
e2ebfb4c7c90863c8dae72723030bf1e2e0e4589 |
11-Jul-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Add intrinsic for Reference.get()"
|
183636622546ce73c8b67e586e0bc0799fe9c905 |
11-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "Updates to help classes derived from X86Mir2Lir"
|
e9f3e71c90094e87ff83bd5449a2fc4d65f717b2 |
04-Jul-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Updates to help classes derived from X86Mir2Lir Just a couple of extra changes to help me out. These changes won't affect anyone else. Change-Id: I0e0985a4f16822d5cbfabbf81c9902d34ebdb5da Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/mir_to_lir.h
|
a8869e60d93ba9eed36a5b53553b7609f58fc05b |
19-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Do not dump hidden basic blocks and add a counter to file naming Currently, if the system dumps the CFG, it dumps the hidden BasicBlocks. Also, the patch adds a counter that gets incremented to make the file naming unique, using AtomicInteger. Change-Id: I55b489c2c2bded73b62d64a94a4a8a54d2ebed2b Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_graph.cc
|
460503b13bc894828a2d2d47d09e5534b3e91aa1 |
18-Jun-2014 |
Fred Shih <ffred@google.com> |
Add intrinsic for Reference.get() Added an intrinsic function for Reference.get(). Return immediately without going through JNI if the slow path is not currently in use. Otherwise, branch off to the the existing JNI function. Approximately 47x speedup for cases where slow path is not enabled. Change-Id: I13ad65a356fe4e104d8d83980694dc2740d7d039
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
2ab40eb3c23559205ac7b9b039bd749458e8a761 |
02-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Add Invokes to DecodedInstruction Add a method Invokes to test for the kInvoke flag. Also moved IsPseudoMirOp to DecodedInstruction to use it for the various querry methods. Change-Id: I59a2056b7b802b8393fa2b0d977304d252b38c89 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
rontend.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/dex_file_method_inliner.cc
uick/mir_to_lir.cc
uick/x86/utility_x86.cc
reg_analysis.cc
|
fe12035ea434be9b24f578cf51e53c3bb34d945c |
10-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Handle Extended MIRs in a uniform manner"
|
49b874b65412a95f3bf0b1e6f60f3d457dca68da |
10-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Detached blocks should not be processed by compiler"
|
f2466a766947f952c5c41186a6c5e26fb862bb37 |
10-Jul-2014 |
Udayan Banerji <udayan.banerji@intel.com> |
ART: Handle Extended MIRs in a uniform manner The special handling is needed since some extended MIRs can hold values in args array, and we might want to handle the dataflow for those in a specialized manner. Current dataflow attributes may not be able to describe it for the extended MIRs. Change-Id: I8b64f3142a4304282bb31f1d4686eba72284d97d Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ir_dataflow.cc
ir_graph.h
|
a3fe7422d7ce8bfb01f95decef45f91a44d39264 |
09-Jul-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix and enable reverseBytes intrinsic. There is no revsh on arm64, use rev16 and sxth instead. Change-Id: I5f9879352f0ad76b386c82cbf476894af888a64c
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
|
cb804742f8786826286046e9c4489ef9d7ceb7ec |
10-Jul-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
ART: Rename CallInlining to SpecialMethodInliner The CallInlining pass is used to inline just a set of pre-categorized methods. This set of methods includes empty, instance getters, instance setters, argument return, and constant return. Since it inlines only "special methods", it makes sense to name it to reflect that. Change-Id: Iea2c1820080b0c212c99e977f6b5d34ee0774868 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
b_optimizations.h
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
|
989367a47b015dd85f850cf756b436fb044b5aea |
12-Jun-2014 |
Niranjan Kumar <niranjan.kumar@intel.com> |
ART: Detached blocks should not be processed by compiler It is possible for blocks to be detached. This means that 'successor_block_info->block' may evaluate to 'NullBasicBlockId' The code should detect this case and handle it appropriately. Signed-off-by: vladimir.a.ivanov <vladimir.a.ivanov@intel.com Signed-off-by: Niranjan Kumar <niranjan.kumar@intel.com Change-Id: I410059cd2cbda342cc1380050c0972fcaa2b7a8e
ir_graph.cc
|
f2b3f3373ae99ed7640e58a3abaa75d546ce2fc6 |
10-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Enable some ARM64 optimizations. Enables kSuppressLoads, kTrackLiveTemps, kSafeOptimizations, kPromoteCompilerTemps, kClassInitCheckElimination, kSuppressExceptionEdges and kMatch. Change-Id: Id3650adce7140dde8d667cd3f1b4a1c2598f156e
rontend.cc
|
5fa647d5f663033e4ed3d398aece1f8211d7f460 |
10-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Slow path for iget should expect return in core reg"
|
4eca9f53ce6c4e59ebad93a049e86d4965e87c9d |
07-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Slow path for iget should expect return in core reg Slow path for iget invokes the C implementation. In all cases the C function returns the result in core reg. So implementation should expect the result in core reg independent on whether it is fp or not. Change-Id: I57fb0e684c38af22316398d8071f087bd4bd253c Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/gen_common.cc
|
fb16129c3c62f73d00ab7570e147e497e787eaad |
10-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Global Value Numbering."
|
95a059793c4c194f026afc74c713cc295d75d91a |
30-May-2014 |
Vladimir Marko <vmarko@google.com> |
Global Value Numbering. Implement the Global Value Numbering for optimization purposes. Use it for the null check and range check elimination as the LVN used to do. The order of evaluation of basic blocks needs improving as we currently fail to recognize some obviously identical values in methods with more than one loop. (There are three disabled tests that check this. This is just a missed optimization, not a correctness issue.) Change-Id: I0d0ce16b2495b5a3b17ad1b2b32931cd69f5a25a
b_optimizations.h
rontend.cc
rontend.h
lobal_value_numbering.cc
lobal_value_numbering.h
lobal_value_numbering_test.cc
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass_driver_me_opts.cc
|
50fb243619d337d20b56d2713d861166d48cb491 |
10-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Handle potential <clinit>() correctly in LVN."
|
f418f3227e0001c8d75257ceff0c248cc406d81a |
09-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Handle potential <clinit>() correctly in LVN. Bug: 16177324 Change-Id: I727ab6ce9aa9a608fe570cf391a6b732a12a8655
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_optimization.cc
ir_optimization_test.cc
|
34e826ccc80dc1cf7c4c045de6b7f8360d504ccf |
29-May-2014 |
Dave Allison <dallison@google.com> |
Add implicit null and stack checks for x86 This adds compiler and runtime changes for x86 implicit checks. 32 bit only. Both host and target are supported. By default, on the host, the implicit checks are null pointer and stack overflow. Suspend is implemented but not switched on. Change-Id: I88a609e98d6bf32f283eaa4e6ec8bbf8dc1df78a
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
c21dc06adc8c8447561208a3fb72ccf6d0443613 |
09-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Check slow_paths_.Size() every time"
|
8159af6320f7413a9d0fff1e29220c01f29c6e96 |
08-Jul-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
ART: Check slow_paths_.Size() every time This patch fixes a bug, when a new slow path is created during slowpath->Compile(). Change-Id: I4896a82781102694c25f4483112c6de3c56e072c Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/gen_common.cc
|
021b60f31a4443081e63591e184b5d707bba28c1 |
09-Jul-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: GenInlinedCas must use wide rl_src_offset under 64-bit targets This patch fixes to use wide rl_src_offset for int and long types under 64-bit targets, and fixes movzx8 and movsx8 to use r8_form on the second register only. Change-Id: Ib8c0756609100f9bc5c228f1eb391421416f3af6 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
|
00caeedf50998444e53a7a085183019fb7bdf742 |
10-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Refactor frontend.cc Refactor frontend.cc. Pull out flags, merge them in arrays keyed by the instruction set. Simplify the checks and application of flags. Change-Id: I12d5216df8d1f12e7fbe39d8132e4725c55bc8e7
rontend.cc
|
3d14eb620716e92c21c4d2c2d11a95be53319791 |
10-Jul-2014 |
Dave Allison <dallison@google.com> |
Revert "Add implicit null and stack checks for x86" It breaks cross compilation with x86_64. This reverts commit 34e826ccc80dc1cf7c4c045de6b7f8360d504ccf. Change-Id: I34ba07821fc0a022fda33a7ae21850957bbec5e7
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
eb24baec056dbe5871f1bc64b793eb2e69907866 |
08-Jul-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
x86_64: enable Peek and Poke intrinsics This implements intrinsics for: Memory.peekByte/Short/Int/Long() Memory.pokeByte/Short/Int/Long() Change-Id: I6da6250f262dfd7aded35c2e3ade2d0916bd73cb Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/int_x86.cc
|
62f28f943e2da2873c7a09096c292f01a21c6478 |
09-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix a compile assert name with inverted meaning."
|
2aaed94965c2d483598660db11a1e7d608682516 |
08-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Fix a compile assert name with inverted meaning. Change-Id: I50cc9a8b88c19e1ce7bc5b34cc4b7d650b2f052d
uick/dex_file_method_inliner.cc
|
665f681020ec313d6aea1aa26db582176d780079 |
09-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Workaround for invalid monitor-exit catch ranges."
|
e8ae81453e1d6c19d7db2001a1e7b1849f74241c |
08-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Workaround for invalid monitor-exit catch ranges. Avoid bogus exception edges from monitor-exit to a catch handler that does exactly the same monitor-exit. Bug: 15745363 Change-Id: I2b8b44b313c470557714744bdfb7beaef2cd2246
ir_graph.cc
ir_graph.h
|
460f4ef18761ad25f384172e45dff2ad0b60b7aa |
08-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Add kIntrinsicIsStatic flag for System.arraycopy(). Change-Id: I40ffb07e62474f418eabb7361f129c633022666c
uick/dex_file_method_inliner.cc
|
9c1bd6b8744920b62afcb08571ffcfba055c73a0 |
08-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Fix style issue. Change-Id: Ifc73dd4331d91be8c6c5eed2159ec1733fa84995
uick/dex_file_method_inliner.cc
|
74d8348cfd7100fd6bd06d00dce3110a4545c4f8 |
08-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Check invoke type for intrinsic method invokes."
|
724c0fe2b39578eafac027e5925f27e95d40e3ba |
03-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Check invoke type for intrinsic method invokes. Bug: 16017877 Change-Id: I931c0b19b500a042bc9235aa18212c4ab5240745
uick/dex_file_method_inliner.cc
|
70c4f06f9965cdb9319a2c85f65acda20086d765 |
25-Jun-2014 |
DaniilSokolov <daniil.y.sokolov@intel.com> |
ART: Intrinsic implementation for java.lang.System.arraycopy. Implements intrinsic for java.lang.System.arraycopy(char[], int, char[], int, int) - this method is internal to android class libraries and used in such classes as StringBuffer and StringBuilder. It is not possible to call it from application code. The intrinsic for this method is implemented as inline method (assembly code is generated manually). The intrinsic is x86 32 bit only. Change-Id: Id1b1e0a20d5f6d5f5ebfe1fdc2447b6d8a515432 Signed-off-by: Daniil Sokolov <daniil.y.sokolov@intel.com>
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
ae2efea4582df773f80be274bdc754f732b07df3 |
07-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Add HADDPS/HADDPD/SHUFPS/SHUFPD instruction generation"
|
2cfe30bd592cb6ae63bb4c28ccaf4b069d6ab565 |
09-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86 Backend support for vectorized float and byte 16x16 operations"
|
60bfe7b3e8f00f0a8ef3f5d8716adfdf86b71f43 |
09-Jul-2014 |
Udayan Banerji <udayan.banerji@intel.com> |
X86 Backend support for vectorized float and byte 16x16 operations Add support for reserving vector registers for the duration of vector loop. Add support for 16x16 multiplication, shifts, and add reduce. Changed the vectorization implementation to be able to use the dataflow elements for SSA recreation and fixed a few implementation details. Change-Id: I2f358f05f574fc4ab299d9497517b9906f234b98 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Olivier Come <olivier.come@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ackend.h
ompiler_enums.h
ir_dataflow.cc
ir_graph.cc
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
7b68fb3b9b421d4b20c1993704986d637f1cab91 |
09-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Clean-up after cmp-long fix"
|
94f3eb0c757d0a6a145e24ef95ef7d35c091bb01 |
24-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Clean-up after cmp-long fix The patch adresses the coments from review done by Ian Rogers. Clean-up of assembler. Change-Id: I9dbb350dfc6645f8a63d624b2b785233529459a9 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/assemble_x86.cc
uick/x86/x86_lir.h
|
dfc56e681beb055801491792026cb9976d8566e8 |
09-Jul-2014 |
Ian Rogers <irogers@google.com> |
Merge "Clean-up call_x86.cc"
|
407a9d2847161b843966a443b71760b1280bd396 |
04-Jul-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Clean-up call_x86.cc Also adds some DCHECKs and fixes for the bugs found by them. Change-Id: I455bbfe2c6018590cf491880cd9273edbe39c4c7 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
251a057f52946452ac1c485b38d4ebafcf3bc5ad |
09-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix FP promotion"
|
01758d53a96a5adc914a2433279a9c283e5a4c2a |
09-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix FP promotion A previous CL changed != by mistake to ==, causing incorrect promotion results for ARM32. Change-Id: I62572e3e86d38a55be7043196027563735010b30
uick/ralloc_util.cc
|
7a94961d0917495644193b281b04a570a783bb07 |
08-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Do not emit load when inlining unused Thread.currentThread() When the result is not used, do not emit the load. This avoids uninitialized registers leading to size-check errors. Change-Id: I212392ffea7243720f120b2f12679df286106a02
uick/gen_invoke.cc
|
fbf156c9394e777385ae2661e673a4c783dfd836 |
07-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Aarch64: fix bug and enable register promotion."
|
f101319480b1fe6575891043d0c3f0599292c25c |
07-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
Aarch64: fix bug and enable register promotion. Iteration over arguments in invoke implementation was not correct for wide arguments. Change-Id: I46c7edcbfc9e32ded0e9a535fab3d333905bcf41
rontend.cc
uick/arm64/target_arm64.cc
|
f22af67db2a6e7221dd15320d1a7688f1b423668 |
06-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Fix missing dependency in new X86 instruction"
|
01a50d660bd1fa692b132a24ec0f18f402e69de2 |
06-Jul-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Fix missing dependency in new X86 instruction AX is written by this opcode. Note the dependency. Change-Id: I25209e1fb4ceb0387269436c8b00730b1caa03bc Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
a77ee5103532abb197f492c14a9e6fb437054e2a |
02-Jul-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: TargetReg update for x86 Also includes changes in common code. Elimination of use of TargetReg with one parameter and direct access to special target registers. Change-Id: Ied2c1f87d4d1e4345248afe74bca40487a46a371 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/arm64/codegen_arm64.h
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
3ee86bcbbc29f17b0243954a52dcda96b09411e0 |
03-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Load 64 bit constant into GPR by single instruction for 64bit mode"
|
b5860fb459f1ed71f39d8a87b45bee6727d79fe8 |
22-Jun-2014 |
buzbee <buzbee@google.com> |
Register promotion support for 64-bit targets Not sufficiently tested for 64-bit targets, but should be fairly close. A significant amount of refactoring could stil be done, (in later CLs). With this change we are not making any changes to the vmap scheme. As a result, it is a requirement that if a vreg is promoted to both a 32-bit view and the low half of a 64-bit view it must share the same physical register. We may change this restriction later on to allow for more flexibility for 32-bit Arm. For example, if v4, v5, v4/v5 and v5/v6 are all hot enough to promote, we'd end up with something like: v4 (as an int) -> r10 v4/v5 (as a long) -> r10 v5 (as an int) -> r11 v5/v6 (as a long) -> r11 Fix a couple of ARM64 bugs on the way... Change-Id: I6a152b9c164d9f1a053622266e165428045362f3
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
eg_storage.h
eg_storage_eq.h
|
0107273ae05d4624495bbaae62b9194f8ae6685b |
07-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Aarch64: fix references handling in Load*Indexed."
|
255e014542b2180620230e4d9d6000ae06846bbd |
04-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
Aarch64: fix references handling in Load*Indexed. Fix the way we handle references in Load/StoreBaseIndexed and friends. We assume references are 64-bit RegStorage entities, with the difference that they are load as 32-bit values. Change-Id: I7fe987ef9e97e9a5042b85378b33d1e85710d8b5
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
407f5c1a74892685f0ee603f034c0730381902a9 |
30-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Fix InstanceofFinal Comparison should be made using GetReg() Change-Id: Ic5bebf680395d9b93710511db9760d0e867b38cb Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/int_x86.cc
|
63fe93d9f9d2956b1ee2b98cdd6ddd2153f5f9cf |
30-Jun-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Enable Inlining. This patch fixes the remaining issues with inlining for ARM64. Change-Id: I2d85b7c4f3fb2b667bf6029fbc271ab954378889 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com> Signed-off-by: Matteo Franchin <matteo.franchin@arm.com>
rontend.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
|
15d7a46d198f8064efbe4ab10696d448ed9dc60f |
04-Jul-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
Aarch64: fix encoding map for kA64Fmov2xS. Change-Id: I5127a4443969dc2322461a4b4a34d6c39a0ffd64
uick/arm64/assemble_arm64.cc
|
ef505256e530951033a705e84a0682e7adcedf30 |
04-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "x86_64: Turn on promotion optimization"
|
699c04aa7cb7d0e8187fba2cbec3f0319e4da5bb |
28-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Turn on promotion optimization This CL turns on the promotion optimization (longs). The 64-bit references support is disabled in x86_64 backend. Change-Id: I62723388f549b51bae41c8a6b334228b2d782610 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
|
c5e4ce116e4d44bfdf162f0c949e77772d7e0654 |
10-Jun-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
x86_64: Fix intrinsics The following intrinsics have been ported: - Abs(double/long/int/float) - String.indexOf/charAt/compareTo/is_empty/length - Float.floatToRawIntBits, Float.intBitsToFloat - Double.doubleToRawLongBits, Double.longBitsToDouble - Thread.currentThread - Unsafe.getInt/Long/Object, Unsafe.putInt/Long/Object - Math.sqrt, Math.max, Math.min - Long.reverseBytes Math.min and max for longs have been implemented for x86_64. Commented out until good tests available: - Memory.peekShort/Int/Long, Memory.pokeShort/Int/Long Turned off on x86-64 as reported having problems - Cas Change-Id: I934bc9c90fdf953be0d3836a17b6ee4e7c98f244
uick/gen_invoke.cc
uick/x86/assemble_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
23abec955e2e733999a1e2c30e4e384e46e5dde4 |
02-Jul-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Add few more inline functions This patch adds inlining support for the following functions: * Math.max/min(long, long) * Math.max/min(float, float) * Math.max/min(double, double) * Integer.reverse(int) * Long.reverse(long) Change-Id: Ia2b1619fd052358b3a0d23e5fcbfdb823d2029b9 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
5192cbb12856b12620dc346758605baaa1469ced |
01-Jul-2014 |
Yixin Shou <yixin.shou@intel.com> |
Load 64 bit constant into GPR by single instruction for 64bit mode This patch load 64 bit constant into a register by a single movabsq instruction on 64 bit bit instead of previous mov, shift, add instruction sequences. Change-Id: I9d013c4f6c0b5c2e43bd125f91436263c7e6028c Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
ffcdd9f13daba70a64bb85688726ae23aa7a6eda |
02-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "x86_64: Unify 64-bit check in x86 compiler"
|
dd64450b37776f68b9bfc47f8d9a88bc72c95727 |
01-Jul-2014 |
Elena Sayapina <elena.v.sayapina@intel.com> |
x86_64: Unify 64-bit check in x86 compiler Update x86-specific Gen64Bit() check with the CompilationUnit target64 field which is set using unified Is64BitInstructionSet(InstructionSet) check. Change-Id: Ic00ac863ed19e4543d7ea878d6c6c76d0bd85ce8 Signed-off-by: Elena Sayapina <elena.v.sayapina@intel.com>
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
6f9dbb8d4aa72c9b24ea45358751123b6e4c7488 |
02-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Quick compiler: More size checks, add TargetReg variants"
|
4d5d794382cd6d3a25392d17543d5987e432d314 |
26-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Simplify FlushIns This change simplifies FlushIns for x86_64. Change-Id: I2b41fae32603e0951e3847cc1e4f9c6bfab349a0 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/target_x86.cc
|
4b537a851b686402513a7c4a4e60f5457bb8d7c1 |
01-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Quick compiler: More size checks, add TargetReg variants Add variants for TargetReg for requesting specific register usage, e.g., wide and ref. More register size checks. With code adapted from https://android-review.googlesource.com/#/c/98605/. Change-Id: I852d3be509d4dcd242c7283da702a2a76357278d
ir_graph.h
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
eg_location.h
|
f9872f0b5f713af867b4e32e647a1b92f94fb01a |
02-Jul-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix size error reported by ARM64 backend Also removes a spurious LOG in dex2oat. Change-Id: Ia264fbfb3cb8d59978f3a61e814eb6940e272ece
uick/gen_invoke.cc
|
595248a0d9b96a4b442bb0cd3fecd55ae630b03f |
30-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "AArch64: Rename A64_/A32_ register prefix to x/w."
|
baa7c88a34fdfd230a2a383c2e388945f4d907b6 |
30-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Rename A64_/A32_ register prefix to x/w. A64/A32 look like architecture name, but they are all for arm64. Use lower-case to name the registers defined in "ARM ARM" which can also be directly used in assembly file. Use upper-case to name the registers which are other aliases. Change-Id: I0ac38ed75f977fdc362288b01179b84feaee5614
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
|
4c7cc15590a2f921e6055f723e46694966cb7665 |
23-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Fix GenArrayBoundsCheck The GenArrayBoundsCheck uses args registers to put array_length and index as a parameter to out call. To ensure that we do not corrupt register values there is a check whether need arg is not busy. We need to use reg num comparison instead of reg comparison. Change-Id: I260f02d1c155b69be8652dee2e89f3b63d15297c Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
903989dae724ec0b186ec98c2afd1e074ed41d4d |
01-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
AArch64: Fix OpRegRegImm64 add/sub for large negative imm. Bug: 15837964 Change-Id: I401edf687352fae3dca03c0a807dac5750e454f6
uick/arm64/utility_arm64.cc
|
949cd973513f1ae29280fcde7953b0f7e70172a7 |
23-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Enable GenSpecialCase. With the following fixes: 1. Map reference register to 64-bit argument register. 2. Set max_mapped_in_ to the index of last in. (Originally it was the low part of the wide register) Change-Id: If41de654a004a0561396e349d1f150517a72ab2f
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
|
2db3e269e3051dacb3c8a4af8f03fdad9b0fd740 |
26-Jun-2014 |
Douglas Leung <douglas@mips.com> |
Fix quick mode bugs for Mips. This patch enable quick mode for Mips and allows the emulator to boot. However the emulator is still not 100% functional. It still have problems launching some apps. Change-Id: Id46a39a649a2fd431a9f13b06ecf34cbd1d20930 Signed-off-by: Douglas Leung <douglas@mips.com>
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/ralloc_util.cc
|
a64d728836712e9295ada7de44d8cc3165d595a8 |
27-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: implement easy division and reminder."
|
c6301bcfbefa1c320f922d2209caee3481dc1aa2 |
27-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: ARM64 fp return reg locations are FP Change-Id: Ica14b63ebde8efda113a146939309a6c37adc9aa
uick/arm64/arm64_lir.h
|
a94d7fd18a11dc14fe43c5f814115b73d48846c2 |
27-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix topological ordering and use it for optimizations."
|
fb0fecffb31398adb6f74f58482f2c4aac95b9bf |
20-Jun-2014 |
Olivier Come <olivier.come@intel.com> |
ART: Add HADDPS/HADDPD/SHUFPS/SHUFPD instruction generation The patch adds the HADDPS, HADDPD, SHUFPS, and SHUFPD instruction generation for X86. Change-Id: Ida105d3e57be231a5331564c1a9bc298cf176ce6 Signed-off-by: Olivier Come <olivier.come@intel.com>
uick/x86/assemble_x86.cc
uick/x86/x86_lir.h
|
b9d11f7e2f60bdebfd2ece34e01ecc789921837d |
25-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Fix wide argument increment"
|
e63d9d4e42e659a365a9a06b910852ebc297f457 |
24-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: int-to-long should ensure that int in kCoreReg it is possible that int in xmm so implementation of int-to-long should ensure that src in core reg before usage of move with sign extension which does not support xmm case. Change-Id: Ibab9df7564f0f1c1f3e1f5ff67c38f1a5e3cdb69 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
|
b6564c19c5e14a3caa3f8da423b0da510fda7026 |
24-Jun-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Fix wide argument increment This patch fixes to always increment the index for a wide argument, and fixes the index upper bound. Otherwise, the mapping may be incorrect. Change-Id: I0116d8fd0a0a5c1270a23129c73a9e3651132977 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/target_x86.cc
|
fe7aee2d20b47dad6029a588e0c7394f0c75d080 |
25-Jun-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "More advanced timing loggers."
|
f5997b4d3f889569d5a2b724d83d764bfbb8d106 |
20-Jun-2014 |
Mathieu Chartier <mathieuc@google.com> |
More advanced timing loggers. The new timing loggers have lower overhead since they only push into a vector. The new format has two types, a start timing and a stop timing. You can thing of these as brackets associated with a timestamp. It uses these to construct various statistics when needed, such as: Total time, exclusive time, and nesting depth. Changed PrettyDuration to have a default of 3 digits after the decimal point. Exaple of a GC dump with exclusive / total times and indenting: I/art (23546): GC iteration timing logger [Exclusive time] [Total time] I/art (23546): 0ms InitializePhase I/art (23546): 0.305ms/167.746ms MarkingPhase I/art (23546): 0ms BindBitmaps I/art (23546): 0ms FindDefaultSpaceBitmap I/art (23546): 0ms/1.709ms ProcessCards I/art (23546): 0.183ms ImageModUnionClearCards I/art (23546): 0.916ms ZygoteModUnionClearCards I/art (23546): 0.610ms AllocSpaceClearCards I/art (23546): 1.373ms AllocSpaceClearCards I/art (23546): 0.305ms/6.318ms MarkRoots I/art (23546): 2.106ms MarkRootsCheckpoint I/art (23546): 0.153ms MarkNonThreadRoots I/art (23546): 4.287ms MarkConcurrentRoots I/art (23546): 43.461ms UpdateAndMarkImageModUnionTable I/art (23546): 0ms/112.712ms RecursiveMark I/art (23546): 112.712ms ProcessMarkStack I/art (23546): 0.610ms/2.777ms PreCleanCards I/art (23546): 0.305ms/0.855ms ProcessCards I/art (23546): 0.153ms ImageModUnionClearCards I/art (23546): 0.610ms ZygoteModUnionClearCards I/art (23546): 0.610ms AllocSpaceClearCards I/art (23546): 0.549ms AllocSpaceClearCards I/art (23546): 0.549ms MarkRootsCheckpoint I/art (23546): 0.610ms MarkNonThreadRoots I/art (23546): 0ms MarkConcurrentRoots I/art (23546): 0.610ms ScanGrayImageSpaceObjects I/art (23546): 0.305ms ScanGrayZygoteSpaceObjects I/art (23546): 0.305ms ScanGrayAllocSpaceObjects I/art (23546): 1.129ms ScanGrayAllocSpaceObjects I/art (23546): 0ms ProcessMarkStack I/art (23546): 0ms/0.977ms (Paused)PausePhase I/art (23546): 0.244ms ReMarkRoots I/art (23546): 0.672ms (Paused)ScanGrayObjects I/art (23546): 0ms (Paused)ProcessMarkStack I/art (23546): 0ms/0.610ms SwapStacks I/art (23546): 0.610ms RevokeAllThreadLocalAllocationStacks I/art (23546): 0ms PreSweepingGcVerification I/art (23546): 0ms/10.621ms ReclaimPhase I/art (23546): 0.610ms/0.702ms ProcessReferences I/art (23546): 0.214ms/0.641ms EnqueueFinalizerReferences I/art (23546): 0.427ms ProcessMarkStack I/art (23546): 0.488ms SweepSystemWeaks I/art (23546): 0.824ms/9.400ms Sweep I/art (23546): 0ms SweepMallocSpace I/art (23546): 0.214ms SweepZygoteSpace I/art (23546): 0.122ms SweepMallocSpace I/art (23546): 6.226ms SweepMallocSpace I/art (23546): 0ms SweepMallocSpace I/art (23546): 2.144ms SweepLargeObjects I/art (23546): 0.305ms SwapBitmaps I/art (23546): 0ms UnBindBitmaps I/art (23546): 0.275ms FinishPhase I/art (23546): GC iteration timing logger: end, 178.971ms Change-Id: Ia55b65609468f212b3cd65cda66b843da42be645
rontend.cc
|
fbd18f1923334f3208cfe6ba5f1d4f9eb421b063 |
24-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "Revert "ART: Split out more cases of Load/StoreRef, volatile as parameter""
|
de68676b24f61a55adc0b22fe828f036a5925c41 |
24-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Revert "ART: Split out more cases of Load/StoreRef, volatile as parameter" This reverts commit 2689fbad6b5ec1ae8f8c8791a80c6fd3cf24144d. Breaks the build. Change-Id: I9faad4e9a83b32f5f38b2ef95d6f9a33345efa33
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
7e47f713067b55e24b5d24f2c892ceefd7971ebf |
24-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Split out more cases of Load/StoreRef, volatile as parameter"
|
3c12c512faf6837844d5465b23b9410889e5eb11 |
24-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "ART: Split out more cases of Load/StoreRef, volatile as parameter"" This reverts commit de68676b24f61a55adc0b22fe828f036a5925c41. Fixes an API comment, and differentiates between inserting and appending. Change-Id: I0e9a21bb1d25766e3cbd802d8b48633ae251a6bf
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
7db22606228d21b3adba04851409a4a78e6b4263 |
24-Jun-2014 |
Calin Juravle <calin@google.com> |
Merge "Always compile leafs during profile based compilation."
|
2689fbad6b5ec1ae8f8c8791a80c6fd3cf24144d |
23-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Split out more cases of Load/StoreRef, volatile as parameter Splits out more cases of ref registers being loaded or stored. For code clarity, adds volatile as a flag parameter instead of a separate method. On ARM64, continue cleanup. Add flags to print/fatal on size mismatches. Change-Id: I30ed88433a6b4ff5399aefffe44c14a5e6f4ca4e
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
38a09040432001f1a4330ac80b80b1178e1eaf8a |
23-Jun-2014 |
Calin Juravle <calin@google.com> |
Always compile leafs during profile based compilation. Bug:12877748 Change-Id: Idbee9eaa87c419454728de195bdbdd9b0e6b7b50
rontend.cc
|
1c55703526827b5fc63f5d4b8477f36574649342 |
23-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Correct fix for cmp-long We cannot rely on the sign of the sub instruction because LONG_MAX - LONG_MIN = -1 and the sign will indicate that LONG_MAX < KONG_MIN and it is incorrect. The fix also contains small improvement for load wide constant. Change-Id: I74df70d7c198cebff5cad8c1d5614c1d29b79a1b Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
2073e7553d1ca65f13b6c4e4fe364c2a345a1511 |
23-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "ART: Fix StoreValue to use RefDisp when necessary."" This reverts commit e98297bafe84e2ac15eb73739f27826fcaae1203. No matter if holding a reference or not, the store needs to be tagged as updating a Dalvik register. Change-Id: Icb80e1b6f82103cff33ee971faaaa02f9ad4a683
uick/gen_loadstore.cc
|
a5377fe9231b441856b3c9bfa4aa003445436958 |
23-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "Revert "ART: Fix StoreValue to use RefDisp when necessary.""
|
e98297bafe84e2ac15eb73739f27826fcaae1203 |
22-Jun-2014 |
Ian Rogers <irogers@google.com> |
Revert "ART: Fix StoreValue to use RefDisp when necessary." This reverts commit 596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c. Change-Id: I1942bfc5127e8a631c5b24d107d304c7cd994e78
uick/gen_loadstore.cc
|
596bea8f6331fe8ad6eb456afa1f7dfe1b92e09c |
20-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix StoreValue to use RefDisp when necessary. Split from https://android-review.googlesource.com/#/c/98605 Change-Id: Ib3a03428ddbec659591b838404bbfa1553fe18e9
uick/gen_loadstore.cc
|
b493c2983016a78de498c3a3aef302b1353dca99 |
21-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Enable some optimizations"
|
4370d3d3a92b45ac3bdceae0c3059648b0f3fc1d |
21-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Fix fp-to-core conversion"
|
7499cd1d4445fd00aa3c9503497a171fae9bf20e |
21-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Fix comp-long"
|
0498223110174a055c743219c6cd82bee90d6034 |
20-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Fix comp-long If result and source are the same VR then implementation does a wrong thing clearing dest in the beginning. Change-Id: I66d97a828aa38121676561858119ccd44aaa4d50 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
5078d978f21620824d9c2fdcd73063260592398c |
20-Jun-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86_64: Fix fp-to-core conversion Long max value cannot be represented with double precision and check fp against max_long does not guard invocation of conversion instruction. As a result conversion ends up with min long instead of max long. The patch changes the guard check to not allow conversion instruction for max long. Change-Id: Ied761051ec27cf6c833040c25a2c61ab9fcea414 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/fp_x86.cc
|
990f110b45127055d99fe894afb1ae4cfd92046c |
20-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix StoreValue to use RefDisp when necessary."
|
49c5f50cbc8e4d8c195d8f1409abcfde08b39786 |
20-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix register overlap checks in CopyArgumentRegs This is a make-shift CL. Expect this to be replaced by a reworked implementation. Change-Id: Ia74697d1436efd2971bc4c791fabed66d2e9d72d
uick/gen_invoke.cc
|
54ee4442a3bd5169258c32234c5dfc187360b043 |
20-Jun-2014 |
buzbee <buzbee@google.com> |
Quick compiler: remove Arm64 "EXPERIMENTAL" filter Support for the compilation of all dex opcodes should now exist. We'll go ahead and leave the filter code in for a new weeks, as it may be handy if we need a quick workaround. Change-Id: I8f1857136d78347b7d2337db2c793ad41ad45cb9
rontend.cc
|
c61b3c984c509d5f7c8eb71b853c81a34b5c28ef |
18-Jun-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: implement easy division and reminder. This implements easy division and reminder for integer only (32-bit). The optimisation applies to div/rem by powers of 2 and to div by small literals (between 3-15). Change-Id: I71be7c4de5d2e2e738b88984f13efb08f4388a19
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/mir_to_lir.h
|
622bdbe6c295b08d06dfaa8d896b9ca152aa899c |
19-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Fix topological ordering and use it for optimizations. Use the topological sort order for ClassInitCheckElimination and NullCheckEliminationAndTypeInference. Change-Id: I315ca7f300dd11390f48aefebfe988baf91bdcf1
b_optimizations.h
ataflow_iterator.h
ir_graph.cc
ir_graph.h
ir_optimization_test.cc
ass_driver_me.h
ass_driver_me_post_opt.cc
ost_opt_passes.h
|
a81fe3d512ef846aad3398222afd1f0588bbaf7c |
19-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Several fixes required for enabling promotion"
|
7133659eeea45e391aa12affea75e39e8c300eb0 |
19-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Fix neg_double"
|
202e74780054ce2b0d87ddf0591cd83b6506de1d |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Log information when skipping method during compilation"
|
060e6febbe2db5e1d754d2743d6534b217d868fe |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Log information when skipping method during compilation Add a reason for skipping a method to the log. Change-Id: I3b31ee64cce6b531b25397f646cdfee650704ad6
rontend.cc
ir_analysis.cc
ir_graph.h
|
02959eae949f37445c184ae6f3df4d068ff309e0 |
18-Jun-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
x86_64: Fix neg_double In a case, when src and dest regs are the same, previous implementation of the neg_double bytecode returns an incorrect result. This implementation uses shifts and xor and works for both cases. Change-Id: I137d9a90298ec225d80435d35558da8abb69cd01 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/fp_x86.cc
|
995b32cc8e94a9730d6cf663a23afc9c997c1771 |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Implicit checks in the compiler are independent from Runtime"
|
5655e84e8d71697d8ef3ea901a0b853af42c559e |
18-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Implicit checks in the compiler are independent from Runtime When cross-compiling, those flags are independent. This is an initial CL that helps bypass fatal failures when cross-compiling, as not all architectures support (and have turned on) implicit checks. The actual transport for the target architecture when it is different from the runtime needs to be implemented in a follow-up CL. Bug: 15703710 Change-Id: Idc881a9a4abfd38643b862a491a5af9b8841f693
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/target_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
f987927a68d0489970c1eca6a32fd02ca9913357 |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Reserve 8B for float literals on ARM64 This is a cludge to make sure literal pools will be 8B aligned. A better approach would be post-processing - that way we could pack the floats. Change-Id: Ia9c6f53e0f6e37b4be79e1efe7f14feb49f2052b
uick/arm64/utility_arm64.cc
|
57eb0b46e4b6ff91b5b74010057d6f733d869bfd |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Change rrr add and sub for ARM64"
|
9f975bfe091e9592a1b6b5b46d224ec04b1183b6 |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Change rrr add and sub for ARM64 OpRegRegImm will fall back to loading a constant into a register and then doing the operation with three registers. That is, for example, the case when we allocate large stack frames. However, the currently chosen operations are add/sub shifted, which does *not* allow to specify SP (x31 will be interpreted as xzr). Switch to add/sub extended. There won't be a practical difference, as we do not call with anything other than 0 shift. Change-Id: I2b78df9f044d2963e3e890777c855b339952f9f4
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/utility_arm64.cc
|
7cd26f355ba83be75b72ed628ed5ee84a3245c4f |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Target-dependent stack overflow, less check elision Refactor the separate stack overflow reserved sizes from thread.h into instruction_set.h and make sure they're used in the compiler. Refactor the decision on when to elide stack overflow checks: especially with large interpreter stack frames, it is not a good idea to elide checks when the frame size is even close to the reserved size. Currently enforce checks when the frame size is >= 2KB, but make sure that frame sizes 1KB and below will elide the checks (number from experience). Bug: 15728765 Change-Id: I016bfd3d8218170cbccbd123ed5e2203db167c06
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
|
47b31aa855379471c06735b738396fa76e7c1988 |
19-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Start implementation of OpRegRegRegExtend for ARM64 We need a sign-extending add for packed-switch and sparse-switch, as the 32b values are signed offsets. This starts an implementation that is sufficient for the use cases. Change-Id: Ib5bae24b902077346a97d5e9e061533f9cdfcdb0
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
|
e4a6bd7550508e96aeb575e5aa1faa6fef35e20d |
13-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Enable some optimizations Except kLoadStoreElimination and kPromoteRegs. Change-Id: Iaebf6652641fe32c9e9b21469e4f898af2d67250 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
|
3157f9a18d0524e33b4feb67664974afc13ae351 |
18-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Several fixes required for enabling promotion This patch includes x86_64 fixes which solve the issues reproducible with promotion optimization enabled. Change-Id: I3a3b0d290380d639705cd58f38b8d62b1eb930d3 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/int_x86.cc
|
5969734b3036a7073c378e0687dd3e90c43d21a7 |
18-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Add x86 inlined abs method for float/double"
|
7071c8d5885175a746723a3b38a347855965be08 |
05-Mar-2014 |
Yixin Shou <yixin.shou@intel.com> |
Add x86 inlined abs method for float/double Add the optimized implementation of inlined abs method for float/double for X86 side. Change-Id: I2f367542f321d88a976129f9f7156fd3c2965c8a Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/utility_x86.cc
|
9b743ef7955a70952f3e147f9ce8d9d47c9051f9 |
18-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Fix OpCmpMemImmBranch."
|
7c1c263f3227169e055200cc481c022f1cf37213 |
17-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix OpCmpMemImmBranch. The temp register can be 64-bit in some cases(ArgReg or RefReg). Always compare 32-bit value no matter what the temp register is. Change-Id: Ib237dd081da0b5900b8c2418df1621d3245cb03d
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
71921a3ff18ba27061a013465c1b2d850a235dfa |
18-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Clobber r8 to r11 and xmm0 to xmm15"
|
4c115b85cc48f4dfc8fc2b0484ddfeb29f02d658 |
17-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Revert "Add x86 inlined abs method for float/double" This reverts commit e88b89ad1d1a583daf205c7a387ba13f549f95f1. Change-Id: I2ba21b7442ba3696482d45001e6bd32e8baf9d1f
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/utility_x86.cc
|
0210d11658becc2bf02fe79788c87276a857d0e9 |
16-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add transition assembly to wrapper native functions. There is slight difference between managed code ABI and AAPCS. We can make managed code ABI to be the same with AAPCS. But considering that, we might introduce more differences later for performance. It is better to have a wrapper to deal with the differences. Change-Id: I46ced072e9e3a83f713d2bf86fa478fc6144ee81
uick/arm64/fp_arm64.cc
|
838b38fa3b2fb4a64f8a316459d372020f6e8feb |
17-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Implement rem_double/rem_float for x86/x86-64"
|
bd3682eada753de52975ae2b4a712bd87dc139a6 |
11-Jun-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: Implement rem_double/rem_float for x86/x86-64 This adds inlined version of the rem_double/rem_float bytecodes for x86/x86-64 platforms. This patch also removes unnecessary fmod and fmodf stubs from runtime. Change-Id: I2311aa2adf08d6614527e0da070e3b6ce2343a20 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/x86_lir.h
|
cf20c1a6d58eb45fb660722354761925b0a103e1 |
17-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Fix build: style issue. Change-Id: I2a1e81dc7c95b7e21f4fde47e2f88dae653b25f0
uick/x86/fp_x86.cc
|
d87c29c7c5f04f643677d87cd202e90bda8fed02 |
17-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Add x86 inlined abs method for float/double"
|
35ec2b5faf9a2dbc3c0cddb7ebc09952b8a27d2a |
17-Jun-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Clobber r8 to r11 and xmm0 to xmm15 This clobbers r8 to r11 and xmm0 to xmm15, so that they can be reloaded after an external C call. Change-Id: If5cac97e475083912026309891dc332f14f8683a Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/target_x86.cc
|
c41e6dc89ec6593e9af9af524f2ec7be6e2d24a4 |
13-Jun-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: improve 64-bit immediates loads. Improve the quick backend to load immediates by choosing the best of the following strategies: - use wzr, xzr to load 0 (via mov) or -1 (via mvn), - use logical immediates (orr), - use one movz/movn optionally followed by one or more movk, - use the literal pool. Change-Id: I8e46e6d9eaf46b717761dd9d60e63ee3f2a5422b
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
|
d6b2237d82507b393cf105a0c6ebf04616bc78a6 |
16-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Instanceof returns true if ref == 0 on x86-64"
|
bd7ebdbd928673f8136dcbe3f755610e3ae9bc7d |
16-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Use GetLow() to access low register of a pair"
|
b9b9d66fb4eba71b8691f8b1172fe252b3901aad |
16-Jun-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Use GetLow() to access low register of a pair A couple of spots were missed. Change-Id: I14bd1d1bec4b497b742ef9edaf762e0c8e4ebf79 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
57cd219d8a7869a06d669bed08460013cf24398b |
16-Jun-2014 |
buzbee <buzbee@google.com> |
Merge "Arm64 hard-float"
|
33ae5583bdd69847a7316ab38a8fa8ccd63093ef |
12-Jun-2014 |
buzbee <buzbee@google.com> |
Arm64 hard-float Basic enabling of hard-float for Arm64. In future CLs we'll consolidate the various targets - there is a lot of overlap. Compilation remains turned off in this CL, but I expect to enable a subset shortly. With compilation fully enabled (including the EXPERIMENTAL opcodes with the exception of REM and THROW), we get the following run-test results: 003-omnibus-opcode failures: Classes.checkCast Classes.arrayInstance UnresTest2 Haven't gone deep, but these appear to be related to throw/catch and/or stacktrace. For REM, the generated code looks reasonable to me - my guess is that we've got something wrong on the transition to the runtime. Haven't looked deeper yet, though. The bulk of the other failure also appear to be related to transitioning to the runtime system, or handling try/catch. run-test status: Status with optimizations disabled, REM_FLOAT/DOUBLE and THROW disabled: succeeded tests: 94 failed tests: 22 failed: 003-omnibus-opcodes failed: 004-annotations failed: 009-instanceof2 failed: 024-illegal-access failed: 025-access-controller failed: 031-class-attributes failed: 044-proxy failed: 045-reflect-array failed: 046-reflect failed: 058-enum-order failed: 062-character-encodings failed: 063-process-manager failed: 064-field-access failed: 068-classloader failed: 071-dexfile failed: 083-compiler-regressions failed: 084-class-init failed: 086-null-super failed: 087-gc-after-link failed: 100-reflect2 failed: 107-int-math2 failed: 201-built-in-exception-detail-messages Change-Id: Ib66209285cad8998d77a14781de300af02a96b15
ompiler_enums.h
rontend.cc
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
e88b89ad1d1a583daf205c7a387ba13f549f95f1 |
05-Mar-2014 |
Yixin Shou <yixin.shou@intel.com> |
Add x86 inlined abs method for float/double Add the optimized implementation of inlined abs method for float/double for X86 side. Change-Id: I4e095644a90524354040174954c1e127c7bb4ee2 Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/utility_x86.cc
|
954550063b5ac323e31d0b0564b5f9a9a023545c |
09-Jun-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: Instanceof returns true if ref == 0 on x86-64 On x86-64 platform rl_result and kArg0 is not the same, so we have to handle this in the proper way. Change-Id: Ia651f5dd8dd2cf584f510739ed58b46197dfee94 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/int_x86.cc
|
8c7a02a7d6eab177b0d34b732522ea6dc491e131 |
14-Jun-2014 |
buzbee <buzbee@google.com> |
Quick compiler:interpret on type mismatch The Dex specification is a bit loose - particularly in regards to types. The Quick compiler, though, makes some assumptions about types. In particular, it doesn't expect to encounter the use of a long or double virtual register pair that was defined by two independent 32-bit operations. dx does not create such patterns (at least in recent memory). However, at least one such case exists in the wild. The next version of the Dex specification will add more type constraints and formally disallow such cases. Meanwhile, existing code will be handled by identifying these cases an reverting to interpretation for the offending method. Fix for internal b/15616104 Change-Id: Ibe9c423be9a952ff58cf8d985aa164885b8dd2ae
rontend.cc
ir_analysis.cc
ir_graph.h
reg_analysis.cc
|
df88a9e44673655009cc560947d29c1400516f12 |
14-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86_64: Enable compilation"
|
136aaee2993a4a5fd93eb9371584161c6d1c7445 |
06-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Enable compilation This patch enables compilation of all methods for x86_64 except image. Change-Id: Ie210809f2595cc25da688a4ad0363c258bcf8233 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
|
5aa6e04061ced68cca8111af1e9c19781b8a9c5d |
14-Jun-2014 |
Ian Rogers <irogers@google.com> |
Tidy x86 assembler. Use helper functions to compute when the kind has a SIB, a ModRM and RegReg form. Change-Id: I86a5cb944eec62451c63281265e6974cd7a08e07
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/mips/assemble_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
|
97ed29f800c56a06fd6989e0883e4c97bedd2453 |
14-Jun-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Hide unreachable basic blocks in the compiler"
|
4439596b00c91f565370bf0813cc2f9165093693 |
13-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Hide unreachable basic blocks in the compiler Unreachable blocks are not handled uniformly in the optimization passes. Uniformly hide them to avoid initialization errors. Bug: 15573463 Change-Id: Ia9e89fa357d5672a6cd8389f28a06ff618fe60ee
rontend.cc
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
7e399fd3a99ba9c9dbfafdf14f75dd318fa7d454 |
11-Jun-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Disable all optimizations and fix bugs This disables all optimizations and ensures that art tests still pass. Change-Id: I43217378d6889bb04f4d064f8d53cb3ff4c20aa0 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
rontend.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
169489b4f4be8c5dd880ba6f152948324d22ff79 |
11-Jun-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Add support for inlined methods This patch adds support for Arm64 inlined methods. Change-Id: Ic6aeed6d2d32f65cd1e63cf482f83cdcf958798a
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
e2eb29e98be3ba72cce7da40847ab3d605b9455d |
12-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Enable MOVE_*, some CONST_*, CMP_*. With the fixes of GenArithImmOpLong, GenShiftOpLong, OpRegImm, OpRegRegImm, OpRegRegImm64, EncodeLogicalImmediate and fmov. Change-Id: I8cae4f921d5150a6b8e4803ca4dee553928d1a58
rontend.cc
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
|
c0090a4206306a80a830de35c7b4c74a43df690a |
12-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Rewrite use/def masks to support 128 bits."
|
8dea81ca9c0201ceaa88086b927a5838a06a3e69 |
06-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite use/def masks to support 128 bits. Reduce LIR memory usage by holding masks by pointers in the LIR rather than directly and using pre-defined const masks for the common cases, allocating very few on the arena. Change-Id: I0f6d27ef6867acd157184c8c74f9612cebfe6c16
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/resource_mask.cc
uick/resource_mask.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
adea0aa22790254bf9978984e9ffc3688a41e129 |
12-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: arm64 explicit stack overflow checks"
|
f8ec48e8eff0050de1451fc8e9c3a71c26d5ce7e |
06-Jun-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
ART: arm64 explicit stack overflow checks Implement only the explicit checks for the quick backend for arm64. Implicit checks require fault handlers, which are currently unimplemented. CMN + CMP have extended versions implemented for comparisons against the stack pointer. More extended opcode implementations will need to follow. Change-Id: I8db297aec73df818b20fe410297800c886701c76
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
|
f72b7d6066238fd3faa25aac671dbaa02aeafac9 |
12-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: fix MarkGCCard, enabling more MIR opcodes."
|
3e1e549c564045d852ace46388eb06427d63e6ca |
12-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Add D/CHECK_CONSTEXPR macros for use in constexpr context."
|
a5d74015f320306a770519748757d776b977ec56 |
12-Jun-2014 |
Ian Rogers <irogers@google.com> |
Fix typo comment by removing. Change-Id: I09764f194317634164be9431328013205fba2910
uick/x86/int_x86.cc
|
d8191d000413504b33702e0f52e1e8e522a47ec0 |
11-Jun-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
ART: Add mul_long bytecode for X86-64 This patch implements the inlined version of the mul-long bytecode for X86-64 platform. Change-Id: I828e5861e17024d33f09223e0245380aef63a622 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/int_x86.cc
|
836424805dd48af67088d30992a3f2e6841ca047 |
11-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Add D/CHECK_CONSTEXPR macros for use in constexpr context. Make most RegStorage methods constexpr, make StorageSize() const. Change-Id: Ie63faa3b081094b3dd30352c6240fdf10ef8b87e
eg_storage.h
|
c879aaec949f429c9b029bbbfaa76be8872cef0a |
11-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Update the DecodedInstruction for the Fused extended bytecodes."
|
a194acf232b761b2ead114bdc6c38af112bf08cd |
12-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up ArmMirToLir::LoadDispBody()/StoreDispBody()."
|
5487494e54e719d3bb4ead7a0b73e1d456fec8da |
11-Jun-2014 |
Ian Rogers <irogers@google.com> |
Workaround frame size issues. x86 and x86-64 are exceeding the frame size for the switch interpreter. The SOMETIMES_INLINE hack doesn't work with GCC as inline and the noinline attribute are mutually exclusive. As a temporary solution move the effected code to the the interpreter_common.cc file. Bug: 14882674 Change-Id: Id5383ef5436046b36565cd1d76de8e3d59f42cff
uick/arm64/target_arm64.cc
|
e1f65bcb957a65c6d45b319d968bc53a833f2c65 |
09-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: PassMEDataHolder should have a data field For passes that would like to pass data around while working, let them actually allocate it if need be in the Start, use it during the Worker, and potentially free it during the End. Change-Id: I03238ef17158f7e2615d6defe5d7f15432c8a511 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
b_optimizations.cc
b_optimizations.h
ass.h
ass_me.h
ost_opt_passes.cc
ost_opt_passes.h
|
33004d96271f5b6b9dfac165ea61102d0d55a303 |
16-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up ARM load/store with offset imm8 << 2."
|
37573977769e9068874506050c62acd4e324d246 |
16-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up ARM load/store with offset imm8 << 2. Change-Id: I95ed6860131b99eef7ed727f54745976949cbcb3
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
|
55884bc1e2e1b324809b462455ccaf5811ffafd8 |
10-Jun-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86_64: Proper IMT fix Unfortunately, 97184: X86_64: Pass 'hidden method index' in EAX wasn't correct. TargetReg(kInvokeTgt) is ALSO EAX, and so invoke-interface blows up, since the saved index is overwritten by the generated code. Change kInvokeTgt to EDI (the same as ARG0). Change-Id: I4b1d260237274ee26b9283d810d1b74484ea59af Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/target_x86.cc
|
c26efa86c02c214665d30760df9d6f370d1c9ef1 |
01-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Update the DecodedInstruction for the Fused extended bytecodes. The BasicBlockOpt function creates extended MIRs but does not update the associated DecodedInstruction. This results in an impossibility to re-create the SSA algorithm. Change-Id: I4a6393281e0ee52094f72f3de0001858c3d41ba3 Signed-off-by: Jean Christophe Beyler
ir_optimization.cc
|
db9d523ff305721d4ca3f1470d1b2ce64c736e0a |
10-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up ArmMirToLir::LoadDispBody()/StoreDispBody(). Refactor the 64-bit load and store code to use a shared helper function that can be used for any opcode with the displacement limited to 8-bit value shifted by 2 (i.e. max 1020). Use that function also for 32-bit float load and store as it is actually better than the old code for offsets exceeding the 1020 byte limit. Change-Id: I7dec38bae8cd9891420d2e92b1bac6138af5d64e
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
|
fd2e291297463a3d5bdb18adc2a1eacbe2759152 |
06-Jun-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: fix MarkGCCard, enabling more MIR opcodes. Fixing register usage in MarkGCCard. Also enabling more MIR opcodes in the compiler filter. Change-Id: I877250f8deaefc69115e861344ca47cc5ccea8ff
rontend.cc
uick/arm64/call_arm64.cc
uick/arm64/utility_arm64.cc
|
ea248f8b048d904a8fe806b6a52372985945274d |
10-Jun-2014 |
Ian Rogers <irogers@google.com> |
Remove TARGET_REX_SUPPORT define. Change-Id: I1c3644176c101064261d13b50484d2e3ae456316
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
fd755e0034373eea3c4c420a870f6f6bbf729734 |
10-Jun-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86_64: Pass 'hidden method index' in EAX"
|
0f9b9c508814a62c6e21c6a06cfe4de39b5036c0 |
09-Jun-2014 |
Ian Rogers <irogers@google.com> |
Tidy up x86 assembler and fix byte register encoding. Also fix reg storage int size issues. Also fix bad use of byte registers in GenInlinedCas. Change-Id: Id47424f36f9000e051110553e0b51816910e2fe8
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
a0b0ba04bd733d487dfe5b443dbc72894d63a46a |
10-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "X86_64: Fix core.oat compilation issues"
|
846447a1d550771a78696f7ae05e066223e6b456 |
10-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Reduce dex2oat compilation logs"
|
88c3484eb7a9956f69f41ced53deeac126a258fc |
10-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: fix and enable sparse- and packed-switch."
|
d3703d82a0afc28a4ea0cb0f6d88e9f8adc23e43 |
09-Jun-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86_64: Pass 'hidden method index' in EAX Method* is in EDI, and EAX isn't an argument register, so EAX is free to hold the hidden method index. Change-Id: I793a54d00a4593e140f97144419d849b53bfdf44 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
30022aff96bfcce588cd15f8f46f3f720f69c471 |
06-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Reduce dex2oat compilation logs Disable printing of all compiled methods to logcat. Change-Id: Ie210809f2595cc25da688a4ad0363c258bcf9233 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
|
ade54a2fba4ec977dc4ff019004a2ba68e9ea075 |
09-Jun-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86_64: Fix core.oat compilation issues Fix neg-long and X86Mir2Lir::GenInstanceofFinal Change-Id: I7fbcc1a89857cc461f74b55573ac6cb7c8e64561 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
|
5acc8b0e23b12b481a9e97f84d084b79cd544319 |
05-Jun-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: fix and enable sparse- and packed-switch. Changed implementation of sparse- and packed-switch to use w and x registers appropriately. Also added a couple of utilities to obtain a w/s register corresponding to a given x/d register and viceversa. Change-Id: I485a110f6e91b09227d9e2a0b8b14224a10bca90
rontend.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
|
2d41a655f4f0e4b2178bbd7e93901a5ed6eae4a6 |
09-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix kOpLsl, rem-float/double. Change-Id: I6f7293493c0f94f96882d2e559e3eef659a23aec
uick/arm64/fp_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_invoke.cc
|
a014776f4474579d4dfc72e3374ba45c6f6e5f35 |
07-Jun-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Add long bytecode supports (2/2) This patch adds implementation of math and complex long bytcodes, and basic long arithmetic. Change-Id: I811397d7e0ee8ad0d12b23d32ba58314d479d714 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_common.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
e0ccdc0dd166136cd43e5f54201179a4496d33e8 |
07-Jun-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
x86_64: Add long bytecode supports (1/2) This patch includes switch enabling and GenFillArray, assembler changes, updates of regalloc behavior for 64-bit, usage in basic utility operations, loading constants, and update for memory operations. Change-Id: I6d8aa35a75c5fd01d69c38a770c3398d0188cc8a Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_loadstore.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
8550197244d470bf7645075e5400750f2cab4e42 |
07-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Hard Float ABI support in QCG"
|
58994cdb00b323339bd83828eddc53976048006f |
16-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Hard Float ABI support in QCG This patch shows our efforts on resolving the ART limitations: - passing "float"/"double" arguments via FPR - passing "long" arguments via single GPR, not pair - passing more than 3 agruments via GPR. Work done: - Extended SpecialTargetRegister enum with kARG4, kARG5, fARG4..fARG7. - Created initial LoadArgRegs/GenDalvikX/FlushIns version in X86Mir2Lir. - Unlimited number of long/double/float arguments support - Refactored (v2) Change-Id: I5deadd320b4341d5b2f50ba6fa4a98031abc3902 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ompiler_enums.h
rontend.cc
uick/arm/target_arm.cc
uick/arm64/target_arm64.cc
uick/gen_invoke.cc
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
576ca0cd692c0b6ae70e776de91015b8ff000a08 |
07-Jun-2014 |
Ian Rogers <irogers@google.com> |
Reduce header files including header files. Main focus is getting heap.h out of runtime.h. Change-Id: I8d13dce8512816db2820a27b24f5866cc871a04b
uick/arm/call_arm.cc
uick/arm64/call_arm64.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
14108093a9f31472ff0f400dd2d34b1d856b7d19 |
06-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Use ScopedArenaVector instead of std::vector in SSA transformation."
|
20aa7cbe93d782e0e756a36e70d610fe84b4bbb4 |
06-Jun-2014 |
Calin Juravle <calin@google.com> |
Merge "Fixed and refactored profiler options handling"
|
c1b643cc6ac45dbd0eabdcd7425c7e86006c27d6 |
31-May-2014 |
Calin Juravle <calin@google.com> |
Fixed and refactored profiler options handling - extracted profiler options in a separate class - switched from system property reading to command line arguments - added profile based compilation options to CompilerOptions - removed no longer used kProfile compilation filter - optimize dex files only if the profiler is enabled - clean up unused arguments Bug: 12877748 Bug: 15275634 Change-Id: I37ff68e7694370950ce8db2360562e9058ecebb7
rontend.cc
ir_analysis.cc
|
c9360ce1f1dabb4075b09dd6db49ee6d4212a6fc |
05-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Use ScopedArenaVector instead of std::vector in SSA transformation. Change-Id: Ibf8471274f2d5e11fcc185044745434c3c82ed74
ir_optimization_test.cc
sa_transformation.cc
|
04f4d8abe45d6e79eca983e057de76aea24b7df9 |
30-May-2014 |
Wei Jin <wejin@google.com> |
Add an optimization for removing redundant suspend tests in ART This CL: (1) eliminates redundant suspend checks (dominated by another check), (2) removes the special treatment of the R4 register, which got reset on every native call, possibly yielding long execution sequences without any suspend checks, and (3) fixes the absence of suspend checks in leaf methods. (2) and (3) increase the frequency of suspend checks, which improves the performance of GC and the accuracy of profile data. To compensate for the increased number of checks, we implemented an optimization that leverages dominance information to remove redundant suspend checks on back edges. Based on the results of running the Caffeine benchmark on Nexus 7, the patch performs roughly 30% more useful suspend checks, spreading them much more evenly along the execution trace, while incurring less than 1% overhead. For flexibility consideration, this CL defines two flags to control the enabling of optimizations. The original implementation is the default. Change-Id: I31e81a5b3c53030444dbe0434157274c9ab8640f Signed-off-by: Wei Jin <wejin@google.com>
ir_graph.cc
ir_graph.h
uick/arm/arm_lir.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/mir_to_lir.cc
|
76af0d307194045ece429dbaf62e93d3e08c6c20 |
05-Jun-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Turn on 64-bit core registers initialization. This enables 64-bit core registers initialization for x86_64. The backend update with 64-bit temp support is in progress. Change-Id: If7c9a62c1145f81050adda86f2beed427220baa2 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com> Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/target_x86.cc
|
c029c98cc056bc247b69160f413ee7ce9a93d8c3 |
04-Jun-2014 |
Johnny Qiu <joqiu@nvidia.com> |
Update maximum number of reachable blocks in last step Change-Id: I58e20d74fafdffd86ab3b7e4a1523b93abaae9a5 Signed-off-by: Johnny Qiu <joqiu@nvidia.com>
ir_graph.cc
|
089142cf1d0c028b5a7c703baf0b97f4a4ada3f7 |
05-Jun-2014 |
Vladimir Marko <vmarko@google.com> |
Avoid register pool allocations on the heap. Create a helper template class ArrayRef and use it instead of std::vector<> for register pools in target_<arch>.cc to avoid these heap allocations during program startup. Change-Id: I4ab0205af9c1d28a239c0a105fcdc60ba800a70a
uick/arm/target_arm.cc
uick/arm64/target_arm64.cc
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/target_x86.cc
|
511c8a653d5896e81428393a1c3d427da64e36f3 |
03-Jun-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix cmp-long and method with long arguments. 1. Fix cmp-long. 2. Use single register to pass long argument. 3. Flush StackReference<ArtMethod> on arm64 the same as in common code. 3. Fix the mismatch in calculate reg offset. Change-Id: Ie2723260fb143512e4da6ee88d4f3aded80d3d5e
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/gen_invoke.cc
|
ca9da5090a946331ca5e72a39c6f70721d3b326c |
03-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Correct another RegStorage::Solo32"
|
d44f1a6027b04c0d080089e6a8d87a4d19b5933f |
03-Jun-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Correct another RegStorage::Solo32 It should be RegStorage::FloatSolo32 Change-Id: Iadfc6654254e5a1d117b35cc2d88ceb7057cc30d Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/utility_x86.cc
|
e997429dec7fd0682abc3c3f9885c64af1be6386 |
03-Jun-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: split list of opcodes in compiler filter."
|
87662da8f55e3a21ac8f4f6d970035708c933c0b |
03-Jun-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: reference cleanup"
|
ec3f3d14915ec8f8c59bb88190928faa63ed9eb8 |
29-May-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: split list of opcodes in compiler filter. Some of the opcodes that are currently enabled in the compiler filter are generating assertion failures when using libartd.so. In this patch, these opcodes are marked as experimental via #if ... #endif and are disabled. This allows using libartd.so to run the tests and for development. Further commits will follow to fix the assertion issues. Change-Id: I9493fddc281542cb15ced38b262f37f4ef4f0870
rontend.cc
|
a0cd2d701f29e0bc6275f1b13c0edfd4ec391879 |
01-Jun-2014 |
buzbee <buzbee@google.com> |
Quick compiler: reference cleanup For 32-bit targets, object references are 32 bits wide both in Dalvik virtual registers and in core physical registers. Because of this, object references and non-floating point values were both handled as if they had the same register class (kCoreReg). However, for 64-bit systems, references are 32 bits in Dalvik vregs, but 64 bits in physical registers. Although the same underlying physical core registers will still be used for object reference and non-float values, different register class views will be used to represent them. For example, an object reference in arm64 might be held in x3 at some point, while the same underlying physical register, w3, would be used to hold a 32-bit int. This CL breaks apart the handling of object reference and non-float values to allow the proper register class (or register view) to be used. A new register class, kRefReg, is introduced which will map to a 32-bit core register on 32-bit targets, and 64-bit core registers on 64-bit targets. From this point on, object references should be allocated registers in the kRefReg class rather than kCoreReg. Change-Id: I6166827daa8a0ea3af326940d56a6a14874f5810
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
03dbc04d1d5a3bd62801989b16e994a9ed0dafb5 |
02-Jun-2014 |
Ian Rogers <irogers@google.com> |
Make class status volatile. Discourage loads and stores from reordering around the status being updated. Bug: 15347354 Change-Id: Ice805cb834617747c8209e98a142d3e5c7585719
uick/gen_common.cc
|
a4307aca310aac0ac62dcb5435daa02b1f950558 |
02-Jun-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Fix comments and link before MIR to next in Remove method There are some comments without a period at the end and the remove does not link the MIR before the one we want to remove to the one after. Change-Id: Ia1263d3191e39b4f8f76ef62b28f7fbb1c6c0403 Signed-off-by: Jean Christophe Beyler jean.christophe.beyler@intel.com
ir_graph.cc
|
e4283be97047a26d3476acd3863dcc386498be17 |
01-Jun-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix array overrun."
|
35ba7f3a78d38885ec54e61ed060d2771eeceea7 |
31-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix array overrun. MIRGraph::InlineCalls() was using the MIR opcode to recover Dalvik instruction flags - something that is only valid for Dalvik opcodes and not the set of extended MIR opcodes. This is probably the 3rd or 4th time we've had a bug using the MIR opcode in situations that are only valid for the Dalvik opcode subset. I took the opportunity to scan the code for other cases of this (didn't find any), and did some cleanup while I was in the neighborhood. We should probably rework the DalvikOpcode/MirOpcode model whenver we get around to removing DalvikInstruction from MIR. Internal bug b/15352667: out-of-bound access in mir_optimization.cc Change-Id: I75f06780468880892151e3cdd313e14bfbbaa489
rontend.cc
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/dex_file_method_inliner.cc
uick/mir_to_lir.cc
uick/x86/utility_x86.cc
reg_analysis.cc
|
b20c373e45200102eaf2d4aac35d366067e0074b |
30-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Enable extended MIR"
|
22460ecbaae7e489a3bc17a2adb2e7e9d0028f9c |
30-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: Method* as a reference"
|
3326027d2cc52463db3786a860cf238e8feb349e |
30-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: x86_64 workaround"
|
fd5a852e49796374899772381f15c9033dae0057 |
30-May-2014 |
Narayan Kamath <narayan@google.com> |
Fix build. Lint error due to a wrong #include guard. Change-Id: I3b5d56c412580ec14f5c09b859a1bd6f9eb667ee
ass_driver_me_post_opt.h
ost_opt_passes.h
|
05e27ff942b42e123ea9519d13d31070ab96f0ac |
28-May-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Enable extended MIR This patch enables all the extended MIR opcodes for ARM64. Please note that currently the compiler will never generate these opcodes since the BB optimisations are not enabled. Change-Id: Ia712b071f62301db868297d37567795128b5bf2e Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
rontend.cc
ir_optimization.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
|
2469e60e6ff08c2a0b4cd1e209246c5d91027679 |
07-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Setting up cleanup - Moved code around to actually have the clean-up code in a PassDriver format. This allows us to better control what is being called after an optimization It also allows the use of a centralized pass system for both optimizations and cleanup. Change-Id: I9d21e9bb9ee663739722f440d82adf04f73e380c Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
b_optimizations.cc
b_optimizations.h
rontend.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization_test.cc
ass_driver_me.cc
ass_driver_me.h
ass_driver_me_opts.cc
ass_driver_me_opts.h
ass_driver_me_post_opt.cc
ass_driver_me_post_opt.h
ass_me.h
ost_opt_passes.cc
ost_opt_passes.h
sa_transformation.cc
|
d9f4c52071b305b777c7d7d08176b19882b393d8 |
30-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: x86_64 workaround A recent CL changed the allocation of temp registers destined to hold a reference such that on 64-bit systems a 64-bit register would be allocated. However, for bring-up purposes, the x86_64 backend wants the ability to continue holding long values in a register pair. Change-Id: I25d9f755fafbe96144226677f85c6d5cad1ffa76
uick/ralloc_util.cc
|
f2c3e564fa9e484c29f35f10d4659ab2d7b8614a |
29-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Method* as a reference This is the first of two CLs intended to fix up and make consistent the handling of references in the Quick backend. A sibling CL c/96237 updates the runtime to treat Method* as a compressed reference when stored. This CL makes a similar change for the backend. As far as the general handling of in-register references, though, the current Quick backend is not consistent even for non-Method* references. Sometimes they are treated as references, but other times are handled as if they were 32-bit ints. A subsequent CL will deal with that issue. Change-Id: I5591c5eea6cca6ed22208ab806fd38b959c9d03d
uick/gen_invoke.cc
reg_analysis.cc
|
ea0b6e284cab12eed88eebf6aa19e6292af57389 |
29-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: fixing some assertions."
|
2ac01fc279e8397beacf90302b0f215040eb78fa |
22-May-2014 |
Vladimir Marko <vmarko@google.com> |
Improve tracking of memory locations in LVN. Rewrite the tracking of values stored in memory to allow recognizing the same value after storing it in memory and loading it back to vreg. Drop reliance on value name ordering for memory versioning in preparation for GVN. Also fix a few minor issues in LVN. Change-Id: Ifabe2d47d669d9ec43942cea6fd157e41af77ec8
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_optimization.cc
|
0955f7e470fb733aef07096536e9fba7c99250aa |
23-May-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: fixing some assertions. Fixing some assertions while attempting to get libartd.so to work. Fixing also the shift logic in LoadBaseIndexed() and StoreBaseIndexed(). This commit only fixes a part of the assertion issues. Change-Id: I473194d4260dd59a8ee6d73114429728c977ee0e
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
|
a9f1ce6fbe8a9247d0d8e20727f590b091e816da |
28-May-2014 |
Vladimir Marko <vmarko@google.com> |
Fix pass driver's dump_pass_list_ and print_pass_list_. The lists were allocated with new char[], so they should have been held by std::unique_ptr<const char[]> rather than std::unique_ptr<const char>. However, it's much cleaner with std::string. Change-Id: Ie7c604773272194345f5e6e3c4803c3a914edf99
ass_driver.h
ass_driver_me.cc
|
6d25996baef5037d0aa8beb2f517755f2fb7b91f |
28-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Print and dump functionalities per pass"
|
32f38c0775aba280fe02e8fafe0d35a5debc4eac |
28-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Support r8-r15, xmm8-xmm15 in assembler"
|
32c02c15b879174bb8ae13b964ba1f49eb5c6e70 |
28-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Add 64-bit version of instructions in asm"
|
a20468c004264592f309a548fc71ba62a69b8742 |
30-Apr-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Support r8-r15, xmm8-xmm15 in assembler Added REX support. The TARGET_REX_SUPPORT should be used during build. Change-Id: I82b457ff5085c8192ad873923bd939fbb91022ce Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
33a60e47278d09acfa44d92ad85b1902b57a6b5b |
27-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Set the type of a RegStorage correctly"
|
67c482f6737343f3afbf214995d67d98b0b36c91 |
27-May-2014 |
buzbee <buzbee@google.com> |
Merge "Art compiler: remove unnecessary sqrt call"
|
055c29fd0f752328981f1b7ccadb1862eecedd40 |
27-May-2014 |
buzbee <buzbee@google.com> |
Art compiler: remove unnecessary sqrt call For reasons lost in the mists of time, the Dalvik JIT tested the results of an inlined sqrt for NaN on Arm targets, and then called an out-of-line routine to recompute if true. The Quick compiler inherited this behavior. It is not necessary, and the CL purges it (along with the out-of-line sqrt entrypoint). Change-Id: I8c8fa6feacf9b7c3b9e190dfc6f728932fd948c6
uick/arm/fp_arm.cc
|
6c35a6ba61a190cfd3698bba0aa14038a0867cfe |
27-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: generalize NarrowRegLoc()"
|
0c52451e9be14a6bff9ffefce89ff1d60691af60 |
27-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Set the type of a RegStorage correctly This will be used as a FP value, so call the right function to create the RegStorage. Change-Id: I2bd832746afac509d20f195a7770f2fbd215cbd7 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/utility_x86.cc
|
96992e8f2eddba05dc38a15cc7d4e705e8db4022 |
19-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Add 64-bit version of instructions in asm Add missed 64-bit versions of instructions. Change-Id: I8151484d909dff487cb7e521494a0be249a42214 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
8bceccec7eddff8cd872aa20505b4a3a6be60a16 |
29-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Print and dump functionalities per pass LOG is a great logging tool but sometimes a pass has some debugging text it want to be able to turn on/off easily. By going via a print_pass flag, we can actually turn it on/off easily per pass when debugging/instrumenting. - Added a pass printer to help debug messages for future passes. - Added a print_pass flag in CompilationUnit to filter out messages. At the same time, did a similar system for dumping the CFG. - Also moved some API into public from protected. Change-Id: Ie0e89a8fc773e8583f3e4ffd6e4bd2eebdbb2bf4 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ompiler_ir.h
rontend.cc
ass.h
ass_driver.h
ass_driver_me.cc
|
ab5b370e44629332e73ffd66bfe8b8a924236c5c |
27-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Add suspend check in managed code."
|
bbc66c5855fa4f36b6f94311607f0119a93d809a |
27-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Better SSA Allocation when recreating SSA"
|
4896d7b6fb75add25f2d6ba84346ac83d8ba9d51 |
02-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Better SSA Allocation when recreating SSA The SSA calculation is not allocation friendly. This makes the SSARepresentation remember how much is allocated and not reallocate if SSA should be recalculated. Also added some allocation friendly code for the dominance code. Change-Id: Icd5586b7e2fefae8e1535975ab400b1ca95b500f Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_dataflow.cc
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
032d3775552e27eda98af2066306b773f3762b64 |
23-May-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Enable FLOAT and DOUBLE opcodes This patch enables all the DOUBLE and FLOAT opcodes except for REM ones. It has been tested and passes all Dalvik tests except for: failed: 018-stack-overflow[pid=1076] failed: 107-int-math2[pid=1593] Change-Id: I581f219bde354e3402aa3ad6e24ef15566da5f78 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
ompiler_enums.h
rontend.cc
uick/arm64/fp_arm64.cc
|
48241e786121e1c4c050d9cfad3d22de270a3e75 |
23-May-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add suspend check in managed code. TODO: Remove x19 in the frame in runtime, generic jni, compiled jni. Change-Id: Ibdc292c9e7adb3a5d3eff353c22f60ffc101f549
rontend.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
|
85089dd28a39dd20f42ac258398b2a08668f9ef1 |
26-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: generalize NarrowRegLoc() Some of the RegStorage utilites (DoubleToLowSingle(), DoubleToHighSingle(), etc.) worked only for targets which which treat double precision registers as a pair of aliased single precision registers. This CL elminates those utilities, and replaces them with a new RegisterInfo utility that will search an aliased register set and return the member matching the required storage configuration (if it exists). Change-Id: Iff5de10f467d20a56e1a89df9fbf30d1cf63c240
uick/arm/fp_arm.cc
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
eg_storage.h
|
cd9b4e287c20b14655d21e3f349733e80a5aaf23 |
24-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Rebase on top of "64-bit temp register support""
|
fe94578b63380f464c3abd5c156b7b31d068db6c |
22-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Implement all vector instructions for X86 Add X86 code generation for the vector operations. Added support for X86 disassembler for the new instructions. Change-Id: I72b48f5efa3a516a16bb1dd4bdb5c9270a8db53a Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
eg_storage.h
|
8c895b3385ed96a0b040c35222c0338058895d49 |
24-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix register clobbering."
|
642fe34958ba7fafa81341823241616edde0380c |
24-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix register clobbering. Ensure all aliased children of a register set are clobbered when any member is clobbered. Additionally, use a clobbering mask to avoid clobbering non-overlapping siblings. Change-Id: Ic0d88a30f3e5b7a359396f6541d602739fa3124a
uick/mir_to_lir.h
uick/ralloc_util.cc
|
0999a6f7c83d10aa59b75f079f0d2fdbac982cf7 |
21-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Rebase on top of "64-bit temp register support" Added the 64-bit core/temp register definition, fixed RegisterPool creation for x86_64 so that 64-bit core/temps are NOT used for now. The long arithmetic still operates with register pair on x86_64 and it is a subject for change in a separate patch. Change-Id: I2be06d5aefaf80141983bc9d8ed8a2ee24c2b21b Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
919ed6b2e2aa58a6153eb1d74edc29edc50d514a |
24-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Revert "ART: Better SSA Allocation when recreating SSA""
|
d4750f202170a448119c1813a964574bfea0dded |
24-May-2014 |
Bill Buzbee <buzbee@android.com> |
Revert "ART: Better SSA Allocation when recreating SSA" Temporarily reverting until memory footprint cost of adding a vreg to ssa entrance map on every applicable MIR node can be assessed.. This reverts commit cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e. Change-Id: Ia9c03bfc5d365ad8d8b949e870f1e3bcda7f9a54
ir_dataflow.cc
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
be7ba65210f0eb9cd86b3b76337020b039191ba6 |
24-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Better SSA Allocation when recreating SSA"
|
8512758d1208d3c32bf67db9c925b8fc6e077fd7 |
12-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: BasicBlock API Implementation - Adding BasicBlock Utility functions. Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com> Change-Id: Ia264b4e68a9a56441ca143f1d98e5a333cf87b29
ir_graph.cc
ir_graph.h
|
82f3c1b76a19f196a482cad9d5c1aac769d5a397 |
23-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: API to dex instructions"
|
e24580a135aa6e85cdc49426ec74d2ae1e326243 |
23-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Rewrite BitVector index iterator."
|
a5b8fde2d2bc3167078694fad417fddfe442a6fd |
23-May-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite BitVector index iterator. The BitVector::Iterator was not iterating over the bits but rather over indexes of the set bits. Therefore, we rename it to IndexIterator and provide a BitVector::Indexes() to get a container-style interface with begin() and end() for range based for loops. Also, simplify InsertPhiNodes where the tmp_blocks isn't needed since the phi_nodes and input_blocks cannot lose any blocks in subsequent iterations, so we can do the Union() directly in those bit vectors and we need to repeat the loop only if we have new input_blocks, rather than on phi_nodes change. And move the temporary bit vectors to scoped arena. Change-Id: I6cb87a2f60724eeef67c6aaa34b36ed5acde6d43
b_optimizations.cc
b_optimizations.h
it_vector_block_iterator.cc
it_vector_block_iterator.h
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
61bc2b3770c8078c7dbe1a9fd4faf0ab1c129701 |
23-May-2014 |
Vladimir Marko <vmarko@google.com> |
Remove obsolete pass_driver.cc . Obsoleted by https://android-review.googlesource.com/93433 . Change-Id: I01865d17160fdc698f43c61fa4f5642d0f1391d9
ass_driver.cc
|
567e9dbc65ee183cda2a052dbf224c8c4a8f9423 |
23-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Disable optimizations on x86_64"
|
4c80043aa75d0dfa62dd2fd1845bc2b92110336d |
07-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Disable all intrinsics Intrinsics are subject to rework for x86_64 and disabled for now. Change-Id: Ice67db083fe43dc4faa9276faf02234a4a24f207 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/gen_invoke.cc
|
ba279d9b7b3fd065ffbeae6b2dc2997af2d20aa4 |
16-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Disable optimizations on x86_64 This patch disables all QCG optimizations as ARM64 does. Optimizations are subject to step-by-step enabling according to test results. Change-Id: Idd6e10f3b67e8c0f1f029bb26a0e9bf40061aeac Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
|
d293fb40cf1cd23ead34f6002da037cead69cba2 |
19-May-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86: For integer ALU operation handle v+=v case When destination and operand are the same Virtual Register we should ensure that destination RegLocation is updated after operand is loaded with LoadValue in physical register. Change-Id: I59da106471b0c494203af01c99583f51dbc0f9ee Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
54d36b6bf280c22ae69280feffa9d65d6417b153 |
23-May-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
Create two CompilerTemp for a wide compiler temp We create a new CompilerTemp for the high part of a wide compiler temp to fix counting compiler temps. Otherwise, assertion failures may happen inside GetNumUsedCompilerTemps(), if there are any wide compiler temps. Previously, we never ask for a wide compiler temp, such that we don't hit the issue. Change-Id: I9e79ad15e4192665b9d8a9dae5a5453496e48a79 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ir_optimization.cc
|
5ef3d95466ffdea0f4348a64218d08b1b5a29aa7 |
23-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Enable LONG_* and INT_* opcodes."
|
c3db20b7e6f847339d6ecbd89846c173a7ccc967 |
06-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: API to dex instructions - Added the GetConstant function call in DecodedInstruction. - Added a few rewriter helper functions for later higher level rewriting. - Added Setter/Getter data and query functions. - Added Clobber memory/Const/Call/Cast data and query functions. - Added expression information (add, multiply, ...). - Added a IsLinear function for additions and subtractions. - Added an empty constructor for the DecodedInstruction: - Useful for the creation of a MIR constructor too. - Added the IsConditionalBranch utility function. Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com> Change-Id: Ie21f2a7779b38c1b383334f04126c2d792cae462
ir_graph.cc
ir_graph.h
|
44e5bdec17d0528b90cc0773be2beb76dcafdc5b |
29-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Topological Sort Traversal Implementation - Added a topological sort implementation for traversal. - Useful for traversals that require traversing the predecessors first. - Added a function to BasicBlock to detect if it is an exception block. Change-Id: I573da1768a635c6fd0259573dbb46b112132e129 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ataflow_iterator.h
ir_graph.cc
ir_graph.h
ass.h
ass_driver.cc
ass_me.h
|
ed65c5e982705defdb597d94d1aa3f2997239c9b |
22-May-2014 |
Serban Constantinescu <serban.constantinescu@arm.com> |
AArch64: Enable LONG_* and INT_* opcodes. This patch fixes some of the issues with LONG and INT opcodes. The patch has been tested and passes all the dalvik tests except for 018 and 107. Change-Id: Idd1923ed935ee8236ab0c7e5fa969eaefeea8708 Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
rontend.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
eg_storage.h
|
4f59668b3d51f63601ebe59dbd2b7e8a7c5bd093 |
01-May-2014 |
James C Scott <james.c.scott@intel.com> |
ART: Pass driver generalization - Generalizing Pass Driver. - Migrating ME Pass Driver to use the new generalized Pass Driver. There will be some more changes after in the compiler code to generalize it a bit more by separating what is being done by the optimizing passes and post-pass cleanups. Change-Id: I140a70e88483d7c3991b7d336bd593b2613ae194 Signed-off-by: James C Scott <james.c.scott@intel.com>
b_optimizations.cc
b_optimizations.h
rontend.cc
ass.h
ass_driver.h
ass_driver_me.cc
ass_driver_me.h
ass_me.h
|
3aa57730e2aec451bb836918d936c6862598d8d6 |
17-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: MIR, SSARepresentation, and BasicBlock Additional API Adding the API calls to the MIR structure to help with higher level code. Some code has been added to BasicBlock as well for the removal. Some code has also been added to SSARepresentation. A constructor has been added to DecodedInstruction. Change-Id: Ie65948d53d83fd8250545c94c88b442a68d702c7 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ir_graph.cc
ir_graph.h
uick/dex_file_method_inliner.cc
sa_transformation.cc
|
481b4027849c8c8b0f6f25a2d5c460e11f8eb64d |
22-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: free up space in MIR."
|
7bf9c46e93c6f7551f2645cf9bbd1ec9f797c86c |
22-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Method inlining across dex files in boot image."
|
a51a0b0300268b605e3ad71b0e87ff394032c5e7 |
21-May-2014 |
Vladimir Marko <vmarko@google.com> |
Method inlining across dex files in boot image. Fix LoadCodeAddress() and LoadMethodAddress() to use the dex file in addition to the method index to uniquely identify the literal. With that fix in place, when we have both the direct code and the direct method, we can safely pass the actual target method id instead of the method id from the same dex file in the method lowering info. This was already done for calls from apps into boot image (and thus there was a bug with a tiny risk of the wrong literal being used) and now we also do that for calls within the boot image. The latter allows the inlining pass to inline many more methods than before in the boot image. Bug: 15021903 Change-Id: Ic765ce9809b43ef07e7db32b8e3fbc9acb09147f
uick/codegen_util.cc
uick/mir_to_lir.h
|
ef562fdef7e0071cae11e07a9e53fb152d0934b8 |
21-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: free up space in MIR. The width field in MIR isn't especially useful - it could always be recalculated from the Dalvik instruction. This CL eliminates it to allow the 16 bits it occupied to be used for the ID of the parent BasicBlock. Change-Id: I75ab8562ca217f0f819ecfc417014dee74bc587e
ocal_value_numbering_test.cc
ir_graph.cc
ir_graph.h
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
|
b01bf15d18f9b08d77e7a3c6e2897af0e02bf8ca |
14-May-2014 |
buzbee <buzbee@google.com> |
64-bit temp register support. Add a 64-bit temp register allocation path. The recent physical register handling rework supports multiple views of the same physical register (or, such as for Arm's float/double regs, different parts of the same physical register). This CL adds a 64-bit core register view for 64-bit targets. In short, each core register will have a 64-bit name, and a 32-bit name. The different views will be kept in separate register pools, but aliasing will be tracked. The core temp register allocation routines will be largely identical - except for 32-bit targets, which will continue to use pairs of 32-bit core registers for holding long values. Change-Id: I8f118e845eac7903ad8b6dcec1952f185023c053
rontend.cc
rontend.h
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/codegen_util.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
9593976c3753b6ff6390cd022d70ed7e116dc847 |
20-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "Allow X86 QBE to be extended"
|
e87f9b5185379c8cf8392d65a63e7bf7e51b97e7 |
30-Apr-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Allow X86 QBE to be extended Enhancements and updates to allow X86Mir2LIR Backend to be subclassed for experimentation. Add virtual in a whole bunch of places, and make some other changes to get this to work. Change-Id: I0980a19bc5d5725f91660f98c95f1f51c17ee9b6 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_graph.h
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
9cdf48e03c302e03e2ec118a22cbdfae460b1665 |
20-May-2014 |
buzbee <buzbee@google.com> |
Arm64 - update fp callee save base Hit commit button too quickly - this should have been part of CL 95013. Change-Id: I4a733414db74d6e9cab2d8fbe2eb9b398fff3f45
uick/arm64/arm64_lir.h
|
214eee43f1507b3bc8595bf0d438ba97d21dc7a3 |
20-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: fixes in A64 code generation."
|
607fa7b07233a7233ebe21bba8f3e7c1925ae0f2 |
20-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "Now we have a proper C++ library, use std::unique_ptr."
|
700a402244a1a423da4f3ba8032459f4b65fa18f |
20-May-2014 |
Ian Rogers <irogers@google.com> |
Now we have a proper C++ library, use std::unique_ptr. Also remove the Android.libcxx.mk and other bits of stlport compatibility mechanics. Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
ompiler_ir.h
rontend.h
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_analysis.cc
ir_graph.h
ir_optimization.cc
uick/codegen_util.cc
sa_transformation.cc
erified_method.cc
|
082833c8d577db0b2bebc100602f31e4e971613e |
18-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler, out of registers fix It turns out that the register pool sanity checker was not working as expected, leaving some inconsistencies unreported. This could result in "out of registers" failures, as well as other more subtle problems. This CL fixes the sanity checker, adds a lot more check and cleans up the previously undetected episodes of insanity. Cherry-pick of internal change 468162 Change-Id: Id2da97e99105a4c272c5fd256205a94b904ecea8
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
bc6d197cdb02eeac0c98ec4ed37f530b003a4e7a |
13-May-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: fixes in A64 code generation. - Disabled special method compilation, as it requires hard-float ABI, - Disabled suspend checks, as runtime is not yet ready (e.g. trampolines are not setting the suspend register, etc), - Changing definition of zero register (the zero register has now 0x3f as its register number), - Fixing some issues with handling of cmp instructions in the assembler: we now use the shift-register rather than the extended-register variant of cmp and cmn, - Partially fixing register setup (register sN is now mapped to dN), - Fixing and completing implementation of register spills/unspills, - Fixing LoadBaseDispBody() and StoreBaseDispBody(). Change-Id: Ia49ba48b6ca0f782380066345b7a198cb6c1dc1d
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
|
d65c51a556e6649db4e18bd083c8fec37607a442 |
29-Apr-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Add support for constant vector literals Add in some vector instructions. Implement the ConstVector instruction, which takes 4 words of data and loads it into an XMM register. Initially, only the ConstVector MIR opcode is implemented. Others will be added after this one goes in. Change-Id: I5c79bc8b7de9030ef1c213fc8b227debc47f6337 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ompiler_enums.h
ir_graph.cc
uick/codegen_util.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
1e97c4a4ab9f17d1394b952882d59d894b1e3c74 |
16-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Add x86_64 code generation support"
|
c830430ed65497c2268649d8e78121364e31b184 |
15-May-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Fix quick compiler monitor implementation. Also with some small fixes : 1. Enable some dex byte code to compile. 2. Copy the register definition from runtime.cc. 3. A quick fix for "cmp Wn, Wm" in the assembler. 4. Optimise GenMoveException a bit by using xzr. 5. Fix improper use of StoreValueWide() on 32-bit value in FlushIns(). 6. Fix one debug assert in the assembler. It can pass all cases in run-all-test, except 044 which also fails with the interpreter. Change-Id: I9cc0253f1039c78d5100640235ac33e884b02560
rontend.cc
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/target_arm64.cc
|
380d24d9af676d047148083774fa634b77a00634 |
16-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "Compatibility layer to transition from UniquePtr to std::unique_ptr."
|
507dfdd147c97bfbadebfd63584d094b6a4e7b47 |
16-May-2014 |
Ian Rogers <irogers@google.com> |
Compatibility layer to transition from UniquePtr to std::unique_ptr. Use ART_WITH_STLPORT (enabled for the target) to cause the use of UniquePtr, for the host switch to std::unique_ptr. For now the type remains called UniquePtr. Make dalvik compile with clang on the host, move its build to C++11. Change-Id: I5ba8d2757904bc089ed62047ea03de3c0853fb12
ocal_value_numbering.h
ir_analysis.cc
erified_method.cc
|
e1a71b2a6e899645b006c29ba37695f521545a5b |
16-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: A Compile Filter for x86_64"
|
13ff8cd5d29c66de49506b0d7dddf8e0a959e104 |
15-May-2014 |
Bill Buzbee <buzbee@google.com> |
Merge "Quick Compiler: fix Arm cts failures"
|
fe8cf8b1c1b4af0f8b4bb639576f7a5fc59f52ea |
15-May-2014 |
Bill Buzbee <buzbee@google.com> |
Quick Compiler: fix Arm cts failures Fixes move_wide_16#testN1, move_wide_16#testN2 Two bugs for the price of one (thanks CTS!) First, the new stack overflow checking code was broken for very large frames. For Arm on method entry, we only have 1 available temp register, r12, until argument registers are flushed. Previously, for explicit checks on large frames, r12 was immediately loaded with the stack_end value. However, later on when the frame is extended, if the frame size exceeds the range of a reg-reg-imm subtract, the codegen utilities will allocate a new temporary register to complete the operation. r12 was getting clobbered. Similarly, for medium-large frames r12 could get clobbered during frame creation. What we should always do when directly using fixed registers like this is to lock them to prevent them from being allocated as a temp. The other half of the first bug is easily solved by delaying the load of stack_end until after the new sp is computed. We'll increase the stall cost, but this is an uncommon case. The second bug was likely a typo in LoadValueDisp(). I'm a bit surprised we hadn't hit this one earlier - but perhaps it was recently introduced. The wrong base register was being used in the non-float, wide, excessive offset case (which I suppose is also somewhat uncommon). Cherry-pick of internal commit If5b30f729e31d86db604045dd7581fd4626e0b55 Change-Id: If5b30f729e31d86db604045dd7581fd4626e0b55
uick/arm/call_arm.cc
uick/arm/utility_arm.cc
|
b2c3e10deb6a2f069748c7a48e778a5da66900fd |
15-May-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix MonitorExit code on ARM"
|
b14329f90f725af0f67c45dfcb94933a426d63ce |
15-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix MonitorExit code on ARM We do not emit barriers on non-SMP systems. But on ARM, we have places that need to conditionally execute, which is done through an IT instruction. The guide of said instruction thus changes between SMP and non-SMP systems. To cleanly approach this, change the API so that GenMemBarrier returns whether it generated an instruction. ARM will have to query the result and update any dependent IT. Throw a build system error if TARGET_CPU_SMP is not set. Fix runtime/Android.mk to work with new multilib host. Bug: 14989275 Change-Id: I9e611b770e8a1cd4ca19367d7dae0573ec08dc61
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
93dcff30c9bea0d6c7ca3a71a1bf460336c3467d |
15-May-2014 |
Ian Rogers <irogers@google.com> |
Fix CompilationUnit constructor issues. Ensure target64 is initialized. Switch from NULL to nullptr as the former gives compilation errors with std::unique_ptr from libc++. Change-Id: I7153368d9324d10ef257f7c7ce9571a1753e5ba8
rontend.cc
|
a1926cdbd05314accb55cc7d8fcb37fb361bbf8a |
15-May-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Fix ARM dmb placement in monitor-exit"
|
f54fcba62745f897b9e741594dc5f4b2143601f6 |
14-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Support any cpu register sequence in LoadArgRegs"
|
5c13d43f69a5c893b4ee7abf02772ad526b3d263 |
14-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "x86_64: Handle UnsafeGet/Put equal to x86"
|
d115735fe5523ff72319f0968f773683323c7f79 |
14-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix special getter/setter to use RegClassForFieldLoadStore()."
|
c93ac8b73b5772e43b6dd1cc9e1deee79ca68849 |
13-May-2014 |
Vladimir Marko <vmarko@google.com> |
Fix special getter/setter to use RegClassForFieldLoadStore(). This ensures correct register class is used for volatile load/store in these getters and setters. Bug: 14112919 Change-Id: Ib7aa83d441fb007e97f9acc2a778bc20ffed837c
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
5678455bdf9ebf2bd88ab39a9aeb6e08b7c6e245 |
12-May-2014 |
Vladimir Kostyukov <vladimir.kostyukov@intel.com> |
ART: A Compile Filter for x86_64 This patch enables an x86_64 compile filter for everything we're not ready to compile right now. Signed-off-by: Vladimir Kostyukov <vladimir.kostyukov@intel.com> Change-Id: I9ba87cf7f05e3465f12fd16a87b54f9649baf88a
rontend.cc
|
26ee07a9dbdff5d7ea61ff412e5fb7f510972aad |
12-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
Support any cpu register sequence in LoadArgRegs The LoadArgRegs was designed only for case when arg1.reg < arg2.reg < arg3.reg which is not true for x86_64 ABI. Now LoadArgRegs supports three args passed by any cpu register. Change-Id: I62f58c47ec12b8e3f8124724cb3b5371dde8173f Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/gen_invoke.cc
|
9bf549d472462e4d1888a97c218a8c26fe3bfefb |
12-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Handle UnsafeGet/Put equal to x86 This patch extends "Handle x86_64 architecture equal to x86" and covers UnsafeGet/UnsafePut. Change-Id: Ib07cfc217c7825cff0b49cfbb9151452d62b1b68 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/gen_invoke.cc
|
9b9dec8bbcb812315eb0b68b3465c6c567f09527 |
14-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix ARM dmb placement in monitor-exit This moves the dmb in quick-compiled monitor-exit before the str perfoming the unlock. Change-Id: I231f98ff21eb7bac45b4a1b7ff57316deeb858cc
uick/arm/call_arm.cc
|
eb8167a4f4d27fce0530f6724ab8032610cd146b |
08-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add Handle/HandleScope and delete SirtRef. Delete SirtRef and replaced it with Handle. Handles are value types which wrap around StackReference*. Renamed StackIndirectReferenceTable to HandleScope. Added a scoped handle wrapper which wraps around an Object** and restores it in its destructor. Renamed Handle::get -> Get. Bug: 8473721 Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
ir_field_info.cc
ir_method_info.cc
|
9ee801f5308aa3c62ae3bedae2658612762ffb91 |
12-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
Add x86_64 code generation support Utilizes r0..r7 in register allocator, implements spill/unsill core regs as well as operations with stack pointer. Change-Id: I973d5a1acb9aa735f6832df3d440185d9e896c67 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
|
3ec5da20f27da3bb8cea7ae29538c30c4b1549b4 |
13-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Fix typo in ThreadOffset modification Change-Id: Ifc3bd44a2a8442dcc242f4abcb17ae2acbc3b4e7
uick/gen_invoke.cc
|
2f244e9faccfcca68af3c5484c397a01a1c3a342 |
08-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Add more ThreadOffset in Mir2Lir and backends This duplicates all methods with ThreadOffset parameters, so that both ThreadOffset<4> and ThreadOffset<8> can be handled. Dynamic checks against the compilation unit's instruction set determine which pointer size to use and therefore which methods to call. Methods with unsupported pointer sizes should fatally fail, as this indicates an issue during method selection. Change-Id: Ifdb445b3732d3dc5e6a220db57374a55e91e1bf6
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/arm64_lir.h
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
0c5e8417a1e82f6e31fbfc33be7e64d9073d6ef4 |
13-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix compile-time perf regression"
|
ba57451494946a128703e1cbd8bf5969ee8dc598 |
13-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix compile-time perf regression The recent changes to the temp register liveness tracking introduced a measureable compile-time performance regression. This CL cleans it up. Change-Id: Id698b93e957f0ecab7ddfab94727f85e49cf10cf
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
|
0dc242d6fc1254e6ca1c31e08e612bbf45644b17 |
12-May-2014 |
Vladimir Marko <vmarko@google.com> |
Avoid unnecessary copy/load in EvalLoc() and LoadValue(). EvalLoc()/EvalLocWide() are used to prepare a register where a value is subsequently stored, so they shouldn't copy the old value to the new register for register class mismatch. The only exception where we actually need a copy is LoadValue()/LoadValueWide(), so we inline the old code that makes the copy there. We also avoid loading inexpensive constants when the value is already in the register. Change-Id: I07519e9d4d9b3f7272233d196435f3035e4a3ca9
uick/gen_loadstore.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/int_x86.cc
|
d111c6eeb01955964d9c7f68126adcb1e1824ab3 |
12-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: RegStorage tweak Previously, the RegStorage struct allowed for up to 32 physical registers per register class. Although this is sufficient to handle instruction encodings for all targets, some targets may re-use the register number encoding for different physical elements. For example, Arm64 uses register encoding 0x1f for both the stack pointer and the zero register. This change adds a bit to the low register number, allowing 0..63. Targets can use this extra encoding space to differentiate between multiple uses of the same encoding pattern. Change-Id: I11f2ebbce8865a08627eef5868bb51fae6421c33
eg_storage.h
|
e1910f1d802dff79bba5ef61e1c4fd0b95f6e5b0 |
11-May-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: Fix liveness tracking"
|
30adc7383a74eb3cb6db3bf42cea3a5595055ce1 |
10-May-2014 |
buzbee <buzbee@google.com> |
Quick compiler: Fix liveness tracking Rework temp register liveness tracking to play nicely with aliased physical registers, and re-enable liveness tracking optimization. Add a pair of x86 utility routines that act like UpdateLoc(), but only show in-register live temps if they are of the expected register class. Change-Id: I92779e0da2554689103e7488025be281f1a58989
rontend.cc
uick/gen_loadstore.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
90cf3eefb4cd4dbd7ccd514738055b4d193981fe |
09-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up ScopedArenaAllocatorAdapter."
|
69f08baaa4b70ce32a258f3da43cf12f2a034696 |
11-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up ScopedArenaAllocatorAdapter. Make the adapter equality-comparable, define aliases for containers using the adapter and use those aliases. Fix DebugStackIndirectTopRefImpl assignment. Change-Id: I689aa8a93d169f63a659dec5040567d7b1343277
ocal_value_numbering.h
ir_analysis.cc
ir_optimization.cc
|
674744e635ddbdfb311fbd25b5a27356560d30c3 |
24-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Use atomic load/store for volatile IGET/IPUT/SGET/SPUT. Bug: 14112919 Change-Id: I79316f438dd3adea9b2653ffc968af83671ad282
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
8b1f6050ae4f6291d0ed082cf5d2efed2da0eef4 |
08-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "X86: EmitArrayImm shouldn't truncate to 16 bits"
|
e45fb9e7976c8462b94a58ad60b006b0eacec49f |
06-May-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Change arm64 backend to produce A64 code. The arm backend clone is changed to produce A64 code. At the moment this backend can only compile simple methods (both leaf and non-leaf). Most of the work on the assembler (assembler_arm64.cc) has been done. Some work on the LIR generation layer (functions such as OpRegRegImm & friends) is still necessary. The register allocator still needs to be adapted to the A64 instruction set (it is mostly unchanged from the arm backend). Offsets for helpers in gen_invoke.cc still need to be changed to work on 64-bit. Change-Id: I388f99eeb832857981c7d9d5cb5b71af64a4b921
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/create.sh
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
uick/codegen_util.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
9ed427724a18dc24f9eb2ddf39e4729bea203c2e |
07-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
X86: EmitArrayImm shouldn't truncate to 16 bits The code in X86Mir2Lir::EmitArrayImm() always truncates the immediate value to 16 bits. This can't be right. The code in EmitImm() will check the expected immediate size from the entry. Change-Id: I75b3b96e41777838b0f243d65f3f2ded2e1dbdd2 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
|
410d87ff51e9432768924d2f294592818f93c244 |
07-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Cleanup ARM load/store wide and remove unused param s_reg."
|
052a647973b590c9d5007a2e16f313f4e32a70bd |
07-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Add fake arm64 backend, and disable it by method filter."
|
221b86d96f6e1971d24e3d6a283352c58cedbd32 |
07-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: BitVector and Optimization changes"
|
3bf7c60a86d49bf8c05c5d2ac5ca8e9f80bd9824 |
07-May-2014 |
Vladimir Marko <vmarko@google.com> |
Cleanup ARM load/store wide and remove unused param s_reg. Use a single LDRD/VLDR instruction for wide load/store on ARM, adjust the base pointer if needed. Remove unused parameter s_reg from LoadBaseDisp(), LoadBaseIndexedDisp() and StoreBaseIndexedDisp() on all architectures. Change-Id: I25a9a42d523a68addbc11abe44ddc55a4401df98
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
9e06c8cd4a2e1471754470e09aaab63c0795b4af |
06-May-2014 |
Zheng Xu <zheng.xu@arm.com> |
AArch64: Add fake arm64 backend, and disable it by method filter. Just create an ArmCodeGenerator for arm64, but currently no code will be generated for arm64. The method filter can: 1. Skip methods with unsupported prototype. 2. Skip methods with unsupported dalvik byte code. 3. Skip methods with invocation to unsupported prototype. These are temporary codes and should be removed later. But with this patch, it won't break anything when we merge partly implemented arm64 backend later. Change-Id: Ib9180d7b8a978f0a5ebaf6b4893e7e3724897113
rontend.cc
|
99380ed2f0f108a3110a3243e57e9863e74095cb |
07-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Ensure X86 OpRegCopyWide preserves src X86Mir2Lir::OpRegCopyWide will clobber r_src if it is assigning a value in an XMM register to a pair of GPRs. This change introduces a temporary to preserve the input value. Change-Id: I02af5174007c9572e597f8efb0da34f21882a3a8 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
290fda3acf3d9ce60f7ac3903fabfb01d3521d0f |
07-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Remove LoadBaseDispWide and StoreBaseDispWide."
|
91152bc2ab6e60add80dd017e30e57dce40a8ae0 |
07-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: ChildBlockIterator Implementation"
|
455759b5702b9435b91d1b4dada22c4cce7cae3c |
06-May-2014 |
Vladimir Marko <vmarko@google.com> |
Remove LoadBaseDispWide and StoreBaseDispWide. Just pass k64 or kDouble to non-wide versions. Change-Id: I000619c3b78d3a71db42edc747c8a0ba1ee229be
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/arm64/codegen_arm64.h
uick/arm64/int_arm64.cc
uick/arm64/utility_arm64.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
7189fee4268c70d7ed0151e988ff7c7cd85f2a30 |
07-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "AArch64: Added arm64 quick backend as an arm clone."
|
43ec8737d8356dbff0a90bee521fb0e73438da47 |
31-Mar-2014 |
Matteo Franchin <matteo.franchin@arm.com> |
AArch64: Added arm64 quick backend as an arm clone. Created a new directory arm64 under compiler/dex/quick which contains a copy of the 32-bit arm backend. In following CLs, this code will be replaced/modified to support Aarch64. Change-Id: I06c468db8d588e339eecf4d7d85276d5e334a17a
uick/arm64/arm64_lir.h
uick/arm64/assemble_arm64.cc
uick/arm64/call_arm64.cc
uick/arm64/codegen_arm64.h
uick/arm64/create.sh
uick/arm64/fp_arm64.cc
uick/arm64/int_arm64.cc
uick/arm64/target_arm64.cc
uick/arm64/utility_arm64.cc
|
72d32629303f8f39362a4099481f48646aed042f |
07-May-2014 |
Ian Rogers <irogers@google.com> |
Give Compiler a back reference to the driver. The compiler driver is a single object delegating work to the compiler, rather than passing it through to every Compiler call make it a member of Compiler so that it maybe queried. This simplifies the Compiler API and makes the relationship to CompilerDriver more explicit. Remove reference arguments that contravene code style. Change-Id: Iba47f2e3cbda679a7ec7588f26188d77643aa2c6
rontend.cc
uick/codegen_util.cc
|
47ebd77a6d249403a34d242908749b7446da2a82 |
07-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Improve fused compare long branch"
|
80475df914f9dbdbb1f4b42e87e75d375d50a629 |
06-May-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: Ensure use counts updated when adding SSA reg"
|
1f1d2513a11eaaa59601d7599ac2e80ddfa1bcf5 |
06-May-2014 |
Andreas Gampe <agampe@google.com> |
Merge "ART: Use utils.h::RoundUp instead of explicit bit-fiddling"
|
b5c9b4008760c9042061490f22aaff990ed04c9a |
30-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: BitVector and Optimization changes - The BitVector has a function SameBitsSet that is a bit upside down - This patch fixes it. - Two optimizations are fixed also: - The null check pass uses now same bits set instead of equal due to a subsequent change that will make it not always the case that the compared bitvectors be of the same size. - The fused optimization supposes a predecessor will have an instruction. Change-Id: I9ef1c793964b18dc0f47baf9d1f361448bb053a3 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ir_optimization.cc
|
99b0578036179849aa9fb7b8ef378bd20fabc71e |
06-May-2014 |
Dave Allison <dallison@google.com> |
Merge "Handle implicit stack overflow without affecting stack walks"
|
f8c762b8cbd4a223c697d7e7bdb976fb39224cb8 |
02-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: ChildBlockIterator Implementation - Added the API to be able to walk through a BasicBlock's children directly. - When calling Reset(GrowableArray*), there is an assignment to the g_list_ member. This is not possible with the g_list_ being const. Change-Id: I25d06484fd93848d80ccf96a1324058370b2ee46 Signed-Off-By: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
ir_graph.cc
ir_graph.h
|
36b65964d128471d917c2efc69c81bc50ef9360b |
06-May-2014 |
Ian Rogers <irogers@google.com> |
Merge "ART: Update and correct assemble_x86.cc"
|
2637f2e9bf4fc5591994b7c0158afead88321a7c |
30-Apr-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Update and correct assemble_x86.cc Correct the definition of some X86 instructions in the file. Add some new instructions and the code to emit them properly. Added EmitMemCond() Change-Id: Icf4b70236cf0ca857c85dcb3edb218f26be458eb Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/x86_lir.h
|
752e205de95ca9d4f4e825173a3cefd831a3b933 |
01-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Improve fused compare long branch The code generated by a fused compare long with an immediate value is much longer than comparing to a runtime value. Rewrite the code to improve it. The special cases are == or != to 0, and whether the source is a temporary value or not. Try to handle all of these well. For all except == and !=, we can use a 'cmp' instruction for the upper word, in order to set the carry flag properly, rather than a 'sub' into a temp. Also, we have to handle the <= and > cases properly, in order to get the correct code generated, in the same manner as X86Mir2Lir::GenFusedLongCmpBranch(). Change-Id: Ic29bf89ff2c06916d7fc996926997888ea013ba7 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
0095e0b8380a8802f40a21928800b9df6e11f1d7 |
06-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Add a last item in the MIROptimizationFlagPositions enumeration"
|
0add77a86599260aba3ea4b56e9db3da6bb881a8 |
06-May-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
ART: Ensure use counts updated when adding SSA reg Ensure that matching data structures are updated when adding SSA registers late in the compile. Change-Id: I8e664dddf52c1a9095ba5b7a8df84e5a733bbc43 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_dataflow.cc
ir_optimization.cc
|
660188264dee3c8f3510e2e24c11816c6b60f197 |
06-May-2014 |
Andreas Gampe <agampe@google.com> |
ART: Use utils.h::RoundUp instead of explicit bit-fiddling Change-Id: I249a2cfeb044d3699d02e13d42b8e72518571640
uick/arm/assemble_arm.cc
uick/codegen_util.cc
uick/mips/assemble_mips.cc
uick/x86/assemble_x86.cc
|
f29a4244bbc278843237f0ae242de077e093b580 |
05-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Fix frame size calculation for 64-bit Calculate frame size in the same way as calculated in patch "64bit changes to the stack walker for the Quick ABI" Change-Id: I8c2458f5973536a84f3fd6ad56167b5cfafa9ab4 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/codegen_util.cc
|
0b8027003514c4fa6a850e5087076e991daaf4c3 |
05-May-2014 |
Andreas Gampe <agampe@google.com> |
Merge "x86_64: Fix Array::DataOffset in calls"
|
37498b6719347190f45472ad44ea21de563585eb |
05-May-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
x86_64: Fix Array::DataOffset in calls Calculates offset using utility function Change-Id: I19339537f4458dcae931897f4ee282f5c40746d2 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/gen_invoke.cc
|
5cd33753b96d92c03e3cb10cb802e68fb6ef2f21 |
16-Apr-2014 |
Dave Allison <dallison@google.com> |
Handle implicit stack overflow without affecting stack walks This changes the way in which implicit stack overflows are handled to satisfy concerns about changes to the stack walk code. Instead of creating a gap in the stack and checking for it in the stack walker, use the ManagedStack infrastructure to concoct an invisible gap that will never be seen by a stack walk. Also, this uses madvise to tell the kernel that the main stack's protected region will probably never be accessed, and instead of using memset to map the pages in, use memcpy to read from them. This will save 32K on the main stack. Also adds a 'signals' verbosity level as per a review request. Bug: 14066862 Change-Id: I5257305feeaea241d11e6aa6f021d2a81da20b81
uick/arm/call_arm.cc
|
091cc408e9dc87e60fb64c61e186bea568fc3d3a |
31-Mar-2014 |
buzbee <buzbee@google.com> |
Quick compiler: allocate doubles as doubles Significant refactoring of register handling to unify usage across all targets & 32/64 backends. Reworked RegStorage encoding to allow expanded use of x86 xmm registers; removed vector registers as a separate register type. Reworked RegisterInfo to describe aliased physical registers. Eliminated quite a bit of target-specific code and generalized common code. Use of RegStorage instead of int for registers now propagated down to the NewLIRx() level. In future CLs, the NewLIRx() routines will be replaced with versions that are explicit about what kind of operand they expect (RegStorage, displacement, etc.). The goal is to eventually use RegStorage all the way to the assembly phase. TBD: MIPS needs verification. TBD: Re-enable liveness tracking. Change-Id: I388c006d5fa9b3ea72db4e37a19ce257f2a15964
ompiler_enums.h
rontend.cc
ir_graph.h
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/README.mips
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
reg_analysis.cc
|
29a2648821ea4d0b5d3aecb9f835822fdfe6faa1 |
03-May-2014 |
Ian Rogers <irogers@google.com> |
Move DecodedInstruction into MIR. Change-Id: I188dc7fef4f4033361c78daf2015b869242191c6
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
|
cb73fb35e5f7c575ed491c0c8e2d2b1a0a22ea2e |
02-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Better SSA Allocation when recreating SSA The SSA calculation is not allocation friendly. This makes the SSARepresentation remember how much is allocated and not reallocate if SSA should be recalculated. Also added some allocation friendly code for the dominance code. Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Change-Id: I6418b402434bd850b45771c75b7631b7b84a8f66
ir_dataflow.cc
ir_graph.cc
ir_graph.h
sa_transformation.cc
|
89fde26f586883e04d295d6e30954cb5a0dc37bf |
30-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Add a last item in the MIROptimizationFlagPositions enumeration - Added a last item in the enumeration in order to be able to notice when an extended MIR opcode is beyond the last one known to libart, and hence must be an opcode added by code from a plugin. - Fixed the naming typo of the enumeration. Change-Id: I0e021ba54b0e60531338f23ca0ab64755e15229b Signed-Off-By: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ompiler_enums.h
|
1dbbbf6090274ebae6809fdb340c166bb34e09c2 |
02-May-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Add finalizer references from the entrypoints."
|
f6ba35df8609abf0e290a7cda37c63b5ee76ec3c |
02-May-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Move oat_data_flow_attributes_ to private and put an API"
|
cc794c3dc5b45601da23fb0d7bc16f9b4ef04065 |
02-May-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Move oat_data_flow_attributes_ to private and put an API The oat_data_flow_attributes had no checking mechanism to ensure bound correctness. This fix handles this and also offers two functions to retrieve the attributes: using the MIR and DecodedInstruction. Change-Id: Ib4f1f749efb923a803d364a4eea83a174527a644 Signed-Off-By: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ir_optimization_test.cc
ortable/mir_to_gbc.cc
uick/mir_to_lir.cc
uick/x86/utility_x86.cc
reg_analysis.cc
|
8194963098247be6bca9cc4a54dbfa65c73e8ccc |
02-May-2014 |
Vladimir Marko <vmarko@google.com> |
Replace CountOneBits and __builtin_popcount with POPCOUNT. Clean up utils.h, make some functions constexpr. Change-Id: I2399100280cbce81c3c4f5765f0680c1ddcb5883
uick/codegen_util.cc
|
42fcd9838a87abaf7a2ef86853a5287f86dbe391 |
22-Apr-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "64bit changes to the stack walker for the Quick ABI."" This reverts commit 8d5ead52a92675c258113d3dfa71bf8fceba5d9f. Change-Id: I6b4774a9bd180de33551975e106322ba1192e6ab
uick/mir_to_lir.cc
uick/ralloc_util.cc
|
8668c3cbdcf9471bd97e0da68a240051f2973074 |
25-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add finalizer references from the entrypoints. We now have an invariant where we never allocate finalizable objects with the Initialized or Resolved entrypoints. This speeds up allocation by only doing the check in the slow path. Before: MemAllocTest: 3625, 3707, 3641 EvaluateAndApplyChanges: 3448, 3421, 3413 After: MemAllocTest: 3164, 3109, 3135 EvaluateAndApplyChanges: 3272, 3299, 3353 Bug: 14078487 Change-Id: I2b0534af3e7c75ea5e5257cf3647744f7abfb74e
uick/gen_common.cc
|
ff093b31d75658c3404f9b51ee45760f346f06d9 |
01-May-2014 |
Ian Rogers <irogers@google.com> |
Fix a few 64-bit compilation of 32-bit code issues. Bug: 13423943 Change-Id: I939389413af0a68c0d95b23cd598b7c42afa4383
uick/codegen_util.cc
uick/gen_invoke.cc
|
3b004ba749beb0fa0f0601fb5cf1929cc46bc1f1 |
30-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Simplify GenConstString Now it's the same code for all platforms. Bug: 13506069 Change-Id: I42c08a9dc99a3079caad01602de84296c9357dd8
uick/gen_common.cc
|
6ffcfa04ebb2660e238742a6000f5ccebdd5df15 |
25-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Rewrite suspend test check with LIRSlowPath. Change-Id: I2dc17d079655586bfc588349c7a04afc2c6879af
uick/arm/call_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/int_x86.cc
|
becc37249b652ae9fecb6a23ced708cdacb7effd |
29-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "ART: Initialization of RegLocation and API for GrowableArray Iterator"
|
1ceea7eb080a309fc2811db604bceed9e638bc5e |
16-Apr-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: Initialization of RegLocation and API for GrowableArray Iterator Two things: - Added a default initialization for the RegLocation. - Added a default constructor and Reset for the GrowableArray's Iterator class. Change-Id: I74d9c584304c77add42e0d66e4037ac45b890142 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com> Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com> Signed-off-by: Yixin Shou <yixin.shou@intel.com> Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com> Signed-off-by: Udayan Banerji <udayan.banerji@intel.com>
reg_analysis.cc
|
7a11ab09f93f54b1c07c0bf38dd65ed322e86bc6 |
29-Apr-2014 |
buzbee <buzbee@google.com> |
Quick compiler: debugging assists A few minor assists to ease A/B debugging in the Quick compiler: 1. To save time, the assemblers for some targets only update the object code offsets on instructions involved with pc-relative fixups. We add code to fix up all offsets when doing a verbose codegen listing. 2. Temp registers are normally allocated in a round-robin fashion. When disabling liveness tracking, we now reset the round-robin pool to 0 on each instruction boundary. This makes it easier to spot real codegen differences. 3. Self-register copies were previously emitted, but marked as nops. Minor change to avoid generating them in the first place and reduce clutter. Change-Id: I7954bba3b9f16ee690d663be510eac7034c93723
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
fd698e67953e40e804d7c9d1a3e8460e9d67382a |
28-Apr-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix DCHECKS The recent change to introduce k32, k64 and kReference operand sizes missed updating a few DCHECKS. Change-Id: I66eb617b07766e781b38962dc862fc5b023c2fbd
uick/arm/utility_arm.cc
uick/mips/utility_mips.cc
|
e8256e7773a230337c3d137cbf0365f737820405 |
25-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Skip BBs without SSA representation in the Constant Propagation phase"
|
9c3b089519792245ab9f658865f44b8639b8d696 |
24-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "ART: Extracts an utility function of the duplicated code"" This reverts commit b5a14d2a6c18c1ea3c019c53b10af2e8f5dea234. Change-Id: Id09a4cc27ac22db940badf3a277848b38b173eae
uick/gen_common.cc
|
b5a14d2a6c18c1ea3c019c53b10af2e8f5dea234 |
24-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Revert "ART: Extracts an utility function of the duplicated code" This reverts commit 973cc95da6fb617bab133bd7a693c1cb7eafd393. Change-Id: I3883c74ba06116e89d89d9cf085f20cff5d15f77
uick/gen_common.cc
|
973cc95da6fb617bab133bd7a693c1cb7eafd393 |
18-Apr-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
ART: Extracts an utility function of the duplicated code This patch introduces an utility function 'DataOffsetOfType' in 'mirror::Array' class that calculates the data offset at given index in an array of given type. Change-Id: Idb19558653c70a129245f220f0fbb553f898865b Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
uick/gen_common.cc
|
125011d70aa84b3fd9052f1c90101401b0851928 |
24-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Merge "Delete throw launchpads."
|
0ea4bf7edb20be30f63566bce2d9db23f0b1c87f |
22-Apr-2014 |
buzbee <buzbee@google.com> |
Merge "Update load/store utilities for 64-bit backends"
|
695d13a82d6dd801aaa57a22a9d4b3f6db0d0fdb |
19-Apr-2014 |
buzbee <buzbee@google.com> |
Update load/store utilities for 64-bit backends This CL replaces the typical use of LoadWord/StoreWord utilities (which, in practice, were 32-bit load/store) in favor of a new set that make the size explicit. We now have: LoadWordDisp/StoreWordDisp: 32 or 64 depending on target. Load or store the natural word size. Expect this to be used infrequently - generally when we know we're dealing with a native pointer or flushed register not holding a Dalvik value (Dalvik values will flush to home location sizes based on Dalvik, rather than the target). Load32Disp/Store32Disp: Load or store 32 bits, regardless of target. Load64Disp/Store64Disp: Load or store 64 bits, regardless of target. LoadRefDisp: Load a 32-bit compressed reference, and expand it to the natural word size in the target register. StoreRefDisp: Compress a reference held in a register of the natural word size and store it as a 32-bit compressed reference. Change-Id: I50fcbc8684476abd9527777ee7c152c61ba41c6f
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
6123d94cddf34f3fdb8ece55476e414e34662394 |
22-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "GenArithOpInt should ensure that reg is in core"
|
3a74d15ccc9a902874473ac9632e568b19b91b1c |
22-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Delete throw launchpads. Bug: 13170824 Change-Id: I9d5834f5a66f5eb00f2ac80774e8c27dea99949e
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
4e0d5ee57ab5f76a761cf0d7ebb50b782e3eacdc |
22-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Merge "Revert "Revert "Use LIRSlowPath for throwing ArrayOutOfBoundsException."""
|
9d894662426e413454935e483d56a8cc33924174 |
21-Apr-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
Skip BBs without SSA representation in the Constant Propagation phase In some cases the constant propagation optimization may get the MIR graph where some of the BBs have no predecessors and do not transformed to the SSA form. If such BB has operations on constants this may lead to segfault. This patch adds the condition that will pass the only BBs with SSA. Change-Id: I816d46b2492c5bd4748f983c3725b4798f9ebd68 Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
ir_optimization.cc
|
42d65c52bbf4a354605389a759190e793787f692 |
19-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Add an option to specify a list of methods for LIR dumping. An example would be: --runtime-arg -verbose-methods:Array.checkRange32,Array.checkRange64 or "-verbose-methods:void Array.checkRange32,void Array.checkRange64" Change-Id: I61c1eb3b2eb4b24126a9264261c27889d53cc6bd
rontend.cc
|
80365d9bb947edef0eae0bfe62b9f7a239416e6b |
18-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Revert "Revert "Use LIRSlowPath for throwing ArrayOutOfBoundsException."" This adds back using LIRSlowPath for ArrayIndexOutOfBoundsException. And fix the host test crash. Change-Id: Idbb602f4bb2c5ce59233feb480a0ff1b216e4887
ompiler_enums.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
7fff544c38f0dec3a213236bb785c3ca13d21a0f |
18-Apr-2014 |
Brian Carlstrom <bdc@google.com> |
Revert "Use LIRSlowPath for throwing ArrayOutOfBoundsException." This reverts commit 9d46314a309aff327f9913789b5f61200c162609.
ompiler_enums.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
366f8ae038c4f6a3852deed1cff322ba54689808 |
15-Apr-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
GenArithOpInt should ensure that reg is in core GenArithOpInt in two-addr case of add-int where destination is in register should ensure that it is a core reg. Change-Id: I5b5ca126773a2bb45f9b23ad892102b034d694b4 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
d15f4e2ef3b1b4c01a490a00b0f6dc744741ce01 |
18-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Fix a use of OpCondBranch that breaks the MIPS build. Change-Id: I09e19cb00c1e3f4bc0b0293f58674c9160094f7f
uick/gen_common.cc
uick/mips/int_mips.cc
|
9d46314a309aff327f9913789b5f61200c162609 |
18-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Use LIRSlowPath for throwing ArrayOutOfBoundsException. Get rid of launchpads for throwing ArrayOutOfBoundsException and use LIRSlowPath instead. Bug: 13170824 Change-Id: I0e27f7a261a6a7fb5c0645e6113a957e098f699e
ompiler_enums.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
425640d6fac3432a44e236a002e8401a7cd59c5c |
17-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Merge "Use LIRSlowPath for throwing NPE."
|
79f2c53f3cb8649c19aeded82f7b8dcc96015808 |
17-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "String.IndexOf method handles negative start index value in incorrect way"
|
a1758d83e298c9ee31848bcae07c2a35f6efd618 |
16-Apr-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
String.IndexOf method handles negative start index value in incorrect way The standard implementation of String.IndexOf converts the negative value of the start index to 0 and searching will start from the beginning of the string. But current implementation may start searching from the incorrect memory offset, that can lead to sigsegv or return incorrect result. This patch adds the handler for cases when fromIndex is negative. Change-Id: I3ac86290712789559eaf5e46bef0006872395bfa Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/target_x86.cc
|
b4b06678125131367999135e634055509b77b9e8 |
16-Apr-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
Fix volatile wide put/get to be atomic on x86 arch Current implementation puts memory barriers for volatile fields. Volatile semantics needs atomicity, which are not guaranteed by memory barriers. The patch forces all wide volatile fields to be loaded/stored using xmm registers. Change-Id: Ie78e186d13ffa237e6e93747b71d26651fa02866 Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/gen_common.cc
|
e643a179cf5585ba6bafdd4fa51730d9f50c06f6 |
08-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Use LIRSlowPath for throwing NPE. Get rid of launchpads for throwing NPE and use LIRSlowPath instead. Also clean up some code of using LIRSlowPath for checking div by zero. Bug: 13170824 Change-Id: I0c20a49c39feff3eb1f147755e557d9bc0ff15bb
ompiler_enums.h
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
af13ad9fd18b6f75fe82e7995224c55654594f93 |
11-Apr-2014 |
Andreas Gampe <agampe@google.com> |
Centralize instruction-set pointer-size, alignment, 64b-width code in instruction_set.h/cc This allows to clean up some places that currently make explicit comparisons. Change-Id: I0dcc924c52fa53306f706aceea93a2d4a655c5df
rontend.cc
|
d6ed642458c8820e1beca72f3d7b5f0be4a4b64b |
10-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Revert "Use trampolines for calls to helpers""" This reverts commit f9487c039efb4112616d438593a2ab02792e0304. Change-Id: Id48a4aae4ecce73db468587967968a3f7618b700
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
f9487c039efb4112616d438593a2ab02792e0304 |
09-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Use trampolines for calls to helpers"" This reverts commit 081f73e888b3c246cf7635db37b7f1105cf1a2ff. Change-Id: Ibd777f8ce73cf8ed6c4cb81d50bf6437ac28cb61 Conflicts: compiler/dex/quick/mir_to_lir.h
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
1512ea155cbe0a4b33776b0320c1ce38583ab09b |
08-Apr-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler: fix CmpLong pair handling"
|
4289456fa265b833434c2a8eee9e7a16da31c524 |
07-Apr-2014 |
Mingyao Yang <mingyao@google.com> |
Use LIRSlowPath for throwing div by zero exception. Get rid of launchpads for throwing div by zero exception and use LIRSlowPath instead. Add a CallRuntimeHelper that takes no argument for the runtime function. Bug: 13170824 Change-Id: I7e0563e736c6f92bd63e3fbdfe3a777ad333e338
ompiler_enums.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
a1983d4dab10b0cc51e9d1b6bcafa9a723fabcd9 |
07-Apr-2014 |
buzbee <buzbee@google.com> |
Quick compiler: fix CmpLong pair handling OpCmpLong wasn't properly extracting the low register of a pair. Change-Id: I6d6cc3de1f543f4316e561648f371f793502fddb
uick/arm/int_arm.cc
|
4d3dc8a04da8a80251b381cdb482190363171dc1 |
07-Apr-2014 |
Dave Allison <dallison@google.com> |
Merge "Revert "Use trampolines for calls to helpers""
|
081f73e888b3c246cf7635db37b7f1105cf1a2ff |
07-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Use trampolines for calls to helpers" This reverts commit 754ddad084ccb610d0cf486f6131bdc69bae5bc6. Change-Id: Icd979adee1d8d781b40a5e75daf3719444cb72e8
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
50ca506e9191c2eafcf9564528712020f9531dc4 |
07-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Inlining synthetic accessors."
|
12c0273fd394d72ae93424784b1450daea417472 |
07-Apr-2014 |
Dave Allison <dallison@google.com> |
Merge "Use trampolines for calls to helpers"
|
c8f60a69a9f2420fc1ecafec612a667be8dcd547 |
02-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Inlining synthetic accessors. Bug: 11549140 Change-Id: I0d6a38c51887f55563414c240ac42ee64bdb5426
uick/dex_file_method_inliner.cc
|
e1fced1d1805caec04b6e97d2b01a4977c6785c6 |
04-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Inlining setters that return one of their arguments. Useful for builder classes and synthetic setters. The latter are not inlined yet since they are static methods, i.e. they don't use "this" as the object for IPUT. Change-Id: I3d34156c3629b837a0a95ccc34a8aae3f4a636d5
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.cc
|
73ed718e7b08d17fd2e4af9bceb5e74ac46db676 |
05-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Inlining setters that return one of their arguments." Bug: 13817614 This reverts commit 8e40c3e662d852da87b6bcfe79355f96ab9e91c7. Change-Id: Ia7ed2d933514781150b2e0b9855244e383c60187
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.cc
|
389e11db6ef350b806f7a3f0d7b7df23b0ab6e0c |
05-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Inlining synthetic accessors." This reverts commit 505ebb0e7b42e7facc8354515b06333ee8b84b10.
uick/dex_file_method_inliner.cc
|
53bee42d0f8b454ff4fe5b7e42bdb070c786e3eb |
05-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix using kArm instead of kThumb2. Change-Id: I0f3bf93b38d910bc57d017693675829b6a39bc18
rontend.cc
|
754ddad084ccb610d0cf486f6131bdc69bae5bc6 |
19-Feb-2014 |
Dave Allison <dallison@google.com> |
Use trampolines for calls to helpers This is an ARM specific optimization to the compiler that uses trampoline islands to make calls to runtime helper functions. The intention is to reduce the size of the generated code (by 2 bytes per call) without affecting performance. By default this is on when generating an OAT file. It is off when compiling to memory. To switch this off in dex2oat, use the command line option: --no-helper-trampolines Enhances disassembler to print the trampoline entry on the BL instruction like this: 0xb6a850c0: f7ffff9e bl -196 (0xb6a85000) ; pTestSuspend Bug: 12607709 Change-Id: I9202bdb7cf21252ad807bd48701f1f6ce8e3d0fe
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
45157a41b6c0ac9f73aeeb1f064c2270a6a68a60 |
05-Apr-2014 |
Ian Rogers <irogers@google.com> |
Merge "ARM: enable optimisation for easy multiply, add modulus pattern."
|
09379fd9f20e25ee71687e2c60f6a84c9ede8cd6 |
04-Apr-2014 |
Dave Allison <dallison@google.com> |
Merge "Disable use of R4 as a promotable register"
|
505ebb0e7b42e7facc8354515b06333ee8b84b10 |
02-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Inlining synthetic accessors. Bug: 11549140 Change-Id: Ie0034a6840b1beaa3df92f26bf9d315119c81e34
uick/dex_file_method_inliner.cc
|
8e40c3e662d852da87b6bcfe79355f96ab9e91c7 |
04-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Inlining setters that return one of their arguments. Useful for builder classes and synthetic setters. The latter are not inlined yet since they are static methods, i.e. they don't use "this" as the object for IPUT. Change-Id: I946cf570195be83ecec5fb32851bcaefad45f8a5
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.cc
|
764c798b57b7baa04885fcdf5eba5708a01b9edc |
04-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Fix LoadValueWide to not call MarkLive for high reg that is equal to low reg"
|
b3e527b2a9ee28ecaba2045f4415b00c8b395039 |
04-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up special method inlining. Mark inlined getter/setter INVOKEs as NOP to allow implicit null checks (SIGSEGV-based) rather than the explicit checks in GenInvoke(). Avoid inlining wide setter and returning wide argument if the wide source is not in consecutive dalvik registers in INVOKE. This is valid dalvik bytecode and we should treat it correctly even if we're currently unaware of any tools that would generate such INVOKEs. Remove bogus MIR_INLINED checks from LVN. Change-Id: I7e75a832fcf9bd0550e21b1c8b3813c6166197dd
ocal_value_numbering.cc
uick/dex_file_method_inliner.cc
|
7efad5d3a806a15166109837439f2e149031feef |
04-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Disassemble Thumb2 shifts and more VFP instructions."
|
8325296769a77ecf3ab647b5ab516f439f5b3206 |
04-Apr-2014 |
Dave Allison <dallison@google.com> |
Disable use of R4 as a promotable register When we are using implicit suspend checks we can potentially use r4 as a register into which variables can be promoted. However the runtime doesn't save this and thus will corrupt it. Not good. This disables the promotion of r4 until we can figure out how to make the runtime save it properly. Change-Id: Ib95ce93579e1c364de5ecc8e728f2cb7990da77a
uick/arm/target_arm.cc
|
cbd18b7f4da7677ca48c48c23ed9a7de3a8b0354 |
04-Apr-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
Fix LoadValueWide to not call MarkLive for high reg that is equal to low reg For x86 double FP registers, LoadValueWide should not call MarkLive for high reg that is equal to low reg. Change-Id: Ie6a59307c9ff93303bd489c15529432cfdeceaa4 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/gen_loadstore.cc
|
c777e0de83cdffdb2e240d439c5595a4836553e8 |
03-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Disassemble Thumb2 shifts and more VFP instructions. Disassemble Thumb2 instructions LSL, LSR, ASR, ROR and VFP instructions VABS, VADD, VSUB, VMOV, VMUL, VNMUL, VDIV. Clean up disassembly of VCMP, VCMPE, VNEG and VSQRT. These could have been erroneously used for other insns (VSQRT for VMOV was encountered) and one VSQRT branch was unreachable. Remove duplicate VMOV opcodes from compiler. Change-Id: I160a1e3e4b6eabb6a5101ce348ffd49c0573257d
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
|
3da67a558f1fd3d8a157d8044d521753f3f99ac8 |
03-Apr-2014 |
Dave Allison <dallison@google.com> |
Add OpEndIT() for marking the end of OpIT blocks In ARM we need to prevent code motion to the inside of an IT block. This was done using a GenBarrier() to mark the end, but it wasn't obvious that this is what was happening. This CL adds an explicit OpEndIT() that takes the LIR of the OpIT for future checks. Bug: 13751744 Change-Id: If41d2adea1f43f11ebb3b72906bd308252ce3d01
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
f9719f9abbea060e086fe1304d72be50cbc8808e |
02-Apr-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: enable optimisation for easy multiply, add modulus pattern. Fix the issue when src/dest registers overlap in easy multiply. Change-Id: Ie8cc098c29c74fd06c1b67359ef94f2c6b88a71e
uick/arm/int_arm.cc
uick/gen_common.cc
|
5a4139fd33547d09c94d9650157e3a4e4c9eede4 |
03-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "art: Handle x86_64 architecture equal to x86"
|
99f391e48f79421a4d949152aec6bafe1a7b5b82 |
03-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Fix Unsafe.getLong()/putLong() for x86, add test. Change-Id: Id6841ae50e1047543c04dcdae30254dd6ce82082
uick/gen_invoke.cc
|
6a58cb16d803c9a7b3a75ccac8be19dd9d4e520d |
02-Apr-2014 |
Dmitry Petrochenko <dmitry.petrochenko@intel.com> |
art: Handle x86_64 architecture equal to x86 This patch forces FE/ME to treat x86_64 as x86 exactly. The x86_64 logic will be revised later when assembly will be ready. Change-Id: I4a92477a6eeaa9a11fd710d35c602d8d6f88cbb6 Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
rontend.cc
ir_optimization.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mir_to_lir.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
8549cf9d83688f7decbbea2a8de761ce29e95f3c |
03-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Use temp register in Unsafe Get/Put intrisics for displaced offset."
|
7c95cefc168ba81b17a9ed2d987ac5bcf0b05781 |
03-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Use temp register in Unsafe Get/Put intrisics for displaced offset. Previously, the object register would get clobberd by the adding the offset for wide UnsafeGets and wide UnsafePuts. This resulted in heap corruption in AtomicLongFieldUpdater.compareAndSet and possibly other places. Bug: 13744490 Change-Id: Ic368d930b855c5c57e22060b32b73d0745328ef2
uick/gen_invoke.cc
|
4a200f56b7075309316b04d550c9cc50f8314edd |
01-Apr-2014 |
Jeff Hao <jeffhao@google.com> |
Add support for -Xverify:none mode. This mode skips all verification and compilation. Public bug: https://code.google.com/p/android/issues/detail?id=67664 Change-Id: Idd00ab8e9e46d129c02988b063c41a507e07bf5b
rontend.cc
ir_analysis.cc
|
f6b65c123dafad62004a93a43eb82de00ddc8214 |
02-Apr-2014 |
Dave Allison <dallison@google.com> |
Add r4 as promotable register if implicit suspend checks If we are doing implicit suspend checks we should be able to use r4 as a target for promotion. Also bump OAT version Change-Id: Ia27d14ece3b3259dbb74bcf89feaa9da2cda6db8
uick/arm/target_arm.cc
|
43a065ce1dda78e963868f9753a6e263721af927 |
02-Apr-2014 |
Dave Allison <dallison@google.com> |
Add GenBarrier() calls to terminate all IT blocks. This is needed to prevent things like load hoisting from putting instructions inside the IT block. Bug: 13749123 Change-Id: I98a010453b163ac20a90f626144f798fc06e65a9
uick/arm/int_arm.cc
uick/gen_common.cc
|
80fdef4018cde9bee8cdb0159ba660db1c4c4bf7 |
01-Apr-2014 |
buzbee <buzbee@google.com> |
Quick compiler: add comment to Arm encoding A question from an AOSP contributer demonstrated the need for explanation of a seemingly odd encoding for vldrd/vldrs. In short, we add a "def" bit for lr on those instructions to cover the cases in which we have to materialize a new base pointer at assembly time using lr as a temp register. Change-Id: I22c5740218a90e0ff387c6aac2bd20cc98eece85
uick/arm/assemble_arm.cc
|
d265a8ab12e1b783af42bf07a264edbb86826d2c |
01-Apr-2014 |
buzbee <buzbee@google.com> |
Merge "Quick compiler, MIPS resource cleanup"
|
7ea687d886be7b8c106b0e0190dab299d14adcad |
01-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Fix stack overflow slow path error."
|
88e0463fa7e8ea7b427b65a07cd7b28111575174 |
01-Apr-2014 |
Ian Rogers <irogers@google.com> |
Merge "Revert "Revert "Optimize easy multiply and easy div remainder."""
|
dd7624d2b9e599d57762d12031b10b89defc9807 |
15-Mar-2014 |
Ian Rogers <irogers@google.com> |
Allow mixing of thread offsets between 32 and 64bit architectures. Begin a more full implementation x86-64 REX prefixes. Doesn't implement 64bit thread offset support for the JNI compiler. Change-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
d0b86c7ec593a552f726a15e532bb48170fbf487 |
01-Apr-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Use ResetDef to prevent from removing necessary stores for x86 long-to-fp."
|
f943914730db8ad2ff03d49a2cacd31885d08fd7 |
27-Mar-2014 |
Dave Allison <dallison@google.com> |
Implement implicit stack overflow checks This also fixes some failing run tests due to missing null pointer markers. The implementation of the implicit stack overflow checks introduces the ability to have a gap in the stack that is skipped during stack walk backs. This gap is protected against read/write and is used to trigger a SIGSEGV at function entry if the stack will overflow. Change-Id: I0c3e214c8b87dc250cf886472c6d327b5d58653e
uick/arm/call_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
05a48b1f8e62564abb7c2fe674e3234d5861647f |
01-Apr-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix stack overflow slow path error. The frame size without spill was being passed into the slow path instead of the spill size. This was incorrect since only the spills will have been pushed at the point of the overflow check. Also addressed an other comment. Change-Id: Ic6e455122473a8f796b291d71f945bcf72788662
uick/arm/call_arm.cc
|
306f017dd883c0bf806d239d97e0bca3194afbd7 |
07-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Faster AssembleLIR for ARM. This also reduces sizeof(LIR) by 4 bytes (32-bit builds). Change-Id: I0cb81f9bf098dfc50050d5bc705c171af26464ce
ompiler_enums.h
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/mir_to_lir.h
|
6170f5576f46f64eec6cd6c125c3de001afa5bcf |
29-Mar-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
Use ResetDef to prevent from removing necessary stores for x86 long-to-fp. X86 long-to-fp needs the source operand in the memory. Later on, NullifyRange may remove the stores and then lead to incorrect long-to-fp conversions. To fix this bug, ResetDef is called after flushing source to the memory for x86 long-to-fp. Change-Id: I3510739294dc2e5ffb3d76d7651880fae63f2382 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/x86/fp_x86.cc
|
e2143c0a4af68c08e811885eb2f3ea5bfdb21ab6 |
28-Mar-2014 |
Ian Rogers <irogers@google.com> |
Revert "Revert "Optimize easy multiply and easy div remainder."" This reverts commit 3654a6f50a948ead89627f398aaf86a2c2db0088. Remove the part of the change that confused !is_div with being multiply rather than implying remainder. Change-Id: I202610069c69351259a320e8852543cbed4c3b3e
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
9da5c1013215176f2a4dbe7a804be899e12d5f68 |
28-Mar-2014 |
buzbee <buzbee@google.com> |
Quick compiler, MIPS resource cleanup MIPS architecture includes internal registers HI and LO. Similar to condition codes in other architectures, these internal resouces must be accounted for during instruction scheduling. Previously, the Quick backend for MIPS dealt with them by defining rHI and rLO pseudo registers - treating them as actual registers for def/use masks. This CL changes the handling of these resources to be in line with how condition codes are used elsewhere - leaving register definitions to be used for registers. Change-Id: Idcd77f3107b0c9b081ad05b1aab663fb9f41492d
ompiler_enums.h
uick/mips/assemble_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/x86/x86_lir.h
|
4aeec176eaf11fe03f342aadcbb79142230270ed |
28-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Refactor some GC code. Reduced amount of code in mark sweep / semi space by moving common logic to garbage_collector.cc. Cleaned up mod union tables and deleted an unused implementation. Change-Id: I4bcc6ba41afd96d230cfbaf4d6636f37c52e37ea
rontend.cc
|
217fe73a6c2f3ec44dc52c85c8a101313d048f04 |
27-Mar-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Annotate Dalvik VR access as both use and def if we use it in this way Some 2addr operations use direct access to VR in memory as both def and use but annotate its only as def. It results in later optimizations like reorder of LIRs can re-order this operation with other mov. Change-Id: I04ac40c9f229af6f1e5c5f91f4901b1452509582 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
3654a6f50a948ead89627f398aaf86a2c2db0088 |
28-Mar-2014 |
Brian Carlstrom <bdc@google.com> |
Revert "Optimize easy multiply and easy div remainder." This reverts commit 08df4b3da75366e5db37e696eaa7e855cba01deb.
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
3d325c6700509c37d85f21a94575d7605812e806 |
27-Mar-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
Fix CopyRegInfo to keep live/dirty flags of new registers. CopyRegInfo should not change live/dirty flags of new registgers. Otherwise, it will lead to incorrectly clobbering these live registers that are not live actually, and then allocating them to another usage. Change-Id: Ia9f055b33a11a6d70c0aca1a9fe8639ecfb09464 Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
uick/ralloc_util.cc
|
262b299abf658c16f61dad2240cfaf3deafe4423 |
27-Mar-2014 |
buzbee <buzbee@google.com> |
Fix x86 master build failure. Replace bogus DCHECKs with logic matching pre-cleanup code. Register pairs are considered temp, promoted, dirty or live if either register of the pair meets criteria. Change-Id: If2df891fdd1e3351d4cbe72aaf2a2ac5b34b2110
uick/mir_to_lir.h
uick/ralloc_util.cc
|
08df4b3da75366e5db37e696eaa7e855cba01deb |
25-Mar-2014 |
Zheng Xu <zheng.xu@arm.com> |
Optimize easy multiply and easy div remainder. Update OpRegRegShift and OpRegRegRegShift to use RegStorage parameters. Add special cases for *0 and *1. Add more easy multiply special cases for Arm. Reuse easy multiply in SmallLiteralDivRem() to support remainder cases. Change-Id: Icd76a993d3ac8d4988e9653c19eab4efca14fad0
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
2700f7e1edbcd2518f4978e4cd0e05a4149f91b6 |
07-Mar-2014 |
buzbee <buzbee@google.com> |
Continuing register cleanup Ready for review. Continue the process of using RegStorage rather than ints to hold register value in the top layers of codegen. Given the huge number of changes in this CL, I've attempted to minimize the number of actual logic changes. With this CL, the use of ints for registers has largely been eliminated except in the lowest utility levels. "Wide" utility routines have been updated to take a single RegStorage rather than a pair of ints representing low and high registers. Upcoming CLs will be smaller and more targeted. My expectations: o Allocate float double registers as a single double rather than a pair of float single registers. o Refactor to push code which assumes long and double Dalvik values are held in a pair of register to the target dependent layer. o Clean-up of the xxx_mir.h files to reduce the amount of #defines for registers. May also do a register renumbering to bring all of our targets' register naming more consistent. Possibly introduce a target-independent float/non-float test at the RegStorage level. Change-Id: I646de7392bdec94595dd2c6f76e0f1c4331096ff
ir_graph.h
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
|
99ad7230ccaace93bf323dea9790f35fe991a4a2 |
26-Feb-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Relaxed memory barriers for x86 X86 provides stronger memory guarantees and thus the memory barriers can be optimized. This patch ensures that all memory barriers for x86 are treated as scheduling barriers. And in cases where a barrier is needed (StoreLoad case), an mfence is used. Change-Id: I13d02bf3f152083ba9f358052aedb583b0d48640 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_enums.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/local_optimizations.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
d3a2dfad0e1231b354e4bf77b67a4e179fa0e837 |
18-Mar-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
Reuse promoted register temporarily AtomicLong (x86) is implemented as an intrinsic, which uses the cmpxchng8b instruction. This instruction requires 4 physical registers plus 2 more used for the memory operand. On x86 we have only 4 temporaries. The code tried to solve this by using MarkTemp utility, but this was not meant to be used with promoted registers. The problem is that MarkTemp does not spill anything and as a result we can lose VR. If the registers are promoted this patch just reuses the values pushed on the stack. Change-Id: Ifec9183e2483cf704d0d1166a1004a9aa07b4f1d Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/x86/int_x86.cc
|
ab5545f31aec6ed4b906bd1bb34a02778e7081e9 |
25-Mar-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
x86 GenLongRegOrMemOp should be aware about xmm to core reg conversion GenLongRegOrMemOp function expects arithmetic on core regs but does not ensure that operand in core reg. The patch adds the conversion if it is required. Change-Id: Ibb6928b8cc2c63ede1a20d6ee45d9a64884231b6 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
889d079baea1d9ee488b5915de9aec4e0d02e2a0 |
25-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "An argument is handled incorrectly for add-int/lit8 during optimization phase"
|
716426fe40f5de972084de0e5bd6395b2617ec12 |
25-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Small update to CFG printing using DOT"
|
ee40aa4650d7d000335ccfcb2fbb742acfb1f1c3 |
24-Mar-2014 |
nikolay serdjuk <nikolay.y.serdjuk@intel.com> |
An argument is handled incorrectly for add-int/lit8 during optimization phase Dalvik instruction 'add-int/lit8' stores a constant in the third parameter. But during optimization phase the compiler reads the constant from the second parameter. This is incorrect because it leads to wrong decision that no array bound checks are needed in our test case. As a consequence it fails with SIGSEGV because of accessing elements which are beyond the bounds. Change-Id: I653892514934046d31a9e4d206d9d95ebb6267ab Signed-off-by: nikolay serdjuk <nikolay.y.serdjuk@intel.com>
ocal_value_numbering.cc
|
5d47447e1d0cd18cf91a189f7a08e65c8d43ea5a |
21-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Move saved SSA map to ScopedArenaAllocator to save memory. Bug: 13564922 Change-Id: I917d451267ca6fceb2f6b2ff33b872ee8c209893
sa_transformation.cc
|
53b6afc93d91f9a48660682082dafcd81a652d6c |
21-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Free Arenas from the ArenaStack before running codegen. Since the ArenaStack is used only by the MIRGraph and not by the memory hungry codegen, freeing the ArenaStack's Arenas just before running the codegen should reduce the compiler's peak memory usage. Bug: 13564922 Change-Id: I1cb49d367e4e81d71a03cac89b3739ed61e4f966
rontend.cc
|
b982331680a9fa329302c68bfdcc9a4d9d403921 |
20-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Fix and clean up intrinsic Math.abs(long). On ARM, make sure we don't clobber a register that we still need for the next insn. On x86, don't free a source register for temps if it's overlapping a result register as that would allow the sign_reg temporary to alias with the result. Change-Id: I785f2f607900ae8ceb2fa0b8f3eefafdf6fab5c7
uick/gen_invoke.cc
|
25bc279080a56546b0f8a33342a853b2778eed0d |
19-Mar-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Small update to CFG printing using DOT -Ensures to print all non-null basic blocks in MIR graph. -Prints links from exceptions to catch targets. Change-Id: I98fe46cd1c39cf59c46e6bccf967612defaa4f3b Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
|
ec31d37f76b0d594ad1499b22b11bbeaad246c23 |
19-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up intrinsic Math.abs(float/double). Don't load 0x7fffffff into register. Change-Id: I0197f9f3ad33db1f6eb09a9b4113299c00f500e3
uick/gen_invoke.cc
|
63a4c96e71d6c3223842f4eebd69b269cc491897 |
20-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Fix GenArithOpInt to work with RA correctly"
|
ac05eb59b8998b31684b32cc69d2de767d5482cc |
20-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART: API changes"
|
66da1364425df90e6a03b032ee0a401375e45c39 |
14-Mar-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Fix GenArithOpInt to work with RA correctly In a case of mul-int/2addr bytecode when source operand is in memory implementation should first load value of destination and then evaluate location for destination. Otherwise load will be skipped because after evaluation of physical register for destination load will be ignored due to register allocator thinks that value is already in register. Change-Id: Iecee5a07d0fba16b421b8c49d42c5d8623794ad7 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
uick/x86/int_x86.cc
|
b95a5345ae4217b70ca36f0cced92f68dda7caf5 |
12-Mar-2014 |
Stuart Monteith <stuart.monteith@arm.com> |
AArch64: Add arm64 runtime support. Adds support for arm64 to ART. Assembler stubs are sufficient for down calls into interpreter. JNI compiler and generics are not finished. Basic Generic JNI functionality. Change-Id: I4a07c79d1e037b9f5746673480e32cf456867b82
rontend.cc
|
66e4c3e96dccdec7423d673ad6bbf7821a776651 |
19-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Optimize stack overflow handling."
|
40bbb39b85c063cd6a9f4ab00ff70372370e08cf |
19-Mar-2014 |
buzbee <buzbee@google.com> |
Fix Quick compiler "out of registers" There are a few places in the Arm backend that expect to be able to survive on a single temp register - in particular entry code generation and argument passing. However, in the case of a very large frame and floating point ld/st, the existing code could end up using 2 temps. In short, if there is a displacement overflow we try to use indexed load/store instructions (slightly more efficient). However, there are none for floating point - so we ended up burning yet another register to construct a direct pointer. This CL detects this case and doesn't try to use the indexed load/store mechanism for floats. Fix for https://code.google.com/p/android/issues/detail?id=67349 Change-Id: I1ea596ea660e4add89fd4fddb8cbf99a54fbd343
uick/arm/utility_arm.cc
|
0d507d1e0441e6bd6f3affca3a60774ea920f317 |
19-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Optimize stack overflow handling. We now subtract the frame size from the stack pointer for methods which have a frame smaller than a certain size. Also changed code to use slow paths instead of launchpads. Delete kStackOverflow launchpad since it is no longer needed. ARM optimizations: One less move per stack overflow check (without fault handler for stack overflows). Use ldr pc instead of ldr r12, b r12. Code size (boot.oat): Before: 58405348 After: 57803236 TODO: X86 doesn't have the case for large frames. This could case an incoming signal to go past the end of the stack (unlikely however). Change-Id: Ie3a5635cd6fb09de27960e1f8cee45bfae38fb33
ompiler_enums.h
uick/arm/call_arm.cc
uick/gen_common.cc
uick/mips/call_mips.cc
uick/x86/call_x86.cc
|
0d9c02e661813abdf18b4e7544e204d2da719d20 |
19-Mar-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Run Java tests with the optimizing compiler."
|
92cf83e001357329cbf41fa15a6e053fab6f4933 |
18-Mar-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Run Java tests with the optimizing compiler. Also fix a vector.reserve -> vector.resize braino, and build a GC map that dex2oat expects. Change-Id: I6acf2f90a4c32f90b79bf7709bf2e43931b98757
uick/codegen_util.cc
|
cdacac4a8196bdc620185079ec9e886329606f3d |
13-Mar-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
ART: API changes - Moved AppendMIR to BasicBlock - Moved PrependMIR to BasicBlock - Moved InsertMIRAfter to BasicBlock - Moved GetNextUnconditionalMir to BasicBlock Change-Id: Id261434e9f7d5d93f1bce0c87c9276a20077c483 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_graph.cc
ir_graph.h
ir_optimization_test.cc
uick/dex_file_method_inliner.cc
uick/mir_to_lir.cc
sa_transformation.cc
|
60d7a65f7fb60f502160a2e479e86014c7787553 |
14-Mar-2014 |
Brian Carlstrom <bdc@google.com> |
Fix stack overflow for mutual recursion. There was an error where we would have a pc that was in the method which generated the stack overflow. This didn't work however because the stack overflow check was before we stored the method in the stack. The result was that the stack overflow handler had a PC which wasnt necessarily in the method at the top of the stack. This is now fixed by always restoring the link register before branching to the throw entrypoint. Slight code size regression on ARM/Mips (unmeasured). Regression on ARM is 4 bytes of code per stack overflow check. Some of this regression is mitigated by having one less GC safepoint. Also adds test case for StackOverflowError issue (from bdc). Tests passing: ARM, X86, Mips Phone booting: ARM Bug: https://code.google.com/p/android/issues/detail?id=66411 Bug: 12967914 Change-Id: I96fe667799458b58d1f86671e051968f7be78d5d (cherry-picked from c0f96d03a1855fda7d94332331b94860404874dd)
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/mips_lir.h
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
9820b7c1dc70e75ad405b9e6e63578fa9fe94e94 |
02-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Early inlining of simple methods. Inlining "special" methods: empty methods, methods returning constants or their arguments, simple getters and setters. Bug: 8164439 Change-Id: I8c7fa9c14351fbb2470000b378a22974daaef236
b_optimizations.h
rontend.cc
rontend.h
ocal_value_numbering.cc
ir_dataflow.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ir_optimization.cc
ass_driver.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.cc
|
bfea9c29e809e04bde4a46591fea64c5a7b922fb |
17-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Class initialization check elimination. Also, move null check elimination temporaries to the ScopedArenaAllocator and reuse the same variables in the class initialization check elimination. Change-Id: Ic746f95427065506fa6016d4931e4cb8b34937af
b_optimizations.cc
b_optimizations.h
ompiler_enums.h
rontend.cc
rontend.h
ir_field_info.h
ir_graph.cc
ir_graph.h
ir_method_info.h
ir_optimization.cc
ir_optimization_test.cc
ass_driver.cc
uick/gen_common.cc
sa_transformation.cc
|
1d45438a031916f2d373c8759c19a6f14fe50255 |
15-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Remove duplicated register load in function call to quick entry."
|
d7f8e02041e9d16160bc81bd1fa19189bffc04b3 |
13-Mar-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: Do not allocate temp registers in MulLong if possible. Just use rl_result if we have enough registers and it is *not* either operand. Change-Id: I5a6f3ec09653b97e41bbc6dce823aa8534f98a13
uick/arm/int_arm.cc
|
9a84ad99aab002e8cfeec9381df971a00e28d05f |
13-Mar-2014 |
Zheng Xu <zheng.xu@arm.com> |
Remove duplicated register load in function call to quick entry. CallRuntimeHelperRegLocation() will load parameter to registers for native call, but GenConversionCall() duplicates the work before it call CallRuntimeHelperRegLocation(). Instructions generated before patch: 0xf731007e: f8d9e25c ldr.w lr, [r9, #604] ; pF2l 0xf7310082: ee180a10 vmov.f32 r0, s16 0xf7310086: ee180a10 vmov.f32 r0, s16 0xf731008a: 47f0 blx lr After: 0xf739707e: f8d9e25c ldr.w lr, [r9, #604] ; pF2l 0xf7397082: ee180a10 vmov.f32 r0, s16 0xf7397086: 47f0 blx lr Change-Id: I1868aefa4703a0f8133eaac707f5b80f01293cb8
uick/gen_common.cc
uick/gen_invoke.cc
|
e90501da0222717d75c126ebf89569db3976927e |
12-Mar-2014 |
Serguei Katkov <serguei.i.katkov@intel.com> |
Add dependency for operations with x86 FPU stack Load Hoisting optimization can re-order operations with FPU stack due to no dependency set. Patch adds resource dependency between these operations. Change-Id: Iccce98c8f3c565903667c03803884d9de1281ea8 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
ompiler_enums.h
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
b373e091eac39b1a79c11f2dcbd610af01e9e8a9 |
21-Feb-2014 |
Dave Allison <dallison@google.com> |
Implicit null/suspend checks (oat version bump) This adds the ability to use SEGV signals to throw NullPointerException exceptions from Java code rather than having the compiler generate explicit comparisons and branches. It does this by using sigaction to trap SIGSEGV and when triggered makes sure it's in compiled code and if so, sets the return address to the entry point to throw the exception. It also uses this signal mechanism to determine whether to check for thread suspension. Instead of the compiler generating calls to a function to check for threads being suspended, the compiler will now load indirect via an address in the TLS area. To trigger a suspend, the contents of this address are changed from something valid to 0. A SIGSEGV will occur and the handler will check for a valid instruction pattern before invoking the thread suspension check code. If a user program taps SIGSEGV it will prevent our signal handler working. This will cause a failure in the runtime. There are two signal handlers at present. You can control them individually using the flags -implicit-checks: on the runtime command line. This takes a string parameter, a comma separated set of strings. Each can be one of: none switch off null null pointer checks suspend suspend checks all all checks So to switch only suspend checks on, pass: -implicit-checks:suspend There is also -explicit-checks to provide the reverse once we change the default. For dalvikvm, pass --runtime-arg -implicit-checks:foo,bar The default is -implicit-checks:none There is also a property 'dalvik.vm.implicit_checks' whose value is the same string as the command option. The default is 'none'. For example to switch on null checks using the option: setprop dalvik.vm.implicit_checks null It only works for ARM right now. Bumps OAT version number due to change to Thread offsets. Bug: 13121132 Change-Id: If743849138162f3c7c44a523247e413785677370
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
9545a446e99b22248099fe66f5f9431530c20851 |
13-Mar-2014 |
Jeff Hao <jeffhao@google.com> |
Merge "Allow patching between dex files in the boot classpath."
|
3bc8615332b7848dec8c2297a40f7e4d176c0efb |
13-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Use LIRSlowPath for intrinsics, improve String.indexOf(). Rewrite intrinsic launchpads to use the LIRSlowPath. Improve String.indexOf for constant chars by avoiding the check for code points over 0xFFFF. Change-Id: I7fd5583214c5b4ab9c38ee36c5d6f003dd6345a8
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/target_x86.cc
|
9e6a1113381ef7958e36237dfe22752e88272b2b |
13-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "ART's intrinsic for String.indexOf use the incorrect register"
|
0cecf494999cc35e13ff2104145c1d9229bf8776 |
13-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Add dex2oat --print-pass-names and --disable-passes= options."
|
b9d50a9829b795932eac4cc50a99b4ce80b0ecb4 |
13-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Move inline method detection to runtime."
|
b34f69ab43aaf7a6e6045c95f398baf566ef5023 |
07-Mar-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Add command line support for enabling the optimizing compiler. Also run tests with the optimizing compiler enabled when the file art/USE_OPTIMIZING_COMPILER is present. Change-Id: Ibc33eed62a43547bc3b9fe786d014c0d81b5add8
ompiler_ir.h
rontend.cc
ir_optimization.cc
|
34fa0d935bed7a0e17bc6df4bd079e3428a179e7 |
12-Mar-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART's intrinsic for String.indexOf use the incorrect register ART's intrinsic for String.indexOf of x86 platform use the incorrect register to compare start with the string length. It should be fixed. Change-Id: I22986b4d4b23f62b4bb97baab9fe43152d12145e Signed-off-by: Vladimir Ivanov <vladimir.a.ivanov@intel.com> Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/x86/target_x86.cc
|
49161cef10a308aedada18e9aa742498d6e6c8c7 |
12-Mar-2014 |
Jeff Hao <jeffhao@google.com> |
Allow patching between dex files in the boot classpath. Change-Id: I53f219a5382d0fcd580e96e50025fdad4fc399df
uick/codegen_util.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
e3e0260c23d8999b9433715ac7ee5296ee2fd633 |
12-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Move inline method detection to runtime. The debugger needs this for selective deoptimization. Change-Id: I8100000449b56e619288fb05d41ea6f02b53b334
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mir_to_lir.cc
|
cd8ce66a83af05d5ecb59aa6a8aad89a29e0a844 |
11-Mar-2014 |
Chao-ying Fu <chao-ying.fu@intel.com> |
Add dex2oat --print-pass-names and --disable-passes= options. Add --print-pass-names to print a list of pass names. Add --disable-passes= to disable one ore more passes separated by comma. Ex: Using --disable-passes=UseCount,BBOptimizations can disable UseCount and BBOptimizations passes. Change-Id: I0dffaf10547afdcca78a20d8e0e6b358bfb2ee8c Signed-off-by: Chao-ying Fu <chao-ying.fu@intel.com>
ass_driver.cc
ass_driver.h
|
2f4c3a4e1b84963e9f4465fc476d1ec804321601 |
12-Mar-2014 |
buzbee <buzbee@google.com> |
Remove spurious duplicate line of code This CL removes a duplicate line of code which appears to have been intended for removal during a cleanup, but wasn't. It would not have affected correctness, rather it uselessly performed the same store twice. Bug originally reported by M Mendell. Change-Id: If4333a29f32b6bdb944b67aa560d856611041ff6
uick/gen_invoke.cc
|
3d73ba2ce682edfaf41f29521bd6039c6499a1c5 |
06-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Avoid Cache*LoweringInfo pass when there's no GET/PUT/INVOKE. Add new data flow flags indicating instance/static field access. Record merged flags of all insns and use them to skip the CacheFieldLoweringInfo pass if the method uses no fields and the CacheMethodLoweringInfo pass if it has no invokes. Change-Id: I36a36b438ca9b0f104a7baddc0497d736495cc3c
b_optimizations.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
|
0f6784737882199197796b67b99e5f1ded383bee |
11-Mar-2014 |
Ian Rogers <irogers@google.com> |
Unify 64bit int constant definitions. LL and ULL prefixes are word size dependent, use the INT64_C and UINT64_C macros instead. Change-Id: I5b70027651898814fc0b3e9e22a18a1047e76cb9
ir_graph.h
uick/arm/fp_arm.cc
uick/arm/utility_arm.cc
|
73a471336a9515fa7fdc5859e3c481ec451237a5 |
10-Mar-2014 |
Ian Rogers <irogers@google.com> |
Merge "Fix LIR generation for long arithmetic operation"
|
3c050399e482f6eaf0617fa82ee47adbc01b82cd |
10-Mar-2014 |
Ian Rogers <irogers@google.com> |
Merge "LongToFp result storage fixed"
|
3dfc5c168506b89e345c977355a4eabebfede72a |
10-Mar-2014 |
Ian Rogers <irogers@google.com> |
Merge "ARM: Inline codegen for long-to-float on ARM."
|
e19649a91702234f9aa9941d76da447a1e0dcc2a |
27-Feb-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: Remove duplicated instructions; add vcvt, vmla, vmls disassembler. Remove kThumb2VcvtID in the assembler which was duplicated. Add vcvt, vmla, vmls in the disassembler. Change-Id: I14cc39375c922c9917274d8dcfcb515e888fdf26
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/fp_arm.cc
|
f0e6c9c7b395f4fce4d00d31cabd362302e1d924 |
10-Mar-2014 |
Zheng Xu <zheng.xu@arm.com> |
ARM: Inline codegen for long-to-float on ARM. long-to-double-to-float using vfp instructions should be faster than the function provided by toolchain. Change-Id: I7ff809bca6665f0c1a0d7e6db98d570ce86b7c66
uick/arm/fp_arm.cc
|
f096aad9203d7c50b2f9cbe1c1215a50c265a059 |
23-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Cache method lowering info in mir graph. This should enable easy inlining checks. It should also improve compilation time of methods that call the same methods over and over - it is exactly such methods that tend to exceed our 100ms time limit. Change-Id: If01cd18e039071a74a1444570283c153429c9cd4
b_optimizations.h
ir_analysis.cc
ir_graph.cc
ir_graph.h
ir_method_info.cc
ir_method_info.h
ass_driver.cc
uick/gen_invoke.cc
|
a03de6dbabbe857deae5b0f1e388fbd3a2420dc2 |
09-Mar-2014 |
Ian Rogers <irogers@google.com> |
Revert "Revert "Make clang the default compiler on host."" This reverts commit d54f3a6219bca6ae018f4395fa0f1254bd4459be. Change-Id: Id96bb52a0d599f8848010d1589bdf0f70fc7124b
rontend.cc
erification_results.cc
erification_results.h
|
d54f3a6219bca6ae018f4395fa0f1254bd4459be |
08-Mar-2014 |
Ian Rogers <irogers@google.com> |
Revert "Make clang the default compiler on host." This reverts commit 87f8b4cf0c1d6aab3eb5d1e99cc4e7cf175ef772. Change-Id: I91a513042f0f9cf66288a296ad4a3b5da7830c7b
rontend.cc
erification_results.cc
erification_results.h
|
87f8b4cf0c1d6aab3eb5d1e99cc4e7cf175ef772 |
07-Mar-2014 |
Ian Rogers <irogers@google.com> |
Make clang the default compiler on host. Motivation, GCC's compiler warnings are inferior to clang's. -Wthread-safety is not supported by GCC starting with version 4.7. As this change only effects the host, performance issues are an impact on host building and testing alone. Fix clang gtest building on host with BUILD_HOST_64bit. Fix clang build regressions caused by unused fields. Fix x86-64 regression caused by requirement to fire-up quick compiler even in an interpret-only environment. Long-term this code doesn't belong in the quick compiler. Change-Id: Ifc2b10177f40d0724cbbf8dab9653ac03cdd1cee
rontend.cc
erification_results.cc
erification_results.h
|
39c3bfbd03d85c63cfbe69f17ce5800ccc7d6c13 |
29-Jan-2014 |
Dave Allison <dallison@google.com> |
Make use of profiling information for dex2oat If the profile file exists, the compiler driver will read it and store the data in an internal map. Then, when we want to work out whether to compile a method or not, the map is consulted and if the method shows up with a high enough percentage of use we compile it. The profile file itself is created by installd and is writeable by the app. The file is in /data/dalvik-cache/profiles and is named by the package name. This also modifies the profiler itself to: 1. Only count runnable threads (not suspended threads) in the profile 2. Use system properties to allow tuning of the profile parameters 3. Merge profiles from multiple processes using file locking. Bug: 12877748 Change-Id: Iab2f3a327a2860db2a80d5724277d6c626227f2b Conflicts: compiler/dex/frontend.cc compiler/dex/mir_analysis.cc compiler/dex/verification_results.cc compiler/driver/compiler_driver.cc dex2oat/dex2oat.cc runtime/class_linker.cc runtime/runtime.cc runtime/runtime.h
rontend.cc
ir_analysis.cc
ir_graph.h
erification_results.cc
|
aa00fe010eb7b61c2de82611ce3f6fc0918a4f9e |
07-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Add more VerifyObject calls."
|
c645f1ddb7c40bea6a38eda4b3f83f6b6dec405b |
07-Mar-2014 |
Mathieu Chartier <mathieuc@google.com> |
Add more VerifyObject calls. Added verify object calls to SirtRef, IndirectReferenceTable, ReferenceTable. Removed un-needed verify object in ScopedObjectAccess / DecodeJObject since object sources are handled. Bug: 12934910 Change-Id: I55a46a8ea61fed2a77526eda27fd2cce97a9b125
ir_field_info.cc
|
a24122dc3aaa74b0385bb0ce30959f8a19c4a300 |
07-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Use ScopedArenaAllocator for CacheFieldLoweringInfo pass. Change-Id: Idcc2edeb865e29b1bc42b108fc58a1f964295317
ir_analysis.cc
ir_field_info.h
|
a9d7be62735e3356cef7e8ed797c519134a17061 |
07-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Create a scoped arena allocator and use that for LVN."
|
91b6ffaf38b71ed2fbbbc3e3bd2a6b4112d55751 |
07-Mar-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
Fix LIR generation for long arithmetic operation X86Mir2Lir::GenLongArith generated wrong LIR if the first argument of the operation was promoted. It forgot to swap arguments if the first was not temp, but the second was temp Change-Id: I389f72f560ce9924859e17385bc8f64793c77b67 Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com> Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
uick/x86/int_x86.cc
|
719d1a33f6569864f529e5a3fff59e7bca97aad0 |
06-Mar-2014 |
Ian Rogers <irogers@google.com> |
Enable annotalysis on clang ART builds. Fix clang build errors aswell as restructure locking/mutex code for correct thread safety analysis support. Reorder make dependencies so that host builds build first as they should provide better compilation errors than target. Remove host's use of -fno-omit-frame-pointer as it has no value with correct use of CFI, which we should have. Change-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
erified_method.h
|
83cc7ae96d4176533dd0391a1591d321b0a87f4f |
12-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Create a scoped arena allocator and use that for LVN. This saves more than 0.5s of boot.oat compilation time on Nexus 5. TODO: Move other stuff to the scoped allocator. This CL alone increases the peak memory allocation. By reusing the memory for other parts of the compilation we should reduce this overhead. Change-Id: Ifbc00aab4f3afd0000da818dfe68b96713824a08
it_vector_block_iterator.h
ompiler_ir.h
rontend.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/arm/call_arm.cc
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/local_optimizations.cc
uick/mips/call_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/target_x86.cc
sa_transformation.cc
reg_analysis.cc
|
51a80d72dc436a4a89c636987b9cedabe774fdd6 |
06-Mar-2014 |
Maxim Kazantsev <maxim.kazantsev@intel.com> |
LongToFp result storage fixed When converting long values to floating-point, the resulting value was not stored properly. This was the reason of incorrect results of arithmetic operations where such conversions were used. Performance measurement in Quadrant Pro KPI benchmark was blocked by long-to-fp conversion errors. This patch ensures that result of long-to-fp conversion is stored properly. Change-Id: I94beffcf7f0146c0c6d5b8ae33b020c985843db0 Signed-off-by: Maxim Kazantsev <maxim.kazantsev@intel.com>
uick/x86/fp_x86.cc
|
a44d4f508fa1642294e79d3ebecd790afe75ea60 |
05-Mar-2014 |
buzbee <buzbee@google.com> |
Fix read of uninitialized memory in InlineIndexOf The are two flavors of IndexOf that we treat as an intrinsic: a zero-based verion with 2 args and a 3-arg version that also takes a start position. The same code is used for both, but Valgrind reminded us that we shouldn't try loading a RegLocation for the non-extent 3rd arg in the 2 argument version. We got lucky in that the bug was benign - the generated code would still be correct. Change-Id: I0bc7798c8034d35007ffe6d6d62f9ceb91fc44fd
uick/gen_invoke.cc
uick/x86/target_x86.cc
|
a1a7074eb8256d101f7b5d256cda26d7de6ce6ce |
03-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Rewrite kMirOpSelect for all IF_ccZ opcodes. Also improve special cases for ARM and add tests. Change-Id: I06f575b9c7b547dbc431dbfadf2b927151fe16b9
ir_graph.h
ir_optimization.cc
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
093aad184b4451639951a7e012d9b55cbf8c8a07 |
04-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Remove unreachable catch entries in GenSpecialCase()."
|
2da882315a61072664f7ce3c212307342e907207 |
27-Feb-2014 |
Andreas Gampe <agampe@google.com> |
Initial changes towards Generic JNI option Some initial changes that lead to an UNIMPLEMENTED. Works by not compiling for JNI right now and tracking native methods which have neither quick nor portable code. Uses new trampoline. Change-Id: I5448654044eb2717752fd7359f4ef8bd5c17be6e
ompiler_ir.h
rontend.cc
uick/codegen_util.cc
|
00e1ec6581b5b7b46ca4c314c2854e9caa647dd2 |
28-Feb-2014 |
Bill Buzbee <buzbee@android.com> |
Revert "Revert "Rework Quick compiler's register handling"" This reverts commit 86ec520fc8b696ed6f164d7b756009ecd6e4aace. Ready. Fixed the original type, plus some mechanical changes for rebasing. Still needs additional testing, but the problem with the original CL appears to have been a typo in the definition of the x86 double return template RegLocation. Change-Id: I828c721f91d9b2546ef008c6ea81f40756305891
ir_graph.h
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
reg_analysis.cc
|
f796ca0715d0cb6f5afe00b3df00e80f99e186f7 |
03-Mar-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Incorrect result of the "mul-long by 1" operation"
|
20daf93b38870290e13518ad4db0ccfcd7d9f018 |
03-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Fix 64-bit build DCHECK failure in mir_fieldinfo.cc . Change-Id: I6021862b42358d4d1bfb8059470da08117a34336
ir_field_info.cc
|
be0e546730e532ef0987cd4bde2c6f5a1b14dd2a |
26-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Cache field lowering info in mir_graph. Change-Id: I9f9d76e3ae6c31e88bdf3f59820d31a625da020f
b_optimizations.h
ex_to_dex_compiler.cc
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_analysis.cc
ir_field_info.cc
ir_field_info.h
ir_graph.cc
ir_graph.h
ass_driver.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
cc261bfd336eddac18b85d4eb47f6c905d495241 |
03-Mar-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Remove non-existent ARM insn kThumb2SubsRRI12."
|
ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4 |
11-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Tell GDB about Quick ART generated code This is actually a lot of work. To do this, we need: .debug_info .debug_abbrev .debug_frame .debug_str These are generated into the OAT file by OatWriter and ElfWriterQuick. Since the Quick ART runtime doesn't use dlopen to load the OAT files, GDB can't find this information. Use the alternate GDB JIT interface, which can be invoked at runtime. To use this interface, an ELF image needs to be built in memory. Read the information from the OAT file, fixup the addresses to point to the real locations, add a symbol table to hold the .text symbol, and then let GDB know about the information, which will be read from the runtime address space. This is quite primitive now, and could be cleaned up considerably. It probably needs symbol table entries for the methods, and descriptions of parameters and return types. Currently only supported for X86. This defaults to enabled for debug builds. Added dexoat --gen-gdb-info and --no-gen-gdb-info flags to override. Change-Id: I4d18b2370f6dfaa00c8cc1925f10717be3bd1a62 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/codegen_util.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
3d504075f7c1204d581923460754bf6d3714b13f |
01-Mar-2014 |
Ian Rogers <irogers@google.com> |
Make out arguments non-reference types. Also, tidy some portable related code. Change-Id: I67c8aa52eef8b556ca117ecda1b1e75465ba06a5
ompiler_ir.h
rontend.cc
|
b48b9eb6d181a1f52e2e605cf26a21505f1d46ed |
01-Mar-2014 |
Ian Rogers <irogers@google.com> |
Fix clang to compile and run host tests. Don't use the computed goto interpreter with clang 3.4 as it causes compilation to hang. Avoid inclusion of LLVM_(HOST|DEVICE)_BUILD_MK except for with portable as it sets clang incompatible cflags. Most fixes are self-evident, for the quick dex file method inliner the enums were being used with ostreams, so fix the enums and operator out python script to allow this. Note this change effects portable but this is untestable as portable was broken by ELF file and mc linker changes. Change-Id: Ia54348f6b1bd3f76d3b71c6e8c5f97626386b903
rontend.h
ass.h
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
uick/dex_file_method_inliner.h
|
dbb8c49d540edd2a39076093163c7218f03aa502 |
28-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Remove non-existent ARM insn kThumb2SubsRRI12. For kOpSub/kOpAdd, prefer modified immediate encodings because they set flags. Change-Id: I41dcd2d43ba1e62120c99eaf9106edc61c41e157
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
|
39d95e695e2ef1fbd420eba6ceaa40c688099c30 |
28-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Remove unreachable catch entries in GenSpecialCase(). Fix debug build CHECK failure when we generate special method implementation and drop unreachable catch handlers. Bug: 13164331 Change-Id: I00e9841a2db8acaf1e81e1d9702e155c5b7e72e2
uick/mir_to_lir.cc
|
b1f1d642093418612c0a27ce4203b421bb6eb767 |
27-Feb-2014 |
buzbee <buzbee@google.com> |
Workaround for range ops spanning vreg gap The Dalvik runtime model includes two stacks: an interpreted stack holding the Dalvik virtual registers, and a native stack used by the runtime system itself. The interpreted stack closely follows the Dalvik byte-code frame layout and invoke model, in which a callee's incoming argument are physically located in the out region of the caller's frame. Further, the non-argument vregs of a method are contiguous with its in argument region. The Art runtime model retains the notion of a callee's incoming arguments being physically located in the out region of a caller's frame. However, because Art uses a single-stack model, a method's incoming argument region is not contiguous with its non-argument virtual register storage. There is a gap between them that is used to store the native return PC of the caller, as well as the callee save register spill region. The Dalvik's bytecode instruction set includes several "range" format instructions (invoke-static-range, fill-array-data-range, etc.). These instructions define a contiguous range of virtual registers as arguments. Given the current Dalvik bytecode definition, there is no rule preventing an operand range from spanning the incoming argument and normal vregs. In Dalvik, this would not have been an issue. In Art, it adds complexity to correctly copy a range of arguments with a potential gap somewhere in the middle. We don't believe this is a common situation. This workaround CL ensures correct behavior by detecting the spanning case and falling back to the interpreter. If it turns out this is a more common case than expected, compiler support can be added. More likely, though, is that we will disallow spanning ranges in a future revision of the bytecode (going forward, existing range-spanning bytecode will continue to be supported). Fix for internal tracking bug 13216301 Fix for external bug https://code.google.com/p/android/issues/detail?id=66371 Change-Id: I9562aa5ab0aae8ebf333c8b72caac8a1be33ab3c
ir_analysis.cc
ir_graph.cc
ir_graph.h
|
b565506a63e75dac4a8bb9dd54dabf5259e5b95f |
27-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Move arena_bit_vector.h/cc to compiler/utils."
|
a1ce1fef2d49d1d537776a5308ace7102a815fe5 |
25-Feb-2014 |
Brian Carlstrom <bdc@google.com> |
Split up CommonTest into CommonRuntimeTest and CommonCompilerTest Change-Id: I8dcf6b29a5aecd445f1a3ddb06386cf81dbc9c70
uick/mir_to_lir.h
|
86ec520fc8b696ed6f164d7b756009ecd6e4aace |
26-Feb-2014 |
Bill Buzbee <buzbee@android.com> |
Revert "Rework Quick compiler's register handling" This reverts commit 2c1ed456dcdb027d097825dd98dbe48c71599b6c. Change-Id: If88d69ba88e0af0b407ff2240566d7e4545d8a99
ir_graph.h
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
reg_analysis.cc
|
0e33643519b68a343a7466dcaba12b8567777cc3 |
26-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Move arena_bit_vector.h/cc to compiler/utils. Also move MIR's BasicBlock related code from arena_bit_vector.h to bit_vector_block_iterator.cc. Change-Id: I85c224b387d31cf57a1ef1f1a36eaadf22f1c85d
rena_bit_vector.cc
rena_bit_vector.h
it_vector_block_iterator.cc
it_vector_block_iterator.h
ompiler_enums.h
ir_graph.h
sa_transformation.cc
|
2c1ed456dcdb027d097825dd98dbe48c71599b6c |
20-Feb-2014 |
buzbee <buzbee@google.com> |
Rework Quick compiler's register handling For historical reasons, the Quick backend found it convenient to consider all 64-bit Dalvik values held in registers to be contained in a pair of 32-bit registers. Though this worked well for ARM (with double-precision registers also treated as a pair of 32-bit single-precision registers) it doesn't play well with other targets. And, it is somewhat problematic for 64-bit architectures. This is the first of several CLs that will rework the way the Quick backend deals with physical registers. The goal is to eliminate the "64-bit value backed with 32-bit register pair" requirement from the target-indendent portions of the backend and support 64-bit registers throughout. The key RegLocation struct, which describes the location of Dalvik virtual register & register pairs, previously contained fields for high and low physical registers. The low_reg and high_reg fields are being replaced with a new type: RegStorage. There will be a single instance of RegStorage for each RegLocation. Note that RegStorage does not increase the space used. It is 16 bits wide, the same as the sum of the 8-bit low_reg and high_reg fields. At a target-independent level, it will describe whether the physical register storage associated with the Dalvik value is a single 32 bit, single 64 bit, pair of 32 bit or vector. The actual register number encoding is left to the target-dependent code layer. Because physical register handling is pervasive throughout the backend, this restructuring necessarily involves large CLs with lots of changes. I'm going to roll these out in stages, and attempt to segregate the CLs with largely mechanical changes from those which restructure or rework the logic. This CL is of the mechanical change variety - it replaces low_reg and high_reg from RegLocation and introduces RegStorage. It also includes a lot of new code (such as many calls to GetReg()) that should go away in upcoming CLs. The tentative plan for the subsequent CLs is: o Rework standard register utilities such as AllocReg() and FreeReg() to use RegStorage instead of ints. o Rework the target-independent GenXXX, OpXXX, LoadValue, StoreValue, etc. routines to take RegStorage rather than int register encodings. o Take advantage of the vector representation and eliminate the current vector field in RegLocation. o Replace the "wide" variants of codegen utilities that take low_reg/high_reg pairs with versions that use RegStorage. o Add 64-bit register target independent codegen utilities where possible, and where not virtualize with 32-bit general register and 64-bit general register variants in the target dependent layer. o Expand/rework the LIR def/use flags to allow for more registers (currently, we lose out on 16 MIPS floating point regs as well as ARM's D16..D31 for lack of space in the masks). o [Possibly] move the float/non-float determination of a register from the target-dependent encoding to RegStorage. In other words, replace IsFpReg(register_encoding_bits). At the end of the day, all code in the target independent layer should be using RegStorage, as should much of the target dependent layer. Ideally, we won't be using the physical register number encoding extracted from RegStorage (i.e. GetReg()) until the NewLIRx() layer. Change-Id: Idc5c741478f720bdd1d7123b94e4288be5ce52cb
ir_graph.h
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
eg_storage.h
reg_analysis.cc
|
c17ebe866beb50eb6da1e6a47555cb4731467f3b |
26-Feb-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
Incorrect result of the "mul-long by 1" operation ART handles "mul-long by 1" as a special case and try to alloc a new pair of regs through the EvalLocWide method and then put there the multiplicand through the StoreValueWide method. But in case when both multiplicand and multiplier are constants, it will not place correct values in a new reg pair and result of calculations will be incorrect. The new solution uses the only StoreValueWide method. Change-Id: I3d6947737c92c5a12f2840003b17a427e31d288f Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/gen_loadstore.cc
uick/x86/int_x86.cc
|
b55c898c6e3a1569a03cedbfc6dbf93d8d8ff3dd |
25-Feb-2014 |
Bill Buzbee <buzbee@android.com> |
Merge "Implements a BasicBlock iterator using the ArenaBitVector."
|
f7a82b422fa0428fb5678d91804610d56398b478 |
11-Feb-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
Implements a BasicBlock iterator using the ArenaBitVector. Added the implementation of a BasicBlock iterator using the ArenaBitVector. This patch only adds the implementation of the iterator and does not yet use it everywhere it could be. Added one example in ssa_transformation.cc of its use. Change-Id: Ia85d58320c80c48a43609265ea5318a416c71f18 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
rena_bit_vector.cc
rena_bit_vector.h
sa_transformation.cc
|
a028595f52b61e855d6dcf75f6bdf129d5568895 |
25-Feb-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Merge "Fix hardcoded offsets in x86 String.indexOf."
|
2e589aa58a1372909f95e731fd6b8895f6359c3a |
25-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Encode VmapTable entries offset by 2 to reduce size. We're using special values 0xffff and 0xfffe for an fp register marker and for method pointer, respectively. These values were being encoded as 3 bytes each and this changes their encoding to 1 byte. Bug: 9437697 Change-Id: Ic1720e898b131a5d3f6ca87d8e1ecdf76fb4160a
uick/codegen_util.cc
|
e19c91fdb88ff6fd4e88bc5984772dcfb1e86f80 |
25-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Fix hardcoded offsets in x86 String.indexOf. Use runtime code that will work for 32 and 64 bit too. The old code copied constants from the runtime .S file and is correct for 32 bit code only. Change-Id: I668e1d7f2db8186518c358bde0759633be0d7c40 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/target_x86.cc
|
67f8f404a242752651771ab34df18f8eab910cb3 |
25-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Fix typo from previous commit that lead to performance regression."
|
a36aeb30e806e0c899592bbaeee2b94bac4ab585 |
25-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix typo from previous commit that lead to performance regression. Change-Id: I851654ae28522dd0358137578593d030e7eb9256
ir_optimization.cc
|
6449c62e40ef3a9bb75f664f922555affb532ee4 |
11-Feb-2014 |
Brian Carlstrom <bdc@google.com> |
Create CompilerOptions Package up most compiler related options in CompilerOptions. Details include: - Includes compiler filter, method thresholds, SEA IR mode. - Excludes those needed during Runtime::Init such as CompilerCallbacks and VerificationResults. - Pass CompilerOptions to CompilerDriver. - Remove CompilerOptions from Runtime. - Add ability to pass options for app and image dex2oat to runtime via -Xcompiler-option and -Ximage-compiler-option respectively. Other - Replace 2x CompilerCallbacks implementations with one. - Factor out execv code for use by both image and oat generation. - More OatFile error_msg reporting. - DCHECK for SuspendAll found trying to run valgrind. Change-Id: Iecb57da907be0c856d00c3cd634b5042a229e620
rontend.cc
ir_analysis.cc
ir_graph.h
erification_results.cc
erification_results.h
|
9a509efcd68644616817f59ed7d442ed6f024ff9 |
21-Feb-2014 |
Brian Carlstrom <bdc@google.com> |
Merge "Convert some LOG(DEBUG) messages into more approriate levels"
|
9c86a0279aaf953377aa9e2277592e68bf814989 |
21-Feb-2014 |
Ian Rogers <irogers@google.com> |
Revert "Annotate used fields." This reverts commit 7f6cf56942c8469958b273ea968db253051c5b05. Change-Id: Ic389a194c3404ecb5bb563a405bf4a0d6336ea0d
b_optimizations.h
ocal_value_numbering.cc
ocal_value_numbering_test.cc
ir_analysis.cc
ir_annotations.cc
ir_annotations.h
ir_graph.cc
ir_graph.h
ass_driver.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
f59f18b2bd5432bb083205680c69fe64aaf60f39 |
17-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Fix and rewrite local value numbering. Fix memory versioning to take aliasing and method calls into account. Use more instructions for the null check elimination. Return the local value name of the register defined by the instruction if applicable. Change-Id: I4560bc680ae1ad553a7a00fa092c937e3da9fbbe
ocal_value_numbering.cc
ocal_value_numbering.h
ocal_value_numbering_test.cc
ir_annotations.h
ir_graph.h
|
4dc23380cd99967d65c4f3b3f540cb0c78e9f546 |
21-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Annotate used fields."
|
b3558e1bfe96398fc3d9bfddda2821b768a3f9a7 |
21-Feb-2014 |
Brian Carlstrom <bdc@google.com> |
Convert some LOG(DEBUG) messages into more approriate levels Change-Id: Iace4b1e38e5bb116af78f665dad2bb6cd25c8ec7
ass_driver.cc
|
4028a6c83a339036864999fdfd2855b012a9f1a7 |
20-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Inline x86 String.indexOf Take advantage of the presence of a constant search char or start index to tune the generated code. Change-Id: I0adcf184fb91b899a95aa4d8ef044a14deb51d88 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/x86_lir.h
|
7f6cf56942c8469958b273ea968db253051c5b05 |
29-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Annotate used fields. Annotate all fields used by a method early during the compilation, check acces rights and record field offset, volatility, etc. Use these annotations when generating code for IGET/IPUT/SGET/SPUT instructions. Change-Id: I4bbf5cca4fecf53c9bf9c93ac1793e2f40c16b5f
b_optimizations.h
ir_analysis.cc
ir_annotations.cc
ir_annotations.h
ir_graph.cc
ir_graph.h
ass_driver.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
f3e2cc4a38389aa75eb8ee3973a535254bf1c8d2 |
18-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Code cleanup to avoid LLVM dependency when building with quick only. Change-Id: I0985c227d775c72fd23975d4c9bf673ba32615c2
ompiler_ir.h
ir_graph.cc
uick/x86/target_x86.cc
|
818f2107e6d2d9e80faac8ae8c92faffa83cbd11 |
18-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Re-apply: Initial check-in of an optimizing compiler. The classes and the names are very much inspired by V8/Dart. It currently only supports the RETURN_VOID dex instruction, and there is a pretty printer to check if the building of the graph is correct. Change-Id: I28e125dfee86ae6ec9b3fec6aa1859523b92a893
rena_allocator.cc
rena_allocator.h
rena_allocator_test.cc
rena_bit_vector.h
ackend.h
ompiler_ir.h
rowable_array.h
ir_graph.h
uick/mir_to_lir.h
|
1af0c0b88a956813eb0ad282664cedc391e2938f |
19-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Initial check-in of an optimizing compiler." g++ warnings turned into errors. This reverts commit 68a5fefa90f03fdf5a238ac85c9439c6b03eae96. Change-Id: I09bb95d9cc13764ca8a266c41af04801a34b9fd0
rena_allocator.cc
rena_allocator.h
rena_allocator_test.cc
rena_bit_vector.h
ackend.h
ompiler_ir.h
rowable_array.h
ir_graph.h
uick/mir_to_lir.h
|
68a5fefa90f03fdf5a238ac85c9439c6b03eae96 |
18-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Initial check-in of an optimizing compiler. The classes and the names are very much inspired by V8/Dart. It currently only supports the RETURN_VOID dex instruction, and there is a pretty printer to check if the building of the graph is correct. Change-Id: Id5ef1b317ab997010d4e3888e456c26bef1ab9c0
rena_allocator.cc
rena_allocator.h
rena_allocator_test.cc
rena_bit_vector.h
ackend.h
ompiler_ir.h
rowable_array.h
ir_graph.h
uick/mir_to_lir.h
|
2befd09cf4fe89a18a655f3e1dd310831bfa769f |
18-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Expose inline method identification for debugger."
|
46861fccd9b5efb3226e2003310f01e748aec0a1 |
18-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "GenSpecialCase support for x86"
|
84c072c348006d87a370ad6e746e2d976cbe62f2 |
17-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Expose inline method identification for debugger. Also, record only those getter/setter functions which we really intend to inline in the short term (and which actually have a special implementation emitted). Change-Id: Icb8d71707a65cb6fabae5bc9118e5f3eaf7b63dd
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
df8d416733642347c92ae2b4175b8fd0af401f31 |
18-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Rewrite the compiler interface for CompilerDriver."
|
f5df8974173124faddb8e2b6a331959afdb94fdf |
14-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Rewrite the compiler interface for CompilerDriver. Change-Id: I15fa9afe7ffb7283ebda8d788a1e02793e3f75a6
ompiler_ir.h
rontend.cc
ir_optimization.cc
ortable/mir_to_gbc.cc
|
b52b2195c21ce53ef71e576d674dc549dd4b4949 |
18-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Optimize x86 long V*V by skipping imul"
|
89925e948c49616689eb4959aaf0e4ff1de18161 |
15-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Fixed result storage of instruction with long constant operand"
|
de99bba92b4beac4c347772177f47bdd61e8f376 |
14-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Optimize x86 long V*V by skipping imul The algorithm for long multiplication can take advantage of the fact that we are multiplying a value by itself by converting 1L*2H + 2L*1H into (2H*1L)+(2H*1L), thus converting a multiply into an addition. Change-Id: I259a25699a8787badd943318e99bafdd06587ec6 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/int_x86.cc
|
79aa423fce400db3f551a3874e69e7cc4fb4f68f |
13-Feb-2014 |
Alexei Zavjalov <alexei.zavjalov@intel.com> |
x86 compiler should handle the "div/rem by 1" case The current implementation of the (div/rem)/imm algorithm in ART's x86 compiler (X86Mir2Lir::GenDivRemLit) handles the only case when imm == -1, imm >= 2 and imm <= -2, but in the case when imm == 1, the result of calculation is incorrect. This patch adds handler of the "div/rem by 1" case. Change-Id: I4bcdcd9c17f5ccb6c60e7c359c00e04cd07f5bee Signed-off-by: Alexei Zavjalov <alexei.zavjalov@intel.com>
uick/x86/int_x86.cc
|
3bc01748ef1c3e43361bdf520947a9d656658bf8 |
06-Feb-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
GenSpecialCase support for x86 Moved GenSpecialCase from being ARM specific to common code to allow it to be used by x86 quick as well. Change-Id: I728733e8f4c4da99af6091ef77e5c76ae0fee850 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_graph.cc
ir_graph.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
653f2bf126ee55f0a8033d840040bb00d74ea593 |
13-Feb-2014 |
Maxim Kazantsev <maxim.kazantsev@intel.com> |
Fixed result storage of instruction with long constant operand When generating native code from .dex file, ART needs to store operation results correctly. There were incorrect results in computations with long constant arguments. The cause is inappropriate usage of registers storing result of such operation which is not yet spilled into memory and is still required for following instructions. There were mov-s into these registers. This patch ensures that the result of long operation with constant operand will be stored properly. Change-Id: Id65801eb76f0efb67515b73b8d01423205da1892 Signed-off-by: Maxim Kazantsev <maxim.kazantsev@intel.com>
uick/x86/int_x86.cc
|
ed8081ab1e7fd5dc1d3429fc116ee02e450bbc0f |
12-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Support to generate inline long to FP bytecodes for x86"
|
7655968112fa08844f3a810bd6203fdde4d5f58f |
12-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Generate ARM special methods from InlineMethod data."
|
614c2b4e219631e8c190fd9fd5d4d9cd343434e1 |
29-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Support to generate inline long to FP bytecodes for x86 long-to-float and long-to-double are now generated inline instead of calling a helper routine. The conversion is done by using x87. Change-Id: I196e526afec1be212898baceca8527549c3655b6 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/x86_lir.h
|
0177e53ea521ad58b70c305700dab32f1ac773b7 |
12-Feb-2014 |
Ian Rogers <irogers@google.com> |
Work in the direction of hard float quick ABIs. Pass a shorty to ArtMethod::Invoke so that register setup can use it. Document x86-64 ABI. Add extra debug output for one JNI native method registration fails, namely a dump of the Class and its dex file's location. Add hack to get testing of OatMethod's without GC maps working in 64bit. Change-Id: Ic06b68e18eac33637df2caf5e7e775ff95ae70f3
uick/x86/x86_lir.h
|
abaf927f29f6feceb3df3e6ced7d01970ba0dbe9 |
11-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Re-apply: Implement cumulative timings for CompilerDriver."
|
ea3fa0b4ba13d7bd7f7c1cd85202ccbe141a35ae |
10-Feb-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Re-apply: Implement cumulative timings for CompilerDriver. The bug was due to how the test infrastructure works: a compiler driver surives the stack where it is allocated. Change-Id: I345fe0e4afb2bd15937233db8afb350f09429558
rontend.cc
|
b1e61ad59958f70fe4db6e134b9c8dfc47733a30 |
11-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Tweak Mir2Lir::GenInstanceofCallingHelper for X86"
|
6607d97166984ce578817269f9775c15b9044190 |
10-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Tweak Mir2Lir::GenInstanceofCallingHelper for X86 Make this virtual, and split out the X86 logic. Take advantage of SETcc instruction for X86. I don't think I can do much more due to need to preserve arguments for the calls. Change-Id: I10e3eaa61b61ceac384267e3078bb6f75c37cee4 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_common.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
41ccc3b70dee0b43b3de6421c0643905720f40e3 |
11-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Added inlined abs method with float and double type"
|
35d7e414134bd9f3d39e018a756617b21d49c877 |
10-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Support Direct Method/Type access for X86"
|
6c92e7d619986ecb02a379068bd6623cd5852cea |
10-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Rewrite GenInlinedCharAt for x86"
|
55d0eac918321e0525f6e6491f36a80977e0d416 |
06-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Support Direct Method/Type access for X86 Thumb generates code to optimize calls to methods within core.oat. Implement this for X86 as well, but take advantage of mov with 32 bit immediate and call relative with 32 bit immediate. Fix some incorrect return locations for long inlines. Change-Id: I1907bdfc7574f3d0aa76c7fad13dc537acdf1ed3 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
502c2a84888b7da075049dcaaeb0156602304f65 |
06-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Generate ARM special methods from InlineMethod data. Change-Id: I204b01660a1e515879524018d1371e31f41da59b
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
|
c9bf407643329fee7eb2603fdace46eebf618cc6 |
10-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Fix special getter/setter generation. Change-Id: I381618bdcc46c51b50e94042f332db99c3a71a38
uick/arm/call_arm.cc
|
2bc47809febcf36369dd40877b8226318642b428 |
10-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Revert "Revert "Check FastInstance() early for special getters and setters."" This reverts commit 632e458dc267fadfb8120be3ab02701e09e64875. Change-Id: I5098c41ee84fbbb39397133a7ecfd367fecebe42
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
632e458dc267fadfb8120be3ab02701e09e64875 |
08-Feb-2014 |
Ian Rogers <irogers@google.com> |
Revert "Check FastInstance() early for special getters and setters." This reverts commit 5dc5727261e87ba8a418e2d0e970c75f67e4ab79. Change-Id: I3299c8ca5c3ce3f2de994bab61ea16a734f1de33
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
dbb17e378b538133750e56375bbdbb217db7b248 |
07-Feb-2014 |
Yixin Shou <yixin.shou@intel.com> |
Added inlined abs method with float and double type This patch added the implementation for inlining java.lang.Math.abs() method with float and double type. Change-Id: Ic99471b4ab4176e4a0153bef383bb49944fb636f Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
5dc5727261e87ba8a418e2d0e970c75f67e4ab79 |
05-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Check FastInstance() early for special getters and setters. Perform the FastInstance() check for getters and setters when they are detected by the inliner. This will help avoid the FastInstance() check for inlining. We also record the field offset and whether the field is volatile and whether the method is static for use when inlining or generating the special accessors. Change-Id: I3f832fc9ae263883b8a984be89a3b7793398b55a
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
ef7d42fca18c16fbaf103822ad16f23246e2905d |
06-Jan-2014 |
Ian Rogers <irogers@google.com> |
Object model changes to support 64bit. Modify mirror objects so that references between them use an ObjectReference value type rather than an Object* so that functionality to compress larger references can be captured in the ObjectRefererence implementation. ObjectReferences are 32bit and all other aspects of object layout remain as they are currently. Expand fields in objects holding pointers so they can hold 64bit pointers. Its expected the size of these will come down by improving where we hold compiler meta-data. Stub out x86_64 architecture specific runtime implementation. Modify OutputStream so that reads and writes are of unsigned quantities. Make the use of portable or quick code more explicit. Templatize AtomicInteger to support more than just int32_t as a type. Add missing, and fix issues relating to, missing annotalysis information on the mutator lock. Refactor and share implementations for array copy between System and uses elsewhere in the runtime. Fix numerous 64bit build issues. Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
rena_allocator.cc
uick/gen_invoke.cc
|
2b724cbb4cb096d3e061c3ab720954608016ee0c |
06-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Rewrite GenInlinedCharAt for x86 Take advantage of memory addressing modes and use constant index values directly for x86. Change-Id: I4476862f415908ebc38ba2bc59ec4d23785f6173 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_invoke.cc
|
2c498d1f28e62e81fbdb477ff93ca7454e7493d7 |
30-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Specializing x86 range argument copying The ARM implementation of range argument copying was specialized in some cases. For all other architectures, it would fall back to generating memcpy. This patch updates the x86 implementation so it does not call memcpy and instead generates loads and stores, favoring movement of 128-bit chunks. Change-Id: Ic891e5609a4b0e81a47c29cc5a9b301bd10a1933 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_enums.h
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
67c39c4aefca23cb136157b889c09ee200b3dec6 |
01-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Support Literal pools for x86 They are being used to store double constants, which are very expensive to generate into XMM registers. Uses the 'Compiler Temporary' support just added. The MIR instructions are scanned for a reference to a double constant, a packed switch or a FillArray. These all need the address of the start of the method, since 32 bit x86 doesn't have a PC-relative addressing mode. If needed, a compiler temporary is allocated, and the address of the base of the method is calculated, and stored. Later uses can just refer to the saved value. Trickiness comes when generating the load from the literal area, as the offset is unknown before final assembler. Assume a 32 bit displacement is needed, and fix this if it wasn't necessary. Use LoadValue to load the 'base of method' pointer. Fix an incorrect test in GetRegLocation. Change-Id: I53ffaa725dabc370e9820c4e0e78664ede3563e6 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_graph.h
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
6a5ed25e8e692b1a70bfe6385329a3d5f90959ca |
06-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Redo x86 int arithmetic"
|
bcec6fba95ee7974d3f7b81c3c02e7eb3ca3df00 |
17-Jan-2014 |
Dave Allison <dallison@google.com> |
Make slow paths easier to write This adds a class LIRSlowPath that allows for deferred compilation of slow paths. Using this object you can add code that will be invoked out of line using a forward branch. The intention is to move the slow paths out of the main flow and avoid branch-over constructs that will almost always trigger. The forward branch to the slow path code will be predicted false and this will be correct most of the time. The slow path code returns to the instruction after the original branch using an unconditional branch. This is used in the following opcodes: sput, sget, const-string, check-cast, const-class. Others will follow. Bug: 10864890 Change-Id: I17130c5dc20d369bc6bbf50b8cf04343263e888e
rowable_array.h
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
|
d69835d841cb7663faaa2f1996e73e8c0b3f6d76 |
03-Feb-2014 |
buzbee <buzbee@google.com> |
Art Compiler: fix compiler temps AOSP CL 78835 "Enable compiler temporaries" built on some earlier work to enable the compiler to add temps in the style of Dalvik's vRegs during MIR optimizations. However, it missed an existing fixed-size array whose size depended on the number of temps allocated. The allocation of this array must be delayed until after the number of compiler temps is known. The result was array overrun, and strange failures. Change-Id: I986a3b557e2323e00ba852584de03a02931b3c78
uick/codegen_util.cc
uick/ralloc_util.cc
|
feb2b4e2d1c6538777bb80b60f3a247537b6221d |
28-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Redo x86 int arithmetic Make Mir2Lir::GenArithOpInt virtual, and implement an x86 version of it to allow use of memory operands and knowledge of the fact that x86 has (mostly) two operand instructions. Remove x86 specific code from the generic version. Add StoreFinalValue (matches StoreFinalValueWide) to handle the non-wide cases. Add some x86 helper routines to simplify generation. Change-Id: I6c13689c6da981f2570ab5af7a97f9816108b7ae Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_common.cc
uick/gen_loadstore.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
316116b8f11998fa07e532366482ae9493c1a1c6 |
01-Feb-2014 |
Ian Rogers <irogers@google.com> |
Merge "Remove redundant compare for x86 OpDecAndBranch"
|
616ffafa3130d0ef9cdd18c7adbf4e688026a724 |
31-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Enable compiler temporaries"
|
da7a69b3fa7bb22d087567364b7eb5a75824efd8 |
09-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Enable compiler temporaries Compiler temporaries are a facility for having virtual register sized space for dealing with intermediate values during MIR transformations. They receive explicit space in managed frames so they can have a home location in case they need to be spilled. The facility also supports "special" temporaries which have specific semantic purpose and their location in frame must be tracked. The compiler temporaries are treated in the same way as virtual registers so that the MIR level transformations do not need to have special logic. However, generated code needs to know stack layout so that it can distinguish between home locations. MIRGraph has received an interface for dealing with compiler temporaries. This interface allows allocation of wide and non-wide virtual register temporaries. The information about how temporaries are kept on stack has been moved to stack.h. This is was necessary because stack layout is dependent on where the temporaries are placed. Change-Id: Iba5cf095b32feb00d3f648db112a00209c8e5f55 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
b_optimizations.cc
ompiler_ir.h
rontend.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/codegen_util.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
reg_analysis.cc
|
f0c3718cf42e2c45859f136e05bceb224871eae6 |
31-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Address another opportunity for reducing x86 sequence for GP pair to XMM"
|
39a548933c7d083647ccb1d508240198ffff5a5c |
31-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Improve GenConstString, GenS{get,put} for x86"
|
95e3eebaace21eb7d7169c8af8c5b04d65557a69 |
31-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "x86 updates GenInlinedUnsafePut/GenInstanceofFinal"
|
75ba13f244098f42584637b8fd3f6d74d2fc291a |
28-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Reduce PassDriver overhead, clean up Pass and PassDriver. Remove name lookup map and use vector for the pass list. Add traversal mode kNoNodes to skip BasicBlock traversal. Replace the warn_override parameter with a DCHECK. Move iterators from arena to the stack. Style cleanup. Change-Id: I4bf10e28caa65efb98ce82a4d7486d803ceca535
b_optimizations.cc
b_optimizations.h
ataflow_iterator-inl.h
ataflow_iterator.h
rowable_array.h
ass.h
ass_driver.cc
ass_driver.h
|
f7a0c5e644615fc9667eb578f1de5d05ce818435 |
28-Jan-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Merge "Embed array class pointers at array allocation sites."
|
f43adf68df93993e8dbf23d06da8d4fcf81e72b5 |
28-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Address another opportunity for reducing x86 sequence for GP pair to XMM Making use of punpckldq to interleave two 32-bit values in xmm registers in OpRegCopyWide. Change-Id: Ibe3b9de88d69a081f08b79fee834837d0157a4a3 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
uick/x86/int_x86.cc
|
df8ee2ea9908db3dde463fed68391b0040517653 |
28-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
x86 updates GenInlinedUnsafePut/GenInstanceofFinal Allow x86 to inline GenInlinedUnsafePut by freeing up a temporary register early. Make an x86 specific version of GenInstanceofFinal that uses compare to memory and a setCC instruction. Change-Id: I67788d7ae83776b0b9069fe4b379452190774992 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
2730db03beee4d6687ddfb5000c33c0370fbc6eb |
27-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Add VerfiedMethod to DexCompilationUnit. Avoid some mutex locking and map lookups. Change-Id: I8e0486af77e38dcd065569572a6b985eb57f4f63
ex_to_dex_compiler.cc
ir_graph.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.cc
erification_results.cc
erification_results.h
|
c7f832061fea59fd6abd125f26c8ca1faec695a5 |
24-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Refactor verification results. Rename VerificationMethodsData to VerificationResults. Create new class VerifiedMethod to hold all the data for a given method. Change-Id: Ife1ac67cede20f3a2f9c7f5345f08a851cf1ed20
uick/codegen_util.cc
erification_results.cc
erification_results.h
erified_method.cc
erified_method.h
erified_methods_data.cc
erified_methods_data.h
|
766e9295d2c34cd1846d81610c9045b5d5093ddd |
27-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Improve GenConstString, GenS{get,put} for x86 Rewrite GenConstString for x86 to skip calling ResolveString when the string is already resolved. Also try to avoid a register copy if the Method* is in a promoted register. Implement the TODO for GenS{get,put} to use compare to memory for x86 by adding a new codegen function to compare directly to memory. Implement a default implementation that uses a temporary register for RISC architectures. Change-Id: Ie163cca3d3d841aa10c50dc6592ec30af7a7cbc9 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/utility_x86.cc
|
bb8f0ab736b61db8f543e433859272e83f96ee9b |
28-Jan-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Embed array class pointers at array allocation sites. Following https://android-review.googlesource.com/#/c/79302, embed array class pointers at array allocation sites in the compiled code. Change-Id: I67a1292466dfbb7f48e746e5060e992dd93525c5
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
7ea5dafc81b2bba7cabad26130bb75dc8f709803 |
28-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Improve x86 long multiply and shifts"
|
6e65720d99bd3387b72d528a46291f1ed8184ede |
27-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Remove the link from dalvik instruction back to kMirOpCheck."
|
4376c87eb45b287fad77a16738e76ba28956ab7d |
23-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Remove the link from dalvik instruction back to kMirOpCheck. Free the MIR::meta for another use on PUT/GET instructions. Change-Id: Ic5a5cc5026e2076031d7b8ce7f2b36c185bfc93a
ocal_value_numbering.cc
ir_graph.cc
ir_graph.h
uick/mir_to_lir.cc
|
b429d1dc99b39eadd11f228e520e08b34ba3caf9 |
27-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Support GenSelect for x86"
|
e27b3bf2c1044bfbfbe874affd3758a73009c6c6 |
23-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Support GenSelect for x86 kMirOpSelect is an extended MIR that has been generated in order to remove trivial diamond shapes where the conditional is an if-eqz or if-nez and on each of the paths there is a move or const bytecode with same destination register. This patch enables x86 to generate code for this extended MIR. A) Handling the constant specialization of kMirOpSelect: 1) When the true case is zero and result_reg is not same as src_reg: xor result_reg, result_reg cmp $0, src_reg mov t1, $false_case cmovnz result_reg, t1 2) When the false case is zero and result_reg is not same as src_reg: xor result_reg, result_reg cmp $0, src_reg mov t1, $true_case cmovz result_reg, t1 3) All other cases (we do compare first to set eflags): cmp $0, src_reg mov result_reg, $true_case mov t1, $false_case cmovnz result_reg, t1 B) Handling the move specialization of kMirOpSelect: 1) When true case is already in place: cmp $0, src_reg cmovnz result_reg, false_reg 2) When false case is already in place: cmp $0, src_reg cmovz result_reg, true_reg 3) When neither cases are in place: cmp $0, src_reg mov result_reg, true_reg cmovnz result_reg, false_reg Change-Id: Ic7c50823208fe82019916476a0a77c6a271679fe Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ir_optimization.cc
uick/mir_to_lir.h
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
|
d3266bcc340d653e178e3ab9d74512c8db122eee |
24-Jan-2014 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Reduce x86 sequence for GP pair to XMM Added support for punpckldq which is useful for interleaving 32-bit values from two xmm registers. This new instruction is now used for transfers from GP pairs to XMM in order to reduce path length. Change-Id: I70d9b69449dfcfb9a94a628deb74a7cffe96bac7 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
uick/x86/assemble_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
787bbf8d181284afb564dd36fea8a6453337b888 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "64bit printf flag clean-up for MIR graph."
|
e4a8d914d4e6a2fc8015609a91cf2f6e5ea7d2ec |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Revert "Remove the link from dalvik instruction back to kMirOpCheck.""
|
c6dbf900f797aa7461d50dc4e6a996f067b97203 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Revert "Remove the link from dalvik instruction back to kMirOpCheck." This reverts commit 8a3e7e769de02b5b412163cf70da9b9fbaf3b848. Change-Id: I03a0d6180c350569b39cee2ea194903dbdfca963
ocal_value_numbering.cc
ir_graph.cc
ir_graph.h
uick/mir_to_lir.cc
|
4708dcd68eebf1173aef1097dad8ab13466059aa |
22-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Improve x86 long multiply and shifts Generate inline code for long shifts by constants and do long multiplication inline. Convert multiplication by a constant to a shift when we can. Fix some x86 assembler problems and add the new instructions that were needed (64 bit shifts). Change-Id: I6237a31c36159096e399d40d01eb6bfa22ac2772 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/x86_lir.h
|
23b03b5b5fdaa517eda3b8b358752672cf6046b1 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
64bit printf flag clean-up for MIR graph. Change-Id: Ib956e48ce4061e05a5d39cfacb0d58388f5c1a25
ir_graph.cc
|
a278ac31a1beeebd093ec64026d27a02fdc28807 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Improve x86 long divide"
|
57103556271b1cab119a1f0470f113c8b32cd375 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Fix X86Mir2Lir::LoadBaseIndexedDisp causing SEGV"
|
67122a03a4c66e01c4b64364a3701fe6ec3c5a18 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "64bit friendly printf modifiers in LIR dumping."
|
2bf31e67694da24a19fc1f328285cebb1a4b9964 |
23-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Improve x86 long divide Implement inline division for literal and variable divisors. Use the general case for dividing by a literal by using a double length multiply by the appropriate constant with fixups. This is the Hacker's Delight algorithm. Change-Id: I563c250f99d89fca5ff8bcbf13de74de13815cfe Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/x86_lir.h
|
ae427c3ba8d05599919c16f0c7c8983919cf7da3 |
24-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Fix X86Mir2Lir::LoadBaseIndexedDisp causing SEGV If you are loading an 'array' long/double value, the generated code could cause a SEGV, because the destination for the first load is the same as the index register. The case for the base register being the same as the destination was handled, but not the index register. With this change, Calculator properly runs on the emulator. Change-Id: Ib7e652938cdc9e127fb80ee2f541a4225a5e9ab7 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/utility_x86.cc
|
3f5b42f1d31c877abca2571a51dd0a5055a9b94c |
24-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Optimize x86 long arithmetic"
|
8a3e7e769de02b5b412163cf70da9b9fbaf3b848 |
23-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Remove the link from dalvik instruction back to kMirOpCheck. Free the MIR::meta for another use on PUT/GET instructions. Change-Id: I39ee5122227f449212cf6960e11b9561b8a6de7b
ocal_value_numbering.cc
ir_graph.cc
ir_graph.h
uick/mir_to_lir.cc
|
e1cf6d895d0093dd5d1c81f6083bb4db63325a8e |
24-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Merge "Move fused cmp branch ccode to MIR::meta."
|
107c31e598b649a8bb8d959d6a0377937e63e624 |
24-Jan-2014 |
Ian Rogers <irogers@google.com> |
64bit friendly printf modifiers in LIR dumping. Also correct header file inclusion ordering. Change-Id: I8fb99e80cf1487e8b2278d4c1d110d14ed18c086
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/mips/target_mips.cc
uick/x86/target_x86.cc
|
be1ca55db3362f5b100c4c65da5342fd299520bb |
15-Jan-2014 |
Hiroshi Yamauchi <yamauchi@google.com> |
Use direct class pointers at allocation sites in the compiled code. - Rather than looking up a class from its type ID (and checking if it's resolved/initialized, resolving/initializing if not), use direct class pointers, if possible (boot-code-to-boot-class pointers and app-code-to-boot-class pointers.) - This results in a 1-2% speedup in Ritz MemAllocTest on Nexus 4. - Embedding the object size (along with class pointers) caused a 1-2% slowdown in MemAllocTest and isn't implemented in this change. - TODO: do the same for array allocations. - TODO: when/if an application gets its own image, implement app-code-to-app-class pointers. - Fix a -XX:gc bug. cf. https://android-review.googlesource.com/79460/ - Add /tmp/android-data/dalvik-cache to the list of locations to remove oat files in clean-oat-host. cf. https://android-review.googlesource.com/79550 - Add back a dropped UNLIKELY in FindMethodFromCode(). cf. https://android-review.googlesource.com/74205 Bug: 9986565 Change-Id: I590b96bd21f7a7472f88e36752e675547559a5b1
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
|
e02d48fb24747f90fd893e1c3572bb3c500afced |
15-Jan-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Optimize x86 long arithmetic Be smarter about taking advantage of a constant operand for x86 long add/sub/and/or/xor. Using instructions with immediates and generating results directly into memory reduces the number of temporary registers and avoids hardcoded register usage. Also rewrite the existing non-const x86 arithmetic to avoid fixed register use, and use the fact that x86 instructions are two operand. Pass the opcode to the XXXLong() routines to easily detect two operand DEX opcodes. Add a new StoreFinalValueWide() routine, which is similar to StoreValueWide, but doesn't do an EvalLoc to allocate registers. The src operand must already be in registers, and it just updates the dest location, and calls the right live/dirty routines to get the src into the dest properly. Change-Id: Iefc16e7bc2236a73dc780d3d5137ae8343171f62 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_loadstore.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
|
a894607bca7eb623bc957363e4b36f44cfeea1b6 |
22-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Move fused cmp branch ccode to MIR::meta. This a small refactoring towards removing the large DecodedInstruction from the MIR class. Change-Id: I10f9ed5eaac42511d864c71d20a8ff6360292cec
ir_graph.h
ir_optimization.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
a0dac3e82231654be01be1e31a62dd40ea4a03a6 |
23-Jan-2014 |
Yixin Shou <yixin.shou@intel.com> |
Remove redundant compare for x86 OpDecAndBranch For x86 OpDecAndBranch, use the flag set by the subtract to remove the redundant compare when generating the branch to target. Change-Id: I11e52f6d46df74cfaeeadac524dace94e2c60703 Signed-off-by: Yixin Shou <yixin.shou@intel.com>
uick/x86/int_x86.cc
|
05bded260758869a5e0cf6ab55f082a586c1fb47 |
21-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Clean up frontend.h includes and forward declarations. Remove unused and add needed includes and forward declarations. Explicitly include "invoke_type.h" instead of relying on indirect inclusion via "dex_file.h". Change-Id: Ic7a2e0e9a1f29f10008ca42a1183e357d132fd88
rontend.h
|
650be76eb3c38ff905ec1d9675d73e5cb9a82dac |
20-Jan-2014 |
Brian Carlstrom <bdc@google.com> |
Revert "Implement cumulative timings for CompilerDriver." This reverts commit df013175d1aa04641e5c6175f8c786e547d31654.
rontend.cc
|
f3f139f1cd4a9231c2f7ed8e799aa8adeb77f4d4 |
17-Jan-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Merge "Implement cumulative timings for CompilerDriver."
|
775c47204e273c5e8f4323e42ed34f9579aa05dd |
16-Jan-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
Pass Framework Cleanup Fixed an end-of-program memory leak and added const as qualifiers for various parameters. The memory leak involves the pass array holder that would not be freed. The solution now uses a template getter that holds the unique instance. Change-Id: Ie8f5b0e5f4249f92851e8ba14e4238952edffee6
ass_driver.cc
ass_driver.h
|
df013175d1aa04641e5c6175f8c786e547d31654 |
13-Jan-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Implement cumulative timings for CompilerDriver. Change-Id: I3b04de7f2717273f356b8120f68d69e2379bab2f
rontend.cc
|
a3058e7761c8fbe185f329f473c6ef9e01d681d7 |
15-Jan-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix memory error when dumping timings. Use the pass name instead of a stack allocated std::string. Change-Id: Ic87cf9cb7cc3c7bd847cc69c9aa1203d07136062
ass_driver.cc
|
4e97c539408f47145526f0062c1c06df99146a73 |
07-Jan-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
Added pass framework The patch adds a Middle-End pass system and normalizes the current passes into the pass framework. Passes have: - A start, work, and end functions. - A gate to determine to apply the pass. - Can provide a CFG dump folder. mir_dataflow.cc, mir_graph.cc, mir_optimization.cc, ssa_transformation.cc: - Changed due to moving code into bb_optimizations.cc. - Moved certain functions from private to public due to needed from the passes. pass.cc, pass.h: - Pass base class pass_driver.cc, pass_driver.h: - The pass driver implementation. frontend.cc: - Replace the function calls to the passes with the pass driver. Change-Id: I88cd82efbf6499df9e6c7f135d7e294dd724a079 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
b_optimizations.cc
b_optimizations.h
ataflow_iterator.h
rontend.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ass.h
ass_driver.cc
ass_driver.h
sa_transformation.cc
|
d61ba4ba6fcde666adb5d5c81b1c32f0534fb2c8 |
13-Jan-2014 |
Bill Buzbee <buzbee@android.com> |
Revert "Revert "Better support for x86 XMM registers"" This reverts commit 8ff67e3338952c70ccf3b609559bf8cc0f379cfd. Fix applied to loc.fp usage. Change-Id: I1eb3005392544fcf30c595923ed25bcee2dc4859
ompiler_enums.h
ir_graph.h
uick/arm/arm_lir.h
uick/gen_common.cc
uick/gen_loadstore.cc
uick/mips/mips_lir.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
reg_analysis.cc
|
d0a515562772d7c637160e8779c4f253ee169c3a |
10-Jan-2014 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
Add suffix parameter to DumpCFG In a lot of cases it is practical to dump CFGs. However the current dumper has a unique naming convention. By adding an optional suffix, we can dump the same CompilationUnit before and after an optimization by using a different suffix. Also, by making it optional, the change is minimal. Change-Id: Ibd7f217ed59c093580cad9c177f9fc174a0afc11 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ir_graph.cc
ir_graph.h
|
0adc680c388913a63666797e907f87c4c6b0b4ea |
08-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Add conditional move support to x86 and allow GenMinMax to use it"
|
ef6a776af2b4b8607d5f91add0ed0e8497100e31 |
20-Dec-2013 |
Ian Rogers <irogers@google.com> |
Inline codegen for long-to-double on ARM. Change-Id: I4fc443c1b942a2231d680fc2c7a1530c86104584
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/fp_arm.cc
|
988e6ea9ac66edf1e205851df9bb53de3f3763f3 |
08-Jan-2014 |
Ian Rogers <irogers@google.com> |
Fix -O0 builds. Use snprintf rather than sprintf to avoid Werror failures. Work around an annotalysis bug when compiling -O0. Change-Id: Ie7e0a70dbceea5fa85f98262b91bcdbd74fdef1c
uick/arm/target_arm.cc
uick/dex_file_to_method_inliner_map.h
uick/mips/target_mips.cc
uick/x86/target_x86.cc
|
bd288c2c1206bc99fafebfb9120a83f13cf9723b |
21-Dec-2013 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Add conditional move support to x86 and allow GenMinMax to use it X86 supports conditional moves which is useful for reducing branchiness. This patch adds support to the x86 backend to generate conditional reg to reg operations. Both encoder and decoder support was added for cmov. The x86 version of GenMinMax used for generating inlined version Math.min/max has been updated to make use of the conditional move support. Change-Id: I92c5428e40aa8ff88bd3071619957ac3130efae7 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
ompiler_enums.h
uick/arm/codegen_arm.h
uick/arm/utility_arm.cc
uick/mips/codegen_mips.h
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
5ddb4104ac605d66693b55b79f26f8b8a5505e63 |
07-Jan-2014 |
Ian Rogers <irogers@google.com> |
Remove intialized static storage from dex cache. The initialized static storage array is used by compiled code to determine if for a sget/sput class initialization is necessary. The compiled code typically doesn't require this test as the class is pre-initialized or the class being accessed is the same as the current method. Change-Id: Icbc45e692b3d0ac61e559e69edb6c9b29439e571
uick/gen_common.cc
|
53ee14a160fba2c71b811c97268400c50eb08249 |
03-Jan-2014 |
Ian Rogers <irogers@google.com> |
Merge "Avoid inliner spam wrt String.length."
|
dce164adfbf679d7ec9c9dc778fa3fb596011740 |
03-Jan-2014 |
Ian Rogers <irogers@google.com> |
Avoid inliner spam wrt String.length. Also, remove a use of std::map for our preferred SafeMap and be more explicit with types. Change-Id: I7b9a4bb1f73c22490fe416503e050671e7c99fe0
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
5115473c81ec855a5646a5f755afb26aa7f2b1e9 |
02-Jan-2014 |
Vladimir Marko <vmarko@google.com> |
Fix oatdump "compilercallbacks" option for runtime. The "compilercallbacks" runtime option replaced "compiler" in I708ca13227c809e07917ff3879a89722017e83a9 . Fix a comment in codegen_util.cc . Change-Id: I2c5ebd56dd96f0ee8e62b602bfe45357565471ff
uick/codegen_util.cc
|
6e3cb66b3885c5b9ed31bf55e2d2f8594c4f840d |
21-Dec-2013 |
Jean Christophe Beyler <jean.christophe.beyler@intel.com> |
DataflowIterator normalization The patch normalizes the data flow iterators. The reasoning behind it is to allow passing the base class around without knowing what underlying iterator is used. This will thus allow called functions to call the specified Next function. This feature will be required for future patches. - Made DataflowIterator a base class with an abstract Next function - Updated each derived class to use the same Next function signature - Added comments and doxygen comments Change-Id: I3b9bce6326675575172f0ebd3681369d40d55661 Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
ataflow_iterator-inl.h
ataflow_iterator.h
|
090dd4489eeffb5f10051a5d9c1ed71b0a6bc4b9 |
20-Dec-2013 |
Razvan A Lupusoru <razvan.a.lupusoru@intel.com> |
Eliminate redundant x86 compare for GenDivZeroCheck For x86, the ALU operations on general purpose registers update the flags. Thus, when generating the zero check for divide/remainder operations, the compare is not needed. Change-Id: I07bfdf7d5491d3e3e9d98a932472d7f18d5b46d3 Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
uick/mir_to_lir.h
uick/x86/int_x86.cc
|
dac68ba16604085a8b7986c16956ad76caafe17e |
20-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix build: style issue."
|
459f4dfae3c8732fd4303a6e4df2e351d7d54f14 |
20-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Fix build: style issue. Change-Id: I3407b9073776b2b40638491d9316111fa793e4ab
ompiler_enums.h
|
47d79fd31295b29e4abeb6d3fc318e6a6dd1e97c |
20-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Clean up usage of carry flag condition codes."
|
58af1f9385742f70aca4fcb5e13aba53b8be2ef4 |
19-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Clean up usage of carry flag condition codes. On X86, kCondUlt and kCondUge are bound to CS and CC, respectively, while on ARM it's the other way around. The explicit binding in ConditionCode was wrong and misleading and could lead to subtle bugs. Therefore, we detach those constants and clean up usage. The CS and CC conditions are now effectively unused but we keep them around as they may eventually be useful. And some minor cleanup and comments. Change-Id: Ic5ed81d86b6c7f9392dd8fe9474b3ff718fee595
ompiler_enums.h
uick/arm/call_arm.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/int_mips.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
b122a4bbed34ab22b4c1541ee25e5cf22f12a926 |
20-Nov-2013 |
Ian Rogers <irogers@google.com> |
Tidy up memory barriers. Change-Id: I937ea93e6df1835ecfe2d4bb7d84c24fe7fc097b
uick/arm/int_arm.cc
|
e40687d053b89c495b6fbeb7a766b01c9c7e039c |
19-Dec-2013 |
Narayan Kamath <narayan@google.com> |
Merge "Fix SEGV when dumping MIR CFG"
|
412d4f833d8c6b43ef9725cda15bc97012d9ecdf |
18-Dec-2013 |
Mark Mendell <mark.p.mendell@intel.com> |
Improve x86 Fused long compare to literal Generate better x86 code for the fused long comparison/branch if one of the arguments is a literal. Use the algorithm from ARM, tweaked for x86. Change-Id: I872ba5dfaeeaaba6beff756d2eb6f9c6d018ce3e Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
e47ee2489a5947fc77351538d186302529b94798 |
18-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Enhance GenArrayGet, GenArrayPut for x86"
|
343adb52d3f031b6b5e005ff51f9cb04df219b21 |
18-Dec-2013 |
Mark Mendell <mark.p.mendell@intel.com> |
Enhance GenArrayGet, GenArrayPut for x86 As pointed out by Ian Rogers, the x86 versions didn't optimize handling of constant index expressions. Added that support, simplified checking of constant indices, and removed the use of a temporary register for the 'wide' cases by using x86 scaled addressing mode. Change-Id: I82174e4e3674752d00d7c4730496f59d69f5f173 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
1d6df5bc3b21ccd8173c8b26c8a41b3480d14d86 |
18-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Change safecast data from set to an ordered vector."
|
5dce0c9721af5f9024765c16958ad2f77389aa15 |
18-Dec-2013 |
Sebastien Hertz <shertz@google.com> |
Generate devirtualization map only for native compilation. Since devirtualization is only supported by the quick compiler, we do not need to generate devirtualization map for non-compiled method. Bug: 12171022 Change-Id: Ic7d6882396a05b70c4b8067bd14b7a339e0a93ab
erified_methods_data.cc
|
a9faa706acb5a2e571ebfbc7d20f95504b3d8cdc |
17-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Change safecast data from set to an ordered vector. This saves memory and improves performance. Bug: 12167380 Change-Id: Ica8d9291cdd515e8eab03814fb75a85d424eb629
erified_methods_data.cc
erified_methods_data.h
|
778127aed722b9702a382f1276c0f05447c654be |
18-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Fix build - style issues. Change-Id: I40540dac2a51ef326e642116b5c64fb581c849f2
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
|
5bb149e1e33e89216af87a4c3809e02413277772 |
17-Dec-2013 |
Mark Mendell <mark.p.mendell@intel.com> |
Fix SEGV when dumping MIR CFG I turned on kDebugDumpCFG to try to dump the CFGs, and I found that they caused a segmentation violation. The problem was that the orig_sreg was -1, and IsConst then blew up. Change-Id: Ib9acda0b11ce486e878ef2ccfae3b1bc1f82fdfb Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
ir_graph.h
|
5816ed48bc339c983b40dc493e96b97821ce7966 |
27-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Detect special methods at the end of verification. This moves special method handling to method inliner and prepares for eventual inlining of these methods. Change-Id: I51c51b940fb7bc714e33135cd61be69467861352
ompiler_enums.h
rontend.cc
rontend.h
ir_analysis.cc
ir_graph.cc
ir_graph.h
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
2b5eaa2b49f7489bafdadc4b4463ae27e4261817 |
13-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Move compiler code out of method verifier. We want to detect small methods for inlining at the end of the method verification. Instead of adding more compiler code to the runtime, we create a callback from the runtime into the compiler, so that we can keep the code there. Additionally, we move the compiler-related code that was already in the method verifier to the compiler since it doesn't really belong to the runtime in the first place. Change-Id: I708ca13227c809e07917ff3879a89722017e83a9
uick/codegen_util.cc
erified_methods_data.cc
erified_methods_data.h
|
0bf1f266869776c2dd21b3242599d74ac80855f0 |
17-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix 64-bit CAS for x86."
|
07dc96d370c4844c7a279c01cedf24a272b9f4f3 |
16-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Per-DexFile locking for inliner initialization."
|
12f96283471dea664d26c185b2185445cdc49a46 |
16-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Fix minor style issues Follow-up to I082aa20041c933ae5fc78f12ddf491d1c775c683. Change-Id: Ia334b192bdba231b0b9a2b2f2d7d18fcff2ca836
uick/x86/assemble_x86.cc
uick/x86/x86_lir.h
|
bff1ef0746048978b877c0664f758d2d6006f27d |
13-Dec-2013 |
Mark Mendell <mark.p.mendell@intel.com> |
Implement GenInlinedSqrt for x86 Implemented this using the hardware instruction, which handles NaN properly. Tested manually using host mode. Change-Id: I082aa20041c933ae5fc78f12ddf491d1c775c683 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
uick/x86/assemble_x86.cc
uick/x86/fp_x86.cc
uick/x86/x86_lir.h
|
e13717e796d338b08ea66f6a7e3470ca44de707f |
20-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Per-DexFile locking for inliner initialization. And clean up lock and compiler driver naming. Change-Id: I1562c7f55c4b0174a36007ba6199360da06169ff
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/dex_file_to_method_inliner_map.cc
uick/dex_file_to_method_inliner_map.h
uick/gen_invoke.cc
uick/mir_to_lir.h
|
a6fd8ba27bc84dfb942a8fa4ea987bcb39f0f3f1 |
13-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Fix 64-bit CAS for x86. Bug: 12117970 Change-Id: I9fbba2291124a2594161782c89dc62201cf01c08
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
|
8ff6e5967f93ec1188e34834c1f1240b516e32dc |
12-Dec-2013 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Don't rely on gcc extensions"
|
460536209b741bc469f1b0857775449abb2102fb |
12-Dec-2013 |
Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org> |
Don't rely on gcc extensions Make the code more compatible with different compilers. clang doesn't allow extra static qualifiers on template specializations, const qualifiers on function types, or inline attributes on lambda functions, and is more picky about casting away constness with reinterpret_cast. These modifications are compatible with both gcc and clang. Change-Id: I739b10df2780bec537827a13679fd2bcc2cc7188 Signed-off-by: Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org>
ortable/mir_to_gbc.cc
|
ff8d298c9a937822492e85b264bc0c4a3b3642a9 |
12-Dec-2013 |
Sebastien Hertz <shertz@google.com> |
Merge "Remove unused method in DEX-to-DEX."
|
45c1165558eb8f9c81843b63ed362079a60c8387 |
11-Dec-2013 |
Mark Mendell <mark.p.mendell@intel.com> |
Define missing static constexpr variables This will prevent link errors when undefined symbols when compiling at -O0. Normally, this isn't a problem, but causes failure when compiling at -O0 to maximize debugability Change-Id: Iafe187b6b9344fead1bbc73004e376fad821756b Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
rena_allocator.cc
uick/dex_file_method_inliner.cc
|
1ebe2173d9c6144da16fd6c8790d14bcc9b38fa0 |
11-Dec-2013 |
Sebastien Hertz <shertz@google.com> |
Remove unused method in DEX-to-DEX. Change-Id: Ice5f91b45a0ad85576475a613193f143fd76ad9f
ex_to_dex_compiler.cc
|
cdcfdfcb704416882beec98f5a790a65c9b798ae |
11-Dec-2013 |
buzbee <buzbee@google.com> |
Art: fix basic block optimization pass A bracket mismatch in Change 70885 inadvertently prevented the basic block optimization pass from running in most cases. Fixed here. Change-Id: I33f2687904cc05c90f74fb3bdc8f312d009cc0ac
ir_optimization.cc
|
8d4122f24d1d964e91444300045936b42986e00e |
10-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Get rid of platform-specific method inliners."
|
b8a0c235fdfefc79477d963bb1f2fe5728f9f1c2 |
10-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Unsafe.compareAndSwapLong() intrinsic for x86."
|
dce88522902a7f9771af87b364bbd07e656e0d1c |
10-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Add support for emitting x86 kArray instructions."
|
867a2b35e67ddcbec089964e8f3cd9a827186e48 |
10-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Get rid of platform-specific method inliners. The DexFileToMethodInlinerMap dependency on CompilerDriver and its instruction set makes it impossible to implement verification-time checking for methods we want to inline. Therefore, we get rid of the platform-specific method inliners and rely on the backend's existing ability to recognize when it can actually emit an intrinsic function. Change-Id: I57947db93f13a26c1c794cb3584130321106306f
rontend.cc
rontend.h
uick/arm/arm_dex_file_method_inliner.cc
uick/arm/arm_dex_file_method_inliner.h
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/dex_file_to_method_inliner_map.cc
uick/dex_file_to_method_inliner_map.h
uick/mips/mips_dex_file_method_inliner.cc
uick/mips/mips_dex_file_method_inliner.h
uick/x86/x86_dex_file_method_inliner.cc
uick/x86/x86_dex_file_method_inliner.h
|
8171fc34bf74ed0df02385787d916bc13eb7f160 |
26-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Don't prefix GC map by length. Bug: 11767815 Change-Id: I063917aefdf7674ee1a77736db059c9ee95ea075
uick/codegen_util.cc
|
400455c23d6a9a849d090b9e60ff53c4422e461b |
09-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Rename ClobberCalleeSave to *Caller*, fix it for x86."
|
31c2aac7137b69d5622eea09597500731fbee2ef |
09-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Rename ClobberCalleeSave to *Caller*, fix it for x86. Change-Id: I6a72703a11985e2753fa9b4520c375a164301433
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/target_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
73e08b37512a2d38cdbaf9a3869dbd7554e6e1b1 |
21-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix Mir2Lir::AllocFreeTemp() to return -1 on failure. Change-Id: I190de54de347fe3f4c9bcd07b2117ad91ea5c9a3
uick/mips/utility_mips.cc
uick/ralloc_util.cc
|
06606b9c4a1c00154ed15f719ad8ea994e54ee8e |
02-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Performance improvement for mapping table creation. Avoid the raw mapping tables altogether. Change-Id: I6d1c786325d369e899a75f15701edbafdd14363f
uick/codegen_util.cc
uick/mir_to_lir.h
|
70b797d998f2a28e39f7d6ffc8a07c9cbc47da14 |
03-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Unsafe.compareAndSwapLong() intrinsic for x86. Change-Id: Idbc5371a62dfdd84485a657d4548990519200205
ompiler_enums.h
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/x86_dex_file_method_inliner.cc
uick/x86/x86_lir.h
|
057c74a3a2d50d1247d4e6472763ca6f59060762 |
03-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Add support for emitting x86 kArray instructions. And factor out a lot of common code. Change-Id: Ib1f135e341404f8a6f92fcef0047ec04577d32cd
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
|
7ceee468756c8ba05fd8b6e82e98856a6d74bf51 |
02-Dec-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Unsafe.compareAndSwapInt()/Object() intrinsics for x86."
|
c29bb614c60e0eb9a2bacf90f6dfce796344021e |
27-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Unsafe.compareAndSwapInt()/Object() intrinsics for x86. Bug: 11391018 Change-Id: I0a97375103917b0e9e20f199304c17a7f849c361
uick/x86/assemble_x86.cc
uick/x86/int_x86.cc
uick/x86/x86_dex_file_method_inliner.cc
uick/x86/x86_lir.h
|
1e6cb63d77090ddc6aa19c755d7066f66e9ff87e |
28-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Delta-encoding of mapping tables. Both PC offsets and dalvik offsets are delta-encoded. Since PC offsets are increasing, the deltas are then compressed as unsigned LEB128. Dalvik offsets are not monotonic, so their deltas are compressed as signed LEB128. This reduces the size of the mapping tables by about 30% on average, 25% from the PC offset and 5% from the dalvik offset delta encoding. Bug: 9437697 Change-Id: I600ab9c22dec178088d4947a811cca3bc8bd4cf4
uick/codegen_util.cc
uick/mir_to_lir.h
|
f246af27f8c0736640eb7ae78225ef6c0c0a9f0e |
27-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix intrinsic Long.reverseBytes(). Allocate temporary only if needed and initialize it from the correct register. Change-Id: Ifdc0e8b586e1ef90fb817687eb86e05fba1dadbe
uick/gen_invoke.cc
|
1da1e2fceb0030b4b76b43510b1710a9613e0c2e |
15-Nov-2013 |
buzbee <buzbee@google.com> |
More compile-time tuning Another round of compile-time tuning, this time yeilding in the vicinity of 3% total reduction in compile time (which means about double that for the Quick Compile portion). Primary improvements are skipping the basic block combine optimization pass when using Quick (because we already have big blocks), combining the null check elimination and type inference passes, and limiting expensive local value number analysis to only those blocks which might benefit from it. Following this CL, the actual compile phase consumes roughly 60% of the total dex2oat time on the host, and 55% on the target (Note, I'm subtracting out the Deduping time here, which the timing logger normally counts against the compiler). A sample breakdown of the compilation time follows (this taken on PlusOne.apk w/ a Nexus 4): 39.00% -> MIR2LIR: 1374.90 (Note: includes local optimization & scheduling) 10.25% -> MIROpt:SSATransform: 361.31 8.45% -> BuildMIRGraph: 297.80 7.55% -> Assemble: 266.16 6.87% -> MIROpt:NCE_TypeInference: 242.22 5.56% -> Dedupe: 196.15 3.45% -> MIROpt:BBOpt: 121.53 3.20% -> RegisterAllocation: 112.69 3.00% -> PcMappingTable: 105.65 2.90% -> GcMap: 102.22 2.68% -> Launchpads: 94.50 1.16% -> MIROpt:InitRegLoc: 40.94 1.16% -> Cleanup: 40.93 1.10% -> MIROpt:CodeLayout: 38.80 0.97% -> MIROpt:ConstantProp: 34.35 0.96% -> MIROpt:UseCount: 33.75 0.86% -> MIROpt:CheckFilters: 30.28 0.44% -> SpecialMIR2LIR: 15.53 0.44% -> MIROpt:BBCombine: 15.41 (cherry pick of 9e8e234af4430abe8d144414e272cd72d215b5f3) Change-Id: I86c665fa7e88b75eb75629a99fd292ff8c449969
ataflow_iterator-inl.h
ataflow_iterator.h
rontend.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/assemble_arm.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mir_to_lir.cc
uick/x86/assemble_x86.cc
reg_analysis.cc
|
3e5af82ae1a2cd69b7b045ac008ac3b394d17f41 |
21-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Intrinsic Unsafe.CompareAndSwapLong() for ARM. (cherry picked from cb53fcd79b1a5ce608208ec454b5c19f64aaba37) Change-Id: Iadd3cc8b4ed390670463b80f8efd579ce6ece226
uick/arm/arm_dex_file_method_inliner.cc
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/int_arm.cc
uick/mir_to_lir.h
|
73fbaadee029f310362c9d83a52177f00f2e5d77 |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: Ic7b311b635483a44265c89d47f37f4202a5b18f7
ortable/mir_to_gbc.cc
|
1c282e2b9a9b432e132b2c332f861cad9feb4a73 |
21-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Refactor intrinsic CAS, prepare for 64-bit version. Bug: 11391018 Change-Id: Ic0f740e0cd0eb47f2c915f81be02f52f7721f8a3
uick/arm/arm_dex_file_method_inliner.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mips/mips_dex_file_method_inliner.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/x86_dex_file_method_inliner.cc
|
2247984899247b1402408d39731ff64048f0e274 |
19-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Clean up kOpCmp on ARM. kThumb2CmnRI8M is now used. Change-Id: I300299258ed99d86c300dee45c904c360dd44638
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
|
ba9ece9c58de90b39c39b29dbdaee54b1654c066 |
19-Nov-2013 |
Narayan Kamath <narayan@google.com> |
Fix inlining for String.indexOf / String.isEmpty. Before vs After: Equals URI 1544014.6 ============================== Equals URI 992997.6 ======================== bug: 11551453 Change-Id: I41045fda59b4c69a209d6b895dc7c2bdd1fc4e89
uick/dex_file_method_inliner.cc
|
e4a50ee34695a9d90cf03fbb1e8afd1e434f6ee1 |
18-Nov-2013 |
Mathieu Chartier <mathieuc@google.com> |
Fix build. cpplint errors. Change-Id: I11141f6e19b56a3f53d6e52f3013f4d20f33f102
rontend.cc
rontend.h
uick/dex_file_method_inliner.cc
uick/dex_file_to_method_inliner_map.cc
uick/dex_file_to_method_inliner_map.h
|
259b592d2f61aa8addd3f6d8aa04523773f1008a |
18-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix build: add required spaces after //. Change-Id: I332b3d514d02900ec9b485a46aa9e27c084f1bd6
uick/mips/mips_dex_file_method_inliner.cc
uick/x86/x86_dex_file_method_inliner.cc
|
3cebbc759a1e34d5900d35933bb364e160072c1e |
18-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Rewrite intrinsics detection." into dalvik-dev
|
332b7aa6220124dc638b9f7e59611c376473f128 |
18-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Improve Thumb2 instructions' use of constant operands. Rename instructions using modified immediate to use suffix I8M. Many were using I8 which may lead to confusion with Thumb I8 instructions and some were using other suffixes. Add and use CmnRI8M, increase constant range of AddRRI12 and SubRRI12 and use BicRRI8M for applicable kOpAnd constants. In particular, this should marginaly improve Math.abs(float) and Math.abs(double) by converting x & 0x7fffffff to BIC. Bug: 11579369 Change-Id: I0f17a9eb80752d2625730a60555152cdffed50ba
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
|
5c96e6b4dc354a7439b211b93462fbe8edea5e57 |
14-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Rewrite intrinsics detection. Intrinsic methods should be treated as a special case of inline methods. They should be detected early and used to guide other optimizations. This CL rewrites the intrinsics detection so that it can be moved to any compilation phase. Change-Id: I4424a6a869bd98b9c478953c9e3bcaf1c6de2b33
rontend.cc
rontend.h
uick/arm/arm_dex_file_method_inliner.cc
uick/arm/arm_dex_file_method_inliner.h
uick/codegen_util.cc
uick/dex_file_method_inliner.cc
uick/dex_file_method_inliner.h
uick/dex_file_to_method_inliner_map.cc
uick/dex_file_to_method_inliner_map.h
uick/gen_invoke.cc
uick/mips/mips_dex_file_method_inliner.cc
uick/mips/mips_dex_file_method_inliner.h
uick/mir_to_lir.h
uick/x86/x86_dex_file_method_inliner.cc
uick/x86/x86_dex_file_method_inliner.h
|
b5856431731298348b917e75a0e57672672eeb59 |
15-Nov-2013 |
Ian Rogers <irogers@google.com> |
Merge "Fix memory leaks relating to timing logger." into dalvik-dev
|
5fe9af720048673e62ee29597a30bb9e54c903c5 |
14-Nov-2013 |
Ian Rogers <irogers@google.com> |
Fix memory leaks relating to timing logger. Bug: 11670287. We use pointers to uninitialized values for control-flow in the timing logger code, add TODO comments to clean this up later. Remove base namespace and other bits of tidying. Change-Id: I1e6600a1e92f974c8f58f3a405a4e4abb4d9f80f
ompiler_ir.h
rontend.cc
|
17189ac098b2f156713db1821b49db7b2f018bbe |
08-Nov-2013 |
buzbee <buzbee@google.com> |
Quick compiler compile-time/memory use improvement This CL delivers a surprisingly large reduction in compile time, as well as a significant reduction in memory usage by conditionally removing a CFG construction feature introduced to support LLVM bitcode generation. In short, bitcode requires all potential exception edges to be explicitly present in the CFG. The Quick compiler (based on the old JIT), can ignore, at least for the purposes of dataflow analysis, potential throw points that do not have a corresponding catch block. To support LLVM, we create a target basic block for every potentially throwing instruction to give us a destination for the exception edge. Then, following the check elimination pass, we remove blocks whose edges have gone away. However, if we're not using LLVM, we can skip the creation of those things in the first place. The savings are significant. Single-threaded compilation time on the host looks to be reduced by something in the vicinity of 10%. We create roughly 60% fewer basic blocks (and, importantly, the creation of fewer basic block nodes has a multiplying effect on memory use reduction because it results in fewer dataflow bitmaps). Some basic block redution stats: boot: 2325802 before, 844846 after. Phonesky: 485472 before, 156014 after. PlusOne: 806232 before, 243156 after. Thinkfree: 864498 before, 264858 after. Another nice side effect of this change is giving the basic block optimization pass generally larger scope. For arena memusage in the boot class path (compiled on the host): Average Max Before: 50,863 88,017,820 After: 41,964 4,914,208 The huge reduction in max arena memory usage is due to the collapsing of a large initialization method. Specifically, with complete exception edges org.ccil.cowan.tagsoup.Scheme requires 13,802 basic blocks. With exception edges collapsed, it requires 4. This change also caused 2 latent bugs to surface. 1) The dex parsing code did not expect that the target of a switch statement could reside in the middle of the same basic block ended by that same switch statement. 2) The x86 backend introduced a 5-operand LIR instruction for indexed memops. However, there was no corresponding change to the use/def mask creation code. Thus, the 5th operand was never included in the use/def mask. This allowed the instruction scheduling code to incorrectly move a use above a definition. We didn't see this before because the affected x86 instructions were only used for aget/aput, and prior to this CL those Dalvik opcodes caused a basic block break because of the implied exception edge - which prevented the code motion. And finally, also included is some minor tuning of register use weighting. Change-Id: I3f2cab7136dba2bded71e9e33b452b95e8fffc0e
rontend.cc
rontend.h
ocal_value_numbering.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
uick/mir_to_lir-inl.h
|
25724efbf84cce5734d1869e636cf59bc3f95941 |
12-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix CompilationUnit's UniquePtr usage. CompilationUnit defined in compiler_ir.h uses UniquePtr with forward-declared MIRGraph, so the ctor/dtor must be defined in a compilation unit that actually includes MIRGraph's definition. Otherwise the build would depend on the order of includes. Change-Id: I53096c5f1c975843bad3c375d4ce72a9c0656264
ompiler_ir.h
rontend.cc
|
e21a40730ae51d8dfd0633dc021765a7839f70dc |
07-Nov-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit f7ee11632e3dfda29d553d8962be9747d5ce6dfd.
ortable/mir_to_gbc.cc
|
da5bd6a2d53113edce5761ff67d7d3eee8c830a6 |
07-Nov-2013 |
Brian Carlstrom <bdc@google.com> |
am 7ed8d7f3: Merge "Update ART for LLVM merge up to r187914." * commit '7ed8d7f33665689a9538281fbb5c4915463dc2a6': Update ART for LLVM merge up to r187914.
|
73b9eea49175748ee1eb8fcb439d65d7666c3905 |
06-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Improve Mir2Lir::GenIntrinsic() performance." into dalvik-dev
|
f7ee11632e3dfda29d553d8962be9747d5ce6dfd |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: Idc2e3fb73d798a62b6ebf6f55aff5c715b2c62f7
ortable/mir_to_gbc.cc
|
7020278bce98a0735dc6abcbd33bdf1ed2634f1d |
23-Oct-2013 |
Dave Allison <dallison@google.com> |
Support hardware divide instruction Bug: 11299025 Uses sdiv for division and a combo of sdiv, mul and sub for modulus. Only does this on processors that are capable of the sdiv instruction, as determined by the build system. Also provides a command line arg --instruction-set-features= to allow cross compilation. Makefile adds the --instruction-set-features= arg to build-time dex2oat runs and defaults it to something obtained from the target architecture. Provides a GetInstructionSetFeatures() function on CompilerDriver that can be queried for various features. The only feature supported right now is hasDivideInstruction(). Also adds a few more instructions to the ARM disassembler b/11535253 is an addition to this CL to be done later. Change-Id: Ia8aaf801fd94bc71e476902749cf20f74eba9f68
ompiler_ir.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
|
94b400d56bb246d54a1606a3ca3f0b2157acc1fa |
05-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Improve Mir2Lir::GenIntrinsic() performance. GenIntrinsic() spends most time just comparing the method's declaring class name to the class names we're looking for without hiting anything. Reduce the number of comparisons by splitting the path for java.lang.* and other calls. Change-Id: Ic0d42ee2bde9e86b602b421c11fb2315de774a29
uick/gen_invoke.cc
|
e508a2090b19fe705fbc6b99d76474037a74bbfb |
04-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix unaligned Memory peek/poke intrinsics. Change-Id: Id454464d0b28aa37f5239f1c6589ceb0b3bbbdea
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
3beafe10c49c30ee28e1dc2f16b9f50c8074648c |
01-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Add intrinsics for Memory peek/poke." into dalvik-dev
|
65636e5de2375839e29e3e19ee7a7db737901cf0 |
24-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Add intrinsics for Memory peek/poke. Add intrinsics for single memory access (non-array) peek/poke methods in libcore.io.Memory. Change-Id: I5d66a5b14ea89875d8afb8252eb293f7d637b83f
uick/gen_invoke.cc
uick/mir_to_lir.h
|
cdb4b715e77f427838b97da9bdb6654f561296ab |
01-Nov-2013 |
Vladimir Marko <vmarko@google.com> |
Fix intrinsic Long.reverseBytes(). Change-Id: I6cfab7e072f406439f0bde73f192149f0a6e58f7
uick/gen_invoke.cc
|
0b1191cfece83f6f8d4101575a06555a2d13387a |
28-Oct-2013 |
Bill Buzbee <buzbee@google.com> |
Revert "Revert "Null check elimination improvement"" This reverts commit 31aa97cfec5ee76b2f2496464e1b6f9e11d21a29. ..and thereby brings back change 380165, which was reverted because it was buggy. Three problems with the original CL: 1. The author ran the pre-submit tests, but used -j24 and failed to search the output for fail messages. 2. The new null check analysis pass uses an interative approach to identify whether a null check is needed. It is possible that the null-check-required state may oscillate, and a logic error caused it to stick in the "no check needed" state. 3. Our old nemesis Dalvik untyped constants, in which 0 values can be used both as object reference and non-object references. This CL conservatively treats all CONST definitions as potential object definitions for the purposes of null check elimination. Change-Id: I3c1744e44318276e42989502a314585e56ac57a0
ir_dataflow.cc
ir_graph.h
ir_optimization.cc
uick/codegen_util.cc
sa_transformation.cc
|
7195dd860e424057bd9a17d501269d9b50673f11 |
30-Oct-2013 |
Ian Rogers <irogers@google.com> |
Merge "Don't use UTF16 length as length for MUTF8." into dalvik-dev
|
dfb325e0ddd746cd8f7c2e3723b3a573eb7cc111 |
30-Oct-2013 |
Ian Rogers <irogers@google.com> |
Don't use UTF16 length as length for MUTF8. Bug 11367555. Change-Id: Ia0b07072a1a49d435c3b71ed9a668b316b7ff5d8
uick/gen_invoke.cc
|
c844a0f04e07bb0b8761e2648392251d522c89c1 |
29-Oct-2013 |
Jeff Hao <jeffhao@google.com> |
Merge "Implement Interface Method Tables (IMT)." into dalvik-dev
|
88474b416eb257078e590bf9bc7957cee604a186 |
24-Oct-2013 |
Jeff Hao <jeffhao@google.com> |
Implement Interface Method Tables (IMT). Change-Id: Idf7fe85e1293453a8ad862ff2380dcd5db4e3a39
ompiler_enums.h
uick/arm/target_arm.cc
uick/gen_invoke.cc
uick/mips/target_mips.cc
uick/x86/target_x86.cc
|
6bdf1fff5f841f3997d4b488f00647f7aa2cdaa3 |
29-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Add intrinsics for {Short,Int,Long}.reverseBytes(). Change-Id: I34a2ec642f59fc4ff18aed59769a9e8d7e361098
uick/gen_invoke.cc
uick/mir_to_lir.h
|
a8b4caf7526b6b66a8ae0826bd52c39c66e3c714 |
24-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Add byte swap instructions for ARM and x86. Change-Id: I03fdd61ffc811ae521141f532b3e04dda566c77d
ompiler_enums.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/utility_arm.cc
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
|
17088bbded68e35da8050a40206dfd3cbba9e6d2 |
28-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Fix invalid DCHECK for movzx/movsx. k86Movzx8RM and kMovsx8RM don't have to use eax/ecx/edx/ebx. The incorrect check could fail for LoadBaseDisp() with kUnsignedByte or kSignedByte. Change-Id: I777f14cf372c7b211ad8c595d4a8a47533bdd0fc
uick/x86/assemble_x86.cc
|
ba150c37d582eeeb8c11ba5245edc281cf31793c |
28-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Omit OatMethodOffsets for classes without compiled code Change-Id: If0d290f4aebc778ff12d8fed017c270ad2ac3220
rena_allocator_test.cc
rena_bit_vector.h
|
3c2a6e2468e3e519ade6c3cfcaad7cd34243cdf1 |
26-Oct-2013 |
Ian Rogers <irogers@google.com> |
Merge "Revert "Null check elimination improvement"" into dalvik-dev
|
31aa97cfec5ee76b2f2496464e1b6f9e11d21a29 |
26-Oct-2013 |
Ian Rogers <irogers@google.com> |
Revert "Null check elimination improvement" This reverts commit 4db179d1821a9e78819d5adc8057a72f49e2aed8. Change-Id: I059c15c85860c6c9f235b5dabaaef2edebaf1de2
ir_dataflow.cc
ir_optimization.cc
uick/codegen_util.cc
sa_transformation.cc
|
75fabbe71ec82836787b34e7250d992da64c6be0 |
26-Oct-2013 |
Ian Rogers <irogers@google.com> |
Merge "Populate dex cache for sharpened calls." into dalvik-dev
|
83883d7fddf30fdb8b6903560fa1337ab991e74c |
22-Oct-2013 |
Ian Rogers <irogers@google.com> |
Populate dex cache for sharpened calls. We ensured the resolved method was in the dex cache, but for a sharpened call this is abstract. Ensure that the concrete method is also resolved. Limit the use of direct dex cache based dispatch to cases where we know how to patch the dex cache. Bug 11389002 Change-Id: I08252686a53b5948650632837c74bcd5cbf8a862
uick/gen_invoke.cc
|
dbf39a79d17f226936430b025ce1f0beeac2f441 |
25-Oct-2013 |
buzbee <buzbee@google.com> |
Merge "Add timing logger to Quick compiler" into dalvik-dev
|
a61f49539a59b610e557b5513695295639496750 |
23-Aug-2013 |
buzbee <buzbee@google.com> |
Add timing logger to Quick compiler Current Quick compiler breakdown for compiling the boot class path: MIR2LIR: 29.674% MIROpt:SSATransform: 17.656% MIROpt:BBOpt: 11.508% BuildMIRGraph: 7.815% Assemble: 6.898% MIROpt:ConstantProp: 5.151% Cleanup: 4.916% MIROpt:NullCheckElimination: 4.085% RegisterAllocation: 3.972% GcMap: 2.359% Launchpads: 2.147% PcMappingTable: 2.145% MIROpt:CodeLayout: 0.697% LiteralData: 0.654% SpecialMIR2LIR: 0.323% Change-Id: I9f77e825faf79e6f6b214bb42edcc4b36f55d291
ompiler_ir.h
rontend.cc
rontend.h
uick/arm/assemble_arm.cc
uick/codegen_util.cc
uick/mips/assemble_mips.cc
uick/mir_to_lir.cc
uick/x86/assemble_x86.cc
|
bbf88131e138634c5e24c4cf5c5ca753fa742850 |
25-Oct-2013 |
buzbee <buzbee@google.com> |
Merge "Null check elimination improvement" into dalvik-dev
|
7f835b491b71a030f2a04e8e55a291bbab95eb1a |
25-Oct-2013 |
Brian Carlstrom <bdc@google.com> |
Merge "Refactor ArenaBitVector to create more general BitVector" into dalvik-dev
|
413e89f277ec6ba1bdf2040f5b5611f29a27a447 |
22-Oct-2013 |
Brian Carlstrom <bdc@google.com> |
Refactor ArenaBitVector to create more general BitVector Change-Id: Ib26f2884de9ce7d620048bdf5ed6dec639622e41
rena_bit_vector.cc
rena_bit_vector.h
sa_transformation.cc
|
4db179d1821a9e78819d5adc8057a72f49e2aed8 |
23-Oct-2013 |
buzbee <buzbee@google.com> |
Null check elimination improvement See b/10862777 Improves the null check elimination pass by tracking visibility of object definitions, rather than successful uses of object dereferences. For boot class path, increases static null check elimination success rate from 98.4% to 98.6%. Reduces size of boot.oat by ~300K bytes. Fixes loop nesting depth computation, which is used by register promotion, and tweaked the heuristics. Fixes a bug in verbose listing output in which a basic block id is directly dereferenced, rather than first being converted to a pointer. Change-Id: Id01c20b533cdb12ea8fc4be576438407d0a34cec
ir_dataflow.cc
ir_optimization.cc
uick/codegen_util.cc
sa_transformation.cc
|
8a70bcc04a6a95f5236ae9e41060254c1496dfbe |
24-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Merge "Fix x86 code generation for 0x0F 0x3A 0x?? instructions." into dalvik-dev
|
fd7e33f67d535e9f4363ef8c1b56ca7aede3b1a6 |
24-Oct-2013 |
Ian Rogers <irogers@google.com> |
Merge "Throw IOException at source of failing to open a dex file." into dalvik-dev
|
e6ed00ba91da535fbe1d0b5a5705e99da149d82e |
24-Oct-2013 |
Vladimir Marko <vmarko@google.com> |
Fix x86 code generation for 0x0F 0x3A 0x?? instructions. Change-Id: I9b2b2190787d1e5674818159aa96e513d6325b54
uick/x86/assemble_x86.cc
uick/x86/x86_lir.h
|
8d31bbd3d6536de12bc20e3d29cfe03fe848f9da |
13-Oct-2013 |
Ian Rogers <irogers@google.com> |
Throw IOException at source of failing to open a dex file. Before is: java.lang.ClassNotFoundException: Didn't find class "GCBench" on path: DexPathList[[zip file "/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar"],nativeLibraryDirectories=[/disk2/dalvik-dev/out/host/linux-x86/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) Suppressed: java.lang.ClassNotFoundException: GCBench at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 1 more Caused by: java.lang.NoClassDefFoundError: Class "LGCBench;" not found ... 5 more And after is: java.lang.ClassNotFoundException: Didn't find class "GCBench" on path: DexPathList[[zip file "/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar"],nativeLibraryDirectories=[/disk2/dalvik-dev/out/host/linux-x86/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) Suppressed: java.io.IOException: Zip archive '/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar' doesn't contain classes.dex at dalvik.system.DexFile.openDexFile(Native Method) at dalvik.system.DexFile.<init>(DexFile.java:80) at dalvik.system.DexFile.<init>(DexFile.java:59) at dalvik.system.DexPathList.loadDexFile(DexPathList.java:268) at dalvik.system.DexPathList.makeDexElements(DexPathList.java:235) at dalvik.system.DexPathList.<init>(DexPathList.java:113) at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48) at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:38) at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:128) at java.lang.ClassLoader.access$000(ClassLoader.java:65) at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81) at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:137) Suppressed: java.lang.ClassNotFoundException: GCBench at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 1 more Caused by: java.lang.NoClassDefFoundError: Class "LGCBench;" not found ... 5 more Also, move dex file verifier messages out of logs. In the process the ClassLinker::dex_lock_ needed tidying to cover a smaller scope. Bug 11301553. Change-Id: I80058652e11e7ea63457cc01a0cb48afe1c15543
rena_allocator.cc
|
a8d24bf578a1022ff14f89f650074dc39b9667fe |
21-Oct-2013 |
buzbee <buzbee@google.com> |
Merge "64-bit prep" into dalvik-dev
|
0d82948094d9a198e01aa95f64012bdedd5b6fc9 |
12-Oct-2013 |
buzbee <buzbee@google.com> |
64-bit prep Preparation for 64-bit roll. o Eliminated storing pointers in 32-bit int slots in LIR. o General size reductions of common structures to reduce impact of doubled pointer sizes: - BasicBlock struct was 72 bytes, now is 48. - MIR struct was 72 bytes, now is 64. - RegLocation was 12 bytes, now is 8. o Generally replaced uses of BasicBlock* pointers with 16-bit Ids. o Replaced several doubly-linked lists with singly-linked to save one stored pointer per node. o We had quite a few uses of uintptr_t's that were a holdover from the JIT (which used pointers to mapped dex & actual code cache addresses rather than trace-relative offsets). Replaced those with uint32_t's. o Clean up handling of embedded data for switch tables and array data. o Miscellaneous cleanup. I anticipate one or two additional CLs to reduce the size of MIR and LIR structs. Change-Id: I58e426d3f8e5efe64c1146b2823453da99451230
rena_bit_vector.h
ompiler_enums.h
ompiler_ir.h
ataflow_iterator-inl.h
ataflow_iterator.h
ir_analysis.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
sa_transformation.cc
|
b917ea1a62aa0ab8eca3f689ef64b5be34e11abb |
18-Oct-2013 |
Ian Rogers <irogers@google.com> |
Fix intrinsification of floatToRawIntBits. Accidentially lost in quick refactoring in commit fa57c47f1b72916371a9c2d5c1389219bce655b4. Change-Id: Ic83cf257306efa66a236f2034ffbff3b53579090
uick/gen_invoke.cc
|
379067c3970fb225332cca25301743f5010d3ef9 |
16-Oct-2013 |
Ian Rogers <irogers@google.com> |
Don't clobber array reg if its needed for card marking Change-Id: I4377717a2431ffd7e8fafc2e2cca7c1285b38668
uick/arm/int_arm.cc
uick/mips/int_mips.cc
|
773aab1e8992b2834153eb23c976a4eb0da51a71 |
14-Oct-2013 |
Ian Rogers <irogers@google.com> |
Correct free-ing of temp register. Bug 11199874. The card mark was potentially using a register freed just before. Make the free-ing of temps strongly correspond to their allocation. Change-Id: I3d1e8c923b7fd8b3666e841d3ff9a46e6eb58318
uick/arm/int_arm.cc
uick/mips/int_mips.cc
uick/x86/int_x86.cc
|
409fe94ad529d9334587be80b9f6a3d166805508 |
11-Oct-2013 |
buzbee <buzbee@google.com> |
Quick assembler fix This CL re-instates the select pattern optimization disabled by CL 374310, and fixes the underlying problem: improper handling of the kPseudoBarrier LIR opcode. The bug was introduced in the recent assembler restructuring. In short, LIR pseudo opcodes (which have values < 0), should always have size 0 - and thus cause no bits to be emitted during assembly. In this case, bad logic caused us to set the size of a kPseudoBarrier opcode via lookup through the EncodingMap. Because all pseudo ops are < 0, this meant we did an array underflow load, picking up whatever garbage was located before the EncodingMap. This explains why this error showed up recently - we'd previuosly just gotten a lucky layout. This CL corrects the faulty logic, and adds DCHECKs to uses of the EncodingMap to ensure that we don't try to access w/ a pseudo op. Additionally, the existing is_pseudo_op() macro is replaced with IsPseudoLirOp(), named similar to the existing IsPseudoMirOp(). Change-Id: I46761a0275a923d85b545664cadf052e1ab120dc
ir_optimization.cc
uick/arm/assemble_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/target_x86.cc
|
41cdd43bd6968a06b1344efdd57ccf302f997a0e |
11-Oct-2013 |
Ian Rogers <irogers@google.com> |
Disable select instruction generation on ARM. Change-Id: I114547d44605b06b2fed396b2fbad03935f66ebc
ir_optimization.cc
|
252a00273bc945ebe4a1d77d82d085fdff2ae769 |
10-Oct-2013 |
Sebastien Hertz <shertz@google.com> |
Merge "Add missing references." into dalvik-dev
|
74e256b8e442417d4ba2054c771c1e4f41062768 |
04-Oct-2013 |
Sebastien Hertz <shertz@google.com> |
Add missing references. This mainly avoids implicit copies when extracting an object from a container. Change-Id: If4d0e6153e8c2b48345fde5bb546b4c65649fcf3
sa_transformation.cc
|
a9a8254c920ce8e22210abfc16c9842ce0aea28f |
04-Oct-2013 |
Ian Rogers <irogers@google.com> |
Improve quick codegen for aput-object. 1) don't type check known null. 2) if we know types in verify don't check at runtime. 3) if we're runtime checking then move all the code out-of-line. Also, don't set up a callee-save frame for check-cast, do an instance-of test then throw an exception if that fails. Tidy quick entry point of Ldivmod to Lmod which it is on x86 and mips. Fix monitor-enter/exit NPE for MIPS. Fix benign bug in mirror::Class::CannotBeAssignedFromOtherTypes, a byte[] cannot be assigned to from other types. Change-Id: I9cb3859ec70cca71ed79331ec8df5bec969d6745
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
c68fb2094b562186a571f496fc46ad2b85b02a39 |
02-Oct-2013 |
Ian Rogers <irogers@google.com> |
Merge "Inflate contended lock word by suspending owner." into dalvik-dev
|
d9c4fc94fa618617f94e1de9af5f034549100753 |
02-Oct-2013 |
Ian Rogers <irogers@google.com> |
Inflate contended lock word by suspending owner. Bug 6961405. Don't inflate monitors for Notify and NotifyAll. Tidy lock word, handle recursive lock case alongside unlocked case and move assembly out of line (except for ARM quick). Also handle null in out-of-line assembly as the test is quick and the enter/exit code is already a safepoint. To gain ownership of a monitor on behalf of another thread, monitor contenders must not hold the monitor_lock_, so they wait on a condition variable. Reduce size of per mutex contention log. Be consistent in calling thin lock thread ids just thread ids. Fix potential thread death races caused by the use of FindThreadByThreadId, make it invariant that returned threads are either self or suspended now. Code size reduction on ARM boot.oat 0.2%. Old nexus 7 speedup 0.25%, new nexus 7 speedup 1.4%, nexus 10 speedup 2.24%, nexus 4 speedup 2.09% on DeltaBlue. Change-Id: Id52558b914f160d9c8578fdd7fc8199a9598576a
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/gen_common.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
|
b48819db07f9a0992a72173380c24249d7fc648a |
15-Sep-2013 |
buzbee <buzbee@google.com> |
Compile-time tuning: assembly phase Not as much compile-time gain from reworking the assembly phase as I'd hoped, but still worthwhile. Should see ~2% improvement thanks to the assembly rework. On the other hand, expect some huge gains for some application thanks to better detection of large machine-generated init methods. Thinkfree shows a 25% improvement. The major assembly change was to establish thread the LIR nodes that require fixup into a fixup chain. Only those are processed during the final assembly pass(es). This doesn't help for methods which only require a single pass to assemble, but does speed up the larger methods which required multiple assembly passes. Also replaced the block_map_ basic block lookup table (which contained space for a BasicBlock* for each dex instruction unit) with a block id map - cutting its space requirements by half in a 32-bit pointer environment. Changes: o Reduce size of LIR struct by 12.5% (one of the big memory users) o Repurpose the use/def portion of the LIR after optimization complete. o Encode instruction bits to LIR o Thread LIR nodes requiring pc fixup o Change follow-on assembly passes to only consider fixup LIRs o Switch on pc-rel fixup kind o Fast-path for small methods - single pass assembly o Avoid using cb[n]z for null checks (almost always exceed displacement) o Improve detection of large initialization methods. o Rework def/use flag setup. o Remove a sequential search from FindBlock using lookup table of 16-bit block ids rather than full block pointers. o Eliminate pcRelFixup and use fixup kind instead. o Add check for 16-bit overflow on dex offset. Change-Id: I4c6615f83fed46f84629ad6cfe4237205a9562b4
ompiler_enums.h
rontend.cc
ir_analysis.cc
ir_graph.cc
ir_graph.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
d91d6d6a80748f277fd938a412211e5af28913b1 |
26-Sep-2013 |
Ian Rogers <irogers@google.com> |
Introduce Signature type to avoid string comparisons. Method resolution currently creates strings to then compare with strings formed from methods in other dex files. The temporary strings are purely created for the sake of comparisons. This change creates a new Signature type that represents a method signature but not as a string. This type supports comparisons and so can be used when searching for methods in resolution. With this change malloc is no longer the hottest method during dex2oat (now its memset) and allocations during verification have been reduced. The verifier is commonly what is populating the dex cache for methods and fields not declared in the dex file itself. Change-Id: I5ef0542823fbcae868aaa4a2457e8da7df0e9dae
uick/codegen_util.cc
uick/mir_to_lir.h
|
fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f |
24-Sep-2013 |
Ian Rogers <irogers@google.com> |
StringPiece clean up. Profile guided clean up. Try to avoid creating StringPieces with the contents of a dex file where the length is known. Try to avoid RegTypeCache::FromDescriptor when there's a class available. Make ConstantType::ConstantValue inlinable. Saving of about 50ms from a 2 threaded ThinkFree compile on host. Change-Id: I47a12c3c76f46e2c9805be1c3a3e3870fe1f5d85
uick/gen_invoke.cc
|
8b2c0b9abc3f520495f4387ea040132ba85cae69 |
19-Sep-2013 |
Ian Rogers <irogers@google.com> |
Use class def index from java.lang.Class. Bug: 10244719 Depends on: https://googleplex-android-review.git.corp.google.com/362363 This removes the computation of the dex file index, when necessary this is computed by searching the dex file. Its only necessary in dalvik.system.DexFile.defineClassNative and DexFile::FindInClassPath, the latter not showing up significantly in profiling with this change. Change-Id: I20c73a3b17d86286428ab0fd21bc13f51f36c85c
ompiler_ir.h
ex_to_dex_compiler.cc
rontend.cc
rontend.h
ir_graph.cc
ir_graph.h
uick/codegen_util.cc
|
1fc5800def46a2fa6cbd235fcb8af099ee35a127 |
18-Sep-2013 |
buzbee <buzbee@google.com> |
Art compiler: minor instruction assembler fix During the assembly phase, we iteratively walk through the LIR encoding instructions until we can complete a full pass without without having to change the sequence because of displacement overflow. In the (fairly common) situation in which a 16-bit cbnz/cbz can't reach the target, we expand it to a compare and branch sequence Initially, we use a 16-bit Thumb1 unconditional branch, which itself may be expanded in a future pass to a 32-bit branch. The original cbnz/cbz LIR is converted into a cmp, and a new branch instruction is inserted following. The problem here is that by doing a following insertion, that new instruction will be the next one considered to determine if it can reach it's target. Because it is new, though, it's starting offset will show as zero - making it much more likely that it will be treated as a displacement overflow and be converted to a 32-bit branch. This is not a correctness issue - the bad offset will be corrected on the next pass, but it does result in unnecessary uses of 32-bit branches where 16-bit ones would work. Change-Id: Ie68a93fd319f0f7c603e1d870588047ad6a0779f
uick/arm/assemble_arm.cc
|
c729a6b936d59562bd9fb830a595d9ff65dfd129 |
15-Sep-2013 |
buzbee <buzbee@google.com> |
Improve promotion of double-precision regs Minor rework of the double allocation mechanism to more explicitly manage the allocation of preserved floating point single pairs as doubles. Change-Id: Id9db4b0e86e5ef54a5db587f367e00efdf7e98d6
uick/mir_to_lir.h
uick/ralloc_util.cc
|
cd6f5fe5b08dd6bcc05cbc77355593bf3540caa0 |
14-Sep-2013 |
buzbee <buzbee@google.com> |
Merge "Timely color fix" into dalvik-dev
|
d0a03b8099347dee6e4bab3af95e14cd5a03b29c |
14-Sep-2013 |
buzbee <buzbee@google.com> |
Timely color fix See b/10690000 For efficiency, the Quick compiler will not flush incoming register arguments to the frame if their underlying Dalvik virtual registers have been promoted to physical registers. In this case, though, there was a bug on Arm devices in that an incoming Double was promoted to physical floating point registers, but not in a usable form. The entry code generation saw that both halves of the double were promoted, but failed to check if it was in a form usable as a double. In this particular case, it meant that subsequent uses of the incoming argument referred to the uninitialized home location in the frame, resulting in garbage color values. That's the bug. Another problem is that the incoming double should never have been promoted to an unusable state in the first place - but that's merely an efficiency issue and will be addressed in another CL. Note: no good way to generate a regression test for this issue. The bug triggered because of an unusual sequence of events driving register promotion that can't easily (or robustly) be triggered from Java source. Change-Id: I7242422277193a04376461134dde71e9dec55576
uick/gen_invoke.cc
|
2de2aa1a96dfa5bebc004f29b5dbfafd37039cee |
13-Sep-2013 |
Jeff Hao <jeffhao@google.com> |
Make inlined CAS32 loop until store is successful if values match. The native implementation of compareAndSwap uses android_atomic_cas, which will repeat the strex until it succeeds. The compiled version was changed to do the same. Bug: 10530407 Change-Id: I7efb3f92d0d0610fcc5a885e2c97f1d701b5a4ea
uick/arm/int_arm.cc
|
b048dd2b662c19644361f4396a1e8d6213445ee8 |
12-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Merge "Add valgrind support to compiler arena allocator." into dalvik-dev
|
75165d015cc737f951d4264f8c55012298abdb18 |
12-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
Add valgrind support to compiler arena allocator. Change-Id: Id9974301d3810bfac968ee562b01a11098e402c2
rena_allocator.cc
rena_allocator.h
|
77695d2e13d522426c973546391c07ac88242bc2 |
12-Sep-2013 |
Jeff Hao <jeffhao@google.com> |
am 715084a2: am 9d7e507f: am 95848d01: Revert "Fix CAS intrinsic to clear exclusive if values don\'t match." * commit '715084a24a9db1b898c38bbf4a8a7383da76e326': Revert "Fix CAS intrinsic to clear exclusive if values don't match."
|
95848d01adae14c6a9ba433f6789a9462edb8e7d |
12-Sep-2013 |
Jeff Hao <jeffhao@google.com> |
Revert "Fix CAS intrinsic to clear exclusive if values don't match." Ian is correct. I can still see this bug even with this change. This reverts commit 3a0831507637028a439712dedaaddd7cd0893995. Change-Id: I780f2de926f1ff7576adc679c56a6cf491dad127
uick/arm/int_arm.cc
|
3a0831507637028a439712dedaaddd7cd0893995 |
12-Sep-2013 |
Jeff Hao <jeffhao@google.com> |
Fix CAS intrinsic to clear exclusive if values don't match. The LDREX has a matching STREX if the values match, but it needed a CLREX for the case where they didn't. Bug: 10530407 Change-Id: I46b474cca326a251536e7f214c80486694431386 (cherry picked from commit 78765e84a3654357a03f84b76985556cf7d9731a)
uick/arm/int_arm.cc
|
78765e84a3654357a03f84b76985556cf7d9731a |
12-Sep-2013 |
Jeff Hao <jeffhao@google.com> |
Fix CAS intrinsic to clear exclusive if values don't match. The LDREX has a matching STREX if the values match, but it needed a CLREX for the case where they didn't. Bug: 10530407 Change-Id: I46b474cca326a251536e7f214c80486694431386
uick/arm/int_arm.cc
|
bd663de599b16229085759366c56e2ed5a1dc7ec |
11-Sep-2013 |
buzbee <buzbee@google.com> |
Compile-time tuning: register/bb utilities This CL yeilds about a 4% improvement in the compilation phase of dex2oat (single-threaded; multi-threaded compilation is more difficult to accurately measure). The register utilities could stand to be completely rewritten, but this gets most of the easy benefit. Next up: the assembly phase. Change-Id: Ife5a474e9b1a6d9e501e888dda6749d34eb77e96
rowable_array.h
ir_graph.cc
ir_graph.h
uick/arm/codegen_arm.h
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/mips/codegen_mips.h
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/codegen_x86.h
uick/x86/target_x86.cc
|
fffd663bd276ee5fd8fda6641689546042429981 |
10-Sep-2013 |
buzbee <buzbee@google.com> |
Merge "More Quick compile-time tuning: labels & branches" into dalvik-dev
|
252254b130067cd7a5071865e793966871ae0246 |
09-Sep-2013 |
buzbee <buzbee@google.com> |
More Quick compile-time tuning: labels & branches This CL represents a roughly 3.5% performance improvement for the compile phase of dex2oat. Move of the gain comes from avoiding the generation of dex boundary LIR labels unless a debug listing is requested. The other significant change is moving from a basic block ending branch model of "always generate a fall-through branch, and then delete it if we can" to a "only generate a fall-through branch if we need it" model. The data motivating these changes follow. Note that two area of potentially attractive gain remain: restructing the assembler model and reworking the register handling utilities. These will be addressed in subsequent CLs. --- data follows The Quick compiler's assembler has shown up on profile reports a bit more than seems reasonable. We've tried a few quick fixes to apparently hot portions of the code, but without much gain. So, I've been looking at the assembly process at a somewhat higher level. There look to be several potentially good opportunities. First, an analysis of the makeup of the LIR graph showed a surprisingly high proportion of LIR pseudo ops. Using the boot classpath as a basis, we get: 32.8% of all LIR nodes are pseudo ops. 10.4% are LIR instructions which require pc-relative fixups. 11.8% are LIR instructions that have been nop'd by the various optimization passes. Looking only at the LIR pseudo ops, we get: kPseudoDalvikByteCodeBoundary 43.46% kPseudoNormalBlockLabel 21.14% kPseudoSafepointPC 20.20% kPseudoThrowTarget 6.94% kPseudoTarget 3.03% kPseudoSuspendTarget 1.95% kPseudoMethodExit 1.26% kPseudoMethodEntry 1.26% kPseudoExportedPC 0.37% kPseudoCaseLabel 0.30% kPseudoBarrier 0.07% kPseudoIntrinsicRetry 0.02% Total LIR count: 10167292 The standout here is the Dalvik opcode boundary marker. This is just a label inserted at the beginning of the codegen for each Dalvik bytecode. If we're also doing a verbose listing, this is also where we hang the pretty-print disassembly string. However, this label was also being used as a convenient way to find the target of switch case statements (and, I think at one point was used in the Mir->GBC conversion process). This CL moves the use of kPseudoDalvikByteCodeBoundary labels to only verbose listing runs, and replaces the codegen uses of the label with the kPseudoNormalBlockLabel attached to the basic block that contains the switch case target. Great savings here - 14.3% reduction in the number of LIR nodes needed. After this CL, our LIR pseudo proportions drop to 21.6% of all LIR. That's still a lot, but much better. Possible further improvements via combining normal labels with kPseudoSafepointPC labels where appropriate, and also perhaps reduce memory usage by using a short-hand form for labels rather than a full LIR node. Also, many of the basic block labels are no longer branch targets by the time we get to assembly - cheaper to delete, or just ingore? Here's the "after" LIR pseudo op breakdown: kPseudoNormalBlockLabel 37.39% kPseudoSafepointPC 35.72% kPseudoThrowTarget 12.28% kPseudoTarget 5.36% kPseudoSuspendTarget 3.45% kPseudoMethodEntry 2.24% kPseudoMethodExit 2.22% kPseudoExportedPC 0.65% kPseudoCaseLabel 0.53% kPseudoBarrier 0.12% kPseudoIntrinsicRetry 0.04% Total LIR count: 5748232 Not done in this CL, but it will be worth experimenting with actually deleting LIR nodes from the graph when they are optimized away, rather than just setting the NOP bit. Keeping them around is invaluable during debugging - but when not debugging it may pay off if the cost of node removal is less than the cost of traversing through dead nodes in subsequent passes. Next up (and partially in this CL - but mostly to be done in follow-on CLs) is the overall assembly process. Inherited from the trace JIT, the Quick compiler has a fairly simple-minded approach to instruction assembly. First, a pass is made over the LIR list to assign offsets to each instruction. Then, the assembly pass is made - which generates the actual machine instruction bit patterns and pushes the instruction data into the code_buffer. However, the code generator takes the "always optimistic" approach to instruction selection and emits the shortest instruction. If, during assembly, we find that a branch or load doesn't reach, that short-form instruction is replaces with a longer sequence. Of course, this invalidates the previously-computed offset calculations. Assembly thus is an iterative process: compute offsets and then assemble until we survive an assembly pass without invalidation. This seems like a likely candidate for improvement. First, I analyzed the number of retries required, and the reason for invalidation over the boot classpath load. The results: more than half of methods don't require a retry, and very few require more than 1 extra pass: 5 or more: 6 of 96334 4 or more: 22 of 96334 3 or more: 140 of 96334 2 or more: 1794 of 96334 - 2% 1 or more: 40911 of 96334 - 40% 0 retries: 55423 of 96334 - 58% The interesting group here is the one that requires 1 retry. Looking at the reason, we see three typical reasons: 1. A cbnz/cbz doesn't reach (only 7 bits of offset) 2. A 16-bit Thumb1 unconditional branch doesn't reach. 3. An unconditional branch which branches to the next instruction is encountered, and deleted. The first 2 cases are the cost of the optimistic strategy - nothing much to change there. However, the interesting case is #3 - dead branch elimination. A further analysis of the single retry group showed that 42% of the methods (16305) that required a single retry did so *only* because of dead branch elimination. The big question here is why so many dead branches survive to the assembly stage. We have a dead branch elimination pass which is supposed to catch these - perhaps it's not working correctly, should be moved later in the optimization process, or perhaps run multiple times. Other things to consider: o Combine the offset generation pass with the assembly pass. Skip pc-relative fixup assembly (other than assigning offset), but push LIR* for them into work list. Following the main pass, zip through the work list and assemble the pc-relative instructions (now that we know the offsets). This would significantly cut back on traversal costs. o Store the assembled bits into both the code buffer and the LIR. In the event we have to retry, only the pc-relative instructions would need to be assembled, and we'd finish with a pass over the LIR just to dumb the bits into the code buffer. Change-Id: I50029d216fa14f273f02b6f1c8b6a0dde5a7d6a6
rowable_array.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/x86/assemble_x86.cc
|
02ed4c04468ca5f5540c5b704ac3e2f30eb9e8f4 |
06-Sep-2013 |
Ian Rogers <irogers@google.com> |
Move disassembler out of runtime. Bug: 9877500. Change-Id: Ica6d9f5ecfd20c86e5230a2213827bd78cd29a29
rena_allocator.cc
ex_to_dex_compiler.cc
ortable/mir_to_gbc.cc
uick/mir_to_lir.cc
|
28c2300d9a85f4e7288fb5d94280332f923b4df3 |
07-Sep-2013 |
buzbee <buzbee@google.com> |
More compile-time tuning Small, but measurable, improvement. Change-Id: Ie3c7180f9f9cbfb1729588e7a4b2cf6c6d291c95
rena_bit_vector.cc
rena_bit_vector.h
ir_graph.h
uick/codegen_util.cc
reg_analysis.cc
|
9f799db0e4124d3158cde6ead854289fba10f3aa |
07-Sep-2013 |
buzbee <buzbee@google.com> |
Merge "Compile-time tuning" into dalvik-dev
|
56c717860df2d71d66fb77aa77f29dd346e559d3 |
06-Sep-2013 |
buzbee <buzbee@google.com> |
Compile-time tuning Specialized the dataflow iterators and did a few other minor tweaks. Showing ~5% compile-time improvement in a single-threaded environment; less in multi-threaded (presumably because we're blocked by something else). Change-Id: I2e2ed58d881414b9fc97e04cd0623e188259afd2
ataflow_iterator-inl.h
ataflow_iterator.h
rowable_array.h
ir_analysis.cc
ir_dataflow.cc
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/codegen_util.cc
uick/local_optimizations.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
sa_transformation.cc
reg_analysis.cc
|
9b297bfc588c7d38efd12a6f38cd2710fc513ee3 |
06-Sep-2013 |
Ian Rogers <irogers@google.com> |
Refactor CompilerDriver::Compute..FieldInfo Don't use non-const reference arguments. Move ins before outs. Change-Id: I7b251156388d8f07513b3da62ebfd29e5fd9ff76
ex_to_dex_compiler.cc
uick/arm/call_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mir_to_lir.h
|
65ec92cf13c9d11c83711443a02e4249163d47f1 |
06-Sep-2013 |
Ian Rogers <irogers@google.com> |
Refactor CompilerDriver::ComputeInvokeInfo Don't use non-const reference arguments. Move ins before outs. Change-Id: I4a7b8099abe91ea60f93a56077f4989303fa4876
ex_to_dex_compiler.cc
ir_dataflow.cc
uick/gen_invoke.cc
|
866709c85da0c0d2c76968713e4dc4a35dce27fd |
06-Sep-2013 |
Sebastien Hertz <shertz@google.com> |
Merge "Disable devirtualization detection in DEX-to-DEX compiler." into dalvik-dev
|
1e54d68ce8e77dfe63340275d11a072c5184c89a |
06-Sep-2013 |
Sebastien Hertz <shertz@google.com> |
Disable devirtualization detection in DEX-to-DEX compiler. This CL allows the DEX-to-DEX compiler to disable devirtualization detection. This allows to quicken invoke-virtual/range instructions that used to be eligible for devirtualization. Bug: 10632943 Change-Id: I6c9f4d3249cf42b47f004be5825b3186fa83501e
ex_to_dex_compiler.cc
ir_dataflow.cc
uick/gen_invoke.cc
|
d1946a2621553968599ca4db0f4200877c30186f |
04-Sep-2013 |
Mathieu Chartier <mathieuc@google.com> |
am 22955837: Merge "Multi threaded hashed deduplication during compilation." into klp-dev * commit '22955837e20f126845ff0e516dfa6f74ec81d240': Multi threaded hashed deduplication during compilation.
|
193bad9b9cfd10642043fa2ebbfc68bd5f9ede4b |
30-Aug-2013 |
Mathieu Chartier <mathieuc@google.com> |
Multi threaded hashed deduplication during compilation. Moved deduplication to be in the compiler driver instead of oat writer. This enables deduplication to be performed on multiple threads. Also added a hash function to avoid excessive comparison of byte arrays. Improvements: Before (alloats host): real 1m6.967s user 4m22.940s sys 1m22.610s Thinkfree.apk (target mako): 0m23.74s real 0m50.95s user 0m9.50s system 0m24.62s real 0m50.61s user 0m10.07s system 0m24.22s real 0m51.44s user 0m10.09s system 0m23.70s real 0m51.05s user 0m9.97s system 0m23.50s real 0m50.74s user 0m10.63s system After (alloats host): real 1m5.705s user 4m44.030s sys 1m29.990s Thinkfree.apk (target mako): 0m23.32s real 0m51.38s user 0m10.00s system 0m23.49s real 0m51.20s user 0m9.80s system 0m23.18s real 0m50.80s user 0m9.77s system 0m23.52s real 0m51.22s user 0m10.02s system 0m23.50s real 0m51.55s user 0m9.46s system Bug: 10552630 Change-Id: Ia6d06a747b86b0bfc4473b3cd68f8ce1a1c7eb22
uick/codegen_util.cc
|
6e288203c06c71c945935830b91a215a273bf8e6 |
30-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit 70814f7746793934a29e010211ef6e652ad75cd2.
ortable/mir_to_gbc.cc
|
70814f7746793934a29e010211ef6e652ad75cd2 |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: I49e691b6771f7e3f77fe583841ea51b06ee7cfdf
ortable/mir_to_gbc.cc
|
e0948e13d5a4552e6a2728087573c07961e4a4f9 |
29-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Make DexFiles opened from files readonly by default, but writable during dex2oat Bug: 9618388 Change-Id: I83f2e16ee8446a79a94a84971146d807bb0c9ee0
ex_to_dex_compiler.cc
|
a7d56cf5e0fe6da41969f6dd841aef0d73f09d93 |
29-Aug-2013 |
Ian Rogers <irogers@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit eaeab46304a139da495de941e853ce9acdace175. Change-Id: I854e09c9c988702de08a9ff642619761d1d57639 (cherry picked from commit 03feadd72f6205f0b88fe69aaa30c69d1b2e8c2d)
ortable/mir_to_gbc.cc
|
eaeab46304a139da495de941e853ce9acdace175 |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: I5ee58031e423838cdc8968675192f9b63a7d867d
ortable/mir_to_gbc.cc
|
11b63d13f0a3be0f74390b66b58614a37f9aa6c1 |
27-Aug-2013 |
buzbee <buzbee@google.com> |
Quick compiler: division by literal fix The constant propagation optimization pass attempts to identify constants in Dalvik virtual registers and handle them more efficiently. The use of small constants in divison, though, was handled incorrectly in that the high level code correctly detected the use of a constant, but the actual code generation routine was only expecting the use of a special constant form opcode. see b/10503566 Change-Id: I88aa4d2eafebb2b1af1a1e88049f1845aefae261
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/gen_common.cc
uick/mips/codegen_mips.h
uick/mips/int_mips.cc
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
|
f6c4b3ba3825de1dbb3e747a68b809c6cc8eb4db |
25-Aug-2013 |
Mathieu Chartier <mathieuc@google.com> |
New arena memory allocator. Before we were creating arenas for each method. The issue with doing this is that we needed to memset each memory allocation. This can be improved if you start out with arenas that contain all zeroed memory and recycle them for each method. When you give memory back to the arena pool you do a single memset to zero out all of the memory that you used. Always inlined the fast path of the allocation code. Removed the "zero" parameter since the new arena allocator always returns zeroed memory. Host dex2oat time on target oat apks (2 samples each). Before: real 1m11.958s user 4m34.020s sys 1m28.570s After: real 1m9.690s user 4m17.670s sys 1m23.960s Target device dex2oat samples (Mako, Thinkfree.apk): Without new arena allocator: 0m26.47s real 0m54.60s user 0m25.85s system 0m25.91s real 0m54.39s user 0m26.69s system 0m26.61s real 0m53.77s user 0m27.35s system 0m26.33s real 0m54.90s user 0m25.30s system 0m26.34s real 0m53.94s user 0m27.23s system With new arena allocator: 0m25.02s real 0m54.46s user 0m19.94s system 0m25.17s real 0m55.06s user 0m20.72s system 0m24.85s real 0m55.14s user 0m19.30s system 0m24.59s real 0m54.02s user 0m20.07s system 0m25.06s real 0m55.00s user 0m20.42s system Correctness of Thinkfree.apk.oat verified by diffing both of the oat files. Change-Id: I5ff7b85ffe86c57d3434294ca7a621a695bf57a9
rena_allocator.cc
rena_allocator.h
rena_bit_vector.cc
rena_bit_vector.h
ompiler_ir.h
rontend.cc
rowable_array.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/arm/call_arm.cc
uick/arm/target_arm.cc
uick/codegen_util.cc
uick/local_optimizations.cc
uick/mips/call_mips.cc
uick/mips/target_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/target_x86.cc
sa_transformation.cc
reg_analysis.cc
|
4b8c13ee44c4c959d7b8de9adff7ce6df48c31d0 |
24-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Fix sort order to make register promotion stable Also some minor oatdump fixes Change-Id: I5679835bf684b98d130b77ecf00bda5f6547d383
uick/ralloc_util.cc
|
ec0cf9b8217ceaddbb53faa78c3cf34b07ac87b1 |
22-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit b8a874ca3b13007f4bf688963483ffb3c76e0d7d.
ortable/mir_to_gbc.cc
|
b8a874ca3b13007f4bf688963483ffb3c76e0d7d |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: I7403dca575104de2ceb5fc0619611366a8058e5d
ortable/mir_to_gbc.cc
|
677ffa4eb84bcf667b1ae43559b61aff85a1322d |
22-Aug-2013 |
Ian Rogers <irogers@google.com> |
Don't skip compilation for portable builds. Portable build fix. Change-Id: If4e5efedb232d52257714af020c50a52843cbad8
rontend.cc
|
fe9ca4028f379688ecba6132ac3738171176b3e4 |
21-Aug-2013 |
buzbee <buzbee@google.com> |
Compiler filter update Tweak of the compiler filter to give better results for applications which are not dominated by tight arithmetic loops. Deleted the "DeferCompilation" setting - it didn't differ enough from the "Space" setting. Added "Everything" setting to support forced compilation (for images and testing). Previously used "Speed" for that purpose, but in the speed setting there are some things we don't want to compile. Change-Id: Ia53b14f2044fc9738c1a4c1318f8204f2c25abe3
ir_analysis.cc
ir_graph.h
|
b7767e8db32cac29370852170871a6769388195f |
20-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit 6a94caa048121858ee8e71f84caf7b9ae1f940df.
ortable/mir_to_gbc.cc
|
6a94caa048121858ee8e71f84caf7b9ae1f940df |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) (cherry picked from commit 6e6819f7b8b4820ae2b1003a516fe9aa60fa478e) Change-Id: I4fb59f291bb58c7ed8575f71a44f7c59f653a5ec
ortable/mir_to_gbc.cc
|
9329e6d1a8ff8d3775c4a9db9a7bb97694bc267d |
19-Aug-2013 |
buzbee <buzbee@google.com> |
More suspend check repair. The previous fix to the suspend check optimization mechanism left a bug in the handling of constant-folded branches. Change-Id: Ib71f1cb9f17203bee26746006e568d448666962d
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/mir_to_lir.cc
|
cbcfaf3a410e35730c4daeaff6c791665764925a |
19-Aug-2013 |
buzbee <buzbee@google.com> |
Fix suspend check optimization Art's Quick compiler currently uses a convervative mechanism to ensure that a safe point will be reached within a "small" amount of time. Explicit suspend checks are placed prior to backwards branches and on returns. There are a lot of ways to optimize, which we'll get to in the future, but for now the only optimization is to detect a backwards branch that targets a return block. That's a common pattern in dex, and simple to detect. In those cases, we can suppress the suspend check on the backwards branch knowing that the return will do it. However, the notion of what is a backwards branch got a bit muddied with some mir optimizations that transform the graph by changing the sense of branches. What started off as a taken backwards branch may turn into a fallthrough backwards branch. This CL avoid the confusion by marking branches backwards based on their original dex targets rather than using the post-transform test of backwardness. Change-Id: I9b30be168c801af51bae7f66ecd442edcb115a18
ir_graph.cc
ir_graph.h
ir_optimization.cc
uick/mir_to_lir.cc
|
be6810d714bbf0c9c3c1d7d919e1aef5a3b52a20 |
14-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit 6e6819f7b8b4820ae2b1003a516fe9aa60fa478e.
ortable/mir_to_gbc.cc
|
6e6819f7b8b4820ae2b1003a516fe9aa60fa478e |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). (cherry picked from commit 1961a2716cf02f597f06c27a0850daa2dc917586) Change-Id: Idc2e3fb73d798a62b6ebf6f55aff5c715b2c62f7
ortable/mir_to_gbc.cc
|
ea46f950e7a51585db293cd7f047de190a482414 |
30-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Refactor java.lang.reflect implementation Cherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1. Move to ArtMethod/Field instead of AbstractMethod/Field and have java.lang.reflect APIs delegate to ArtMethod/ArtField. Bug: 10014286. Change-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7
ex_to_dex_compiler.cc
uick/gen_common.cc
uick/gen_invoke.cc
|
73a79074c06d8b0a8c14946438c59c3821d88fe7 |
13-Aug-2013 |
Stephen Hines <srhines@google.com> |
Revert "Update ART for LLVM merge up to r187914." This reverts commit 1961a2716cf02f597f06c27a0850daa2dc917586.
ortable/mir_to_gbc.cc
|
34de74bb9d91534ab7ebbd1f73ee1d96db894b4c |
13-Aug-2013 |
Stephen Hines <srhines@google.com> |
Merge "Update ART for LLVM merge up to r187914." into klp-dev
|
a49bdffd3826ea45b5d8f435b2add160871351bb |
31-Jul-2013 |
Ian Rogers <irogers@google.com> |
Don't add barriers to clinit methods. Change-Id: I13e6c008feb8c19e452d6e2f88b2bbbcac997de5 (cherry picked from commit 9fc16eb43fe938f0cddb13638bd7cbc2ea9534a2)
ex_to_dex_compiler.cc
|
96faf5b363d922ae91cf25404dee0e87c740c7c5 |
10-Aug-2013 |
Ian Rogers <irogers@google.com> |
Uleb128 compression of vmap and mapping table. Bug 9437697. Change-Id: I30bcb97d12cd8b46d3b2cdcbdd358f08fbb9947a (cherry picked from commit 1809a72a66d245ae598582d658b93a24ac3bf01e)
uick/codegen_util.cc
uick/mir_to_lir.h
|
468532ea115657709bc32ee498e701a4c71762d4 |
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e (cherry picked from commit 848871b4d8481229c32e0d048a9856e5a9a17ef9)
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
|
1961a2716cf02f597f06c27a0850daa2dc917586 |
09-Aug-2013 |
Stephen Hines <srhines@google.com> |
Update ART for LLVM merge up to r187914. Removed NoFramePointerElimNonLeaf because this is now only specified via a function attribute (and thus covered by existing cases). Switch to llvm::sys::fs::F_* enums. Remove unused DisableSimplifyLibCalls(). Change-Id: I792e3a31f5dc289459aeacac995e7c828b6063d3
ortable/mir_to_gbc.cc
|
ee17e0aa4d24deb11c1766bfcc6a864519df1c1e |
31-Jul-2013 |
buzbee <buzbee@google.com> |
Compilation filter This CL introduces a static compilation filter mechanism intended to allow us to reduce compilation time and space requirements until we have a profiling mechanism in place. It supports 5 modes of filtering: o interpret-only (compile nothing) o deferred-compilation (compile only those methods believe to be compute-intensive) o space (optimized for space) o balanced (best return on space investment) o speed (compile everything) A future CL will allow the default filtering mode to be set via system property. For now, you can pass it in via command line as follows: dalvikvm -compiler-filter:[interpret-only|defer-compilation| space|balanced|speed] or dex2oat --runtime-arg -compiler-filter:[one of the above modes] Creating a file named art/SMALL_ART will force the filter default to interpret-only. Later on we'll move this capability to a persistent system property. or modify kDefaultCompilerFilter in runtime.h It also changes the compiler driver to allow the compilers to decline to compile a method by return NULL. Change-Id: Ic73411818f8bb845a4a19a05b0395c50902c534f (cherry picked from commit a024a0686c3b0fea13f362bff70d65981e5febc5)
rontend.cc
rontend.h
ir_analysis.cc
ir_graph.h
|
1b8b2e49fdfee50cafafe01d73346af6dfcf231d |
31-Jul-2013 |
Sebastien Hertz <shertz@google.com> |
Merge "Adds a DEX-to-DEX compilation level." into dalvik-dev
|
75021222d9c03a80fa5c136db0d5fb8d82d04031 |
16-Jul-2013 |
Sebastien Hertz <shertz@google.com> |
Adds a DEX-to-DEX compilation level. This CL adds a DEX-to-DEX compilation level which allows the DEX-to-DEX compiler to ensure correctness on classes with soft-failed verification. Bug: 9307738 Change-Id: If051336bf81370bca55872c8c75ccd573d8ca391
ex_to_dex_compiler.cc
|
0b12b9318c29d7c32d5a605e0b1dc309872c8a37 |
31-Jul-2013 |
buzbee <buzbee@google.com> |
resolved conflicts for merge of 2724776a to dalvik-dev Change-Id: I7f55e92b7d4d2c57812bc6eb7daa7bb5b77cacc2
|
2724776ad521eebb1c7f0e4be56d6e6ab4764f86 |
28-Jul-2013 |
buzbee <buzbee@google.com> |
Support inline dex data, take 2 Allow switch and array data blocks to appear interspersed with Dex code (rather than just at the end). Bug 10040419 Change-Id: Ia2850070f0e702381eb402f604d675e5a0b101de
ir_graph.cc
|
7655f29fabc0a12765de828914a18314382e5a35 |
29-Jul-2013 |
Ian Rogers <irogers@google.com> |
Portable refactorings. Separate quick from portable entrypoints. Move architectural dependencies into arch. Change-Id: I9adbc0a9782e2959fdc3308215f01e3107632b7c
uick/arm/call_arm.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
|
166db04e259ca51838c311891598664deeed85ad |
26-Jul-2013 |
Ian Rogers <irogers@google.com> |
Move assembler out of runtime into compiler/utils. Other directory layout bits of clean up. There is still work to separate quick and portable in some files (e.g. argument visitor, proxy..). Change-Id: If8fecffda8ba5c4c47a035f0c622c538c6b58351
uick/arm/call_arm.cc
uick/arm/int_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
|
46a1270fad27d81904ed60d0df56761356af500d |
27-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Revert "Support inline dex data" This reverts commit 728328a441c6d3172283f3e44d120550997b5887.
ir_graph.cc
|
64d8f18c94b23cb4ff908304aef4d9f3f5a85f39 |
27-Jul-2013 |
buzbee <buzbee@google.com> |
Merge "Support inline dex data"
|
728328a441c6d3172283f3e44d120550997b5887 |
27-Jul-2013 |
buzbee <buzbee@google.com> |
Support inline dex data Dx always places switch table and array data following executable code. However, embedding data inline appears to be legal - and the Garmin Connect app does this. Unknown is what tool generated the odd dex code. This CL reworks dex parsing to support inline data. Further, a verification check to require a move-exception at the beginning of catch regions is disabled. Dalvik's verifier appears to only require that if a move-exception exists, it must be at the beginning of the catch. If there is value to the check requiring a move-exception, we'll need to enable it based on a future dex version. Change-Id: I80c78544993acb999f7c62d32479c3c8455b56cb
ir_graph.cc
|
7934ac288acfb2552bb0b06ec1f61e5820d924a4 |
26-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/comments issues Change-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496
rena_allocator.h
ompiler_enums.h
ataflow_iterator.h
ex_to_dex_compiler.cc
rontend.cc
rontend.h
ocal_value_numbering.h
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/arm_lir.h
uick/arm/call_arm.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
sa_transformation.cc
reg_analysis.cc
|
2b1de652896040e3049814da91c835b2b500af55 |
20-Jul-2013 |
buzbee <buzbee@google.com> |
am 479f83c1: Dex compiler: re-enable method pattern matching * commit '479f83c196d5a95e36196eac548dc6019e70a5be': Dex compiler: re-enable method pattern matching
|
ebd66389dacec3118232fbd426c70dbed573cff1 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 4274889d: Fixing cpplint readability/check issues * commit '4274889d48ef82369bf2c1ca70d84689b4f9e93a': Fixing cpplint readability/check issues
|
ac43ae545ffca66aac813ed3e6ab54e3559b5e4e |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 2d88862f: Fixing cpplint readability/casting issues * commit '2d88862f0752a7a0e65145b088f49dabd49d4284': Fixing cpplint readability/casting issues
|
58d8b956e7d83bb1b219405be87e135c89b9cdb2 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 02c8cc6d: Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues * commit '02c8cc6d1312a2b55533f02f6369dc7c94672f90': Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues
|
5775391897aa290d96ad903ddbe00f66e7a6a4f8 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 6f485c62: Fix cpplint whitespace/indent issues * commit '6f485c62b9cfce3ab71020c646ab9f48d9d29d6d': Fix cpplint whitespace/indent issues
|
d0b495921acbe890892eddd6a7b055acee3d6505 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 9b7085a4: Fix cpplint readability/braces issues * commit '9b7085a4e7c40e7fa01932ea1647a4a33ac1c585': Fix cpplint readability/braces issues
|
fbf49d27f4a4e74c5901899a1c4879946b7bdf4e |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
resolved conflicts for merge of 50af9793 to dalvik-dev Change-Id: I13e7db2b4d4340d2c1a9994a4c6277f04e19d9fb
|
479f83c196d5a95e36196eac548dc6019e70a5be |
19-Jul-2013 |
buzbee <buzbee@google.com> |
Dex compiler: re-enable method pattern matching The dex compiler's mechanism to detect simple methods and emit streamlined code was disabled during the last big restructuring (there was a question of how to make it useful for Portable as well as Quick). This CL does not address the Portable question, but turns the optimization back on for Quick. See b/9428200 Change-Id: I9f25b41219d7a243ec64efb18278e5a874766f4d
ir_graph.cc
ir_graph.h
uick/codegen_util.cc
|
4274889d48ef82369bf2c1ca70d84689b4f9e93a |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fixing cpplint readability/check issues Change-Id: Ia81db7238b4a13ff2e585aaac9d5e3e91df1e3e0
ir_graph.cc
uick/arm/int_arm.cc
|
2d88862f0752a7a0e65145b088f49dabd49d4284 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fixing cpplint readability/casting issues Change-Id: I6821da0e23737995a9b884a04e9b63fac640cd05
uick/codegen_util.cc
uick/gen_invoke.cc
|
02c8cc6d1312a2b55533f02f6369dc7c94672f90 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fixing cpplint whitespace/blank_line, whitespace/end_of_line, whitespace/labels, whitespace/semicolon issues Change-Id: Ide4f8ea608338b3fed528de7582cfeb2011997b6
ir_graph.cc
ir_optimization.cc
uick/codegen_util.cc
uick/ralloc_util.cc
reg_analysis.cc
|
6f485c62b9cfce3ab71020c646ab9f48d9d29d6d |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/indent issues Change-Id: I7c1647f0c39e1e065ca5820f9b79998691ba40b1
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/call_arm.cc
uick/arm/utility_arm.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
|
9b7085a4e7c40e7fa01932ea1647a4a33ac1c585 |
19-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint readability/braces issues Change-Id: I56b88956510077b0e13aad4caee8898313fab55b
rena_allocator.h
rena_bit_vector.h
ackend.h
ex_to_dex_compiler.cc
rontend.cc
rowable_array.h
ocal_value_numbering.h
ir_graph.cc
uick/arm/utility_arm.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
|
38f85e4892f6504971bde994fec81fd61780ac30 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/operators issues Change-Id: I730bd87b476bfa36e93b42e816ef358006b69ba5
ir_dataflow.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/mips/assemble_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/ralloc_util.cc
reg_analysis.cc
|
e3409880554bdefe8f0392e949315d234478ab8a |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 1895ea38: Fix cpplint readability/fn_size issues * commit '1895ea386ca78573302483f589ebabd8ce1480e7': Fix cpplint readability/fn_size issues
|
1895ea386ca78573302483f589ebabd8ce1480e7 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint readability/fn_size issues Change-Id: I1efdb07a948a2af49db1a9d21ccab16dacc03a54
ortable/mir_to_gbc.cc
uick/mir_to_lir.cc
|
b9070095218595a5d6a37ef874df2794c1761030 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
resolved conflicts for merge of df62950e to dalvik-dev Change-Id: I78fbcfc7a2dcbeccb7557ca27302928d7d00debd
|
08524597899d0bb021c9165218deff51dc88da50 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 0cd7ec2d: Fix cpplint whitespace/blank_line issues * commit '0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c': Fix cpplint whitespace/blank_line issues
|
df62950e7a32031b82360c407d46a37b94188fbb |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/parens issues Change-Id: Ifc678d59a8bed24ffddde5a0e543620b17b0aba9
rena_bit_vector.h
ataflow_iterator.h
rontend.cc
ir_dataflow.cc
ir_graph.cc
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/utility_x86.cc
sa_transformation.cc
reg_analysis.cc
|
0cd7ec2dcd8d7ba30bf3ca420b40dac52849876c |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/blank_line issues Change-Id: Ice937e95e23dd622c17054551d4ae4cebd0ef8a2
rena_allocator.h
rena_bit_vector.h
ackend.h
ataflow_iterator.h
rowable_array.h
ocal_value_numbering.cc
ocal_value_numbering.h
ir_graph.cc
ir_graph.h
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
uick/arm/assemble_arm.cc
uick/codegen_util.cc
uick/gen_invoke.cc
uick/local_optimizations.cc
uick/mips/codegen_mips.h
uick/mir_to_lir.h
uick/x86/codegen_x86.h
sa_transformation.cc
|
073deb8dda59ba42ad563f0453daa09a359edef7 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am f69863b3: Fix cpplint whitespace/newline issues * commit 'f69863b3039fc621ff4250e262d2a024d5e79ec8': Fix cpplint whitespace/newline issues
|
f69863b3039fc621ff4250e262d2a024d5e79ec8 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/newline issues Change-Id: Ie2049d9f667339e41f36c4f5d09f0d10d8d2c762
rontend.cc
uick/codegen_util.cc
uick/mips/utility_mips.cc
|
b267c89acd0fcda0e8e2a9eeaeeed9ee048d1abc |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 93ba893c: Fix cpplint runtime/explicit issues * commit '93ba893c20532990a430741e0a97212900094e8c': Fix cpplint runtime/explicit issues
|
397f477582243bdffed603a73ff5a06ee295d7fb |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am b1eba213: Fix cpplint whitespace/comma issues * commit 'b1eba213afaf7fa6445de863ddc9680ab99762ea': Fix cpplint whitespace/comma issues
|
98c19d201b83119cbadd9aa3966fd0fb86064813 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am 2ce745c0: Fix cpplint whitespace/braces issues * commit '2ce745c06271d5223d57dbf08117b20d5b60694a': Fix cpplint whitespace/braces issues
|
93ba893c20532990a430741e0a97212900094e8c |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint runtime/explicit issues Change-Id: I352ba0b427f1ff9b22887693952b180eae0839ba
rena_allocator.h
rena_bit_vector.h
ackend.h
rowable_array.h
ocal_value_numbering.h
|
b1eba213afaf7fa6445de863ddc9680ab99762ea |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/comma issues Change-Id: I456fc8d80371d6dfc07e6d109b7f478c25602b65
ir_graph.cc
ir_optimization.cc
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/x86/assemble_x86.cc
uick/x86/x86_lir.h
reg_analysis.cc
|
2ce745c06271d5223d57dbf08117b20d5b60694a |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix cpplint whitespace/braces issues Change-Id: Ide80939faf8e8690d8842dde8133902ac725ed1a
rena_allocator.h
rena_bit_vector.cc
ataflow_iterator.h
rontend.cc
ocal_value_numbering.cc
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/call_x86.cc
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
sa_transformation.cc
reg_analysis.cc
|
42425b3a8befe092199fde69c95833e31db8fec9 |
18-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
am fc0e3219: Fix multiple inclusion guards to match new pathnames * commit 'fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d': Fix multiple inclusion guards to match new pathnames
|
fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d |
17-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix multiple inclusion guards to match new pathnames Change-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43
rena_allocator.h
rena_bit_vector.h
ackend.h
ompiler_enums.h
ompiler_internals.h
ompiler_ir.h
ataflow_iterator-inl.h
ataflow_iterator.h
rontend.h
rowable_array.h
ocal_value_numbering.h
ir_graph.h
ortable/mir_to_gbc.h
uick/arm/arm_lir.h
uick/arm/codegen_arm.h
uick/mips/codegen_mips.h
uick/mips/mips_lir.h
uick/mir_to_lir-inl.h
uick/mir_to_lir.h
uick/x86/codegen_x86.h
uick/x86/x86_lir.h
|
543959c9ede4c09ffaf8749a612a9ac31d6dd356 |
03-Jul-2013 |
Sebastien Hertz <shertz@google.com> |
Support check-cast elision in DEX-to-DEX compiler. Bug: 9648428 Replaces safe check-cast by 2 consecutive nop instructions. Change-Id: I2cd99c629a6a00a6e0effc853c3439bc92683d6d
ex_to_dex_compiler.cc
|
7940e44f4517de5e2634a7e07d58d0fb26160513 |
12-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Create separate Android.mk for main build targets The runtime, compiler, dex2oat, and oatdump now are in seperate trees to prevent dependency creep. They can now be individually built without rebuilding the rest of the art projects. dalvikvm and jdwpspy were already this way. Builds in the art directory should behave as before, building everything including tests. Change-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81
rena_allocator.cc
rena_allocator.h
rena_bit_vector.cc
rena_bit_vector.h
ackend.h
ompiler_enums.h
ompiler_internals.h
ompiler_ir.h
ataflow_iterator-inl.h
ataflow_iterator.h
ex_to_dex_compiler.cc
rontend.cc
rontend.h
rowable_array.h
ocal_value_numbering.cc
ocal_value_numbering.h
ir_dataflow.cc
ir_graph.cc
ir_graph.h
ir_optimization.cc
ortable/mir_to_gbc.cc
ortable/mir_to_gbc.h
uick/arm/arm_lir.h
uick/arm/assemble_arm.cc
uick/arm/call_arm.cc
uick/arm/codegen_arm.h
uick/arm/fp_arm.cc
uick/arm/int_arm.cc
uick/arm/target_arm.cc
uick/arm/utility_arm.cc
uick/codegen_util.cc
uick/gen_common.cc
uick/gen_invoke.cc
uick/gen_loadstore.cc
uick/local_optimizations.cc
uick/mips/README.mips
uick/mips/assemble_mips.cc
uick/mips/call_mips.cc
uick/mips/codegen_mips.h
uick/mips/fp_mips.cc
uick/mips/int_mips.cc
uick/mips/mips_lir.h
uick/mips/target_mips.cc
uick/mips/utility_mips.cc
uick/mir_to_lir-inl.h
uick/mir_to_lir.cc
uick/mir_to_lir.h
uick/ralloc_util.cc
uick/x86/assemble_x86.cc
uick/x86/call_x86.cc
uick/x86/codegen_x86.h
uick/x86/fp_x86.cc
uick/x86/int_x86.cc
uick/x86/target_x86.cc
uick/x86/utility_x86.cc
uick/x86/x86_lir.h
sa_transformation.cc
reg_analysis.cc
|