[PATCH] D42619: [X86] Make foldLogicOfSetCCs work better for vectors pre legal types/operations
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 27 17:17:32 PST 2018
craig.topper created this revision.
craig.topper added reviewers: spatel, RKSimon.
There's a check in the code to only check getSetCCResultType after LegalOperations or if the type is MVT::i1. But the i1 check is only allowing scalar types through. I think it should check that the scalar type is MVT::i1 so that it will work for vectors.
The changed test already does this combine with AVX512VL where getSetCCResultType returns vXi1. But with avx512f and no VLX getSetCCResultType returns a type matching the width of the input type.
https://reviews.llvm.org/D42619
Files:
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/avx512vl-vec-cmp.ll
Index: test/CodeGen/X86/avx512vl-vec-cmp.ll
===================================================================
--- test/CodeGen/X86/avx512vl-vec-cmp.ll
+++ test/CodeGen/X86/avx512vl-vec-cmp.ll
@@ -1132,10 +1132,8 @@
; NoVLX: # %bb.0:
; NoVLX-NEXT: # kill: def %ymm3 killed %ymm3 def %zmm3
; NoVLX-NEXT: # kill: def %ymm2 killed %ymm2 def %zmm2
-; NoVLX-NEXT: # kill: def %ymm1 killed %ymm1 def %zmm1
-; NoVLX-NEXT: # kill: def %ymm0 killed %ymm0 def %zmm0
+; NoVLX-NEXT: vpor %ymm1, %ymm0, %ymm0
; NoVLX-NEXT: vptestnmd %zmm0, %zmm0, %k1
-; NoVLX-NEXT: vptestnmd %zmm1, %zmm1, %k1 {%k1}
; NoVLX-NEXT: vpblendmd %zmm2, %zmm3, %zmm0 {%k1}
; NoVLX-NEXT: # kill: def %ymm0 killed %ymm0 killed %zmm0
; NoVLX-NEXT: retq
Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -3525,7 +3525,7 @@
// operations on the left and right operands, so those types must match.
EVT VT = N0.getValueType();
EVT OpVT = LL.getValueType();
- if (LegalOperations || VT != MVT::i1)
+ if (LegalOperations || VT.getScalarType() != MVT::i1)
if (VT != getSetCCResultType(OpVT))
return SDValue();
if (OpVT != RL.getValueType())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42619.131699.patch
Type: text/x-patch
Size: 1324 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180128/1dee9bc7/attachment.bin>
More information about the llvm-commits
mailing list