Насколько хорошо Clang 20 может сделать вывод о вероятности ветвей без аннотаций?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Насколько хорошо Clang 20 может сделать вывод о вероятности ветвей без аннотаций?

Сообщение Anonymous »

У меня есть критическая база кода C ++, и я хочу улучшить (или, по крайней мере, измерить, если она стоит улучшить) вероятность, что Clang назначает филиалы, и в целом понимать, что он делает лучше (например, я не хочу перемещать код [[вероятно]] и [[неоднозначно]] , если это не необходимы, без необходимости, подобно нуждающемуся, такому не нуждающемуся в бок. Я использую Clang 20. Мне интересно: < /p>

Есть ли только две значимые вероятности (то есть, которые имеют отличное поведение), которые Clang может назначить для ветви, «вероятно» и «маловероятно», или есть больше? Например, существует ли «вероятная» вероятность того, что на практике есть часть поведения «вероятных» и некоторые из «маловероятных»? < /Li>
Как Clang выводит вероятность без контекста? Например, с учетом этой функции: < /li>
< /ul>

Код: Выделить всё

void foo() {
if (bar()) {
printf("bar is true, giving up\n");
return;
}
...
}
< /code>
решит, что небольшое количество, которое возвращается внутри него, может быть кодом обработки ошибок, и, таким образом, присвоить ему низкую вероятность? Что, если в IF-Statement вызывает функцию, помеченную __attribute __ ((CORD)) 
, функция с [[noreturn]] , функция в сборке релиза с Assert (ASSERT Получает особую обработку, или он использует какую-то существующую функцию компилятора, чтобы сказать, что его вызовая ветвь вряд ли) или какая-то другая вида аннотаторной функции? В целом, каковы все способы, которыми вызывает вероятность, что 20 человек? И, когда это вызывает вероятность, эффективно выбирает между двумя вероятностями, а это означает, что если я заберу, чтобы наклониться правильно, я получаю все возможные преимущества? Например, может быть, я просто отмечаю свою функцию log_error (...) с __attribute __ ((CORD)) , поскольку эта функция распространена в маловероятной филиалах, и забивать хороший компромисс между сложностью кода и производительностью.

Подробнее здесь: https://stackoverflow.com/questions/797 ... nnotations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»