[all-commits] [llvm/llvm-project] 41e68f: [EarlyCSE] Fix and recommit the revised c9826829d7...
darkbuck via All-commits
all-commits at lists.llvm.org
Thu Sep 10 20:31:19 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 41e68f7ee7b3bb33e9acb0502339a858806e8523
https://github.com/llvm/llvm-project/commit/41e68f7ee7b3bb33e9acb0502339a858806e8523
Author: Michael Liao <michael.hliao at gmail.com>
Date: 2020-09-10 (Thu, 10 Sep 2020)
Changed paths:
M llvm/lib/Transforms/Scalar/EarlyCSE.cpp
M llvm/test/Transforms/EarlyCSE/commute.ll
Log Message:
-----------
[EarlyCSE] Fix and recommit the revised c9826829d74e637163fdb0351870b8204e62d6e6
In addition to calculate hash consistently by swapping SELECT's
operands, we also need to inverse the select pattern favor to match the
original logic.
[EarlyCSE] Equivalent SELECTs should hash equally
DenseMap<SimpleValue> assumes that, if its isEqual method returns true
for two elements, then its getHashValue method must return the same value
for them. This invariant is broken when one SELECT node is a min/max
operation, and the other can be transformed into an equivalent min/max by
inverting its predicate and swapping its operands. This patch fixes an
assertion failure that would occur intermittently while compiling the
following IR:
define i32 @t(i32 %i) {
%cmp = icmp sle i32 0, %i
%twin1 = select i1 %cmp, i32 %i, i32 0
%cmpinv = icmp sgt i32 0, %i
%twin2 = select i1 %cmpinv, i32 0, i32 %i
%sink = add i32 %twin1, %twin2
ret i32 %sink
}
Differential Revision: https://reviews.llvm.org/D86843
More information about the All-commits
mailing list