If a call-site has a single predecessor, we can simply use more constrained
arguments if its argument is predicated from the single predecessor.
return canSplitCallSite(CS) && (tryToSplitOnPredicatedArgument(CS) ||
Is CallSiteSplitting the right place to do this? Wouldn't it be a better fit for more general constraint propagation, like correlated value propagation/ LazyValueInfo?
instcombine now propagates nonnull in the cases mentioned here. I'll resign to clear up my pipeline.
Thanks Florian for the update.