[DAGCombiner][X86] Don't peek through ANDs on the shift amount in matchRotateSub...
authorCraig Topper <craig.topper@sifive.com>
Sun, 28 Feb 2021 19:23:46 +0000 (11:23 -0800)
committerCraig Topper <craig.topper@sifive.com>
Sun, 28 Feb 2021 20:58:00 +0000 (12:58 -0800)
commit5de09ef02e24d234d9fc0cd1c6dfe18a1bb784b0
tree247857428cffae42763373f780a4932a748ff666
parentb4bed1cb245b04ed6ed50b5d68d928e9e9f216f7
[DAGCombiner][X86] Don't peek through ANDs on the shift amount in matchRotateSub when called from MatchFunnelPosNeg.

Peeking through AND is only valid if the input to both shifts is
the same. If the inputs are different, then the original pattern
ORs the two values when the masked shift amount is 0. This is ok
if the values are the same since the OR would be a NOP which is
why its ok for rotate.

Fixes PR49365 and reverts PR34641

Differential Revision: https://reviews.llvm.org/D97637
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/X86/shift-double.ll