kill dead stores when coalescing slots
This is necessary because, post fusion, dead stores may clobber data. A new test case exposes one such situation.
This commit is contained in:
parent
f1b21d145b
commit
9632f2f148
2 changed files with 64 additions and 5 deletions
32
test/mem2.ssa
Normal file
32
test/mem2.ssa
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Ember Sawady reported this bug
|
||||
# in stack-slot coalescing
|
||||
|
||||
type :t = { w 2 }
|
||||
|
||||
function :t $func() {
|
||||
@start.0
|
||||
%temp =l alloc4 4
|
||||
%ret =l alloc4 8
|
||||
storew 1, %temp
|
||||
# storew can also go here
|
||||
%field =l add %ret, 4
|
||||
storew 2, %ret
|
||||
blit %temp, %field, 4
|
||||
# removing either of these storews causes it to work
|
||||
storew 2, %ret
|
||||
ret %ret
|
||||
}
|
||||
|
||||
export function w $main() {
|
||||
@start
|
||||
%ret =:t call $func()
|
||||
%fptr =l add %ret, 4
|
||||
%field =w loaduw %fptr
|
||||
%x =w ceqw %field, 1
|
||||
jnz %x, @passed, @failed
|
||||
@failed
|
||||
# this fails despite 1 => temp => ret + 4 => field
|
||||
call $abort()
|
||||
@passed
|
||||
ret 0
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue