From aea320c7f62004d0e163e99b978e40bfb59847cb Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 19 Sep 2025 10:41:07 +0900 Subject: [PATCH 1/3] TableGen: Replace assertion with error for unexpected pattern inputs --- .../test/TableGen/dag-pattern-crash-on-set.td | 25 +++++++++++++++++++ .../TableGen/Common/CodeGenDAGPatterns.cpp | 6 ++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 llvm/test/TableGen/dag-pattern-crash-on-set.td diff --git a/llvm/test/TableGen/dag-pattern-crash-on-set.td b/llvm/test/TableGen/dag-pattern-crash-on-set.td new file mode 100644 index 0000000000000..dd273228033ff --- /dev/null +++ b/llvm/test/TableGen/dag-pattern-crash-on-set.td @@ -0,0 +1,25 @@ +// RUN: not llvm-tblgen -gen-dag-isel -I %p/../../include -o /dev/null %s 2>&1 | FileCheck %s + +include "llvm/Target/Target.td" + +def MyTargetInstrInfo : InstrInfo; +def MyTarget : Target { + let InstructionSet = MyTargetInstrInfo; +} + +def R0 : Register<"r0">; +def GPR : RegisterClass<"MyTarget", [i32], 32, (add R0)>; + +def LOAD : Instruction { + let Size = 2; + let OutOperandList = (outs GPR:$dst); + let InOperandList = (ins GPR:$addr); + let AsmString = "movimm $dst, $addr"; +} + +// CHECK: [[@LINE+1]]:5: error: In CrashPat: unknown node type 'set in input pattern +def CrashPat : Pat < + (set R0, (load GPR:$addr)), + (LOAD $addr) +>; + diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp index f1f7cd72ef9f2..08cf6ca1b8e3b 100644 --- a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp @@ -2795,7 +2795,11 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) { return MadeChange; } - assert(getOperator()->isSubClassOf("SDNodeXForm") && "Unknown node type!"); + if (!getOperator()->isSubClassOf("SDNodeXForm")) { + TP.error("unknown node type '" + getOperator()->getName() + + " in input pattern"); + return false; + } // Node transforms always take one operand. if (getNumChildren() != 1) { From be059b09f13a30b5cc838e76738b22c8e1399b52 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 19 Sep 2025 12:22:16 +0900 Subject: [PATCH 2/3] Update CodeGenDAGPatterns.cpp Co-authored-by: Sergei Barannikov --- llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp index 08cf6ca1b8e3b..37844663dfc33 100644 --- a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp @@ -2797,7 +2797,7 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) { if (!getOperator()->isSubClassOf("SDNodeXForm")) { TP.error("unknown node type '" + getOperator()->getName() + - " in input pattern"); + "' in input pattern"); return false; } From 5cccaf99bffa3552f212c87995ffeac6e3ba451e Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 19 Sep 2025 12:22:22 +0900 Subject: [PATCH 3/3] Update dag-pattern-crash-on-set.td Co-authored-by: Sergei Barannikov --- llvm/test/TableGen/dag-pattern-crash-on-set.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/test/TableGen/dag-pattern-crash-on-set.td b/llvm/test/TableGen/dag-pattern-crash-on-set.td index dd273228033ff..5b726a7ed958e 100644 --- a/llvm/test/TableGen/dag-pattern-crash-on-set.td +++ b/llvm/test/TableGen/dag-pattern-crash-on-set.td @@ -17,7 +17,7 @@ def LOAD : Instruction { let AsmString = "movimm $dst, $addr"; } -// CHECK: [[@LINE+1]]:5: error: In CrashPat: unknown node type 'set in input pattern +// CHECK: [[@LINE+1]]:5: error: In CrashPat: unknown node type 'set' in input pattern def CrashPat : Pat < (set R0, (load GPR:$addr)), (LOAD $addr)