Normalement, l'idée c'est d'essayer d'abord avec la longueur minimale, puis de "relaxer" en des longueurs plus longues là où c'est nécessaire. Si tu commences par la longueur la plus longue, puis optimises (comme le fait
ld-tigcc d'ailleurs), tu peux te retrouver avec un cas comme:
lbl_1:
bra lbl_2
...
bra lbl1
lbl2:
que tu ne peux pas optimiser en optimisant un branchement à la fois parce que tu dois optimiser les 2 en même temps pour que ça rentre (le problème se produit quand ... a exactement la longueur maximale). Le désavantage de la méthode de relaxation, c'est que le code créé au départ n'est pas valide, ce n'est qu'à relaxation terminée qu'il est valide. Avec la méthode d'optimisation, le code est valide à toutes les étapes. Mais vu ton offset maximal très petit, le cas problème risque d'être assez fréquent et donc de te faire perdre pas mal de place si tu utilises la méthode d'optimisation.
Il me semble que
GNU as utilise la méthode de relaxation pour les références internes au fichier.