[DAGCombiner][X86] Prevent visitSIGN_EXTEND from returning N when (sext (setcc))...
authorCraig Topper <craig.topper@intel.com>
Fri, 14 Dec 2018 08:28:24 +0000 (08:28 +0000)
committerCraig Topper <craig.topper@intel.com>
Fri, 14 Dec 2018 08:28:24 +0000 (08:28 +0000)
commit257ce3871e5b94e3fa0db2a3f4abd0b3c491830c
tree3a127ded97b71a1227b0cccf2bfe5b55e688700e
parent92537ccc7e21e38584d21ec0b21bc4ed2ac86843
[DAGCombiner][X86] Prevent visitSIGN_EXTEND from returning N when (sext (setcc)) already has the target desired type for the setcc

Summary:
If the setcc already has the target desired type we can reach the getSetCC/getSExtOrTrunc after the MatchingVecType check with the exact same types as the nodes we started with. This causes those causes VsetCC to be CSEd to N0 and the getSExtOrTrunc will CSE to N. When we return N, the caller will think that meant we called CombineTo and did our own worklist management. But that's not what happened. This prevents target hooks from being called for the node.

To fix this, I've now returned SDValue if the setcc is already the desired type. But to avoid some regressions in X86 I've had to disable one of the target combines that wasn't being reached before in the case of a (sext (setcc)). If we get vector widening legalization enabled that entire function will be deleted anyway so hopefully this is only for the short term.

Reviewers: RKSimon, spatel

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D55459

llvm-svn: 349137
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp