[llvm] [RISCV]Add support for resolving encoding conflicts among vendor specific CSRs (PR #96174)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 27 12:04:08 PDT 2024
================
@@ -0,0 +1,118 @@
+// RUN: llvm-tblgen -gen-searchable-tables -I %p/../../include %s | FileCheck %s
+
+include "llvm/TableGen/SearchableTable.td"
+
+class SysReg<string name, bits<12> op> {
+ string Name = name;
+ bits<12> Encoding = op;
+ code FeaturesRequired = [{ {} }];
+}
+
+def List1 : GenericTable {
+ let FilterClass = "SysReg";
+ let Fields = [
+ "Name", "Encoding", "FeaturesRequired",
+ ];
+
+ let PrimaryKey = [ "Encoding" ];
+ let PrimaryKeyName = "lookupSysRegByEncoding";
+ let PrimaryKeyReturnRange = true;
+}
+
+
+let FeaturesRequired = [{ {Feature1} }] in {
+def : SysReg<"csr1", 0x7C9>;
+}
+
+let FeaturesRequired = [{ {Feature2} }] in {
+def : SysReg<"csr2", 0x7C9>;
+}
+
+// CHECK: #ifdef GET_List1_DECL
+// CHECK-NEXT: std::pair<const SysReg *, const SysReg *>lookupSysRegByEncoding(uint16_t Encoding);
+// CHECK-NEXT: #endif
+
+// CHECK: #ifdef GET_List1_IMPL
+// CHECK-NEXT: constexpr SysReg List1[] = {
+// CHECK-NEXT: { "csr1", 0x7C9, {Feature1} }, // 0
+// CHECK-NEXT: { "csr2", 0x7C9, {Feature2} }, // 1
+// CHECK-NEXT: };
+
+// CHECK: std::pair<const SysReg *, const SysReg *>lookupSysRegByEncoding(uint16_t Encoding) {
----------------
topperc wrote:
Would it be better to return `llvm::iterator_range` instead of `std::pair`? I think that would make it naturally compatible with range based loops in the caller.
https://github.com/llvm/llvm-project/pull/96174
More information about the llvm-commits
mailing list