[llvm-branch-commits] [llvm] [AMDGPU] Factor the AsmParser match-specificity comparison into a helper, NFC (PR #221987)
Valery Pykhtin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Sep 8 06:02:32 PDT 2026
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 <valery.pykhtin at amd.com>
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;
}
More information about the llvm-branch-commits
mailing list