[all-commits] [llvm/llvm-project] 58bdfc: Revert 5238e7b302 "[InstCombine] Replace one-use s...
Hans via All-commits
all-commits at lists.llvm.org
Tue Jan 19 02:55:26 PST 2021
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 58bdfcfac048563e0dbcecc7c75e4e7897c8da18
https://github.com/llvm/llvm-project/commit/58bdfcfac048563e0dbcecc7c75e4e7897c8da18
Author: Hans Wennborg <hans at chromium.org>
Date: 2021-01-19 (Tue, 19 Jan 2021)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
M llvm/test/Transforms/InstCombine/select-binop-cmp.ll
M llvm/test/Transforms/InstCombine/select-safe-transforms.ll
Log Message:
-----------
Revert 5238e7b302 "[InstCombine] Replace one-use select operand based on condition"
This caused a miscompile in Chromium, see comments on the codereview for
discussion and pointer to a reproducer.
> InstCombine already performs a fold where X == Y ? f(X) : Z is
> transformed to X == Y ? f(Y) : Z if f(Y) simplifies. However,
> if f(X) only has one use, then we can always directly replace the
> use inside the instruction. To actually be profitable, limit it to
> the case where Y is a non-expr constant.
>
> This could be further extended to replace uses further up a one-use
> instruction chain, but for now this only looks one level up.
>
> Among other things, this also subsumes D94860.
>
> Differential Revision: https://reviews.llvm.org/D94862
This also reverts the follow-up
a003f26539cf4db744655e76c41f4c4a8913f116:
> [llvm] Prevent infinite loop in InstCombine of select statements
>
> This fixes an issue where the RHS and LHS the comparison operation
> creating the predicate were swapped back and forth forever.
>
> Differential Revision: https://reviews.llvm.org/D94934
More information about the All-commits
mailing list