uwucc/notes.md
2023-05-24 21:49:56 +02:00

937 B

lowering

This C program

long main() {
    long a = 0;
    int b = 0;
    return 0;
}

should lower into the following unoptimized IR

def main() {
  bb0:
    %a = alloca, size=8, align=8
    store %a, 0, size=8, align=8
    %b = alloca, size=4, align=4
    store %b, 0, size=4, align=4
    ret 0
}

this IR can then be lowered to very sane machine code ignoring stack alignment which also like matters

sub rbp, 8    ; a
mov [rbp], 0
sub rbp, 4    ; b
xor rax, rax
ret

int main()
{
    int a = 1 + 3 * 4;
    return 0;
}
def main() {
  bb0:
    %a = alloca, size=4, align=4
    %1 = mul 3, 4
    %2 = add 1, %1
    store %a, %2, size=4, align=4
    ret 0
}
sub rbp, 4  ; a
sub rbp, 4  ; %1
mov rbx, 3
mul rbx, 4
mov dword ptr [rbp], rbx
sub rbp, 4  ; %2
mov rbx, 1
add rbx, dword ptr [rbp + 4]
mov dword ptr [rbp + 8], dword ptr [rbp]
xor rax, rax
ret