summaryrefslogtreecommitdiff
path: root/src/compiler
AgeCommit message (Collapse)Author
2012-11-01Fix Mips/x86 compilers buzbee
An incorrect conversion of an #ifdef to a runtime test broke division by literals for non-Arm targets. Change-Id: I0065606f668df8478fb33e55077fcc5b734cb3af
2012-11-01Merge "Remove all TARGET_[ARM|X86|MIPS] #ifdefs" into dalvik-dev buzbee
2012-11-01Remove all TARGET_[ARM|X86|MIPS] #ifdefs buzbee
Two steps forward, one step back towards elimination of the "#include" build model for target-specific compilers. This CL does some restructuring to eliminate all of the TARGET_xxx #ifdefs and convert them to run-time tests. Considerable work is still required to fully eliminate the multiple builds. In particular, much of the "common" codegen code relies on macros defined by the target-specific [Arm|X86|Mips]Lir.h include file. Next step is more restructuring to better isolate target-independent code generation code. Change-Id: If6efbde65c48031a48423344d8dc3e2ff2c4ad9d
2012-10-31Merge "Special for monkey debugging (#2)" into dalvik-dev buzbee
2012-10-31Special for monkey debugging (#2) buzbee
Restore some of the optimizations turned off by CL 245592 to see if there is any monkey run differences. This CL should be eventually reverted. Change-Id: I9990ba07c02ca5e0b4dfa4b1abfbecbe2cc1271c
2012-10-29Fix for MIPS long subtraction when source and destination are same. jeffhao
MIPS emulator boots and works now, passing all vm-tests except one invoke-super test. Change-Id: I3bd27f9a582412900c08f5771d5dd76749d9de89
2012-10-29Merge "A few more MIPS fixes. Emulator boots up with black screen." into ↵ jeffhao
dalvik-dev
2012-10-26Eliminate #ifdef ART_USE_QUICK_COMPILER buzbee
One of several steps towards having a single compiler build. In this CL, we introduce a compiler_backend command-line option to select between Quick, Quick w/ GBC, Portable and Iceland back ends. The Iceland option is temporary, and will go away once we combine with Portable. The Quick variants are with and without GBC conversion. In time, those will converge to a single option. All uses of "#if defined(ART_USE_QUICK_COMPILER)" are eliminated. All previous uses in the Quick compiler have been converted to runtime tests. On the llvm side, ART_USE_QUICK_COMPILER was previously used to differentiate between Portable and Iceland builds. Those usages have been replaced with ART_USE_PORTABLE_COMPILER, and in a following CL will also be converted to run-time tests. As of this CL, we're still generating separate libraries for Quick and Portable/Iceland. Next up is elminating the target-specific libraries for Quick-arm, Quick-x86 and Quick-mips. Once that is complete, we will consoldate Quick and Portable into a single build. To build either Iceland or Portable, touch USE_PORTABLE_COMPILER or USE_LLVM_COMPILER as usual. Otherwise, the build will default to Quick (non-GBC). Change-Id: Ic86c56f51710c9b06d4430b71a429ae12903cc47
2012-10-25A few more MIPS fixes. Emulator boots up with black screen. jeffhao
The emulator no longer reboots on startup, though the screen remains black. In this change: - Fixed compilation of kMipsDelta. - Fixed resolution trampoline to call with reg T9 so GP can be calculated properly. - Supress DescribeLocks on proxy methods to allow stack dumping (not MIPS specific). Change-Id: I66ef62002e3ffba5a253e94a5300d022f9345934
2012-10-24Special for monkey debugging buzbee
Turn off optimization for a problematic method to see if it changes monkey behavior. This CL should be reverted after the monkey run completes. Change-Id: Id0abc48ae15cf3bf8d0aaf999b2ba803adb788b5
2012-10-22More MIPS fixes. Many run-test tests pass. jeffhao
Run-test tests 001-043 work, including 003-omnibus-opcodes. 044 is proxy, which is still broken. Changes made: - Fixed argument marshalling of FP values for calls to helper functions in the compiler. - Fixed CheckCast compilation's mistaken use of rARG0 instead of rRET0. - Fixed conversion calls to marshall FP arguments properly. - Created named values for FP args, though they differ in MIPS only. - Fixed assembly to always use T9 to hold code pointer to jump to. - Fixed proxy offset values. Change-Id: If121db322683a307e5a1016210f4f73283aa817c
2012-10-18More MIPS fixes. Most basic tests pass. jeffhao
IntMath works now. The only basic tests that aren't working are ReferenceMap and StackWalk. In this change: - Fixed argument passing for compare float/double. - Set method stubs for long multiply/divide/remainder. - Store gp value on stack and reload after function call to preserve value for exception delivery. - Fixed argument passing to artThrowStackOverflowFromCode. - Fixed assembly for unsigned shift right long. Change-Id: I6e77454905c3620c9cfd1c089200a8dbe530df2e
2012-10-18More MIPS fixes. Fibonacci and ExceptionTest work. jeffhao
In this change: - Fixed compilation of div-int and instance-of - Fixed VERIFY_OBJECT to compile again - Added stack space for passing extra function arguments for REF_ONLY_CALLEE_SAVE functions - Fixed AbstractMethodErrorStub to match stack layout Change-Id: I3d4540a3285a0acf49522ffc6f01d04b888bb8ef
2012-10-12Merge "Numerous fixes to MIPS. Basic oatexec works." into dalvik-dev jeffhao
2012-10-12Numerous fixes to MIPS. Basic oatexec works. jeffhao
- Fixed reversed base and destination reg in genConstString - Changed compiler to use T9 to hold address to jump to - Fixed compilation of instruction getting current PC - Prevented T9 from being used as a compiler temp - Fixed loadBaseDispBody for long form single loads - Fixed stack setup for SaveAll callee methods to save rSELF & rSUSPEND - Added .cpload directive to assembly to regenerate $gp when overwritten - Fixed passing of extra arguments on the stack to account for space reserved for $a0-$a3 - Fixed resolution trampoline to properly setup and restore stack - Created mips stubs for interface trampoline and unresolved direct method trampoline Change-Id: I63a3fd0366bdfabdebebf58ec4b8bc9443cec355
2012-10-12Fix LLVM build. Shih-wei Liao
Change-Id: Id49a1c13fa44cb1d7638cb8601fbf55b2f3770d6
2012-10-11Enable multi-threaded Quick compilation buzbee
Reuse thread-local copies of llvm context data for Quick compiler (while continuing to regenerate fresh ones per method for Portable). This is a transitional CL - the upcoming compiler driver change is expected to pass pass a thread context structure to each compiler worker thread rather than use the pthread_key mechanism. Change-Id: I277920a5c2705748c3a9f37ceace53c903747ec2
2012-10-09Fast path interface dispatch. Ian Rogers
Interface dispatch when the method we're dispatching against is known currently goes slow path. This change makes the load of the interface method either a load of a constant or from the resolve methods table. It also makes the null check on the "this" pointer inline. Change-Id: I69571a062d3d693bee2dec6e46a456e0f74411cd
2012-10-08Refactor and remove copy mark bits. Mathieu Chartier
Refactor code GC realted code to be in a GC folder. Remove copy mark bits by using pointer changing instead. Enable concurrent sweeping of system weaks. Fix non concurrent GC plan. Change-Id: I9c71478be27d21a75f8a4e6af6faabe896e5e263
2012-10-04Quick: fix tranmission of block info buzbee
When operating on the Quick path, we use named basic blocks to transmit the original Dalvik offset and block type. However, not all blocks are named. Code changed to handle that case. Change-Id: Ibeafc18ac83e2d8d6dcf70d0f2dcfebeafc84b8f
2012-10-03Merge "Fix endianness of compiled code and stacks of stubs for MIPS." into ↵ jeffhao
dalvik-dev
2012-10-03Fix endianness of compiled code and stacks of stubs for MIPS. jeffhao
The gtests now all work on MIPS. Change-Id: I2883ce002f23d75e700366014517c863fb626d09
2012-10-02Enable bitcode verification for debug builds buzbee
Turn bitcode function verification on for debug Quick and Portable builds. Also in this CL, some sanity checking for the dex2pc table and a temporary workaround for excessive filename lengths for bitcode file dumps. Change-Id: I430ed28824b078c03be7826cb13876cdcb8a0fec
2012-09-28Split dex_pc<->native_pc mapping table Bill Buzbee
First of 2 related CLs - this one moves to a split table, a future CL will compress the table to save image space. The current MappingTable mixes two flavors of entries: dex->pc and pc(return address)->dex. The problem is that we can have two entries with the same native pc address but two different dex pcs. The reason is that when we go from native pc to dex, the native pc is actually the return address from the previous call, whereas when we go from dex to native pc, the mapping refers to the first native instruction of the sequence. Previously, the first entry in the mapping table was the number of subsequent entries. That will remain the same, but now the second entry will be a count of the number of entries in the pc->dex section of the table. The difference between the two counts gives us the number of entries in the following dex->pc section. Change-Id: Ibadb96cb50bf1f93e079dff3832130b9f9782723
2012-09-28Make dex instruction size a lookup. Ian Rogers
Add ostream operators for dex instruction enums. Move simple methods to header file. Change-Id: I9644bfb975896a491ee73ef9a8ef13c062c5fcbd
2012-09-26Use shorter opcodes on x86 for opCmpImmBranch. Ian Rogers
Gets instruction expansion from ~5.1 to ~4.9. Change-Id: I14719df1f256589035635edcc20e25ebd396657c
2012-09-25Move thread flags and state into 32bits. Ian Rogers
We need to ensure that transitions to Runnable are atomic wrt to a thread modifying the suspend count. Currently this is achieved by holding the thread_suspend_count_lock_. This change creates a set of bit flags that summarize that the suspend_count_ is raised and also others flags that signify the managed code should go into a slow path. The effect of this change are two-fold: 1) transitions from suspended to runnable can CAS the thread state rather than holding the suspend_count_lock_. This will make JNI transitions cheaper. 2) the exception/suspend/interpreter poll needed for shadow frames can be rolled into a single compare of the bit fields against 0. Change-Id: I589f84e3dca396c3db448bf32d814565acf3d11f
2012-09-21Merge "Change dex cache to be java object instead of array, add pointer to ↵ Ian Rogers
dex file in dex cache." into dalvik-dev
2012-09-21Change dex cache to be java object instead of array, add pointer to dex file ↵ Mathieu Chartier
in dex cache. Generic clean up to facilitate having GDB macros for Pretty* helper functions. Improved cleanliness of DexCache since having it as an object array was not the best solution. Fixed a bug in InOrderWalk caused by ResolveType sometimes allocating classes. Rename C++ Method to AbstractMethod and add two new classes Constructor, Method which both inherit from AbstractMethod. Rename done to have the C++ code be closer to the java code. Change-Id: I4995b4c5e47a3822192b08afa24a639d3b1f4da9
2012-09-21Allow more vregs in native GC map. Ian Rogers
Allow upto 65536 (2**13 * 8) vregs in a reference bitmap as this occurs in CTS tests. Achieve this by squeezing the numbers of bits used to say how large in bytes the native PC offset is down to 3 from 8. Change-Id: Ib0f1df7a492b771e01b0bd79d6648d46b60b5f78
2012-09-21Quick compiler: bug fix & cleanup buzbee
Fixed a bug in bitcode generation that was helpfully masked by gcc's -O2 optmization (code motion). Also removed quite a few fields and identifiers left over from the JIT, along with a couple of files that were meaningful for the JIT, but are no longer used. Change-Id: I7702b66d646c68aafb9669368c97e128ad045dc9
2012-09-21Merge "Quick compiler: fix array undershoot" into dalvik-dev buzbee
2012-09-20Quick compiler: fix array undershoot buzbee
Normal Dalvik vRegs range from 0..n. However, we use negative vReg positions to denote special values such as Method* and other things we might wish to promote. Failed to take this into account for some shadow frame bitcode conversion stuff. Yet another datapoint supporting the upcoming C++ification. Change-Id: I3a1714ac1a80763c048dda3ae95125fc6082202b
2012-09-20NativePcOffsetToReferenceMap Ian Rogers
Rather than translate a native PC to a Dex PC and then to the reference bitmap, just go straight from the native PC to the reference bitmap. Encode the native PC offsets using a hash rather than linearly searching. Change-Id: Iee1073d93c941c0a31f639e5f23cea9e9f747bee
2012-09-18Sqrt intrinsic Ian Rogers
Perform math intrinsics on StrictMath when appropriate following Dalvik change: https://android-review.googlesource.com/42932 Filter package name of intrinsic methods to reduce number of comparisons. Change-Id: Iff97c501d4386f76d3f2297406417fa3b76d0a8a
2012-09-15Overall clean up of gbc_expander and intrinsics. Shih-wei Liao
Change-Id: I4afbafbaa3f2ecb82a55e609b3f276225c06f117
2012-09-15Fix quick fly2iceland after rebase. TDYa127
Change-Id: I844f005782b3ecdcb52dc2484d44f4ae34e1c670
2012-09-15Fix Frontend.cc for running portable path. Shih-wei Liao
Change-Id: Ia7bcf71198941426a19d1f092a5ee51e16fffd55
2012-09-15Fix quick fly2iceland (code_size = 0) bug. TDYa127
Change-Id: I8c38d4dfb06885834c65a0d85673d9675cc504fb
2012-09-15Fix run-test 030. TDYa127
Change-Id: I87a819162d9705136c1dcad6424058ffbf033922
2012-09-15Always push shadowframe for stack trace lookup. Shih-wei Liao
Change-Id: I1a7249505aa6300fe47331e30772dde64cbe4df3
2012-09-15Portable path example interface buzbee
Here's an example of a simple interface to the common front-end for use by the portable path. Untested. Change-Id: Id444aaa1bc8e2e26b6b449e78be32dd053faa4df
2012-09-15Add suspend by ourselves to improve performance. TDYa127
Set shadow frame entry after invoke. Some reference is not in the shadow frame because of invoke/move-result fusing. Change-Id: I157eaad5be85a4a7f0d4ce89a960d52863df29ad
2012-09-15Implement Div/Rem/fptosi. TDYa127
Change-Id: I90be4c1139a9f11ad2378a293e5c243e57843bd9
2012-09-15Implement remaining intrinsics. TDYa127
Change-Id: I75e769ae51acfdb94734a9d91fada9b49dcf2e88
2012-09-15Code cleanup: Rewrite strange-looking if-else statement. Logan Chien
Change-Id: I8ff3d8f07c6d92e1169302e56c3e767c6fe6a7c7
2012-09-15GBC Expander. Removed lir. Shih-wei Liao
Change-Id: If8d13e36f1e6d82c2a7f7bfec62b8fb41fd8cdaa
2012-09-14Quick compiler code layout buzbee
Minor tweaks to the code layout for the Quick compiler. Repair damage caused by bitcode conversion & additionally add a new optimization pass to move unlikely targets to the end of the code (flipping branch conditons if necessary). For now, this will only be applied to target blocks which do an explicit throw and are dominated by a block terminated by a conditional branch. Later, we might want to generalize this capability to enable profile guidance. Also, tweaked the basic block combine pass to include blocks terminated by array access operations whose null check and range checks have been eliminated. With this CL, the run-time performance difference between art-buzbee and art-Quick is in the noise. Change-Id: Iaf9921220eb6cb33c2418c76e7a6b7b31472dace
2012-09-13Prune useless entries from dex to pc map buzbee
Step one of the change. Limit entries in the table to native code safepoint locations (which generally are the return PC addresses of any call that might trigger a stack walk and the start addresses of all catch blocks). Previously, the mapping_table described ranges. No longer. Any native PC located within compiled Dex code that is found in a stack walk should have an exact match in the table. In future CLs we'll add data compression (probably uLeb128) and may add inflation on first use to a faster access map (instead of the current linear search). Note that this CL introduces somewhat of a regression in the capabilities of oat-dump. Because the mapping table no longer associates each native intruction with its Dex counter-part, the native code disassembly no longer includes interspersed Dex disassembly. Note also that as of this CL, the compiler is adopting the 100-char line length limit used in the rest of Art. The 80-char limit should still be used in any code that we expect to upstream to llvm. Change-Id: I1beca4d57c41e8161bf746bc62abbce08d5bcb4d
2012-09-10Fix image size regression buzbee
The new basic block collapse pass marks the eliminated block as kDead. On the Quick side, we skip code generation for these blocks - but neglected to do so for the non-Quick build. The result: lots of extra useless unreachable code got generated - hence the image size bloat. Fixed, and good news is that we're now seeing the roughly the same decrease in image size that showed up in the Quick build. Change-Id: Ie8038cb8058020eefaae1085362a2f8345895284