40fc2a8ba2e0b86c7a7c16dcd2eaa8a9985efbbb |
|
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
|
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
|
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
|
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>
|
293caab66e9b1e4129843f6bdeb31353bb77ccef |
|
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 (cherry picked from 0a810d2eab27cd097ebd09a44f0ce83aa608285b) Change-Id: I0764f47fa0aacfa89904a82e9528177b3ad67e31
|
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
|
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
|
f418f3227e0001c8d75257ceff0c248cc406d81a |
|
09-Jul-2014 |
Vladimir Marko <vmarko@google.com> |
Handle potential <clinit>() correctly in LVN. Bug: 16177324 Change-Id: I727ab6ce9aa9a608fe570cf391a6b732a12a8655
|
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>
|
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
|
b20d24ddba9b9857dedddca04807d1bb8fe75b4b |
|
28-Mar-2014 |
Brian Carlstrom <bdc@google.com> |
Error when taking the modulo of the length of an array Bug: 13679511 Change-Id: I4c694a9d85727af8095091c42f1ac00a78ba4ea2
|
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>
|
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>
|
6a8958d3fd92fc346ade4776ce910599772a757a |
|
20-Mar-2014 |
buzbee <buzbee@google.com> |
Fix message in 083-compiler_regressions test Fix test failure message to reflect expected result. Change-Id: I75ae3e882671aa429ecb17487188720c19ff4d32
|
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
|
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
|
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>
|
db40632b3d44f17be29ca100aeed1bcdcc39c827 |
|
19-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Add tests for null check elimination by local value numbering. Change-Id: I0c3355b3c38b8830fffe2233ede7f6a35488b6fe
|
8017ef8760555c7d0ae65d5f2ec6a8f093e7dbb0 |
|
10-Feb-2014 |
Vladimir Marko <vmarko@google.com> |
Add wide setter test with preceding parameters as int. Change-Id: Ieeef0318d140aad963f75e5d14938e5e7a9eec41
|
116848d335141a8f638253cf140846f8825aefd8 |
|
08-Feb-2014 |
Ian Rogers <irogers@google.com> |
Tweak test to better expose codegen bug. Place a non-zero value in high 32bits. Change-Id: I6ff42de39d56c4e4d6f44eb0001460ba6d58aa75
|
7befd0e35bbed32b90bc0c8b6d3fa8bd612f5506 |
|
04-Feb-2014 |
Mathieu Chartier <mathieuc@google.com> |
Update ART tests to handle new System.gc behavior Changed calls from System.gc to Runtime.getRuntime.gc where it was necessary. Required for: https://android-review.googlesource.com/#/c/80253/ Change-Id: I2b0622585da54229a6248e95d40134b6d18598a9
|
5a8e3d5e87aed128837fb84874d18a1f68e63397 |
|
11-Jul-2012 |
Elliott Hughes <enh@google.com> |
Bring over the new tests from https://android-review.googlesource.com/#/c/38771/. (The bug itself had already been fixed in art's compiler, because we always run compiled code. I've also removed the JIT warmup code.) Change-Id: I9d1d2b68f99dd06887146fdd05cb2e4537b4d5fc
|
97df07f9d743978909dca40b44f52a652021f8e9 |
|
28-Mar-2012 |
buzbee <buzbee@google.com> |
Fix getter/setter special case codegen The special-purpose code generators for simple methods that get or set and instance field and then return require that no throws are possible. The previous code incorrectly relied on the first argument being a "this" pointer, and thus previously null-checked. This did not take into account the possibility of a static method which happened to pass an object referece as it's first argument. The fix is to avoid making any assumptions, but rather rely solely on the results of the null-check elimination pass which will correctly recoginize the "this" case. Change-Id: Icf001a10a19234cf3f4d87cf1baede93fdf0360c
|
b25c3f6a86dc634ce44fb2849385b49465caa84d |
|
27-Mar-2012 |
Elliott Hughes <enh@google.com> |
Fix cpplint's whitespace complaints. Change-Id: I11fd2db2badf7bd98e7866ca2155d8ef1e112408
|
e62076c20b83f5983953d9526882250f3d5df87f |
|
21-Mar-2012 |
buzbee <buzbee@google.com> |
Fix special method codegen Tightened up the conditions under which we can generate frameless methods. Added and renamed test case. Added special handling for identity functions. Change-Id: I5b04ea222becefc151ef7ff6b255e58922ccd6f2
|