Als «llvm-codegen» getaggte Fragen


1
Warum optimiert der Rust-Compiler den Code nicht unter der Annahme, dass zwei veränderbare Referenzen keinen Alias ​​haben können?
Soweit ich weiß, kann Referenz- / Zeiger-Aliasing die Fähigkeit des Compilers beeinträchtigen, optimierten Code zu generieren, da sie sicherstellen müssen, dass sich die generierte Binärdatei korrekt verhält, wenn die beiden Referenzen / Zeiger tatsächlich Alias ​​sind. Zum Beispiel im folgenden C-Code: void adds(int *a, int *b) { *a += *b; …

2
Warum gibt es große Auswirkungen auf die Leistung, wenn ein Array mit 240 oder mehr Elementen durchlaufen wird?
Beim Ausführen einer Summenschleife über ein Array in Rust habe ich einen enormen Leistungsabfall festgestellt, wenn CAPACITY> = 240. CAPACITY= 239 etwa 80-mal schneller ist. Gibt es eine spezielle Kompilierungsoptimierung, die Rust für "kurze" Arrays durchführt? Zusammengestellt mit rustc -C opt-level=3. use std::time::Instant; const CAPACITY: usize = 240; const IN_LOOPS: …

4
Wie funktioniert Rusts 128-Bit-Ganzzahl "i128" auf einem 64-Bit-System?
Rust hat 128-Bit-Ganzzahlen, diese werden mit dem Datentyp i128(und u128für vorzeichenlose Ints) bezeichnet: let a: i128 = 170141183460469231731687303715884105727; Wie macht Rust diese? i128 Werte auf einem 64-Bit-System funktionieren? zB wie rechnet man damit? Da der Wert meines Wissens nicht in ein Register einer x86-64-CPU passen kann, verwendet der Compiler irgendwie …

1
Wann sollte Inline in Rust verwendet werden?
Rust hat ein "Inline" -Attribut, das in einer dieser drei Varianten verwendet werden kann: #[inline] #[inline(always)] #[inline(never)] Wann sollten sie verwendet werden? In der Rust-Referenz sehen wir einen Abschnitt mit Inline-Attributen , in dem steht Der Compiler fügt Funktionen basierend auf internen Heuristiken automatisch ein. Falsches Inlining kann das Programm …

3
Warum weist LLVM eine redundante Variable zu?
Hier ist eine einfache C-Datei mit einer Aufzählungsdefinition und einer mainFunktion: enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } Es wird auf das folgende LLVM-IR übertragen: define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = …
9 c  llvm  llvm-codegen 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.