[llvm-dev] RFC: Splitting <Target>DAGISel.inc into declarations and definitions
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Thu Nov 2 13:12:26 PDT 2017
Hi,
Currently, TableGen generates all the instruction selection functions
(in the .inc file) as if they were top-most functions. To make them
members of their corresponding SelectionDAGISel derivative, each target
has to include the .inc file directly into the body of the class:
--- FooDAGISel.inc ---
void SelectCode(Node *N) {
// 1E6 lines of pattern matching code
}
...
----------------------
--- FooISelDAGToDAG.cpp ---
class FooDAGToDAGISel : public SelectionDAGISel {
#include "FooDAGISel.inc"
};
---------------------------
If someone wanted to put the class definition in a separate header file,
the large .inc file would need to be included in that header. If that
someone then wanted to split their .cpp file into smaller pieces, each
such .cpp would contain these function bodies (which would then be
needlessly compiled multiple times).
What I propose is to have TableGen emit information that would allow
something like this:
class FooDAGToDAGISel : public SelectionDAGISel {
#define DAGISEL_DECL
#include "FooDAGISel.inc"
#undef DAGISEL_DECL
};
#define DAGISEL_BODY(FooDAGToDAGISel)
#include "FooDAGISel.inc"
#undef DAGISEL_BODY
This would allow only putting member declarations in the class
definition, and then include the member bodies in a single place.
What does everybody think?
-Krzysztof
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list