diff --git a/llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp b/llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp index dbe74b1b08f8c..edb43627dd51e 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp @@ -2615,8 +2615,14 @@ IGroupLPDAGMutation::invertSchedBarrierMask(SchedGroupMask Mask) const { // allowed past the SCHED_BARRIER. SchedGroupMask InvertedMask = ~Mask; + // When given, specific bits overrule the more general ALU type. + bool HasConcreteClassSpecified = + (Mask & (SchedGroupMask::SALU | SchedGroupMask::VALU | + SchedGroupMask::MFMA)) != SchedGroupMask::NONE; + // ALU implies VALU, SALU, MFMA, TRANS. - if ((InvertedMask & SchedGroupMask::ALU) == SchedGroupMask::NONE) + if (!HasConcreteClassSpecified && + (InvertedMask & SchedGroupMask::ALU) == SchedGroupMask::NONE) InvertedMask &= ~SchedGroupMask::VALU & ~SchedGroupMask::SALU & ~SchedGroupMask::MFMA & ~SchedGroupMask::TRANS; // VALU, SALU, MFMA, TRANS implies ALU.