https://github.com/vpykhtin created https://github.com/llvm/llvm-project/pull/221987
Extract the "keep the most specific match status" comparison in matchAndEmitInstruction into an atLeastAsSpecific() lambda ranking Match_MnemonicFail < Match_InvalidOperand < Match_MissingFeature. No functional change. >From 5c471f0f48598196feba7d480674fa42f004a3e0 Mon Sep 17 00:00:00 2001 From: Valery Pykhtin <[email protected]> Date: Mon, 24 Aug 2026 22:43:49 +0000 Subject: [PATCH] [AMDGPU] Factor the AsmParser match-specificity comparison into a helper, NFC Extract the "keep the most specific match status" comparison in matchAndEmitInstruction into an atLeastAsSpecific() lambda ranking Match_MnemonicFail < Match_InvalidOperand < Match_MissingFeature. No functional change. --- .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 46284628ae0c7..f0719a4dabf6b 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -5888,17 +5888,25 @@ bool AMDGPUAsmParser::matchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, MCInst Inst; Inst.setLoc(IDLoc); unsigned Result = Match_Success; + + // Order match statuses from least to most specific and keep the most + // specific one: + // Match_MnemonicFail < Match_InvalidOperand < Match_MissingFeature + auto atLeastAsSpecific = [](unsigned New, unsigned Cur) { + auto rank = [](unsigned M) { + return M == Match_MnemonicFail ? 1 + : M == Match_InvalidOperand ? 2 + : M == Match_MissingFeature ? 3 + : 0; // Match_Success sentinel + }; + return rank(New) >= rank(Cur); + }; + for (auto Variant : getMatchedVariants()) { uint64_t EI; auto R = MatchInstructionImpl(Operands, Inst, EI, MatchingInlineAsm, Variant); - // We order match statuses from least to most specific. We use most specific - // status as resulting - // Match_MnemonicFail < Match_InvalidOperand < Match_MissingFeature - if (R == Match_Success || R == Match_MissingFeature || - (R == Match_InvalidOperand && Result != Match_MissingFeature) || - (R == Match_MnemonicFail && Result != Match_InvalidOperand && - Result != Match_MissingFeature)) { + if (R == Match_Success || atLeastAsSpecific(R, Result)) { Result = R; ErrorInfo = EI; } _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
