Commits

Andrew Trick committed 9a85a0254f1
Make CopyForwarding more conservative with destination addresses. AFAICT, this does not fix any existing bug, but eliminates unverified assumptions about well-formed SIL, which could be broken by future optimization. Forward: The optimization will replace all in-scope uses of the destination address with the source. With this change we will be sure not eliminate writes into a destination address unless the destination is an AllocStackInst. This hasn't been a problem in practice because the optimization requires an in-scope deinit of the destination address, which can't happen on typical address projections. Backward: The optimization will replace in-scope uses of the source with the destination. With this change we will be sure not to write into the destination location prior to the copy unless the destination is an AllocStackInst. This hasn't been a problem in practice because the optimization requires the copy to be an initialization of the address, which can't happen on typical address projections. This change prevents both optimizations without an obvious guarantee that any dependency on the destination address will manifest as a SIL-level dependence on the address producer. For example, init_enum_data_addr would not qualify because it simply projects an address within a value that may have other dependencies.