aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm
diff options
context:
space:
mode:
authorTimon Kruiper <timonkruiper@gmail.com>2021-01-05 18:35:42 +0100
committerTimon Kruiper <timonkruiper@gmail.com>2021-01-06 10:52:20 +0100
commit5d5db833f277518bab152b743d6a4cfaa1e3fd8d (patch)
treec7f898a8b063ccb8cf6c249a508ebec14dad0164 /src/codegen/llvm
parent1149cd593e82b338058037c29bcd0e2caaab0dcb (diff)
downloadzig-5d5db833f277518bab152b743d6a4cfaa1e3fd8d.tar.gz
zig-5d5db833f277518bab152b743d6a4cfaa1e3fd8d.zip
stage2: hoist alloca instructions to top of function in LLVM backend
This way the generated code only has to setup the stack size at the beginning of a function and this improves codegen. Fixes #7689 ``` fn foo() void {} export fn hello(z: i8) void { var x: i16 = undefined; foo(); var y: i32 = 1; y += z; } ``` llvm-ir: ``` define void @hello(i8 %0) { Entry: %1 = alloca i8, align 1 %2 = alloca i16, align 2 %3 = alloca i32, align 4 store i8 %0, i8* %1, align 1 %4 = load i8, i8* %1, align 1 store i16 undef, i16* %2, align 2 call void @foo() store i32 1, i32* %3, align 4 %5 = load i32, i32* %3, align 4 %6 = sext i8 %4 to i32 %7 = add nsw i32 %5, %6 store i32 %7, i32* %3, align 4 ret void } ```
Diffstat (limited to 'src/codegen/llvm')
0 files changed, 0 insertions, 0 deletions