And I would also suggest to come up with parameter that will drive minimum probability, maximum number of promotions and maybe minimal number of edge executions to consider a speculation.
Clang provides all these: https://github.com/microsoft/llvm-1/blob/master/lib/Analysis/IndirectCallPromotionAnalysis.cpp#L37 Martin