LLVM backend for 6502
Go to file
Dan Gohman 279c22e6da Optimized FCMP_OEQ and FCMP_UNE for x86.
Where previously LLVM might emit code like this:

        ucomisd %xmm1, %xmm0
        setne   %al
        setp    %cl
        orb     %al, %cl
        jne     .LBB4_2

it now emits this:

        ucomisd %xmm1, %xmm0
        jne     .LBB4_2
        jp      .LBB4_2

It has fewer instructions and uses fewer registers, but it does
have more branches. And in the case that this code is followed by
a non-fallthrough edge, it may be followed by a jmp instruction,
resulting in three branch instructions in sequence. Some effort
is made to avoid this situation.

To achieve this, X86ISelLowering.cpp now recognizes FCMP_OEQ and
FCMP_UNE in lowered form, and replace them with code that emits
two branches, except in the case where it would require converting
a fall-through edge to an explicit branch.

Also, X86InstrInfo.cpp's branch analysis and transform code now
knows now to handle blocks with multiple conditional branches. It
uses loops instead of having fixed checks for up to two
instructions. It can now analyze and transform code generated
from FCMP_OEQ and FCMP_UNE.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57873 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-21 03:29:32 +00:00
autoconf Fix configure issue where configure 2008-10-07 22:21:03 +00:00
bindings PR2731: C and Ocaml bindings for setTailCall and isTailCall. 2008-08-30 16:34:54 +00:00
cmake CMake: Builds all targets. 2008-09-26 04:40:32 +00:00
docs Fix spelling error. 2008-10-20 08:45:34 +00:00
examples CMake: Builds all examples. Corrected name of CBackend target. 2008-09-26 19:48:03 +00:00
include Add skeleton for the pre-register allocation live interval splitting pass. 2008-10-20 21:44:59 +00:00
lib Optimized FCMP_OEQ and FCMP_UNE for x86. 2008-10-21 03:29:32 +00:00
projects Add "sample" documentation to sample project. 2008-09-15 05:31:29 +00:00
runtime
test Optimized FCMP_OEQ and FCMP_UNE for x86. 2008-10-21 03:29:32 +00:00
tools Re-apply Makefile changes. Fix build with srcdir != objdir. 2008-10-16 14:02:29 +00:00
utils Add RCBarriers to TargetInstrDesc. It's a list of register classes the given instruction can "clobber". For example, on x86 the call instruction can modify all of the XMM and fp stack registers. 2008-10-17 21:00:09 +00:00
website
win32 update win32 project file, patch provided by OvermindDL1 on llvmdev. 2008-10-11 22:14:59 +00:00
Xcode Remove Stacker.html from Xcode project. 2008-10-14 23:23:59 +00:00
build-for-llvm-top.sh
CMakeLists.txt Fun x86 encoding tricks: when adding an immediate value of 128, 2008-10-17 01:33:43 +00:00
configure Fix configure issue where configure 2008-10-07 22:21:03 +00:00
CREDITS.TXT Add another description to my entry. 2008-08-28 23:16:37 +00:00
LICENSE.TXT llvmc doesn't exist anymore, and llvmc2 doesn't have a special license file. 2008-06-20 20:05:57 +00:00
llvm.spec.in
Makefile Add support for Canadian Cross builds where the host executables are not 2008-10-02 22:56:44 +00:00
Makefile.common
Makefile.config.in Add support for Canadian Cross builds where the host executables are not 2008-10-02 22:56:44 +00:00
Makefile.rules Fun x86 encoding tricks: when adding an immediate value of 128, 2008-10-17 01:33:43 +00:00
ModuleInfo.txt
README.txt Remove extra lines 2008-07-28 20:50:25 +00:00

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level 
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments. 

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the HTML documentation provided in docs/index.html for further
assistance with LLVM.