summaryrefslogtreecommitdiffstats
path: root/compiler/llvm/compiler_llvm.cc
diff options
context:
space:
mode:
authorMark Mendell <mark.p.mendell@intel.com>2014-05-01 10:19:04 -0400
committerMark Mendell <mark.p.mendell@intel.com>2014-05-06 09:09:41 -0400
commit752e205de95ca9d4f4e825173a3cefd831a3b933 (patch)
treefbcf4e66b55bf1b7ca9585c2a3cb4b9da4d70319 /compiler/llvm/compiler_llvm.cc
parent6ab0d9fe1abec72f5fe4841a8124fadf55400977 (diff)
downloadandroid_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