temporär Anforderungen LLVM für Maschinencodeerzeugung - PascalCase/swp-uebersetzerbau-ss12 GitHub Wiki
Arrays erzeugen:
%array = alloca [größe x i32]
%array = alloca [größe1 x [größe2 x i32]] etc.
Zugrif Array:
array[1][2][3] = 4
%2 = getelementptr [4 x [4 x [3 x i32]]]* %array, i32 0, i32 1
%3 = getelementptr [4 x [3 x i32]]* %2, i32 0, i32 2
%4 = getelementptr [3 x i32]* %3, i32 0, i32 3
store i32 4, i32* %4, align 4
array[1] = 3
%2 = getelementptr [4 x i32]* %ar, i32 0, i32 1
store i32 3, i32* %2, align 4
Beispiel für alle Zeilen, für die wir etwas implementiert haben, wenn noch etwas dazukommt bitte melden
-
nsw, nounwind, getelementptr, inbounds, tail, noreturn, align können drinstehen, das wird bei uns übergangen
%struct.container = type { i32, i32, i32 }
@.str = [länge x größe] c"Ergebniss von %d + %d ist: %d\0A\00"
-
wenn private addr usw dort vorn noch stehen würde jetzt trotzdem funktionieren
define i32 @main() {
define i32 @addition(i32 %a, i32 %b){
%s1 = alloca i32
store i32 0, i32* %1
%2 = load i32* %s1
%4 = add i32 %2, %3
-
Addition (sub,mul, div, fadd, fsub, fmul,fdiv analog)
ret i32 %21
%4 = call i32 @addition(i32 %2, i32 %3)
%8 = call i32 @printf(([31 x i8]* @.str, i32 0, i32 0), i32 %5, i32 %6, i32 %7)
%2 = %struct.container* %cont, i32 0, i32 0
%12 = icmp sgt i32 %11, 0
%20 = icmp sle i32 %18, %19
%27 = icmp sge i32 %26, 0
.
.
.
; <label>:2
br i1 %5, label %6, label %9
br label %2
}