Removal of __builtin_unreachable calls were being handled in an inconsistent way, and Im not convinced always correctly.   This removes them in the ranger VRP pass, and sets the global range appropriately. This new approach should be consistent. After VRP runs, it uses ranger to query all the uses of every export affected by an edge leading to an unreachable builtin. It calculates their range at those use locations, and then verifies that the range at the end of the function also reflects those restrictions. If that all holds true, then the unreachable call is removed and the global range updated.  If that does not hold true, then the global range is not set as the condition guarding the unreachable is contextual. if this is also the final VRP pass, the unreachable call is removed regardless. Otherwise it is left so other pases can still pick up the contextual ranges This will only happen when ranger is the default VRP1 pass (not enabled yet), although this code will trigger to ensure all unreachables are removed in VRP2. Bootstrapped on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew