Skip to content

Commit

Permalink
LLVM: elide some loads when lowering
Browse files Browse the repository at this point in the history
Generally, the load instruction may need to make a copy of an
isByRef=true value, such as in the case of the following code:

```zig
pub fn swap(comptime T: type, a: *T, b: *T) void {
    const tmp = a.*;
    a.* = b.*;
    b.* = tmp;
}
```

However, it only needs to do so if there are any instructions which can
possibly write to memory. When calling functions with isByRef=true
parameters, the AIR code that is generated looks like loads followed
directly by call.

This allows for a peephole optimization when lowering loads: if the load
instruction operates on an isByRef=true type and dies before any side effects
occur, then we can safely lower the load as a no-op that returns its
operand.

This is one out of three changes I intend to make to address #11498.
However I will put these changes in separate branches and merge them
separately so that we can have three independent points on the perf
charts.
  • Loading branch information
andrewrk committed May 31, 2022
1 parent 26aea8c commit d410693
Show file tree
Hide file tree
Showing 2 changed files with 423 additions and 5 deletions.
Loading

0 comments on commit d410693

Please sign in to comment.