aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/basic.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-05-31 00:19:23 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-05-31 14:17:54 -0400
commitd410693dadfe791e616e78239fa0cec707b95cfa (patch)
treecc797ccc0b13a5b65d676a7aac78c88f3c42fa38 /test/behavior/basic.zig
parent26aea8cfa1ea98329e18458cb23be2d60ef52507 (diff)
downloadzig-d410693dadfe791e616e78239fa0cec707b95cfa.tar.gz
zig-d410693dadfe791e616e78239fa0cec707b95cfa.zip
LLVM: elide some loads when lowering
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.
Diffstat (limited to 'test/behavior/basic.zig')
0 files changed, 0 insertions, 0 deletions