1 | #include "taichi/ir/ir.h" |
---|---|
2 | #include "taichi/ir/analysis.h" |
3 | #include "taichi/ir/visitors.h" |
4 | |
5 | namespace taichi::lang { |
6 | |
7 | class FieldsRegisteredChecker : public BasicStmtVisitor { |
8 | public: |
9 | using BasicStmtVisitor::visit; |
10 | |
11 | FieldsRegisteredChecker() { |
12 | allow_undefined_visitor = true; |
13 | invoke_default_visitor = true; |
14 | } |
15 | |
16 | void preprocess_container_stmt(Stmt *stmt) override { |
17 | TI_ASSERT(stmt->fields_registered); |
18 | } |
19 | |
20 | void visit(Stmt *stmt) override { |
21 | TI_ASSERT(stmt->fields_registered); |
22 | } |
23 | |
24 | static void run(IRNode *root) { |
25 | FieldsRegisteredChecker checker; |
26 | root->accept(&checker); |
27 | } |
28 | }; |
29 | |
30 | namespace irpass::analysis { |
31 | void check_fields_registered(IRNode *root) { |
32 | return FieldsRegisteredChecker::run(root); |
33 | } |
34 | } // namespace irpass::analysis |
35 | |
36 | } // namespace taichi::lang |
37 |