Fixed issue #26965. The peephole optimization didn't move a potential register deallocation to after the ldr instruction causing mov's to be removed.

git-svn-id: trunk@28977 -
This commit is contained in:
Jeppe Johansen 2014-11-03 18:33:32 +00:00
parent fd97b53016
commit d3e91bb60c

View File

@ -563,6 +563,7 @@ Implementation
TmpUsedRegs: TAllUsedRegs;
tempop: tasmop;
oldreg: tregister;
dealloc: tai_regalloc;
function IsPowerOf2(const value: DWord): boolean; inline;
begin
@ -1250,6 +1251,13 @@ Implementation
if taicpu(hp1).oper[1]^.ref^.index = taicpu(p).oper[0]^.reg then
taicpu(hp1).oper[1]^.ref^.index := taicpu(p).oper[1]^.reg;
dealloc:=FindRegDeAlloc(taicpu(p).oper[1]^.reg, taicpu(p.Next));
if Assigned(dealloc) then
begin
asml.remove(dealloc);
asml.InsertAfter(dealloc,hp1);
end;
GetNextInstruction(p, hp1);
asml.remove(p);
p.free;