No conozco ningún análisis exhaustivo de tales consejos particulares. En cualquier caso, sería extremadamente específico de la CPU. En general, si está seguro de la probabilidad (por ejemplo,> 90%), entonces probablemente valga la pena agregar tales anotaciones, aunque las mejoras variarán mucho con el caso de uso específico.
Las CPU de escritorio modernas tienden a tener una predicción de bifurcación muy buena. Si su código está en una ruta caliente de todos modos, el predictor dinámico de bifurcación se dará cuenta rápidamente de que la bifurcación está sesgada por sí misma. Tales sugerencias son principalmente útiles para ayudar al predictor estático que se activa si no hay información dinámica disponible.
En x86, el predictor estático predice que las ramas hacia adelante no se tomarán y se tomarán ramas hacia atrás (ya que generalmente indican bucles). El compilador, por lo tanto, ajustará el diseño del código estático para que coincida con las predicciones. (Esto también puede ayudar a colocar la ruta caliente en líneas de caché adyacentes, lo que puede ayudar aún más.)
En PPC, algunas instrucciones de salto tienen un poco para predecir su probabilidad. No sé si el compilador también reorganizará el código.
No sé cómo las CPU ARM predicen las ramas. Como dispositivo de baja potencia, puede tener una predicción de bifurcación menos sofisticada y la predicción estática podría tener más impacto.
No creo que haya métricas fuertes, ya que es una micro-optimización, y dependerá de la frecuencia con la sugerencia correcta o no, del tamaño del código binario en los bloques 'if/else' y tal vez incluso la fase de la luna –
Esencialmente esto se asigna al predictor de bifurcación de la CPU; el tamaño del código binario es irrelevante. – MSalters
Para el rendimiento no tengo puntos de referencia, pero una cosa que puedo decir es que el ensamblador que es producido por gcc con tales pistas es mucho más claro. –