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

}

⚠️ **GitHub.com Fallback** ⚠️