[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-05-20 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

Ping?


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

https://reviews.llvm.org/D78658



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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-04-22 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy created this revision.
LemonBoy added a reviewer: rsmith.
LemonBoy added a project: clang.
Herald added a subscriber: cfe-commits.

Some early errors during the ASTUnit creation were not transferred to the 
`FailedParseDiagnostic` so when the code in `LoadFromCommandLine` swaps its 
content with the content of `StoredDiagnostics` they cannot be retrieved by the 
user in any way.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D78658

Files:
  clang/lib/Frontend/ASTUnit.cpp
  clang/unittests/Frontend/ASTUnitTest.cpp

Index: clang/unittests/Frontend/ASTUnitTest.cpp
===
--- clang/unittests/Frontend/ASTUnitTest.cpp
+++ clang/unittests/Frontend/ASTUnitTest.cpp
@@ -111,4 +111,30 @@
 llvm::MemoryBuffer::MemoryBuffer_MMap);
 }
 
+TEST_F(ASTUnitTest, LoadFromCommandLineEarlyError) {
+  EXPECT_FALSE(
+  llvm::sys::fs::createTemporaryFile("ast-unit", "c", FD, InputFileName));
+  input_file = std::make_unique(InputFileName, FD);
+  input_file->os() << "";
+
+  const char *Args[] = {"clang", "-target", "foobar", InputFileName.c_str()};
+
+  auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions());
+  auto PCHContainerOps = std::make_shared();
+  std::unique_ptr ErrUnit;
+
+  ASTUnit *AST = ASTUnit::LoadFromCommandLine(
+  &Args[0], &Args[4], PCHContainerOps, Diags, "", false,
+  CaptureDiagsKind::All, None, true, 0, TU_Complete, false, false, false,
+  SkipFunctionBodiesScope::None, false, true, false, false, None, &ErrUnit,
+  nullptr);
+
+  if (!AST)
+FAIL() << "failed to create ASTUnit";
+
+  ASSERT_NE(ErrUnit, nullptr);
+  ASSERT_TRUE(Diags->hasErrorOccurred());
+  ASSERT_NE(ErrUnit->stored_diag_size(), 0U);
+}
+
 } // anonymous namespace
Index: clang/lib/Frontend/ASTUnit.cpp
===
--- clang/lib/Frontend/ASTUnit.cpp
+++ clang/lib/Frontend/ASTUnit.cpp
@@ -1118,6 +1118,18 @@
   std::unique_ptr Clang(
   new CompilerInstance(std::move(PCHContainerOps)));
 
+  auto OnError = [&]() {
+// Remove the overridden buffer we used for the preamble.
+SavedMainFileBuffer = nullptr;
+
+// Keep the ownership of the data in the ASTUnit because the client may
+// want to see the diagnostics.
+transferASTDataFromCompilerInstance(*Clang);
+FailedParseDiagnostics.swap(StoredDiagnostics);
+StoredDiagnostics.clear();
+NumStoredDiagnosticsFromDriver = 0;
+  };
+
   // Ensure that Clang has a FileManager with the right VFS, which may have
   // changed above in AddImplicitPreamble.  If VFS is nullptr, rely on
   // createFileManager to create one.
@@ -1141,8 +1153,10 @@
   // Create the target instance.
   Clang->setTarget(TargetInfo::CreateTargetInfo(
   Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
-  if (!Clang->hasTarget())
+  if (!Clang->hasTarget()) {
+OnError();
 return true;
+  }
 
   // Inform the target of the language options.
   //
@@ -1199,8 +1213,10 @@
   llvm::CrashRecoveryContextCleanupRegistrar
 ActCleanup(Act.get());
 
-  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0]))
-goto error;
+  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0])) {
+OnError();
+return true;
+  }
 
   if (SavedMainFileBuffer)
 TranslateStoredDiagnostics(getFileManager(), getSourceManager(),
@@ -1210,7 +1226,8 @@
 
   if (llvm::Error Err = Act->Execute()) {
 consumeError(std::move(Err)); // FIXME this drops errors on the floor.
-goto error;
+OnError();
+return true;
   }
 
   transferASTDataFromCompilerInstance(*Clang);
@@ -1220,18 +1237,6 @@
   FailedParseDiagnostics.clear();
 
   return false;
-
-error:
-  // Remove the overridden buffer we used for the preamble.
-  SavedMainFileBuffer = nullptr;
-
-  // Keep the ownership of the data in the ASTUnit because the client may
-  // want to see the diagnostics.
-  transferASTDataFromCompilerInstance(*Clang);
-  FailedParseDiagnostics.swap(StoredDiagnostics);
-  StoredDiagnostics.clear();
-  NumStoredDiagnosticsFromDriver = 0;
-  return true;
 }
 
 static std::pair
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-04-22 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy updated this revision to Diff 259374.
LemonBoy added a comment.

Fix a C&P error in the attached test case.


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

https://reviews.llvm.org/D78658

Files:
  clang/lib/Frontend/ASTUnit.cpp
  clang/unittests/Frontend/ASTUnitTest.cpp

Index: clang/unittests/Frontend/ASTUnitTest.cpp
===
--- clang/unittests/Frontend/ASTUnitTest.cpp
+++ clang/unittests/Frontend/ASTUnitTest.cpp
@@ -111,4 +111,28 @@
 llvm::MemoryBuffer::MemoryBuffer_MMap);
 }
 
+TEST_F(ASTUnitTest, LoadFromCommandLineEarlyError) {
+  EXPECT_FALSE(
+  llvm::sys::fs::createTemporaryFile("ast-unit", "c", FD, InputFileName));
+  input_file = std::make_unique(InputFileName, FD);
+  input_file->os() << "";
+
+  const char *Args[] = {"clang", "-target", "foobar", InputFileName.c_str()};
+
+  auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions());
+  auto PCHContainerOps = std::make_shared();
+  std::unique_ptr ErrUnit;
+
+  ASTUnit *AST = ASTUnit::LoadFromCommandLine(
+  &Args[0], &Args[4], PCHContainerOps, Diags, "", false,
+  CaptureDiagsKind::All, None, true, 0, TU_Complete, false, false, false,
+  SkipFunctionBodiesScope::None, false, true, false, false, None, &ErrUnit,
+  nullptr);
+
+  ASSERT_EQ(AST, nullptr);
+  ASSERT_NE(ErrUnit, nullptr);
+  ASSERT_TRUE(Diags->hasErrorOccurred());
+  ASSERT_NE(ErrUnit->stored_diag_size(), 0U);
+}
+
 } // anonymous namespace
Index: clang/lib/Frontend/ASTUnit.cpp
===
--- clang/lib/Frontend/ASTUnit.cpp
+++ clang/lib/Frontend/ASTUnit.cpp
@@ -1118,6 +1118,18 @@
   std::unique_ptr Clang(
   new CompilerInstance(std::move(PCHContainerOps)));
 
+  auto OnError = [&]() {
+// Remove the overridden buffer we used for the preamble.
+SavedMainFileBuffer = nullptr;
+
+// Keep the ownership of the data in the ASTUnit because the client may
+// want to see the diagnostics.
+transferASTDataFromCompilerInstance(*Clang);
+FailedParseDiagnostics.swap(StoredDiagnostics);
+StoredDiagnostics.clear();
+NumStoredDiagnosticsFromDriver = 0;
+  };
+
   // Ensure that Clang has a FileManager with the right VFS, which may have
   // changed above in AddImplicitPreamble.  If VFS is nullptr, rely on
   // createFileManager to create one.
@@ -1141,8 +1153,10 @@
   // Create the target instance.
   Clang->setTarget(TargetInfo::CreateTargetInfo(
   Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
-  if (!Clang->hasTarget())
+  if (!Clang->hasTarget()) {
+OnError();
 return true;
+  }
 
   // Inform the target of the language options.
   //
@@ -1199,8 +1213,10 @@
   llvm::CrashRecoveryContextCleanupRegistrar
 ActCleanup(Act.get());
 
-  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0]))
-goto error;
+  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0])) {
+OnError();
+return true;
+  }
 
   if (SavedMainFileBuffer)
 TranslateStoredDiagnostics(getFileManager(), getSourceManager(),
@@ -1210,7 +1226,8 @@
 
   if (llvm::Error Err = Act->Execute()) {
 consumeError(std::move(Err)); // FIXME this drops errors on the floor.
-goto error;
+OnError();
+return true;
   }
 
   transferASTDataFromCompilerInstance(*Clang);
@@ -1220,18 +1237,6 @@
   FailedParseDiagnostics.clear();
 
   return false;
-
-error:
-  // Remove the overridden buffer we used for the preamble.
-  SavedMainFileBuffer = nullptr;
-
-  // Keep the ownership of the data in the ASTUnit because the client may
-  // want to see the diagnostics.
-  transferASTDataFromCompilerInstance(*Clang);
-  FailedParseDiagnostics.swap(StoredDiagnostics);
-  StoredDiagnostics.clear();
-  NumStoredDiagnosticsFromDriver = 0;
-  return true;
 }
 
 static std::pair
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-04-27 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

Ping?


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

https://reviews.llvm.org/D78658



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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-05-04 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

Ping?


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

https://reviews.llvm.org/D78658



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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-05-11 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

Ping?


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

https://reviews.llvm.org/D78658



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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-10-10 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

Ping with some more reviewers, hoping to land this in time for LLVM 99.


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

https://reviews.llvm.org/D78658

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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-10-13 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

> Perhaps this'd be more robust with ScopeExit?

Not really, `OnError` is not executed when/if the function succeeds.


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

https://reviews.llvm.org/D78658

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


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-10-13 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy updated this revision to Diff 297959.
LemonBoy added a comment.

Use `ScopeExit` instead of a bare lambda.


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

https://reviews.llvm.org/D78658

Files:
  clang/lib/Frontend/ASTUnit.cpp
  clang/unittests/Frontend/ASTUnitTest.cpp

Index: clang/unittests/Frontend/ASTUnitTest.cpp
===
--- clang/unittests/Frontend/ASTUnitTest.cpp
+++ clang/unittests/Frontend/ASTUnitTest.cpp
@@ -150,4 +150,28 @@
   &File->getFileEntry()));
 }
 
+TEST_F(ASTUnitTest, LoadFromCommandLineEarlyError) {
+  EXPECT_FALSE(
+  llvm::sys::fs::createTemporaryFile("ast-unit", "c", FD, InputFileName));
+  input_file = std::make_unique(InputFileName, FD);
+  input_file->os() << "";
+
+  const char *Args[] = {"clang", "-target", "foobar", InputFileName.c_str()};
+
+  auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions());
+  auto PCHContainerOps = std::make_shared();
+  std::unique_ptr ErrUnit;
+
+  ASTUnit *AST = ASTUnit::LoadFromCommandLine(
+  &Args[0], &Args[4], PCHContainerOps, Diags, "", false,
+  CaptureDiagsKind::All, None, true, 0, TU_Complete, false, false, false,
+  SkipFunctionBodiesScope::None, false, true, false, false, None, &ErrUnit,
+  nullptr);
+
+  ASSERT_EQ(AST, nullptr);
+  ASSERT_NE(ErrUnit, nullptr);
+  ASSERT_TRUE(Diags->hasErrorOccurred());
+  ASSERT_NE(ErrUnit->stored_diag_size(), 0U);
+}
+
 } // anonymous namespace
Index: clang/lib/Frontend/ASTUnit.cpp
===
--- clang/lib/Frontend/ASTUnit.cpp
+++ clang/lib/Frontend/ASTUnit.cpp
@@ -69,6 +69,7 @@
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/ScopeExit.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
@@ -1118,6 +1119,19 @@
   std::unique_ptr Clang(
   new CompilerInstance(std::move(PCHContainerOps)));
 
+  // Clean up on error, disengage it if the function returns successfully.
+  auto CleanOnError = llvm::make_scope_exit([&]() {
+// Remove the overridden buffer we used for the preamble.
+SavedMainFileBuffer = nullptr;
+
+// Keep the ownership of the data in the ASTUnit because the client may
+// want to see the diagnostics.
+transferASTDataFromCompilerInstance(*Clang);
+FailedParseDiagnostics.swap(StoredDiagnostics);
+StoredDiagnostics.clear();
+NumStoredDiagnosticsFromDriver = 0;
+  });
+
   // Ensure that Clang has a FileManager with the right VFS, which may have
   // changed above in AddImplicitPreamble.  If VFS is nullptr, rely on
   // createFileManager to create one.
@@ -1141,8 +1155,9 @@
   // Create the target instance.
   Clang->setTarget(TargetInfo::CreateTargetInfo(
   Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
-  if (!Clang->hasTarget())
+  if (!Clang->hasTarget()) {
 return true;
+  }
 
   // Inform the target of the language options.
   //
@@ -1199,8 +1214,9 @@
   llvm::CrashRecoveryContextCleanupRegistrar
 ActCleanup(Act.get());
 
-  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0]))
-goto error;
+  if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0])) {
+return true;
+  }
 
   if (SavedMainFileBuffer)
 TranslateStoredDiagnostics(getFileManager(), getSourceManager(),
@@ -1210,7 +1226,7 @@
 
   if (llvm::Error Err = Act->Execute()) {
 consumeError(std::move(Err)); // FIXME this drops errors on the floor.
-goto error;
+return true;
   }
 
   transferASTDataFromCompilerInstance(*Clang);
@@ -1219,19 +1235,9 @@
 
   FailedParseDiagnostics.clear();
 
-  return false;
-
-error:
-  // Remove the overridden buffer we used for the preamble.
-  SavedMainFileBuffer = nullptr;
+  CleanOnError.release();
 
-  // Keep the ownership of the data in the ASTUnit because the client may
-  // want to see the diagnostics.
-  transferASTDataFromCompilerInstance(*Clang);
-  FailedParseDiagnostics.swap(StoredDiagnostics);
-  StoredDiagnostics.clear();
-  NumStoredDiagnosticsFromDriver = 0;
-  return true;
+  return false;
 }
 
 static std::pair
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-10-14 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy updated this revision to Diff 298133.

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

https://reviews.llvm.org/D78658

Files:
  clang/lib/Frontend/ASTUnit.cpp
  clang/unittests/Frontend/ASTUnitTest.cpp

Index: clang/unittests/Frontend/ASTUnitTest.cpp
===
--- clang/unittests/Frontend/ASTUnitTest.cpp
+++ clang/unittests/Frontend/ASTUnitTest.cpp
@@ -150,4 +150,28 @@
   &File->getFileEntry()));
 }
 
+TEST_F(ASTUnitTest, LoadFromCommandLineEarlyError) {
+  EXPECT_FALSE(
+  llvm::sys::fs::createTemporaryFile("ast-unit", "c", FD, InputFileName));
+  input_file = std::make_unique(InputFileName, FD);
+  input_file->os() << "";
+
+  const char *Args[] = {"clang", "-target", "foobar", InputFileName.c_str()};
+
+  auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions());
+  auto PCHContainerOps = std::make_shared();
+  std::unique_ptr ErrUnit;
+
+  ASTUnit *AST = ASTUnit::LoadFromCommandLine(
+  &Args[0], &Args[4], PCHContainerOps, Diags, "", false,
+  CaptureDiagsKind::All, None, true, 0, TU_Complete, false, false, false,
+  SkipFunctionBodiesScope::None, false, true, false, false, None, &ErrUnit,
+  nullptr);
+
+  ASSERT_EQ(AST, nullptr);
+  ASSERT_NE(ErrUnit, nullptr);
+  ASSERT_TRUE(Diags->hasErrorOccurred());
+  ASSERT_NE(ErrUnit->stored_diag_size(), 0U);
+}
+
 } // anonymous namespace
Index: clang/lib/Frontend/ASTUnit.cpp
===
--- clang/lib/Frontend/ASTUnit.cpp
+++ clang/lib/Frontend/ASTUnit.cpp
@@ -69,6 +69,7 @@
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/ScopeExit.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
@@ -1118,6 +1119,19 @@
   std::unique_ptr Clang(
   new CompilerInstance(std::move(PCHContainerOps)));
 
+  // Clean up on error, disengage it if the function returns successfully.
+  auto CleanOnError = llvm::make_scope_exit([&]() {
+// Remove the overridden buffer we used for the preamble.
+SavedMainFileBuffer = nullptr;
+
+// Keep the ownership of the data in the ASTUnit because the client may
+// want to see the diagnostics.
+transferASTDataFromCompilerInstance(*Clang);
+FailedParseDiagnostics.swap(StoredDiagnostics);
+StoredDiagnostics.clear();
+NumStoredDiagnosticsFromDriver = 0;
+  });
+
   // Ensure that Clang has a FileManager with the right VFS, which may have
   // changed above in AddImplicitPreamble.  If VFS is nullptr, rely on
   // createFileManager to create one.
@@ -1200,7 +1214,7 @@
 ActCleanup(Act.get());
 
   if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0]))
-goto error;
+return true;
 
   if (SavedMainFileBuffer)
 TranslateStoredDiagnostics(getFileManager(), getSourceManager(),
@@ -1210,7 +1224,7 @@
 
   if (llvm::Error Err = Act->Execute()) {
 consumeError(std::move(Err)); // FIXME this drops errors on the floor.
-goto error;
+return true;
   }
 
   transferASTDataFromCompilerInstance(*Clang);
@@ -1219,19 +1233,9 @@
 
   FailedParseDiagnostics.clear();
 
-  return false;
+  CleanOnError.release();
 
-error:
-  // Remove the overridden buffer we used for the preamble.
-  SavedMainFileBuffer = nullptr;
-
-  // Keep the ownership of the data in the ASTUnit because the client may
-  // want to see the diagnostics.
-  transferASTDataFromCompilerInstance(*Clang);
-  FailedParseDiagnostics.swap(StoredDiagnostics);
-  StoredDiagnostics.clear();
-  NumStoredDiagnosticsFromDriver = 0;
-  return true;
+  return false;
 }
 
 static std::pair
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D78658: [clang][Frontend] Add missing error handling

2020-10-20 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

> Looks good to me - thanks!

Great! Can you please commit this for me as I have no commit access?


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

https://reviews.llvm.org/D78658

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


[PATCH] D99465: [Clang][X86] Mark some VAES builtins as conditionally defined

2021-03-28 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy created this revision.
LemonBoy added a reviewer: craig.topper.
LemonBoy requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

AMD Zen3 architecture supports the VAES instruction set but not the 512bit 
variants, add a feature gate on __AVX512F__ to avoid raising a compile error 
(due to `__m512i` being undefined) whenever a user imports the intrinsic module.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D99465

Files:
  clang/lib/Headers/vaesintrin.h


Index: clang/lib/Headers/vaesintrin.h
===
--- clang/lib/Headers/vaesintrin.h
+++ clang/lib/Headers/vaesintrin.h
@@ -28,13 +28,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesenc_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesdec_epi128(__m256i __A, __m256i __B)
 {
@@ -42,13 +35,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesdec_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesenclast_epi128(__m256i __A, __m256i __B)
 {
@@ -56,13 +42,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesdeclast_epi128(__m256i __A, __m256i __B)
 {
@@ -70,6 +49,29 @@
   (__v4di) __B);
 }
 
+#ifdef __AVX512F__
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesenc_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
+  (__v8di) __B);
+}
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesdec_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
+  (__v8di) __B);
+}
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
+  (__v8di) __B);
+}
+
 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
  _mm512_aesdeclast_epi128(__m512i __A, __m512i __B)
 {
@@ -77,6 +79,7 @@
   (__v8di) __B);
 }
 
+#endif /* __AVX512F__ */
 
 #undef __DEFAULT_FN_ATTRS
 #undef __DEFAULT_FN_ATTRS_F


Index: clang/lib/Headers/vaesintrin.h
===
--- clang/lib/Headers/vaesintrin.h
+++ clang/lib/Headers/vaesintrin.h
@@ -28,13 +28,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesenc_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesdec_epi128(__m256i __A, __m256i __B)
 {
@@ -42,13 +35,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesdec_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesenclast_epi128(__m256i __A, __m256i __B)
 {
@@ -56,13 +42,6 @@
   (__v4di) __B);
 }
 
-static __inline__ __m512i __DEFAULT_FN_ATTRS_F
- _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
-{
-  return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
-  (__v8di) __B);
-}
-
 static __inline__ __m256i __DEFAULT_FN_ATTRS
  _mm256_aesdeclast_epi128(__m256i __A, __m256i __B)
 {
@@ -70,6 +49,29 @@
   (__v4di) __B);
 }
 
+#ifdef __AVX512F__
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesenc_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesenc512((__v8di) __A,
+  (__v8di) __B);
+}
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesdec_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesdec512((__v8di) __A,
+  (__v8di) __B);
+}
+
+static __inline__ __m512i __DEFAULT_FN_ATTRS_F
+ _mm512_aesenclast_epi128(__m512i __A, __m512i __B)
+{
+  return (__m512i) __builtin_ia32_aesenclast512((__v8di) __A,
+  (__v8di) __B);
+}
+
 static __inline__ __m512i __DEFAULT_FN_ATTRS_F
  _mm512_aesdeclast_epi128(__m512i __A, __m512i __B)
 {
@@ -77,6 +79,7 @@
   (__v8di) __B);
 }
 
+#endif /* __AVX512F__ */
 
 #undef __DEFAULT_FN_ATTRS
 #undef __DEFAULT_FN_ATTRS_F
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D99465: [Clang][X86] Mark some VAES builtins as conditionally defined

2021-03-28 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy added a comment.

In D99465#2654633 , @craig.topper 
wrote:

> We can't use preprocessor defines in the intrinsic header files. It prevents 
> being able to use the intrinsics with attribute(target("avx512f,vaes")). 
> What's preventing __m512i from being defined?

`__VAES__` is defined but `__AVX512F__` is not hence `avx512fintrin.h` is never 
included in `immintrin.h`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D99465

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


[PATCH] D100933: [clang] Recognize ppc32 as valid mcpu value

2021-04-21 Thread LemonBoy via Phabricator via cfe-commits
LemonBoy created this revision.
LemonBoy added a reviewer: PowerPC.
Herald added subscribers: shchenz, kbarton, nemanjai.
LemonBoy requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

The `ppc32` cpu model was introduced a while ago in 
a9321059b912155cd81cf0776d54a7d6838ef7ab as an independent copy of the `ppc` 
one but was never wired into clang.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D100933

Files:
  clang/lib/Basic/Targets/PPC.cpp
  clang/test/Misc/target-invalid-cpu-note.c


Index: clang/test/Misc/target-invalid-cpu-note.c
===
--- clang/test/Misc/target-invalid-cpu-note.c
+++ clang/test/Misc/target-invalid-cpu-note.c
@@ -117,8 +117,8 @@
 // PPC-SAME: 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750,
 // PPC-SAME: 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, power4,
 // PPC-SAME: pwr4, power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x,
-// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, 
powerpc, ppc, powerpc64,
-// PPC-SAME: ppc64, powerpc64le, ppc64le, future
+// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, 
powerpc, ppc, ppc32,
+// PPC-SAME: powerpc64, ppc64, powerpc64le, ppc64le, future
 
 // RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 
2>&1 | FileCheck %s --check-prefix MIPS
 // MIPS: error: unknown target CPU 'not-a-cpu'
Index: clang/lib/Basic/Targets/PPC.cpp
===
--- clang/lib/Basic/Targets/PPC.cpp
+++ clang/lib/Basic/Targets/PPC.cpp
@@ -553,17 +553,17 @@
 }
 
 static constexpr llvm::StringLiteral ValidCPUNames[] = {
-{"generic"}, {"440"}, {"450"},   {"601"}, {"602"},
-{"603"}, {"603e"},{"603ev"}, {"604"}, {"604e"},
-{"620"}, {"630"}, {"g3"},{"7400"},{"g4"},
-{"7450"},{"g4+"}, {"750"},   {"8548"},{"970"},
-{"g5"},  {"a2"},  {"e500"},  {"e500mc"},  {"e5500"},
-{"power3"},  {"pwr3"},{"power4"},{"pwr4"},{"power5"},
-{"pwr5"},{"power5x"}, {"pwr5x"}, {"power6"},  {"pwr6"},
-{"power6x"}, {"pwr6x"},   {"power7"},{"pwr7"},{"power8"},
-{"pwr8"},{"power9"},  {"pwr9"},  {"power10"}, {"pwr10"},
-{"powerpc"}, {"ppc"}, {"powerpc64"}, {"ppc64"},   {"powerpc64le"},
-{"ppc64le"}, {"future"}};
+{"generic"}, {"440"}, {"450"},{"601"},   {"602"},
+{"603"}, {"603e"},{"603ev"},  {"604"},   {"604e"},
+{"620"}, {"630"}, {"g3"}, {"7400"},  {"g4"},
+{"7450"},{"g4+"}, {"750"},{"8548"},  {"970"},
+{"g5"},  {"a2"},  {"e500"},   {"e500mc"},{"e5500"},
+{"power3"},  {"pwr3"},{"power4"}, {"pwr4"},  {"power5"},
+{"pwr5"},{"power5x"}, {"pwr5x"},  {"power6"},{"pwr6"},
+{"power6x"}, {"pwr6x"},   {"power7"}, {"pwr7"},  {"power8"},
+{"pwr8"},{"power9"},  {"pwr9"},   {"power10"},   {"pwr10"},
+{"powerpc"}, {"ppc"}, {"ppc32"},  {"powerpc64"}, {"ppc64"},
+{"powerpc64le"}, {"ppc64le"}, {"future"}};
 
 bool PPCTargetInfo::isValidCPUName(StringRef Name) const {
   return llvm::find(ValidCPUNames, Name) != std::end(ValidCPUNames);


Index: clang/test/Misc/target-invalid-cpu-note.c
===
--- clang/test/Misc/target-invalid-cpu-note.c
+++ clang/test/Misc/target-invalid-cpu-note.c
@@ -117,8 +117,8 @@
 // PPC-SAME: 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750,
 // PPC-SAME: 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, power4,
 // PPC-SAME: pwr4, power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x,
-// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, powerpc, ppc, powerpc64,
-// PPC-SAME: ppc64, powerpc64le, ppc64le, future
+// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, powerpc, ppc, ppc32,
+// PPC-SAME: powerpc64, ppc64, powerpc64le, ppc64le, future
 
 // RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix MIPS
 // MIPS: error: unknown target CPU 'not-a-cpu'
Index: clang/lib/Basic/Targets/PPC.cpp
===
--- clang/lib/Basic/Targets/PPC.cpp
+++ clang/lib/Basic/Targets/PPC.cpp
@@ -553,17 +553,17 @@
 }
 
 static constexpr llvm::StringLiteral ValidCPUNames[] = {
-{"generic"}, {"440"}, {"450"},   {"601"}, {"602"},
-{"603"}, {"603e"},{"603ev"}, {"604"}, {"604e"},
-{"620"}, {"630"}, {"g3"},{"7400"},{"g4"},
-{"7450"},{"g4+"}, {"750"},   {"8548"},{"970"},
-{"g5"},  {"a2"},  {"e500"},  {"e500mc"},  {"e5500"},
-{"power3"},  {"pwr3"},{"power4"},{"pwr4"},   

[PATCH] D100933: [clang] Recognize ppc32 as valid mcpu value

2021-04-21 Thread LemonBoy via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG8e336511f18a: [clang] Recognize ppc32 as valid mcpu value 
(authored by LemonBoy).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D100933

Files:
  clang/lib/Basic/Targets/PPC.cpp
  clang/test/Misc/target-invalid-cpu-note.c


Index: clang/test/Misc/target-invalid-cpu-note.c
===
--- clang/test/Misc/target-invalid-cpu-note.c
+++ clang/test/Misc/target-invalid-cpu-note.c
@@ -117,8 +117,8 @@
 // PPC-SAME: 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750,
 // PPC-SAME: 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, power4,
 // PPC-SAME: pwr4, power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x,
-// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, 
powerpc, ppc, powerpc64,
-// PPC-SAME: ppc64, powerpc64le, ppc64le, future
+// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, 
powerpc, ppc, ppc32,
+// PPC-SAME: powerpc64, ppc64, powerpc64le, ppc64le, future
 
 // RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 
2>&1 | FileCheck %s --check-prefix MIPS
 // MIPS: error: unknown target CPU 'not-a-cpu'
Index: clang/lib/Basic/Targets/PPC.cpp
===
--- clang/lib/Basic/Targets/PPC.cpp
+++ clang/lib/Basic/Targets/PPC.cpp
@@ -553,17 +553,17 @@
 }
 
 static constexpr llvm::StringLiteral ValidCPUNames[] = {
-{"generic"}, {"440"}, {"450"},   {"601"}, {"602"},
-{"603"}, {"603e"},{"603ev"}, {"604"}, {"604e"},
-{"620"}, {"630"}, {"g3"},{"7400"},{"g4"},
-{"7450"},{"g4+"}, {"750"},   {"8548"},{"970"},
-{"g5"},  {"a2"},  {"e500"},  {"e500mc"},  {"e5500"},
-{"power3"},  {"pwr3"},{"power4"},{"pwr4"},{"power5"},
-{"pwr5"},{"power5x"}, {"pwr5x"}, {"power6"},  {"pwr6"},
-{"power6x"}, {"pwr6x"},   {"power7"},{"pwr7"},{"power8"},
-{"pwr8"},{"power9"},  {"pwr9"},  {"power10"}, {"pwr10"},
-{"powerpc"}, {"ppc"}, {"powerpc64"}, {"ppc64"},   {"powerpc64le"},
-{"ppc64le"}, {"future"}};
+{"generic"}, {"440"}, {"450"},{"601"},   {"602"},
+{"603"}, {"603e"},{"603ev"},  {"604"},   {"604e"},
+{"620"}, {"630"}, {"g3"}, {"7400"},  {"g4"},
+{"7450"},{"g4+"}, {"750"},{"8548"},  {"970"},
+{"g5"},  {"a2"},  {"e500"},   {"e500mc"},{"e5500"},
+{"power3"},  {"pwr3"},{"power4"}, {"pwr4"},  {"power5"},
+{"pwr5"},{"power5x"}, {"pwr5x"},  {"power6"},{"pwr6"},
+{"power6x"}, {"pwr6x"},   {"power7"}, {"pwr7"},  {"power8"},
+{"pwr8"},{"power9"},  {"pwr9"},   {"power10"},   {"pwr10"},
+{"powerpc"}, {"ppc"}, {"ppc32"},  {"powerpc64"}, {"ppc64"},
+{"powerpc64le"}, {"ppc64le"}, {"future"}};
 
 bool PPCTargetInfo::isValidCPUName(StringRef Name) const {
   return llvm::find(ValidCPUNames, Name) != std::end(ValidCPUNames);


Index: clang/test/Misc/target-invalid-cpu-note.c
===
--- clang/test/Misc/target-invalid-cpu-note.c
+++ clang/test/Misc/target-invalid-cpu-note.c
@@ -117,8 +117,8 @@
 // PPC-SAME: 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750,
 // PPC-SAME: 8548, 970, g5, a2, e500, e500mc, e5500, power3, pwr3, power4,
 // PPC-SAME: pwr4, power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x,
-// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, powerpc, ppc, powerpc64,
-// PPC-SAME: ppc64, powerpc64le, ppc64le, future
+// PPC-SAME: power7, pwr7, power8, pwr8, power9, pwr9, power10, pwr10, powerpc, ppc, ppc32,
+// PPC-SAME: powerpc64, ppc64, powerpc64le, ppc64le, future
 
 // RUN: not %clang_cc1 -triple mips--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix MIPS
 // MIPS: error: unknown target CPU 'not-a-cpu'
Index: clang/lib/Basic/Targets/PPC.cpp
===
--- clang/lib/Basic/Targets/PPC.cpp
+++ clang/lib/Basic/Targets/PPC.cpp
@@ -553,17 +553,17 @@
 }
 
 static constexpr llvm::StringLiteral ValidCPUNames[] = {
-{"generic"}, {"440"}, {"450"},   {"601"}, {"602"},
-{"603"}, {"603e"},{"603ev"}, {"604"}, {"604e"},
-{"620"}, {"630"}, {"g3"},{"7400"},{"g4"},
-{"7450"},{"g4+"}, {"750"},   {"8548"},{"970"},
-{"g5"},  {"a2"},  {"e500"},  {"e500mc"},  {"e5500"},
-{"power3"},  {"pwr3"},{"power4"},{"pwr4"},{"power5"},
-{"pwr5"},{"power5x"}, {"pwr5x"}, {"power6"},  {"pwr6"},
-{"power6x"}, {"pwr6x"},   {"power7"},{"pwr7"},{"power8"},
-{"pwr