diff options
| author | Timon Kruiper <timonkruiper@gmail.com> | 2021-01-05 18:35:42 +0100 |
|---|---|---|
| committer | Timon Kruiper <timonkruiper@gmail.com> | 2021-01-06 10:52:20 +0100 |
| commit | 5d5db833f277518bab152b743d6a4cfaa1e3fd8d (patch) | |
| tree | c7f898a8b063ccb8cf6c249a508ebec14dad0164 /src/codegen/llvm | |
| parent | 1149cd593e82b338058037c29bcd0e2caaab0dcb (diff) | |
| download | zig-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
