From 1c193f4abb7b73d3f68e7280741309e360510813 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 12 Mar 2018 05:35:02 +0000 Subject: [PATCH] [X86] Don't compute known bits twice for the same SDValue in LowerMUL. We called MaskedValueIsZero with two different masks, but underneath that calls computeKnownBits before applying the mask. This means we compute the same known bits twice due to the two calls. Instead just call computeKnownBits directly and apply the two masks ourselves. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327251 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index a12be079c9c..833850d0aad 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -22532,13 +22532,17 @@ static SDValue LowerMUL(SDValue Op, const X86Subtarget &Subtarget, // // Hi = psllqi(AloBhi + AhiBlo, 32); // return AloBlo + Hi; + KnownBits AKnown, BKnown; + DAG.computeKnownBits(A, AKnown); + DAG.computeKnownBits(B, BKnown); + APInt LowerBitsMask = APInt::getLowBitsSet(64, 32); - bool ALoIsZero = DAG.MaskedValueIsZero(A, LowerBitsMask); - bool BLoIsZero = DAG.MaskedValueIsZero(B, LowerBitsMask); + bool ALoIsZero = LowerBitsMask.isSubsetOf(AKnown.Zero); + bool BLoIsZero = LowerBitsMask.isSubsetOf(BKnown.Zero); APInt UpperBitsMask = APInt::getHighBitsSet(64, 32); - bool AHiIsZero = DAG.MaskedValueIsZero(A, UpperBitsMask); - bool BHiIsZero = DAG.MaskedValueIsZero(B, UpperBitsMask); + bool AHiIsZero = UpperBitsMask.isSubsetOf(AKnown.Zero); + bool BHiIsZero = UpperBitsMask.isSubsetOf(BKnown.Zero); // If DQI is supported we can use MULLQ, but MULUDQ is still better if the // the high bits are known to be zero. -- 2.11.0