------- Comment #2 from jakub at gcc dot gnu dot org 2010-05-19 10:13 ------- RTL DSE doesn't handle this because the call to bar, which isn't a const function, is considered a wild read and thus makes all stores necessary in the global as well as local algorithm. RTL DSE doesn't consider whether a frame based address could have possibly address taken or not and whether a call thus might read it or not.
For tail calls before reload, perhaps we could handle tail calls similarly to const calls (be a read of all argument stores) with the addition that it would act as a read for all constant address stores (basically wild read for anything but frame based stores for the global algorithm, given that the stack is unwound before the tail call). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44194