No longer conservatively assume a load/store accesses the stack when we can prove that we did not compute any stack-relative address up to this point in the program.
We do this in a cheap not-quite-a-dataflow-analysis: Assume NoStackAddressUsed when all predecessors of a block already guarantee it. Process blocks in reverse post order to guarantee that except for loop headers we have processed all predecessors of a block before processing the block itself. For loops we accept the conservative answer as they are unlikely to be shrink-wrappable anyway.
Was wondering if its worth removing this complex expression with the patch in place, but it's hard to argue that there could be examples where this helps placing the epilogue, so I left it in for now...