[PATCH] D157249: [clang][ASTImporter] Add import of 'ConvertVectorExpr'

2023-08-07 Thread Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGdf21f9fc0373: [clang][ASTImporter] Add import of 
ConvertVectorExpr (authored by dingfei fd...@feysh.com).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157249

Files:
  clang/lib/AST/ASTImporter.cpp
  clang/unittests/AST/ASTImporterTest.cpp


Index: clang/unittests/AST/ASTImporterTest.cpp
===
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1306,6 +1306,29 @@
 ToChooseExpr->isConditionDependent());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, ImportConvertVectorExpr) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+  "typedef double v4double __attribute__((__vector_size__(32)));"
+  "typedef float  v4float  __attribute__((__vector_size__(16)));"
+  "v4float vf;"
+  "void declToImport() { (void)__builtin_convertvector(vf, v4double); }",
+  Lang_CXX03, "", Lang_CXX03);
+
+  auto ToResults =
+  match(convertVectorExpr().bind("convert"), To->getASTContext());
+  auto FromResults =
+  match(convertVectorExpr().bind("convert"), From->getASTContext());
+
+  const ConvertVectorExpr *FromConvertVectorExpr =
+  selectFirst("convert", FromResults);
+  ASSERT_TRUE(FromConvertVectorExpr);
+
+  const ConvertVectorExpr *ToConvertVectorExpr =
+  selectFirst("convert", ToResults);
+  ASSERT_TRUE(ToConvertVectorExpr);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, ImportGenericSelectionExpr) {
   Decl *From, *To;
   std::tie(From, To) = getImportedDecl(
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -616,6 +616,7 @@
 ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E);
 ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
 ExpectedStmt VisitChooseExpr(ChooseExpr *E);
+ExpectedStmt VisitConvertVectorExpr(ConvertVectorExpr *E);
 ExpectedStmt VisitShuffleVectorExpr(ShuffleVectorExpr *E);
 ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E);
 ExpectedStmt VisitGenericSelectionExpr(GenericSelectionExpr *E);
@@ -7051,6 +7052,21 @@
  ToRParenLoc, CondIsTrue);
 }
 
+ExpectedStmt ASTNodeImporter::VisitConvertVectorExpr(ConvertVectorExpr *E) {
+  Error Err = Error::success();
+  auto *ToSrcExpr = importChecked(Err, E->getSrcExpr());
+  auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
+  auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
+  auto ToType = importChecked(Err, E->getType());
+  auto *ToTSI = importChecked(Err, E->getTypeSourceInfo());
+  if (Err)
+return std::move(Err);
+
+  return new (Importer.getToContext())
+  ConvertVectorExpr(ToSrcExpr, ToTSI, ToType, E->getValueKind(),
+E->getObjectKind(), ToBuiltinLoc, ToRParenLoc);
+}
+
 ExpectedStmt ASTNodeImporter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) {
   Error Err = Error::success();
   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());


Index: clang/unittests/AST/ASTImporterTest.cpp
===
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1306,6 +1306,29 @@
 ToChooseExpr->isConditionDependent());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, ImportConvertVectorExpr) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+  "typedef double v4double __attribute__((__vector_size__(32)));"
+  "typedef float  v4float  __attribute__((__vector_size__(16)));"
+  "v4float vf;"
+  "void declToImport() { (void)__builtin_convertvector(vf, v4double); }",
+  Lang_CXX03, "", Lang_CXX03);
+
+  auto ToResults =
+  match(convertVectorExpr().bind("convert"), To->getASTContext());
+  auto FromResults =
+  match(convertVectorExpr().bind("convert"), From->getASTContext());
+
+  const ConvertVectorExpr *FromConvertVectorExpr =
+  selectFirst("convert", FromResults);
+  ASSERT_TRUE(FromConvertVectorExpr);
+
+  const ConvertVectorExpr *ToConvertVectorExpr =
+  selectFirst("convert", ToResults);
+  ASSERT_TRUE(ToConvertVectorExpr);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, ImportGenericSelectionExpr) {
   Decl *From, *To;
   std::tie(From, To) = getImportedDecl(
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -616,6 +616,7 @@
 ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E);
 ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
 ExpectedStmt VisitChooseExpr(ChooseExpr *E);
+ExpectedStmt VisitConvertVectorExpr(ConvertVectorExpr *E);
 ExpectedStmt VisitShuffleVectorExpr(ShuffleVectorExpr *E);
 ExpectedStmt 

[PATCH] D157249: [clang][ASTImporter] Add import of 'ConvertVectorExpr'

2023-08-07 Thread Ding Fei via Phabricator via cfe-commits
danix800 updated this revision to Diff 547781.
danix800 added a comment.

Cleanup since D157248  is landed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157249

Files:
  clang/lib/AST/ASTImporter.cpp
  clang/unittests/AST/ASTImporterTest.cpp


Index: clang/unittests/AST/ASTImporterTest.cpp
===
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1295,6 +1295,29 @@
 ToChooseExpr->isConditionDependent());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, ImportConvertVectorExpr) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+  "typedef double v4double __attribute__((__vector_size__(32)));"
+  "typedef float  v4float  __attribute__((__vector_size__(16)));"
+  "v4float vf;"
+  "void declToImport() { (void)__builtin_convertvector(vf, v4double); }",
+  Lang_CXX03, "", Lang_CXX03);
+
+  auto ToResults =
+  match(convertVectorExpr().bind("convert"), To->getASTContext());
+  auto FromResults =
+  match(convertVectorExpr().bind("convert"), From->getASTContext());
+
+  const ConvertVectorExpr *FromConvertVectorExpr =
+  selectFirst("convert", FromResults);
+  ASSERT_TRUE(FromConvertVectorExpr);
+
+  const ConvertVectorExpr *ToConvertVectorExpr =
+  selectFirst("convert", ToResults);
+  ASSERT_TRUE(ToConvertVectorExpr);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, ImportGenericSelectionExpr) {
   Decl *From, *To;
   std::tie(From, To) = getImportedDecl(
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -615,6 +615,7 @@
 ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E);
 ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
 ExpectedStmt VisitChooseExpr(ChooseExpr *E);
+ExpectedStmt VisitConvertVectorExpr(ConvertVectorExpr *E);
 ExpectedStmt VisitShuffleVectorExpr(ShuffleVectorExpr *E);
 ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E);
 ExpectedStmt VisitGenericSelectionExpr(GenericSelectionExpr *E);
@@ -7038,6 +7039,21 @@
  ToRParenLoc, CondIsTrue);
 }
 
+ExpectedStmt ASTNodeImporter::VisitConvertVectorExpr(ConvertVectorExpr *E) {
+  Error Err = Error::success();
+  auto *ToSrcExpr = importChecked(Err, E->getSrcExpr());
+  auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
+  auto ToBuiltinLoc = importChecked(Err, E->getBuiltinLoc());
+  auto ToType = importChecked(Err, E->getType());
+  auto *ToTSI = importChecked(Err, E->getTypeSourceInfo());
+  if (Err)
+return std::move(Err);
+
+  return new (Importer.getToContext())
+  ConvertVectorExpr(ToSrcExpr, ToTSI, ToType, E->getValueKind(),
+E->getObjectKind(), ToBuiltinLoc, ToRParenLoc);
+}
+
 ExpectedStmt ASTNodeImporter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) {
   Error Err = Error::success();
   auto ToRParenLoc = importChecked(Err, E->getRParenLoc());


Index: clang/unittests/AST/ASTImporterTest.cpp
===
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1295,6 +1295,29 @@
 ToChooseExpr->isConditionDependent());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, ImportConvertVectorExpr) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+  "typedef double v4double __attribute__((__vector_size__(32)));"
+  "typedef float  v4float  __attribute__((__vector_size__(16)));"
+  "v4float vf;"
+  "void declToImport() { (void)__builtin_convertvector(vf, v4double); }",
+  Lang_CXX03, "", Lang_CXX03);
+
+  auto ToResults =
+  match(convertVectorExpr().bind("convert"), To->getASTContext());
+  auto FromResults =
+  match(convertVectorExpr().bind("convert"), From->getASTContext());
+
+  const ConvertVectorExpr *FromConvertVectorExpr =
+  selectFirst("convert", FromResults);
+  ASSERT_TRUE(FromConvertVectorExpr);
+
+  const ConvertVectorExpr *ToConvertVectorExpr =
+  selectFirst("convert", ToResults);
+  ASSERT_TRUE(ToConvertVectorExpr);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, ImportGenericSelectionExpr) {
   Decl *From, *To;
   std::tie(From, To) = getImportedDecl(
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -615,6 +615,7 @@
 ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E);
 ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
 ExpectedStmt VisitChooseExpr(ChooseExpr *E);
+ExpectedStmt VisitConvertVectorExpr(ConvertVectorExpr *E);
 ExpectedStmt VisitShuffleVectorExpr(ShuffleVectorExpr *E);
 ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E);
 ExpectedStmt 

[PATCH] D157249: [clang][ASTImporter] Add import of 'ConvertVectorExpr'

2023-08-07 Thread Ding Fei via Phabricator via cfe-commits
danix800 added a comment.

In D157249#4565580 , @aaron.ballman 
wrote:

>> Depends on https://reviews.llvm.org/D157248
>
> FWIW, this would usually be done via a "patch stack": 
> https://kurtisnusbaum.medium.com/stacked-diffs-keeping-phabricator-diffs-small-d9964f4dcfa6
>  so that it's clear which changes are part of this patch and which changes 
> are part of the parent patch.

I'll update this and D157238  to clean state 
since their dependents are both landed.

For future revisions I'll try this "patch stack" if dependency exists.

Thanks for this info.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157249

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157249: [clang][ASTImporter] Add import of 'ConvertVectorExpr'

2023-08-07 Thread Aaron Ballman via Phabricator via cfe-commits
aaron.ballman added a comment.

> Depends on https://reviews.llvm.org/D157248

FWIW, this would usually be done via a "patch stack": 
https://kurtisnusbaum.medium.com/stacked-diffs-keeping-phabricator-diffs-small-d9964f4dcfa6
 so that it's clear which changes are part of this patch and which changes are 
part of the parent patch.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157249

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157249: [clang][ASTImporter] Add import of 'ConvertVectorExpr'

2023-08-06 Thread Ding Fei via Phabricator via cfe-commits
danix800 created this revision.
danix800 added reviewers: balazske, aaron.ballman.
danix800 added a project: clang.
Herald added a subscriber: martong.
Herald added a reviewer: a.sidorin.
Herald added a reviewer: shafik.
Herald added a project: All.
danix800 requested review of this revision.
Herald added a subscriber: cfe-commits.

Add import of `ConvertVectorExpr`.

Depends on https://reviews.llvm.org/D157248


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D157249

Files:
  clang/docs/LibASTMatchersReference.html
  clang/docs/ReleaseNotes.rst
  clang/include/clang/ASTMatchers/ASTMatchers.h
  clang/lib/AST/ASTImporter.cpp
  clang/lib/ASTMatchers/ASTMatchersInternal.cpp
  clang/lib/ASTMatchers/Dynamic/Registry.cpp
  clang/unittests/AST/ASTImporterTest.cpp
  clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp

Index: clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
===
--- clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
+++ clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
@@ -986,6 +986,17 @@
   chooseExpr()));
 }
 
+TEST_P(ASTMatchersTest, ConvertVectorExpr) {
+  EXPECT_TRUE(matches(
+  "typedef double vector4double __attribute__((__vector_size__(32)));"
+  "typedef float  vector4float  __attribute__((__vector_size__(16)));"
+  "vector4float vf;"
+  "void f() { (void)__builtin_convertvector(vf, vector4double); }",
+  convertVectorExpr()));
+  EXPECT_TRUE(notMatches("void f() { (void)__builtin_choose_expr(1, 2, 3); }",
+ convertVectorExpr()));
+}
+
 TEST_P(ASTMatchersTest, GNUNullExpr) {
   if (!GetParam().isCXX()) {
 return;
Index: clang/unittests/AST/ASTImporterTest.cpp
===
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -1295,6 +1295,29 @@
 ToChooseExpr->isConditionDependent());
 }
 
+TEST_P(ASTImporterOptionSpecificTestBase, ImportConvertVectorExpr) {
+  Decl *From, *To;
+  std::tie(From, To) = getImportedDecl(
+  "typedef double v4double __attribute__((__vector_size__(32)));"
+  "typedef float  v4float  __attribute__((__vector_size__(16)));"
+  "v4float vf;"
+  "void declToImport() { (void)__builtin_convertvector(vf, v4double); }",
+  Lang_CXX03, "", Lang_CXX03);
+
+  auto ToResults =
+  match(convertVectorExpr().bind("convert"), To->getASTContext());
+  auto FromResults =
+  match(convertVectorExpr().bind("convert"), From->getASTContext());
+
+  const ConvertVectorExpr *FromConvertVectorExpr =
+  selectFirst("convert", FromResults);
+  ASSERT_TRUE(FromConvertVectorExpr);
+
+  const ConvertVectorExpr *ToConvertVectorExpr =
+  selectFirst("convert", ToResults);
+  ASSERT_TRUE(ToConvertVectorExpr);
+}
+
 TEST_P(ASTImporterOptionSpecificTestBase, ImportGenericSelectionExpr) {
   Decl *From, *To;
   std::tie(From, To) = getImportedDecl(
Index: clang/lib/ASTMatchers/Dynamic/Registry.cpp
===
--- clang/lib/ASTMatchers/Dynamic/Registry.cpp
+++ clang/lib/ASTMatchers/Dynamic/Registry.cpp
@@ -178,6 +178,7 @@
   REGISTER_MATCHER(constantExpr);
   REGISTER_MATCHER(containsDeclaration);
   REGISTER_MATCHER(continueStmt);
+  REGISTER_MATCHER(convertVectorExpr);
   REGISTER_MATCHER(coreturnStmt);
   REGISTER_MATCHER(coroutineBodyStmt);
   REGISTER_MATCHER(coyieldExpr);
Index: clang/lib/ASTMatchers/ASTMatchersInternal.cpp
===
--- clang/lib/ASTMatchers/ASTMatchersInternal.cpp
+++ clang/lib/ASTMatchers/ASTMatchersInternal.cpp
@@ -941,6 +941,8 @@
 const internal::VariadicDynCastAllOfMatcher
 cxxNullPtrLiteralExpr;
 const internal::VariadicDynCastAllOfMatcher chooseExpr;
+const internal::VariadicDynCastAllOfMatcher
+convertVectorExpr;
 const internal::VariadicDynCastAllOfMatcher
 coawaitExpr;
 const internal::VariadicDynCastAllOfMatcher
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -615,6 +615,7 @@
 ExpectedStmt VisitSourceLocExpr(SourceLocExpr *E);
 ExpectedStmt VisitVAArgExpr(VAArgExpr *E);
 ExpectedStmt VisitChooseExpr(ChooseExpr *E);
+ExpectedStmt VisitConvertVectorExpr(ConvertVectorExpr *E);
 ExpectedStmt VisitShuffleVectorExpr(ShuffleVectorExpr *E);
 ExpectedStmt VisitGNUNullExpr(GNUNullExpr *E);
 ExpectedStmt VisitGenericSelectionExpr(GenericSelectionExpr *E);
@@ -7038,6 +7039,21 @@
  ToRParenLoc, CondIsTrue);
 }
 
+ExpectedStmt ASTNodeImporter::VisitConvertVectorExpr(ConvertVectorExpr *E) {
+  Error Err = Error::success();
+  auto *ToSrcExpr = importChecked(Err, E->getSrcExpr());
+  auto ToRParenLoc = importChecked(Err, E->getRParenLoc());
+  auto ToBuiltinLoc = importChecked(Err,