llvm-6502/lib
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
..
Analysis Trim #includes. 2008-10-16 20:18:31 +00:00
Archive Initial support for the CMake build system. 2008-09-22 01:08:49 +00:00
AsmParser regenerate 2008-10-15 12:05:02 +00:00
Bitcode Rename APFloat::convertToAPInt to bitcastToAPInt to 2008-10-09 18:53:47 +00:00
CodeGen Optimized FCMP_OEQ and FCMP_UNE for x86. 2008-10-21 03:29:32 +00:00
Debugger Initial support for the CMake build system. 2008-09-22 01:08:49 +00:00
ExecutionEngine little optimization: reuse getPointerToGlobalIfAvailable(CGV) value in emitGlobals() 2008-10-14 10:04:52 +00:00
Linker Also properly handle linking of strong alias and weak global 2008-10-15 20:10:50 +00:00
Support Fix command-line option printing to print two spaces where needed, 2008-10-14 20:25:08 +00:00
System Update the stub and callback code to handle lazy compilation. The stub 2008-10-20 21:39:23 +00:00
Target Optimized FCMP_OEQ and FCMP_UNE for x86. 2008-10-21 03:29:32 +00:00
Transforms Use Function::getEntryBlock() instead of Function::front(), for clarity. 2008-10-21 03:10:28 +00:00
VMCore Keep track of *which* input constraint matches an output 2008-10-17 16:47:46 +00:00
Makefile remove attribution from lib Makefiles. 2007-12-29 20:09:26 +00:00