diff options
author | Mark Mendell <mark.p.mendell@intel.com> | 2014-05-01 10:19:04 -0400 |
---|---|---|
committer | Mark Mendell <mark.p.mendell@intel.com> | 2014-05-06 09:09:41 -0400 |
commit | 752e205de95ca9d4f4e825173a3cefd831a3b933 (patch) | |
tree | fbcf4e66b55bf1b7ca9585c2a3cb4b9da4d70319 /compiler/llvm/compiler_llvm.cc | |
parent | 6ab0d9fe1abec72f5fe4841a8124fadf55400977 (diff) | |
download | android_art-752e205de95ca9d4f4e825173a3cefd831a3b933.tar.gz android_art-752e205de95ca9d4f4e825173a3cefd831a3b933.tar.bz2 android_art-752e205de95ca9d4f4e825173a3cefd831a3b933.zip |
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>
Diffstat (limited to 'compiler/llvm/compiler_llvm.cc')
0 files changed, 0 insertions, 0 deletions