PredictableMemoryAccessOptimizations has become unmaintainable as-is.
RedundantLoadElimination does (almost) the same thing as PredictableMemoryAccessOptimizations.
It's not as powerful but good enough because PredictableMemoryAccessOptimizations is actually only needed for promoting integer values for mandatory constant propagation.
And most importantly: RedundantLoadElimination does not insert additional copies which was a big problem in PredictableMemoryAccessOptimizations.
Fixes rdar://142814676
Type annotations for instruction operands are omitted, e.g.
```
%3 = struct $S(%1, %2)
```
Operand types are redundant anyway and were only used for sanity checking in the SIL parser.
But: operand types _are_ printed if the definition of the operand value was not printed yet.
This happens:
* if the block with the definition appears after the block where the operand's instruction is located
* if a block or instruction is printed in isolation, e.g. in a debugger
The old behavior can be restored with `-Xllvm -sil-print-types`.
This option is added to many existing test files which check for operand types in their check-lines.
I think what happened here is that I originally was trying to change /all/
select_enum+cond_br to switch_enum. This implied I needed to change
SILGenFunction::emitBindOptional to use switch_enum. This caused all sorts of
problems since SILGenLValue uses emitBindOptional in a matter that requires the
input value to be used at +0 and wants to keep the value in memory. This
conflicted with other uses of emitBindOptional that really wanted to use
emitBindOptional as a +1 extract optional payload sort of thing. In the final
commit of +0-all-args, I just worked around this problem by creating a new
entrypoint just for the lvalue case that just uses select_enum_addr. So I think
my final commit, caused this test to go back to its original state. If it fails
again, I will look at it again.
rdar://38551973