From c192af31ce7f3457ae3fb257252d38647b2cf30b Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 29 May 2022 20:30:29 +0900 Subject: [PATCH 1/2] Fix wording on the aliasing section It should've said "the value of a local variable cannot alias things...". --- src/aliasing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aliasing.md b/src/aliasing.md index 993afbaa..cad83d8c 100644 --- a/src/aliasing.md +++ b/src/aliasing.md @@ -118,8 +118,8 @@ fn compute(input: &u32, output: &mut u32) { } ``` -We're still relying on alias analysis to assume that `temp` doesn't alias -`input`, but the proof is much simpler: the value of a local variable can't be +We're still relying on alias analysis to assume that `input` doesn't alias +`temp`, but the proof is much simpler: the value of a local variable can't be aliased by things that existed before it was declared. This is an assumption every language freely makes, and so this version of the function could be optimized the way we want in any language. From 74faa41117038b6eb66b24b422f59d8bb5b65ddd Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 29 May 2022 20:43:01 +0900 Subject: [PATCH 2/2] Fix a typo on aliasing --- src/aliasing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aliasing.md b/src/aliasing.md index cad83d8c..ec32da2e 100644 --- a/src/aliasing.md +++ b/src/aliasing.md @@ -88,7 +88,7 @@ These optimizations also tend to prove the soundness of bigger optimizations such as loop vectorization, constant propagation, and dead code elimination. In the previous example, we used the fact that `&mut u32` can't be aliased to prove -that writes to `*output` can't possibly affect `*input`. This let us cache `*input` +that writes to `*output` can't possibly affect `*input`. This lets us cache `*input` in a register, eliminating a read. By caching this read, we knew that the write in the `> 10` branch couldn't