llvm-6502/lib/CodeGen
Chris Lattner 84734ce8ef Fix a bug in the 'store fpimm, ptr' -> 'store intimm, ptr' handling code.
Changing 'op' here caused us to not enter the store into a map, causing
reemission of the code!!  In practice, a simple loop like this:

no_exit:                ; preds = %no_exit, %entry
        %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ]            ; <uint> [#uses=3]
        %tmp.4 = getelementptr "complex long double"* %P, uint %indvar, uint 0          ; <double*> [#uses=1]
        store double 0.000000e+00, double* %tmp.4
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
        %exitcond = seteq uint %indvar.next, %N         ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit

was being code gen'd to:

.LBBtest_1:     # no_exit
        movl %edx, %esi
        shll $4, %esi
        movl $0, 4(%eax,%esi)
        movl $0, (%eax,%esi)
        incl %edx
        movl $0, (%eax,%esi)
        movl $0, 4(%eax,%esi)
        cmpl %ecx, %edx
        jne .LBBtest_1  # no_exit

Note that we are doing 4 32-bit stores instead of 2.  Now we generate:

.LBBtest_1:     # no_exit
        movl %edx, %esi
        incl %esi
        shll $4, %edx
        movl $0, (%eax,%edx)
        movl $0, 4(%eax,%edx)
        cmpl %ecx, %esi
        movl %esi, %edx
        jne .LBBtest_1  # no_exit

This is much happier, though it would be even better if the increment of ESI
was scheduled after the compare :-/


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20265 91177308-0d34-0410-b5e6-96231b3b80d8
2005-02-22 07:23:39 +00:00
..
SelectionDAG Fix a bug in the 'store fpimm, ptr' -> 'store intimm, ptr' handling code. 2005-02-22 07:23:39 +00:00
AsmPrinter.cpp Print GEP offsets as signed values instead of unsigned values. On X86, this 2005-02-14 21:40:26 +00:00
BranchFolding.cpp
IntrinsicLowering.cpp
LiveInterval.cpp
LiveInterval.h
LiveIntervalAnalysis.cpp
LiveIntervalAnalysis.h
LiveVariables.cpp
MachineBasicBlock.cpp Improve conformance with the Misha spelling benchmark suite 2005-01-30 00:09:23 +00:00
MachineCodeEmitter.cpp
MachineFunction.cpp Improve conformance with the Misha spelling benchmark suite 2005-01-30 00:09:23 +00:00
MachineInstr.cpp
Makefile
Passes.cpp
PHIElimination.cpp
PhysRegTracker.h
PrologEpilogInserter.cpp Simplify/speedup the PEI by not having to scan for uses of the callee saved 2005-01-23 23:13:12 +00:00
RegAllocIterativeScan.cpp
RegAllocLinearScan.cpp
RegAllocLocal.cpp
RegAllocSimple.cpp Update physregsused info. 2005-01-23 22:55:45 +00:00
TwoAddressInstructionPass.cpp
UnreachableBlockElim.cpp
VirtRegMap.cpp
VirtRegMap.h