The goal here is to disassociate adjust_range_from_scev from vr_values, and value_range_equiv while we're at it.
We've already done something similar with simplify_using_ranges, where we take in a "store" which is a class providing get_value_range(). Initially we set it up to take a vr_values, but the ultimate purpose was to have it work with either *vrp or the ranger. As such, I have abstracted out the get_value_range() method into its own abstract class from which vr_values inherits, and provides said method. As I did for the substitute_and_fold_engine, I future proofed get_value_range so it takes a gimple statement. This provides context for the SSA being queried. I purposely did not provide a default statement of NULL, as I want each caller to pass a statement if available. This patchset is divided in two: one patch to provide the additional argument to get_value_range and one to do the ripping apart in adjust_range_from_scev. I will discuss the SCEV part in the relevant patch. Aldy