Improve dead-variable elimination.

We will now consider any variable with no reads as a candidate for
elimination. This requires us to look inside expressions, but in
practice we only care about binary expressions since `a = b` is the
only way to write to a variable without also reading from it. (Even
`a *= b` is considered a read-write; that is relaxed at followup CL, further improving these results.)

Changes in various existing tests were added to counteract this
optimization; otherwise the output would have large portions missing.

Change-Id: I3bb62069f10ff244d0b10d993e913062197fcb04
Commit-Queue: Michael Ludwig <>
Reviewed-by: Michael Ludwig <>
Auto-Submit: John Stiles <>
22 files changed