Skip to content

Commit b3a4522

Browse files
Revert last 3 commits
1 parent c0d5cf0 commit b3a4522

File tree

3 files changed

+25
-27
lines changed

3 files changed

+25
-27
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -537,12 +537,6 @@ m_Load(const T0_P &Ch, const T1_P &Ptr, const T2_P &Offset) {
537537
TernaryOpc_match<T0_P, T1_P, T2_P>(ISD::LOAD, Ch, Ptr, Offset));
538538
}
539539

540-
template <typename T0_P, typename T1_P, typename T2_P>
541-
inline TernaryOpc_match<T0_P, T1_P, T2_P>
542-
m_Load(const T0_P &Ch, const T1_P &Ptr, const T2_P &Offset) {
543-
return TernaryOpc_match<T0_P, T1_P, T2_P>(ISD::LOAD, Ch, Ptr, Offset);
544-
}
545-
546540
template <typename T0_P, typename T1_P, typename T2_P>
547541
inline TernaryOpc_match<T0_P, T1_P, T2_P>
548542
m_InsertElt(const T0_P &Vec, const T1_P &Val, const T2_P &Idx) {

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -53392,34 +53392,38 @@ static SDValue combineMaskedStore(SDNode *N, SelectionDAG &DAG,
5339253392
static SDValue foldToMaskedStore(StoreSDNode *Store, SelectionDAG &DAG,
5339353393
const SDLoc &Dl,
5339453394
const X86Subtarget &Subtarget) {
53395-
using namespace llvm::SDPatternMatch;
53396-
5339753395
if (!Subtarget.hasAVX() && !Subtarget.hasAVX2() && !Subtarget.hasAVX512())
5339853396
return SDValue();
5339953397

53400-
if (!Store->isSimple() || Store->isTruncatingStore())
53398+
if (!Store->isSimple())
5340153399
return SDValue();
5340253400

5340353401
SDValue StoredVal = Store->getValue();
5340453402
SDValue StorePtr = Store->getBasePtr();
5340553403
SDValue StoreOffset = Store->getOffset();
53406-
EVT VT = Store->getMemoryVT();
53404+
EVT VT = StoredVal.getValueType();
5340753405
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
5340853406

5340953407
if (!TLI.isTypeLegal(VT) || !TLI.isOperationLegalOrCustom(ISD::MSTORE, VT))
5341053408
return SDValue();
5341153409

53412-
SDValue Mask, TrueVec, LoadCh;
53413-
if (!sd_match(StoredVal,
53414-
m_VSelect(m_Value(Mask), m_Value(TrueVec),
53415-
m_Load(m_Value(LoadCh), m_Specific(StorePtr),
53416-
m_Specific(StoreOffset)))))
53410+
if (StoredVal.getOpcode() != ISD::VSELECT)
5341753411
return SDValue();
5341853412

53419-
LoadSDNode *Load = cast<LoadSDNode>(StoredVal.getOperand(2));
53413+
SDValue Mask = StoredVal.getOperand(0);
53414+
SDValue TrueVec = StoredVal.getOperand(1);
53415+
SDValue FalseVec = StoredVal.getOperand(2);
53416+
53417+
LoadSDNode *Load = cast<LoadSDNode>(FalseVec.getNode());
5342053418
if (!Load || !Load->isSimple())
5342153419
return SDValue();
5342253420

53421+
SDValue LoadPtr = Load->getBasePtr();
53422+
SDValue LoadOffset = Load->getOffset();
53423+
53424+
if (StorePtr != LoadPtr || StoreOffset != LoadOffset)
53425+
return SDValue();
53426+
5342353427
auto IsSafeToFold = [](StoreSDNode *Store, LoadSDNode *Load) {
5342453428
std::queue<SDValue> Worklist;
5342553429

@@ -53433,13 +53437,13 @@ static SDValue foldToMaskedStore(StoreSDNode *Store, SelectionDAG &DAG,
5343353437
if (!Node)
5343453438
return false;
5343553439

53436-
if (Node == Load)
53437-
return true;
53438-
5343953440
if (const auto *MemNode = dyn_cast<MemSDNode>(Node))
5344053441
if (!MemNode->isSimple() || MemNode->writeMem())
5344153442
return false;
5344253443

53444+
if (Node == Load)
53445+
return true;
53446+
5344353447
if (Node->getOpcode() == ISD::TokenFactor) {
5344453448
for (unsigned i = 0; i < Node->getNumOperands(); ++i)
5344553449
Worklist.push(Node->getOperand(i));
@@ -53455,8 +53459,8 @@ static SDValue foldToMaskedStore(StoreSDNode *Store, SelectionDAG &DAG,
5345553459
return SDValue();
5345653460

5345753461
return DAG.getMaskedStore(Store->getChain(), Dl, TrueVec, StorePtr,
53458-
StoreOffset, Mask, VT, Store->getMemOperand(),
53459-
Store->getAddressingMode());
53462+
StoreOffset, Mask, Store->getMemoryVT(),
53463+
Store->getMemOperand(), Store->getAddressingMode());
5346053464
}
5346153465

5346253466
static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
@@ -53723,9 +53727,6 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
5372353727
St->getMemOperand());
5372453728
}
5372553729

53726-
if (SDValue MaskedStore = foldToMaskedStore(St, DAG, dl, Subtarget))
53727-
return MaskedStore;
53728-
5372953730
// Turn load->store of MMX types into GPR load/stores. This avoids clobbering
5373053731
// the FP state in cases where an emms may be missing.
5373153732
// A preferable solution to the general problem is to figure out the right
@@ -53787,6 +53788,9 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
5378753788
St->getMemOperand()->getFlags());
5378853789
}
5378953790

53791+
if (SDValue MaskedStore = foldToMaskedStore(St, DAG, dl, Subtarget))
53792+
return MaskedStore;
53793+
5379053794
return SDValue();
5379153795
}
5379253796

llvm/test/CodeGen/X86/combine-storetomstore.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ define void @test_masked_store_intervening(<8 x i32> %x, ptr %ptr, <8 x i1> %cmp
218218

219219

220220
define void @test_masked_store_multiple(<8 x i32> %x, <8 x i32> %y, ptr %ptr1, ptr %ptr2, <8 x i1> %cmp, <8 x i1> %cmp2) {
221-
; AVX-LABEL: test_masked_store_multiple:
221+
; AVX-LABEL: foo:
222222
; AVX: # %bb.0:
223223
; AVX-NEXT: vpmovzxwd {{.*#+}} xmm4 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero
224224
; AVX-NEXT: vpslld $31, %xmm4, %xmm4
@@ -237,7 +237,7 @@ define void @test_masked_store_multiple(<8 x i32> %x, <8 x i32> %y, ptr %ptr1, p
237237
; AVX-NEXT: vzeroupper
238238
; AVX-NEXT: retq
239239
;
240-
; AVX2-LABEL: test_masked_store_multiple:
240+
; AVX2-LABEL: foo:
241241
; AVX2: # %bb.0:
242242
; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero
243243
; AVX2-NEXT: vpslld $31, %ymm2, %ymm2
@@ -250,7 +250,7 @@ define void @test_masked_store_multiple(<8 x i32> %x, <8 x i32> %y, ptr %ptr1, p
250250
; AVX2-NEXT: vzeroupper
251251
; AVX2-NEXT: retq
252252
;
253-
; AVX512-LABEL: test_masked_store_multiple:
253+
; AVX512-LABEL: foo:
254254
; AVX512: # %bb.0:
255255
; AVX512-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
256256
; AVX512-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0

0 commit comments

Comments
 (0)