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 Prevent accessing past the end of the intervals vector, this fixes 2004-12-04 01:22:09 +00:00
LiveInterval.h Fix typeo 2004-11-18 04:31:10 +00:00
LiveIntervalAnalysis.cpp Silence warnings from VS 2005-01-08 19:55:00 +00:00
LiveIntervalAnalysis.h For PR387:\ 2004-12-07 04:03:45 +00:00
LiveVariables.cpp Just in case, handle something that is both a use and a def. 2005-01-19 17:11:51 +00:00
MachineBasicBlock.cpp Improve conformance with the Misha spelling benchmark suite 2005-01-30 00:09:23 +00:00
MachineCodeEmitter.cpp Fix the FIXME, nuke the JIT specific forceCompilationOf method. 2004-11-22 21:54:35 +00:00
MachineFunction.cpp Improve conformance with the Misha spelling benchmark suite 2005-01-30 00:09:23 +00:00
MachineInstr.cpp Allow machine operands to represent global variables with offsets. This is 2004-10-15 04:38:41 +00:00
Makefile Change Library Names Not To Conflict With Others When Installed 2004-10-27 23:18:45 +00:00
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 Update these register allocators to set the PhysRegUsed info in MachineFunction. 2005-01-23 22:45:13 +00:00
RegAllocLinearScan.cpp Update these register allocators to set the PhysRegUsed info in MachineFunction. 2005-01-23 22:45:13 +00:00
RegAllocLocal.cpp Update this pass to set PhysRegsUsed info in MachineFunction. 2005-01-23 22:51:56 +00:00
RegAllocSimple.cpp Update physregsused info. 2005-01-23 22:55:45 +00:00
TwoAddressInstructionPass.cpp Use the TargetInstrInfo::commuteInstruction method to commute instructions 2005-01-19 07:08:42 +00:00
UnreachableBlockElim.cpp
VirtRegMap.cpp Update these register allocators to set the PhysRegUsed info in MachineFunction. 2005-01-23 22:45:13 +00:00
VirtRegMap.h When a virtual register is folded into an instruction, keep track of whether 2004-10-01 23:15:36 +00:00