Все они должны быть "безопасными", при условии, что ваш код хорошо определен.
Если вы не хотите специализироваться для определенного семейства процессоров, просто оставьте -march
и -mtune
в одиночестве;по умолчанию подходит универсальный x86_64.
PGO - это всегда хорошая идея, он в основном используется для избежания ветвлений.
LTO и -O3 могут по-разному влиять на разные кодовые базы.Например, если ваш код выигрывает от векторизации, то -O3 - это большая победа над -O2, но дополнительные встраивание и развертывание могут привести к большим размерам кода, что может быть недостатком в системах с более ограниченным кэшем.
В конце концов, единственный совет, который когда-либо здесь действительно что-то значит: измерить его и посмотреть, что хорошо для вашего кода.