Вопросы с тегом «llvm-codegen»

500
Допускает ли стандарт C ++ неинициализированный bool для сбоя программы?

Я знаю, что «неопределенное поведение» в C ++ может позволить компилятору делать все, что он захочет. Однако у меня произошел сбой, который удивил меня, так как я предположил, что код достаточно безопасен. В этом случае настоящая проблема возникла только на конкретной платформе, использующей...

301
Почему компилятор Rust не оптимизирует код, предполагая, что две изменяемые ссылки не могут иметь псевдоним?

Насколько я знаю, псевдонимы ссылок / указателей могут препятствовать способности компилятора генерировать оптимизированный код, поскольку они должны обеспечивать правильное поведение сгенерированного двоичного файла в случае, когда две ссылки / указатели действительно являются псевдонимами....

230
Почему при зацикливании массива с 240 или более элементами сильно сказывается производительность?

При выполнении цикла суммы над массивом в Rust я заметил огромное падение производительности, когда CAPACITY> = 240. CAPACITY= 239 примерно в 80 раз быстрее. Есть ли специальная оптимизация компиляции, которую Rust делает для «коротких» массивов? Составлено с rustc -C opt-level=3. use...

128
Как 128-битное целое число i128 в Rust работает в 64-битной системе?

Rust имеет 128-битные целые числа, они обозначаются типом данных i128(и u128для целых чисел без знака): let a: i128 = 170141183460469231731687303715884105727; Как Rust заставляет эти i128значения работать в 64-битной системе; например, как он делает с ними арифметические операции? Поскольку,...

86
Когда в Rust следует использовать inline?

В Rust есть "встроенный" атрибут, который можно использовать в одном из этих трех вариантов: #[inline] #[inline(always)] #[inline(never)] Когда их следует использовать? В справочнике Rust мы видим раздел встроенных атрибутов, в котором говорится Компилятор автоматически встраивает функции на...

9
Почему LLVM выделяет избыточную переменную?

Вот простой C-файл с определением перечисления и mainфункцией: enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } Он переносится в следующий LLVM IR: define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 0, i32* %1, align 4 store...