[all-commits] [llvm/llvm-project] 93e555: [InstCombine] Fix buggy `(mul X, Y)` -> `(shl X, L...
goldsteinn via All-commits
all-commits at lists.llvm.org
Mon May 1 21:27:05 PDT 2023
Branch: refs/heads/release/16.x
Home: https://github.com/llvm/llvm-project
Commit: 93e555fbd794755fe113ef5351852728d33b6084
https://github.com/llvm/llvm-project/commit/93e555fbd794755fe113ef5351852728d33b6084
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-05-01 (Mon, 01 May 2023)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
Log Message:
-----------
[InstCombine] Fix buggy `(mul X, Y)` -> `(shl X, Log2(Y))` transform PR62175
Bug was because we recognized patterns like `(shl 4, Z)` as a power of
2 we could take Log2 of (`2 + Z`), but doing `(shl X, (2 + Z))` can
cause a poison shift.
https://alive2.llvm.org/ce/z/yuJm_k
The fix is to verify that `Log2(Y)` will be a non-poisonous shift
amount. We can do this with:
`nsw` flag:
- https://alive2.llvm.org/ce/z/yyyJBr
- https://alive2.llvm.org/ce/z/YgubD_
`nuw` flag:
- https://alive2.llvm.org/ce/z/-4mpyV
- https://alive2.llvm.org/ce/z/a6ik6r
Prove `Y != 0`:
- https://alive2.llvm.org/ce/z/ced4su
- https://alive2.llvm.org/ce/z/X-JJHb
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D148609
More information about the All-commits
mailing list