History log of /art/test/083-compiler-regressions/src/Main.java
Revision Date Author Comments
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