[PATCH] D72281: [Matrix] Add matrix type to Clang.

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 29 23:13:51 PDT 2020


rjmccall added inline comments.


================
Comment at: clang/include/clang/AST/RecursiveASTVisitor.h:1274
+  TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
+})
+
----------------
Might as well do this instead of accumulating the technical debt.  MatrixTypeLoc should store the attribute location and the row and column expressions.


================
Comment at: clang/lib/AST/ASTContext.cpp:1945
+    Width = ElementInfo.Width * MT->getNumRows() * MT->getNumColumns();
+    Align = ElementInfo.Width;
+    break;
----------------
Should this be `ElementInfo.Align`?


================
Comment at: clang/lib/AST/ItaniumMangle.cpp:3349
+void CXXNameMangler::mangleType(const MatrixType *T) {
+  Out << "Dm" << T->getNumRows() << "_" << T->getNumColumns() << '_';
+  mangleType(T->getElementType());
----------------
You need to ask the Itanium C++ ABI for this mangling, since it's not using a vendor-extension prefix.  I know that wasn't done for vector types, but we're trying to do the right thing.


================
Comment at: clang/lib/Basic/Targets/OSTargets.cpp:138
+  if (Opts.EnableMatrix)
+    Builder.defineMacro("__MATRIX_EXTENSION__", "1");
 }
----------------
We're generally just using `__has_feature` checks these days instead of adding new predefined macros.  You can do that in `Features.def`.


================
Comment at: clang/lib/CodeGen/CGDebugInfo.cpp:2749
+  Subscripts.push_back(DBuilder.getOrCreateSubrange(0, Ty->getNumRows()));
+  llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
+
----------------
Is this actually the same DWARF type as would be created by a nested C array type, or is it a two-dimensional array type?


================
Comment at: clang/lib/CodeGen/CGExpr.cpp:1781
+          Addr.getAlignment());
+    }
+  }
----------------
Please use `CreateElementBitCast`.  It's cleaner and will handle address spaces correctly.

What are you trying to do here?  You're expecting the pointer to be a pointer to an array, and you're casting that to a pointer to a vector of the same number of elements?  Why not just use the vector type as the expected memory type for the matrix type?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72281/new/

https://reviews.llvm.org/D72281





More information about the cfe-commits mailing list