[llvm] 26bdc60 - [X86] Constant fold KSHIFT of an all zeros vector to just an all zeros vector.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 31 16:02:13 PST 2019
Author: Craig Topper
Date: 2019-12-31T15:57:39-08:00
New Revision: 26bdc603f76f41a9831f6b980b5fc9a947446544
URL: https://github.com/llvm/llvm-project/commit/26bdc603f76f41a9831f6b980b5fc9a947446544
DIFF: https://github.com/llvm/llvm-project/commit/26bdc603f76f41a9831f6b980b5fc9a947446544.diff
LOG: [X86] Constant fold KSHIFT of an all zeros vector to just an all zeros vector.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/masked_store.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index dda0b4311771..a0f171e55dd4 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -45722,6 +45722,9 @@ static SDValue combineKSHIFT(SDNode *N, SelectionDAG &DAG,
TargetLowering::DAGCombinerInfo &DCI) {
EVT VT = N->getValueType(0);
+ if (ISD::isBuildVectorAllZeros(N->getOperand(0).getNode()))
+ return DAG.getConstant(0, SDLoc(N), VT);
+
APInt KnownUndef, KnownZero;
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
APInt DemandedElts = APInt::getAllOnesValue(VT.getVectorNumElements());
diff --git a/llvm/test/CodeGen/X86/masked_store.ll b/llvm/test/CodeGen/X86/masked_store.ll
index 164826d87155..05d35eb7efa9 100644
--- a/llvm/test/CodeGen/X86/masked_store.ll
+++ b/llvm/test/CodeGen/X86/masked_store.ll
@@ -4915,10 +4915,6 @@ define void @widen_masked_store(<3 x i32> %v, <3 x i32>* %p, <3 x i1> %mask) {
; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
; AVX512F-NEXT: andl $1, %esi
; AVX512F-NEXT: kmovw %esi, %k0
-; AVX512F-NEXT: kxorw %k0, %k0, %k1
-; AVX512F-NEXT: kshiftrw $1, %k1, %k1
-; AVX512F-NEXT: kshiftlw $1, %k1, %k1
-; AVX512F-NEXT: korw %k0, %k1, %k0
; AVX512F-NEXT: kshiftrw $2, %k0, %k1
; AVX512F-NEXT: kshiftlw $2, %k1, %k1
; AVX512F-NEXT: kshiftlw $15, %k0, %k0
@@ -4948,10 +4944,6 @@ define void @widen_masked_store(<3 x i32> %v, <3 x i32>* %p, <3 x i1> %mask) {
; AVX512VLDQ-NEXT: kmovw %esi, %k0
; AVX512VLDQ-NEXT: kshiftlb $7, %k0, %k0
; AVX512VLDQ-NEXT: kshiftrb $7, %k0, %k0
-; AVX512VLDQ-NEXT: kxorw %k0, %k0, %k1
-; AVX512VLDQ-NEXT: kshiftrb $1, %k1, %k1
-; AVX512VLDQ-NEXT: kshiftlb $1, %k1, %k1
-; AVX512VLDQ-NEXT: korb %k0, %k1, %k0
; AVX512VLDQ-NEXT: kshiftrb $2, %k0, %k1
; AVX512VLDQ-NEXT: kshiftlb $2, %k1, %k1
; AVX512VLDQ-NEXT: kshiftlb $7, %k0, %k0
@@ -4977,10 +4969,6 @@ define void @widen_masked_store(<3 x i32> %v, <3 x i32>* %p, <3 x i1> %mask) {
; AVX512VLBW: ## %bb.0:
; AVX512VLBW-NEXT: andl $1, %esi
; AVX512VLBW-NEXT: kmovw %esi, %k0
-; AVX512VLBW-NEXT: kxorw %k0, %k0, %k1
-; AVX512VLBW-NEXT: kshiftrw $1, %k1, %k1
-; AVX512VLBW-NEXT: kshiftlw $1, %k1, %k1
-; AVX512VLBW-NEXT: korw %k0, %k1, %k0
; AVX512VLBW-NEXT: kshiftrw $2, %k0, %k1
; AVX512VLBW-NEXT: kshiftlw $2, %k1, %k1
; AVX512VLBW-NEXT: kshiftlw $15, %k0, %k0
More information about the llvm-commits
mailing list