mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-06-14 17:29:32 +00:00
Don't invalidly eliminate certain stores of 0 to global/static variables.
This could happen in native-code peephole optimization if two stz instructions targeting different global/static locations occurred consecutively.
This was a regression introduced by commit a3170ea7
.
The following program demonstrates the problem:
#pragma optimize 1+2+8+64
int i,j=1;
int main (void) {
i = 0;
j = 0;
return j; /* should return 0 */
}
This commit is contained in:
parent
4e7a7e67e7
commit
5312843b93
17
Native.pas
17
Native.pas
|
@ -1740,13 +1740,16 @@ var
|
||||||
|
|
||||||
{ kws }
|
{ kws }
|
||||||
{ stz $xx, stz $xx }
|
{ stz $xx, stz $xx }
|
||||||
m_stz_abs, m_stz_absX, m_stz_dir, m_stz_dirX:
|
m_stz_abs, m_stz_absX:
|
||||||
if npeep[ns].opcode = npeep[ns+1].opcode then begin
|
if npeep[ns].opcode = npeep[ns+1].opcode then
|
||||||
if npeep[ns].operand = npeep[ns+1].operand then begin
|
if npeep[ns].operand = npeep[ns+1].operand then
|
||||||
Remove(ns+1)
|
if npeep[ns].name = npeep[ns+1].name then
|
||||||
end; {if}
|
Remove(ns+1);
|
||||||
|
|
||||||
end; {if}
|
m_stz_dir, m_stz_dirX:
|
||||||
|
if npeep[ns].opcode = npeep[ns+1].opcode then
|
||||||
|
if npeep[ns].operand = npeep[ns+1].operand then
|
||||||
|
Remove(ns+1);
|
||||||
|
|
||||||
otherwise: ;
|
otherwise: ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user