Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp =================================================================== --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -11031,9 +11031,9 @@ // If this is a TRUNC followed by a masked store, fold this into a masked // truncating store. We can do this even if this is already a masked - // truncstore. + // truncstore or a compress store. if ((Value.getOpcode() == ISD::TRUNCATE) && Value->hasOneUse() && - MST->isUnindexed() && + MST->isUnindexed() && !MST->isCompressingStore() && TLI.canCombineTruncStore(Value.getOperand(0).getValueType(), MST->getMemoryVT(), LegalOperations)) { auto Mask = TLI.promoteTargetBoolean(DAG, MST->getMask(), Index: llvm/test/CodeGen/X86/masked_compressstore_isel.ll =================================================================== --- llvm/test/CodeGen/X86/masked_compressstore_isel.ll +++ llvm/test/CodeGen/X86/masked_compressstore_isel.ll @@ -12,7 +12,8 @@ ; CHECK-NEXT: %0:vr256x = COPY $ymm0 ; CHECK-NEXT: %2:vr128x = VPSLLWZ128ri %1, 15 ; CHECK-NEXT: %3:vk16wm = VPMOVW2MZ128rr killed %2 -; CHECK-NEXT: VPMOVDWZ256mrk $noreg, 1, $noreg, 0, $noreg, killed %3, %0 :: (store unknown-size into `i16* null`, align 16) +; CHECK-NEXT: %4:vr128x = VPMOVDWZ256rr %0 +; CHECK-NEXT: VPCOMPRESSWZ128mrk $noreg, 1, $noreg, 0, $noreg, killed %3, killed %4 :: (store unknown-size into `i16* null`, align 16) ; CHECK-NEXT: RET 0 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: write)