[PATCH] D126960: [clang][sema] Unary not boolean to int conversion

2022-06-04 Thread Ashley Roll via Phabricator via cfe-commits
AshleyRoll updated this revision to Diff 434250.
AshleyRoll added a comment.

Rebased to remove clangd test failure


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126960

Files:
  clang/lib/Sema/SemaChecking.cpp
  clang/test/Sema/compare.c


Index: clang/test/Sema/compare.c
===
--- clang/test/Sema/compare.c
+++ clang/test/Sema/compare.c
@@ -419,3 +419,25 @@
   if (x == y) x = y; // no warning
   if (y == x) y = x; // no warning
 }
+
+int warn_on_different_sign_after_unary_operator(unsigned a, int b) {
+  return
+  // unary not promotes boolean to int
+  (a > ~(!b)) // expected-warning {{comparison of integers of different 
signs: 'unsigned int' and 'int'}}
+  &&
+  (a > -(b)) // expected-warning {{comparison of integers of different 
signs: 'unsigned int' and 'int'}}
+  &&
+  (a > ++b) // expected-warning {{comparison of integers of different 
signs: 'unsigned int' and 'int'}}
+  &&
+  (a > --b) // expected-warning {{comparison of integers of different 
signs: 'unsigned int' and 'int'}}
+  &&
+  // unary not promotes boolean to int
+  (b > ~(!a)) // no warning
+  &&
+  (b > -(a)) // expected-warning {{comparison of integers of different 
signs: 'int' and 'unsigned int'}}
+  &&
+  (b > ++a) // expected-warning {{comparison of integers of different 
signs: 'int' and 'unsigned int'}}
+  &&
+  (b > --a) // expected-warning {{comparison of integers of different 
signs: 'int' and 'unsigned int'}}
+  ;
+}
Index: clang/lib/Sema/SemaChecking.cpp
===
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -12326,6 +12326,13 @@
 case UO_AddrOf: // should be impossible
   return IntRange::forValueOfType(C, GetExprType(E));
 
+case UO_Not:
+  // unary not promotes boolean to integer
+  if (UO->getSubExpr()->isKnownToHaveBooleanValue())
+return IntRange(MaxWidth, false);
+
+  LLVM_FALLTHROUGH;
+
 default:
   return GetExprRange(C, UO->getSubExpr(), MaxWidth, InConstantContext,
   Approximate);


Index: clang/test/Sema/compare.c
===
--- clang/test/Sema/compare.c
+++ clang/test/Sema/compare.c
@@ -419,3 +419,25 @@
   if (x == y) x = y; // no warning
   if (y == x) y = x; // no warning
 }
+
+int warn_on_different_sign_after_unary_operator(unsigned a, int b) {
+  return
+  // unary not promotes boolean to int
+  (a > ~(!b)) // expected-warning {{comparison of integers of different signs: 'unsigned int' and 'int'}}
+  &&
+  (a > -(b)) // expected-warning {{comparison of integers of different signs: 'unsigned int' and 'int'}}
+  &&
+  (a > ++b) // expected-warning {{comparison of integers of different signs: 'unsigned int' and 'int'}}
+  &&
+  (a > --b) // expected-warning {{comparison of integers of different signs: 'unsigned int' and 'int'}}
+  &&
+  // unary not promotes boolean to int
+  (b > ~(!a)) // no warning
+  &&
+  (b > -(a)) // expected-warning {{comparison of integers of different signs: 'int' and 'unsigned int'}}
+  &&
+  (b > ++a) // expected-warning {{comparison of integers of different signs: 'int' and 'unsigned int'}}
+  &&
+  (b > --a) // expected-warning {{comparison of integers of different signs: 'int' and 'unsigned int'}}
+  ;
+}
Index: clang/lib/Sema/SemaChecking.cpp
===
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -12326,6 +12326,13 @@
 case UO_AddrOf: // should be impossible
   return IntRange::forValueOfType(C, GetExprType(E));
 
+case UO_Not:
+  // unary not promotes boolean to integer
+  if (UO->getSubExpr()->isKnownToHaveBooleanValue())
+return IntRange(MaxWidth, false);
+
+  LLVM_FALLTHROUGH;
+
 default:
   return GetExprRange(C, UO->getSubExpr(), MaxWidth, InConstantContext,
   Approximate);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126781: [CodeGen] Keep track info of lazy-emitted symbols in ModuleBuilder

2022-06-04 Thread Jun Zhang via Phabricator via cfe-commits
junaire updated this revision to Diff 434251.
junaire added a comment.

I think std::swap makes the logic more clear


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126781

Files:
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ModuleBuilder.cpp
  clang/test/Interpreter/execute.cpp

Index: clang/test/Interpreter/execute.cpp
===
--- clang/test/Interpreter/execute.cpp
+++ clang/test/Interpreter/execute.cpp
@@ -13,4 +13,8 @@
 
 auto r2 = printf("S[f=%f, m=0x%llx]\n", s.f, reinterpret_cast(s.m));
 // CHECK-NEXT: S[f=1.00, m=0x0]
+
+inline int foo() { return 42; }
+int r3 = foo();
+
 quit
Index: clang/lib/CodeGen/ModuleBuilder.cpp
===
--- clang/lib/CodeGen/ModuleBuilder.cpp
+++ clang/lib/CodeGen/ModuleBuilder.cpp
@@ -133,8 +133,13 @@
 llvm::Module *StartModule(llvm::StringRef ModuleName,
   llvm::LLVMContext &C) {
   assert(!M && "Replacing existing Module?");
-  M.reset(new llvm::Module(ExpandModuleName(ModuleName, CodeGenOpts), C));
-  Initialize(*Ctx);
+
+  {
+CodeGenModule::KeepLazyEmiitedSymRAII RAIIKeeper(Builder);
+M.reset(new llvm::Module(ExpandModuleName(ModuleName, CodeGenOpts), C));
+Initialize(*Ctx);
+  }
+
   return M.get();
 }
 
Index: clang/lib/CodeGen/CodeGenModule.h
===
--- clang/lib/CodeGen/CodeGenModule.h
+++ clang/lib/CodeGen/CodeGenModule.h
@@ -1477,6 +1477,68 @@
   void printPostfixForExternalizedDecl(llvm::raw_ostream &OS,
const Decl *D) const;
 
+  llvm::DenseMap &getDeferredDecls() {
+return DeferredDecls;
+  }
+
+  std::vector &getDeferredDeclsToEmit() {
+return DeferredDeclsToEmit;
+  }
+
+  std::vector &getDeferredVTables() {
+return DeferredVTables;
+  }
+
+  llvm::MapVector &getMangledDeclNames() {
+return MangledDeclNames;
+  }
+
+  llvm::StringMap &getManglings() {
+return Manglings;
+  }
+
+  llvm::SmallPtrSetImpl &getWeakRefReferences() {
+return WeakRefReferences;
+  }
+
+  std::unique_ptr &getTBAA() { return TBAA; }
+
+  struct KeepLazyEmiitedSymRAII {
+std::unique_ptr OldBuilder;
+std::unique_ptr &Self;
+
+explicit KeepLazyEmiitedSymRAII(std::unique_ptr &Builder)
+: Self(Builder) {
+  OldBuilder.swap(Self);
+}
+
+~KeepLazyEmiitedSymRAII() {
+  assert(OldBuilder->getDeferredDeclsToEmit().empty() &&
+ "Should have emitted all decls deferred to emit.");
+  assert(Self->getDeferredDecls().empty() &&
+ "Newly created module should not have deferred decls");
+
+  std::swap(Self->getDeferredDecls(), OldBuilder->getDeferredDecls());
+
+  assert(Self->getDeferredVTables().empty() &&
+ "Newly created module should not have deferred vtables");
+
+  std::swap(Self->getDeferredVTables(), OldBuilder->getDeferredVTables());
+
+  assert(Self->getMangledDeclNames().empty() &&
+ "Newly created module should not have mangled decl names");
+  assert(Self->getManglings().empty() &&
+ "Newly created module should not have manglings");
+
+  Self->getManglings() = std::move(OldBuilder->getManglings());
+
+  assert(OldBuilder->getWeakRefReferences().empty() &&
+ "Not all WeakRefRefs have been applied");
+
+  std::swap(Self->getTBAA(), OldBuilder->getTBAA());
+}
+  };
+
 private:
   llvm::Constant *GetOrCreateLLVMFunction(
   StringRef MangledName, llvm::Type *Ty, GlobalDecl D, bool ForVTable,
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126158: [MLIR][GPU] Replace fdiv on fp16 with promoted (fp32) multiplication with reciprocal plus one (conditional) Newton iteration.

2022-06-04 Thread Mehdi AMINI via Phabricator via cfe-commits
mehdi_amini added a comment.

The shared library build was broken, I had to revert: 
https://lab.llvm.org/buildbot/#/builders/61/builds/27377


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126158

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


[PATCH] D126158: [MLIR][GPU] Replace fdiv on fp16 with promoted (fp32) multiplication with reciprocal plus one (conditional) Newton iteration.

2022-06-04 Thread Christian Sigg via Phabricator via cfe-commits
csigg added a comment.

Thanks Mehdi for reverting.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126158

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


[PATCH] D124690: [clangd] add inlay hints for std::forward-ed parameter packs

2022-06-04 Thread Tobias Ribizel via Phabricator via cfe-commits
upsj updated this revision to Diff 434257.
upsj added a comment.

This is now ready to review, only needed to fix a formatting issue


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D124690

Files:
  clang-tools-extra/clangd/AST.cpp
  clang-tools-extra/clangd/AST.h
  clang-tools-extra/clangd/InlayHints.cpp
  clang-tools-extra/clangd/unittests/InlayHintTests.cpp

Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp
===
--- clang-tools-extra/clangd/unittests/InlayHintTests.cpp
+++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp
@@ -174,6 +174,44 @@
   )cpp");
 }
 
+TEST(ParameterHints, NoNameVariadicDeclaration) {
+  // No hint for anonymous variadic parameter
+  assertParameterHints(R"cpp(
+template 
+void foo(Args&& ...);
+void bar() {
+  foo(42);
+}
+  )cpp");
+}
+
+TEST(ParameterHints, NoNameVariadicForwarded) {
+  // No hint for anonymous variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+void foo(int);
+template 
+void bar(Args&&... args) { return foo(std::forward($fwd[[args]])...); }
+void baz() {
+  bar(42);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"});
+}
+
+TEST(ParameterHints, NoNameVariadicPlain) {
+  // No hint for anonymous variadic parameter
+  assertParameterHints(R"cpp(
+void foo(int);
+template 
+void bar(Args&&... args) { return foo(args...); }
+void baz() {
+  bar(42);
+}
+  )cpp");
+}
+
 TEST(ParameterHints, NameInDefinition) {
   // Parameter name picked up from definition if necessary.
   assertParameterHints(R"cpp(
@@ -186,6 +224,19 @@
ExpectedHint{"param: ", "param"});
 }
 
+TEST(ParameterHints, NamePartiallyInDefinition) {
+  // Parameter name picked up from definition if necessary.
+  assertParameterHints(R"cpp(
+void foo(int, int b);
+void bar() {
+  foo($param1[[42]], $param2[[42]]);
+}
+void foo(int a, int) {};
+  )cpp",
+   ExpectedHint{"a: ", "param1"},
+   ExpectedHint{"b: ", "param2"});
+}
+
 TEST(ParameterHints, NameMismatch) {
   // Prefer name from declaration.
   assertParameterHints(R"cpp(
@@ -258,6 +309,276 @@
ExpectedHint{"param: ", "param"});
 }
 
+TEST(ParameterHints, VariadicForwardedConstructor) {
+  // Name hint for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+struct S { S(int a); };
+template 
+T bar(Args&&... args) { return T{std::forward($fwd[[args]])...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlainConstructor) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+struct S { S(int a); };
+template 
+T bar(Args&&... args) { return T{args...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicForwardedNewConstructor) {
+  // Name hint for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+struct S { S(int a); };
+template 
+T* bar(Args&&... args) { return new T{std::forward($fwd[[args]])...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlainNewConstructor) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+struct S { S(int a); };
+template 
+T* bar(Args&&... args) { return new T{args...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicForwarded) {
+  // Name for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+void foo(int a);
+template 
+void bar(Args&&... args) { return foo(std::forward($fwd[[args]])...); }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlain) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+void foo(int a);
+tem

[PATCH] D124690: [clangd] add inlay hints for std::forward-ed parameter packs

2022-06-04 Thread Tobias Ribizel via Phabricator via cfe-commits
upsj updated this revision to Diff 434262.
upsj added a comment.

add test for varargs function called from forwarding function


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D124690

Files:
  clang-tools-extra/clangd/AST.cpp
  clang-tools-extra/clangd/AST.h
  clang-tools-extra/clangd/InlayHints.cpp
  clang-tools-extra/clangd/unittests/InlayHintTests.cpp

Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp
===
--- clang-tools-extra/clangd/unittests/InlayHintTests.cpp
+++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp
@@ -174,6 +174,44 @@
   )cpp");
 }
 
+TEST(ParameterHints, NoNameVariadicDeclaration) {
+  // No hint for anonymous variadic parameter
+  assertParameterHints(R"cpp(
+template 
+void foo(Args&& ...);
+void bar() {
+  foo(42);
+}
+  )cpp");
+}
+
+TEST(ParameterHints, NoNameVariadicForwarded) {
+  // No hint for anonymous variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+void foo(int);
+template 
+void bar(Args&&... args) { return foo(std::forward($fwd[[args]])...); }
+void baz() {
+  bar(42);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"});
+}
+
+TEST(ParameterHints, NoNameVariadicPlain) {
+  // No hint for anonymous variadic parameter
+  assertParameterHints(R"cpp(
+void foo(int);
+template 
+void bar(Args&&... args) { return foo(args...); }
+void baz() {
+  bar(42);
+}
+  )cpp");
+}
+
 TEST(ParameterHints, NameInDefinition) {
   // Parameter name picked up from definition if necessary.
   assertParameterHints(R"cpp(
@@ -186,6 +224,19 @@
ExpectedHint{"param: ", "param"});
 }
 
+TEST(ParameterHints, NamePartiallyInDefinition) {
+  // Parameter name picked up from definition if necessary.
+  assertParameterHints(R"cpp(
+void foo(int, int b);
+void bar() {
+  foo($param1[[42]], $param2[[42]]);
+}
+void foo(int a, int) {};
+  )cpp",
+   ExpectedHint{"a: ", "param1"},
+   ExpectedHint{"b: ", "param2"});
+}
+
 TEST(ParameterHints, NameMismatch) {
   // Prefer name from declaration.
   assertParameterHints(R"cpp(
@@ -258,6 +309,291 @@
ExpectedHint{"param: ", "param"});
 }
 
+TEST(ParameterHints, VariadicForwardedConstructor) {
+  // Name hint for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+struct S { S(int a); };
+template 
+T bar(Args&&... args) { return T{std::forward($fwd[[args]])...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlainConstructor) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+struct S { S(int a); };
+template 
+T bar(Args&&... args) { return T{args...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicForwardedNewConstructor) {
+  // Name hint for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+struct S { S(int a); };
+template 
+T* bar(Args&&... args) { return new T{std::forward($fwd[[args]])...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlainNewConstructor) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+struct S { S(int a); };
+template 
+T* bar(Args&&... args) { return new T{args...}; }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicForwarded) {
+  // Name for variadic parameter
+  // This prototype of std::forward is sufficient for clang to recognize it
+  assertParameterHints(R"cpp(
+namespace std { template  T&& forward(T&); }
+void foo(int a);
+template 
+void bar(Args&&... args) { return foo(std::forward($fwd[[args]])...); }
+void baz() {
+  int b;
+  bar($param[[b]]);
+}
+  )cpp",
+   ExpectedHint{"&: ", "fwd"},
+   ExpectedHint{"a: ", "param"});
+}
+
+TEST(ParameterHints, VariadicPlain) {
+  // Name hint for variadic parameter
+  assertParameterHints(R"cpp(
+void foo(int a);
+template

[PATCH] D124690: [clangd] add inlay hints for std::forward-ed parameter packs

2022-06-04 Thread Tobias Ribizel via Phabricator via cfe-commits
upsj added inline comments.



Comment at: clang-tools-extra/clangd/AST.cpp:772
+  size_t PackLocation = OptPackLocation.getValue();
+  ArrayRef MatchingParams =
+  Callee->parameters().slice(PackLocation, Parameters.size());

Similar to processCall in InlayHints.cpp, this may have issues with varargs 
functions. Maybe on top of checking for unexpanded pack expression arguments, I 
should add a check `Callee->getNumParams() == Args.size()`. A corresponding 
test fails by not forwarding a fixed parameter right now.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D124690

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


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread Phoebe Wang via Phabricator via cfe-commits
pengfei created this revision.
pengfei added reviewers: rjmccall, erichkeane, LuoYuanke.
Herald added a project: All.
pengfei requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

We are lacking builtins support for `_Float16`. In most cases, we can use other 
floating-type builtins and truncate them to `_Float16`.
But it's a problem to SNaN, e.g., https://gcc.godbolt.org/z/cqr5nG1jh
This patch adds `__builtin_nansf16` support as well as other 3 ones since they 
are usually used together.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127050

Files:
  clang/include/clang/Basic/Builtins.def
  clang/lib/AST/ExprConstant.cpp
  clang/test/CodeGen/builtin_Float16.c


Index: clang/test/CodeGen/builtin_Float16.c
===
--- /dev/null
+++ clang/test/CodeGen/builtin_Float16.c
@@ -0,0 +1,17 @@
+// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-linux-pc -target-feature 
+avx512fp16 %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple spir-unknown-unknown %s | FileCheck 
%s
+// RUN: %clang_cc1 -emit-llvm -o - -triple armv7a--none-eabi %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-linux-gnu %s | FileCheck %s
+
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+
+  // CHECK: store volatile half 0xH7C00, ptr %res, align 2
+  res = __builtin_huge_valf16();
+  // CHECK: store volatile half 0xH7C00, ptr %res, align 2
+  res = __builtin_inff16();
+  // CHECK: store volatile half 0xH7E00, ptr %res, align 2
+  res = __builtin_nanf16("");
+  // CHECK: store volatile half 0xH7D00, ptr %res, align 2
+  res = __builtin_nansf16("");
+}
Index: clang/lib/AST/ExprConstant.cpp
===
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -13880,10 +13880,12 @@
   case Builtin::BI__builtin_huge_val:
   case Builtin::BI__builtin_huge_valf:
   case Builtin::BI__builtin_huge_vall:
+  case Builtin::BI__builtin_huge_valf16:
   case Builtin::BI__builtin_huge_valf128:
   case Builtin::BI__builtin_inf:
   case Builtin::BI__builtin_inff:
   case Builtin::BI__builtin_infl:
+  case Builtin::BI__builtin_inff16:
   case Builtin::BI__builtin_inff128: {
 const llvm::fltSemantics &Sem =
   Info.Ctx.getFloatTypeSemantics(E->getType());
@@ -13894,6 +13896,7 @@
   case Builtin::BI__builtin_nans:
   case Builtin::BI__builtin_nansf:
   case Builtin::BI__builtin_nansl:
+  case Builtin::BI__builtin_nansf16:
   case Builtin::BI__builtin_nansf128:
 if (!TryEvaluateBuiltinNaN(Info.Ctx, E->getType(), E->getArg(0),
true, Result))
@@ -13903,6 +13906,7 @@
   case Builtin::BI__builtin_nan:
   case Builtin::BI__builtin_nanf:
   case Builtin::BI__builtin_nanl:
+  case Builtin::BI__builtin_nanf16:
   case Builtin::BI__builtin_nanf128:
 // If this is __builtin_nan() turn this into a nan, otherwise we
 // can't constant fold it.
Index: clang/include/clang/Basic/Builtins.def
===
--- clang/include/clang/Basic/Builtins.def
+++ clang/include/clang/Basic/Builtins.def
@@ -142,10 +142,12 @@
 BUILTIN(__builtin_huge_val, "d", "nc")
 BUILTIN(__builtin_huge_valf, "f", "nc")
 BUILTIN(__builtin_huge_vall, "Ld", "nc")
+BUILTIN(__builtin_huge_valf16, "x", "nc")
 BUILTIN(__builtin_huge_valf128, "LLd", "nc")
 BUILTIN(__builtin_inf  , "d"   , "nc")
 BUILTIN(__builtin_inff , "f"   , "nc")
 BUILTIN(__builtin_infl , "Ld"  , "nc")
+BUILTIN(__builtin_inff16 , "x"  , "nc")
 BUILTIN(__builtin_inff128 , "LLd"  , "nc")
 BUILTIN(__builtin_labs , "LiLi"  , "Fnc")
 BUILTIN(__builtin_llabs, "LLiLLi", "Fnc")
@@ -160,10 +162,12 @@
 BUILTIN(__builtin_nan,  "dcC*" , "FnU")
 BUILTIN(__builtin_nanf, "fcC*" , "FnU")
 BUILTIN(__builtin_nanl, "LdcC*", "FnU")
+BUILTIN(__builtin_nanf16, "xcC*", "FnU")
 BUILTIN(__builtin_nanf128, "LLdcC*", "FnU")
 BUILTIN(__builtin_nans,  "dcC*" , "FnU")
 BUILTIN(__builtin_nansf, "fcC*" , "FnU")
 BUILTIN(__builtin_nansl, "LdcC*", "FnU")
+BUILTIN(__builtin_nansf16, "xcC*", "FnU")
 BUILTIN(__builtin_nansf128, "LLdcC*", "FnU")
 BUILTIN(__builtin_powi , "ddi"  , "Fnc")
 BUILTIN(__builtin_powif, "ffi"  , "Fnc")


Index: clang/test/CodeGen/builtin_Float16.c
===
--- /dev/null
+++ clang/test/CodeGen/builtin_Float16.c
@@ -0,0 +1,17 @@
+// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-linux-pc -target-feature +avx512fp16 %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple spir-unknown-unknown %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple armv7a--none-eabi %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-linux-gnu %s | FileCheck %s
+
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+
+  // CHECK: store volatile half 0xH7C00, ptr %res, align 2
+  res = __builtin_huge_valf16();
+  // CHECK: store volatile

[PATCH] D126973: [clang][dataflow] Relax assumption that `AggregateStorageLocations` correspond to struct type.

2022-06-04 Thread Dmitri Gribenko via Phabricator via cfe-commits
gribozavr2 added a comment.

> using the StructValue for its properties, while modeling a non-struct type.

Could you explain the use case in more details? Maybe a better change is to 
move synthetic properties to the base class `Value`?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126973

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


[PATCH] D109977: LLVM Driver Multicall tool

2022-06-04 Thread Alex Brachet via Phabricator via cfe-commits
abrachet commandeered this revision.
abrachet added a reviewer: beanz.
abrachet added a comment.

I spoke to @beanz offline to make sure he is still ok with the patch being 
commandeered. Thanks for the patch @beanz, very excited about this :)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D109977

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


[PATCH] D109977: LLVM Driver Multicall tool

2022-06-04 Thread Alex Brachet via Phabricator via cfe-commits
abrachet updated this revision to Diff 434277.
abrachet added a comment.
Herald added a subscriber: hiraditya.

- `llvm llvm-$tool` -> `llvm $tool`
- Error messages will now show `$tool: error: ...` instead of `error: ...`


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

https://reviews.llvm.org/D109977

Files:
  clang/cmake/modules/AddClang.cmake
  clang/tools/driver/CMakeLists.txt
  clang/tools/driver/driver.cpp
  llvm/CMakeLists.txt
  llvm/cmake/driver-template.cpp.in
  llvm/cmake/modules/AddLLVM.cmake
  llvm/lib/Support/Path.cpp
  llvm/lib/Support/Unix/Path.inc
  llvm/lib/Support/Windows/Path.inc
  llvm/test/CMakeLists.txt
  llvm/test/lit.cfg.py
  llvm/test/lit.site.cfg.py.in
  llvm/test/tools/llvm-driver/help-passthrough.test
  llvm/test/tools/llvm-driver/help.test
  llvm/test/tools/llvm-driver/symlink-call.test
  llvm/tools/CMakeLists.txt
  llvm/tools/dsymutil/CMakeLists.txt
  llvm/tools/dsymutil/dsymutil.cpp
  llvm/tools/llvm-ar/CMakeLists.txt
  llvm/tools/llvm-ar/llvm-ar.cpp
  llvm/tools/llvm-cxxfilt/CMakeLists.txt
  llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
  llvm/tools/llvm-driver/CMakeLists.txt
  llvm/tools/llvm-driver/llvm-driver.cpp
  llvm/tools/llvm-objcopy/CMakeLists.txt
  llvm/tools/llvm-objcopy/llvm-objcopy.cpp

Index: llvm/tools/llvm-objcopy/llvm-objcopy.cpp
===
--- llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -223,7 +223,7 @@
   return Error::success();
 }
 
-int main(int argc, char **argv) {
+int llvm_objcopy_main(int argc, char **argv) {
   InitLLVM X(argc, argv);
   ToolName = argv[0];
 
Index: llvm/tools/llvm-objcopy/CMakeLists.txt
===
--- llvm/tools/llvm-objcopy/CMakeLists.txt
+++ llvm/tools/llvm-objcopy/CMakeLists.txt
@@ -30,6 +30,7 @@
   ObjcopyOptsTableGen
   InstallNameToolOptsTableGen
   StripOptsTableGen
+  GENERATE_DRIVER
   )
 
 add_llvm_tool_symlink(llvm-install-name-tool llvm-objcopy)
Index: llvm/tools/llvm-driver/llvm-driver.cpp
===
--- /dev/null
+++ llvm/tools/llvm-driver/llvm-driver.cpp
@@ -0,0 +1,72 @@
+//===-- llvm-driver.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSwitch.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/WithColor.h"
+
+using namespace llvm;
+
+#define LLVM_DRIVER_TOOL(tool, entry, key) \
+  int entry##_main(int argc, char **argv);
+#include "LLVMDriverTools.def"
+
+// This function handles the case of not recognizing the tool requested, or if
+// --help or --version are passed directly to the llvm driver.
+int UnknownMain(int Argc, char **Argv) {
+  cl::OptionCategory LLVMDriverCategory("llvm options");
+#define LLVM_DRIVER_TOOL(tool, entry, key) \
+  cl::SubCommand key##Subcommand(tool, tool);
+#include "LLVMDriverTools.def"
+
+  cl::HideUnrelatedOptions(LLVMDriverCategory);
+  cl::ParseCommandLineOptions(Argc, Argv, "llvm compiler driver\n");
+  if (Argc < 2) {
+cl::PrintHelpMessage();
+return 1;
+  }
+
+  llvm_unreachable("We should never get here, parsing should always exit.");
+  return 1;
+}
+
+extern bool IsLLVMDriver;
+
+int main(int Argc, char **Argv) {
+  IsLLVMDriver = true;
+  llvm::StringRef LaunchedTool = sys::path::stem(Argv[0]);
+  // If the driver is launched directly.
+  int PassThroughArgC = Argc;
+  char **PassThroughArgV = Argv;
+  bool ConsumeFirstArg = false;
+  if (LaunchedTool == "llvm") {
+if (Argc < 2)
+  return UnknownMain(Argc, Argv);
+LaunchedTool = Argv[1];
+ConsumeFirstArg = true;
+  }
+
+  // if it is launched through a symlink that is the tool name.
+  typedef int (*MainFunction)(int, char **);
+  MainFunction Func = StringSwitch(LaunchedTool)
+
+#define LLVM_DRIVER_TOOL(tool, entry, key) .Case(tool, entry##_main)
+#include "LLVMDriverTools.def"
+  .Default(UnknownMain);
+  // If the main function is unknown we don't consume any args, so that we can
+  // print the appropriate help spew.
+  if (Func != UnknownMain && ConsumeFirstArg) {
+--PassThroughArgC;
+++PassThroughArgV;
+  }
+
+  return Func(PassThroughArgC, PassThroughArgV);
+}
Index: llvm/tools/llvm-driver/CMakeLists.txt
===
--- /dev/null
+++ llvm/tools/llvm-driver/CMakeLists.txt
@@ -0,0 +1,31 @@
+get_property(LLVM_COMMON_DEPENDS GLOBAL PROPERTY LLVM_DRIVER_DEPS)
+get_p

[PATCH] D109977: LLVM Driver Multicall tool

2022-06-04 Thread Alex Brachet via Phabricator via cfe-commits
abrachet marked 5 inline comments as done.
abrachet added a comment.

In D109977#3378312 , @phosek wrote:

> Another potential future improvement is error reporting for subcommands:
>
>   $ ./bin/llvm clang   
>   llvm: error: no input files
>   $ ./bin/clang
>   clang-15: error: no input files
>
> Ideally, the multicall tool would produce the same error message.

It's difficult to make the error message the same, ie `clang-15`, but hopefully 
the name the tool was invoked with is enough.




Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:43
+  if (LaunchedTool == "llvm") {
+LaunchedTool = Argv[1];
+ConsumeFirstArg = true;

phosek wrote:
> When the tool is invoked without any arguments (that is, simply as 
> `./bin/llvm`) this will lead to out-of-bounds array access. We should handle 
> this case explicitly.
This will now print the help message



Comment at: llvm/tools/llvm-objcopy/llvm-objcopy.cpp:404
 
-int main(int argc, char **argv) {
+int llvm_objcopy_main(int argc, char **argv) {
   InitLLVM X(argc, argv);

beanz wrote:
> aganea wrote:
> > Shouldn't we say:
> > ```
> > int objcopy_main(int argc, char **argv) {
> > ```
> > here and the other places + all supporting code, if we want `llvm objcopy` 
> > (without the dash) like @phosek suggests?
> I had a different thought for that. I think we want the tools to respond to 
> llvm-objcopy since we will want them to exist in parallel to binutils tools 
> just like the current tools do today.
> 
> Many of the current tools also support symlink-redirection, to support that 
> we'll need to have a multiplex where multiple tool names point to the same 
> `main` function.
> 
> Handling that was my point (1) in the `main` commit message, and I intended 
> to work on it in a follow-on commit.
> Shouldn't we say:
> ```
> int objcopy_main(int argc, char **argv) {
> ```
> here and the other places + all supporting code, if we want `llvm objcopy` 
> (without the dash) like @phosek suggests?

I've kept name of the function as is, but `llvm objcopy` is now supported, and 
`llvm llvm-objcopy` is not


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

https://reviews.llvm.org/D109977

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


[PATCH] D127042: [Clang][OpenMP] Enable floating-point operation for `atomic compare` series

2022-06-04 Thread Alexey Bataev via Phabricator via cfe-commits
ABataev accepted this revision.
ABataev added a comment.
This revision is now accepted and ready to land.

LG


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127042

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


[PATCH] D127036: [clang-tidy] Warn about arrays in `bugprone-undefined-memory-manipulation`

2022-06-04 Thread Jonas Toth via Phabricator via cfe-commits
JonasToth added inline comments.



Comment at: 
clang-tools-extra/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.cpp:27
 void UndefinedMemoryManipulationCheck::registerMatchers(MatchFinder *Finder) {
-  const auto NotTriviallyCopyableObject =
-  hasType(ast_matchers::hasCanonicalType(
-  pointsTo(cxxRecordDecl(isNotTriviallyCopyable();
+  const auto ArrayOfNotTriviallyCopyable = arrayType(
+  hasElementType(hasDeclaration(cxxRecordDecl(isNotTriviallyCopyable();

you can factor the `hasDeclaration(cxxRecordDecl(isNotTriviallyCopyable()))` 
out to avoid the copy&paste.



Comment at: 
clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp:129
 
+  types::Copy ca[10];
+  memset(ca, 0, sizeof(ca));

could you please add a test with a typedef to array to ensure that those are 
matched as well.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127036

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


[PATCH] D127036: [clang-tidy] Warn about arrays in `bugprone-undefined-memory-manipulation`

2022-06-04 Thread Fabian Wolff via Phabricator via cfe-commits
fwolff updated this revision to Diff 434283.

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

https://reviews.llvm.org/D127036

Files:
  clang-tools-extra/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.cpp
  
clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp


Index: 
clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
===
--- 
clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
+++ 
clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
@@ -126,6 +126,12 @@
   ::memmove(&p, &vb, sizeof(int));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, source 
object type 'types::VirtualBase'
 
+  types::Copy ca[10];
+  memset(ca, 0, sizeof(ca));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'types::Copy[10]'
+  memset(&ca, 0, sizeof(ca));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'types::Copy[10]'
+
 #define MEMSET memset(&vf, 0, sizeof(int));
   MEMSET
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'types::VirtualFunc'
@@ -159,6 +165,18 @@
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'aliases::Copy2'
   memset(pc3, 0, sizeof(int));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'Copy3'
+
+  using Copy3Arr = Copy3[5];
+  Copy3Arr c3a;
+  memset(c3a, 0, sizeof(c3a));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'Copy3Arr'
+  memset(&c3a, 0, sizeof(c3a));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'Copy3Arr'
+
+  typedef Copy3 Copy3Arr2[5];
+  Copy3Arr2 c3a2;
+  memset(c3a2, 0, sizeof(c3a2));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination 
object type 'Copy3Arr2'
 }
 
 void triviallyCopyable() {
Index: 
clang-tools-extra/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.cpp
===
--- clang-tools-extra/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.cpp
+++ clang-tools-extra/clang-tidy/bugprone/UndefinedMemoryManipulationCheck.cpp
@@ -24,9 +24,14 @@
 } // namespace
 
 void UndefinedMemoryManipulationCheck::registerMatchers(MatchFinder *Finder) {
-  const auto NotTriviallyCopyableObject =
-  hasType(ast_matchers::hasCanonicalType(
-  pointsTo(cxxRecordDecl(isNotTriviallyCopyable();
+  const auto HasNotTriviallyCopyableDecl =
+  hasDeclaration(cxxRecordDecl(isNotTriviallyCopyable()));
+  const auto ArrayOfNotTriviallyCopyable =
+  arrayType(hasElementType(HasNotTriviallyCopyableDecl));
+  const auto NotTriviallyCopyableObject = hasType(hasCanonicalType(
+  anyOf(pointsTo(qualType(anyOf(HasNotTriviallyCopyableDecl,
+ArrayOfNotTriviallyCopyable))),
+ArrayOfNotTriviallyCopyable)));
 
   // Check whether destination object is not TriviallyCopyable.
   // Applicable to all three memory manipulation functions.


Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
===
--- clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/bugprone-undefined-memory-manipulation.cpp
@@ -126,6 +126,12 @@
   ::memmove(&p, &vb, sizeof(int));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, source object type 'types::VirtualBase'
 
+  types::Copy ca[10];
+  memset(ca, 0, sizeof(ca));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'types::Copy[10]'
+  memset(&ca, 0, sizeof(ca));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'types::Copy[10]'
+
 #define MEMSET memset(&vf, 0, sizeof(int));
   MEMSET
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'types::VirtualFunc'
@@ -159,6 +165,18 @@
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'aliases::Copy2'
   memset(pc3, 0, sizeof(int));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'Copy3'
+
+  using Copy3Arr = Copy3[5];
+  Copy3Arr c3a;
+  memset(c3a, 0, sizeof(c3a));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'Copy3Arr'
+  memset(&c3a, 0, sizeof(c3a));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, destination object type 'Copy3Arr'
+
+  typedef Copy3 Copy3Arr2[5];
+  Copy3Arr2 c3a2;
+  memset(c3a2, 0, sizeof(c3a2));
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: undefined behavior, dest

[PATCH] D127054: [clang-format] Handle attributes for for/while loops

2022-06-04 Thread Owen Pan via Phabricator via cfe-commits
owenpan created this revision.
owenpan added reviewers: curdeius, HazardyKnusperkeks, MyDeveloperDay.
owenpan added a project: clang-format.
Herald added a project: All.
owenpan requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Fixes https://github.com/llvm/llvm-project/issues/55853.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127054

Files:
  clang/lib/Format/UnwrappedLineParser.cpp
  clang/unittests/Format/FormatTest.cpp


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -23846,6 +23846,22 @@
"  return 29;\n",
Style);
 
+  verifyFormat("while (limit > 0) [[unlikely]] {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+  verifyFormat("for (auto &limit : limits) [[likely]] {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+
+  verifyFormat("for (auto &limit : limits) [[unlikely]]\n"
+   "  --limit;",
+   Style);
+  verifyFormat("while (limit > 0) [[likely]]\n"
+   "  --limit;",
+   Style);
+
   Style.AttributeMacros.push_back("UNLIKELY");
   Style.AttributeMacros.push_back("LIKELY");
   verifyFormat("if (argc > 5) UNLIKELY\n"
@@ -23874,6 +23890,22 @@
"  return 42;\n"
"}\n",
Style);
+
+  verifyFormat("for (auto &limit : limits) UNLIKELY {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+  verifyFormat("while (limit > 0) LIKELY {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+
+  verifyFormat("while (limit > 0) UNLIKELY\n"
+   "  --limit;",
+   Style);
+  verifyFormat("for (auto &limit : limits) LIKELY\n"
+   "  --limit;",
+   Style);
 }
 
 TEST_F(FormatTest, PenaltyIndentedWhitespace) {
Index: clang/lib/Format/UnwrappedLineParser.cpp
===
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -2889,6 +2889,7 @@
   if (FormatTok->is(tok::l_paren))
 parseParens();
 
+  handleAttributes();
   parseLoopBody(KeepBraces, /*WrapRightBrace=*/true);
 }
 


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -23846,6 +23846,22 @@
"  return 29;\n",
Style);
 
+  verifyFormat("while (limit > 0) [[unlikely]] {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+  verifyFormat("for (auto &limit : limits) [[likely]] {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+
+  verifyFormat("for (auto &limit : limits) [[unlikely]]\n"
+   "  --limit;",
+   Style);
+  verifyFormat("while (limit > 0) [[likely]]\n"
+   "  --limit;",
+   Style);
+
   Style.AttributeMacros.push_back("UNLIKELY");
   Style.AttributeMacros.push_back("LIKELY");
   verifyFormat("if (argc > 5) UNLIKELY\n"
@@ -23874,6 +23890,22 @@
"  return 42;\n"
"}\n",
Style);
+
+  verifyFormat("for (auto &limit : limits) UNLIKELY {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+  verifyFormat("while (limit > 0) LIKELY {\n"
+   "  --limit;\n"
+   "}",
+   Style);
+
+  verifyFormat("while (limit > 0) UNLIKELY\n"
+   "  --limit;",
+   Style);
+  verifyFormat("for (auto &limit : limits) LIKELY\n"
+   "  --limit;",
+   Style);
 }
 
 TEST_F(FormatTest, PenaltyIndentedWhitespace) {
Index: clang/lib/Format/UnwrappedLineParser.cpp
===
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -2889,6 +2889,7 @@
   if (FormatTok->is(tok::l_paren))
 parseParens();
 
+  handleAttributes();
   parseLoopBody(KeepBraces, /*WrapRightBrace=*/true);
 }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D127005: [clang-format][NFC] Clean up the unwrapped line parser

2022-06-04 Thread Owen Pan via Phabricator via cfe-commits
owenpan updated this revision to Diff 434287.
owenpan edited the summary of this revision.
owenpan added a comment.

Restored the prototype of `parseStructuralElement()`.


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

https://reviews.llvm.org/D127005

Files:
  clang/lib/Format/UnwrappedLineParser.cpp
  clang/lib/Format/UnwrappedLineParser.h

Index: clang/lib/Format/UnwrappedLineParser.h
===
--- clang/lib/Format/UnwrappedLineParser.h
+++ clang/lib/Format/UnwrappedLineParser.h
@@ -92,16 +92,18 @@
   void reset();
   void parseFile();
   bool precededByCommentOrPPDirective() const;
-  bool parseLevel(const FormatToken *OpeningBrace, bool CanContainBracedList,
-  IfStmtKind *IfKind = nullptr,
-  TokenType NextLBracesType = TT_Unknown);
+  void parseLevel(const FormatToken *OpeningBrace = nullptr,
+  bool CanContainBracedList = true,
+  TokenType NextLBracesType = TT_Unknown,
+  IfStmtKind *IfKind = nullptr, bool *SimpleBlock = nullptr);
   bool mightFitOnOneLine(UnwrappedLine &Line,
  const FormatToken *OpeningBrace = nullptr) const;
-  IfStmtKind parseBlock(bool MustBeDeclaration = false, unsigned AddLevels = 1u,
-bool MunchSemi = true, bool KeepBraces = true,
-bool UnindentWhitesmithsBraces = false,
-bool CanContainBracedList = true,
-TokenType NextLBracesType = TT_Unknown);
+  void parseBlock(bool MustBeDeclaration = false, unsigned AddLevels = 1u,
+  bool MunchSemi = true, bool KeepBraces = true,
+  IfStmtKind *IfKind = nullptr,
+  bool UnindentWhitesmithsBraces = false,
+  bool CanContainBracedList = true,
+  TokenType NextLBracesType = TT_Unknown);
   void parseChildBlock(bool CanContainBracedList = true,
TokenType NextLBracesType = TT_Unknown);
   void parsePPDirective();
Index: clang/lib/Format/UnwrappedLineParser.cpp
===
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -395,7 +395,7 @@
   if (Style.Language == FormatStyle::LK_TextProto)
 parseBracedList();
   else
-parseLevel(/*OpeningBrace=*/nullptr, /*CanContainBracedList=*/true);
+parseLevel();
   // Make sure to format the remaining tokens.
   //
   // LK_TextProto is special since its top-level is parsed as the body of a
@@ -469,21 +469,26 @@
 /// \param CanContainBracedList If the content can contain (at any level) a
 /// braced list.
 /// \param NextLBracesType The type for left brace found in this level.
-/// \returns true if a simple block of if/else/for/while, or false otherwise.
+/// \param IfKind The if statement kind in the level.
+/// \param SimpleBlock Whether the level is a simple block of if/else/for/while.
 /// (A simple block has a single statement.)
-bool UnwrappedLineParser::parseLevel(const FormatToken *OpeningBrace,
+void UnwrappedLineParser::parseLevel(const FormatToken *OpeningBrace,
  bool CanContainBracedList,
- IfStmtKind *IfKind,
- TokenType NextLBracesType) {
+ TokenType NextLBracesType,
+ IfStmtKind *IfKind, bool *SimpleBlock) {
+  if (SimpleBlock)
+*SimpleBlock = false;
+
   auto NextLevelLBracesType = NextLBracesType == TT_CompoundRequirementLBrace
   ? TT_BracedListLBrace
   : TT_Unknown;
   const bool IsPrecededByCommentOrPPDirective =
-  !Style.RemoveBracesLLVM || precededByCommentOrPPDirective();
+  !SimpleBlock || precededByCommentOrPPDirective();
   bool HasDoWhile = false;
   bool HasLabel = false;
   unsigned StatementCount = 0;
   bool SwitchLabelEncountered = false;
+
   do {
 if (FormatTok->getType() == TT_AttributeMacro) {
   nextToken();
@@ -524,7 +529,7 @@
 continue;
   }
   parseBlock(/*MustBeDeclaration=*/false, /*AddLevels=*/1u,
- /*MunchSemi=*/true, /*KeepBraces=*/true,
+ /*MunchSemi=*/true, /*KeepBraces=*/true, /*IfKind=*/nullptr,
  /*UnindentWhitesmithsBraces=*/false, CanContainBracedList,
  NextLBracesType);
   ++StatementCount;
@@ -533,17 +538,19 @@
   break;
 case tok::r_brace:
   if (OpeningBrace) {
-if (!Style.RemoveBracesLLVM ||
+if (!SimpleBlock ||
 !OpeningBrace->isOneOf(TT_ControlStatementLBrace, TT_ElseLBrace)) {
-  return false;
+  return;
 }
 if (FormatTok->isNot(tok::r_brace) || StatementCount != 1 || HasLabel ||
 HasDoWhile || IsPrecededByCommentOrPPDirective ||

[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread LuoYuanke via Phabricator via cfe-commits
LuoYuanke added inline comments.



Comment at: clang/include/clang/Basic/Builtins.def:145
 BUILTIN(__builtin_huge_vall, "Ld", "nc")
+BUILTIN(__builtin_huge_valf16, "x", "nc")
 BUILTIN(__builtin_huge_valf128, "LLd", "nc")

Is the builtin sorted in alphabet order?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread Phoebe Wang via Phabricator via cfe-commits
pengfei added inline comments.



Comment at: clang/include/clang/Basic/Builtins.def:145
 BUILTIN(__builtin_huge_vall, "Ld", "nc")
+BUILTIN(__builtin_huge_valf16, "x", "nc")
 BUILTIN(__builtin_huge_valf128, "LLd", "nc")

LuoYuanke wrote:
> Is the builtin sorted in alphabet order?
No, I think there's no strict order requirment here. The xxxf128 builtins have 
already not met it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread LuoYuanke via Phabricator via cfe-commits
LuoYuanke added inline comments.



Comment at: clang/test/CodeGen/builtin_Float16.c:7
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+

Is _Float16 a legal type for target armv7a and aarch64?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread Phoebe Wang via Phabricator via cfe-commits
pengfei added inline comments.



Comment at: clang/test/CodeGen/builtin_Float16.c:7
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+

LuoYuanke wrote:
> Is _Float16 a legal type for target armv7a and aarch64?
Yes, see 
https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread LuoYuanke via Phabricator via cfe-commits
LuoYuanke added inline comments.



Comment at: clang/test/CodeGen/builtin_Float16.c:7
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+

pengfei wrote:
> LuoYuanke wrote:
> > Is _Float16 a legal type for target armv7a and aarch64?
> Yes, see 
> https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point
Maybe use `__fp16` because it is supported on every target. 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[PATCH] D127065: [docs] Update supported language standards list for C++

2022-06-04 Thread Yuki Okushi via Phabricator via cfe-commits
JohnTitor created this revision.
Herald added a project: All.
JohnTitor requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127065

Files:
  clang/docs/CommandGuide/clang.rst


Index: clang/docs/CommandGuide/clang.rst
===
--- clang/docs/CommandGuide/clang.rst
+++ clang/docs/CommandGuide/clang.rst
@@ -185,13 +185,21 @@
 
ISO C++ 2017 with amendments and GNU extensions
 
-  | ``c++2a``
+  | ``c++20``
 
-   Working draft for ISO C++ 2020
+   ISO C++ 2020 with amendments
 
-  | ``gnu++2a``
+  | ``gnu++20``
 
-   Working draft for ISO C++ 2020 with GNU extensions
+   ISO C++ 2020 with amendments and GNU extensions
+
+  | ``c++2b``
+
+   Working draft for ISO C++ 2023
+
+  | ``gnu++2b``
+
+   Working draft for ISO C++ 2023 with GNU extensions
 
  The default C++ language standard is ``gnu++14``.
 


Index: clang/docs/CommandGuide/clang.rst
===
--- clang/docs/CommandGuide/clang.rst
+++ clang/docs/CommandGuide/clang.rst
@@ -185,13 +185,21 @@
 
ISO C++ 2017 with amendments and GNU extensions
 
-  | ``c++2a``
+  | ``c++20``
 
-   Working draft for ISO C++ 2020
+   ISO C++ 2020 with amendments
 
-  | ``gnu++2a``
+  | ``gnu++20``
 
-   Working draft for ISO C++ 2020 with GNU extensions
+   ISO C++ 2020 with amendments and GNU extensions
+
+  | ``c++2b``
+
+   Working draft for ISO C++ 2023
+
+  | ``gnu++2b``
+
+   Working draft for ISO C++ 2023 with GNU extensions
 
  The default C++ language standard is ``gnu++14``.
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D127066: [clang] Remove some `U+00AD`s in `__cpp_multidimensional_subscript`

2022-06-04 Thread Yuki Okushi via Phabricator via cfe-commits
JohnTitor created this revision.
Herald added a project: All.
JohnTitor requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

The `Builder.defineMacro("__cpp_multidimensional_subscript", "202110L");` line 
has
some `U+00AD`s that shouldn't necessary here. So removed them.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D127066

Files:
  clang/lib/Frontend/InitPreprocessor.cpp


Index: clang/lib/Frontend/InitPreprocessor.cpp
===
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -690,7 +690,7 @@
 Builder.defineMacro("__cpp_implicit_move", "202011L");
 Builder.defineMacro("__cpp_size_t_suffix", "202011L");
 Builder.defineMacro("__cpp_if_consteval", "202106L");
-Builder.defineMacro("__cpp_­multidimensional_­subscript", "202110L");
+Builder.defineMacro("__cpp_multidimensional_subscript", "202110L");
   }
   if (LangOpts.Char8)
 Builder.defineMacro("__cpp_char8_t", "201811L");


Index: clang/lib/Frontend/InitPreprocessor.cpp
===
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -690,7 +690,7 @@
 Builder.defineMacro("__cpp_implicit_move", "202011L");
 Builder.defineMacro("__cpp_size_t_suffix", "202011L");
 Builder.defineMacro("__cpp_if_consteval", "202106L");
-Builder.defineMacro("__cpp_­multidimensional_­subscript", "202110L");
+Builder.defineMacro("__cpp_multidimensional_subscript", "202110L");
   }
   if (LangOpts.Char8)
 Builder.defineMacro("__cpp_char8_t", "201811L");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D127050: [Clang][FP16] Add 4 builtins for _Float16

2022-06-04 Thread Phoebe Wang via Phabricator via cfe-commits
pengfei added inline comments.



Comment at: clang/test/CodeGen/builtin_Float16.c:7
+void test_float16_builtins(void) {
+  volatile _Float16 res;
+

LuoYuanke wrote:
> pengfei wrote:
> > LuoYuanke wrote:
> > > Is _Float16 a legal type for target armv7a and aarch64?
> > Yes, see 
> > https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point
> Maybe use `__fp16` because it is supported on every target. 
No, I intentionally use `_Float16` here because I want to make it correspond to 
the type define `x` in Builtins.def
I think we should always use `x` (represents `_Float16`) rather than `h` 
(represents `__fp16`) when defining FP16 builtins. It doesn't make sense to to 
add new buildins for storage type, because all arithmetic operations should be 
promoted to `float`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127050

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


[clang] 4969a69 - Use llvm::less_first (NFC)

2022-06-04 Thread Kazu Hirata via cfe-commits

Author: Kazu Hirata
Date: 2022-06-04T21:23:18-07:00
New Revision: 4969a6924dc1644d4fa6cf89a33b598e647f5513

URL: 
https://github.com/llvm/llvm-project/commit/4969a6924dc1644d4fa6cf89a33b598e647f5513
DIFF: 
https://github.com/llvm/llvm-project/commit/4969a6924dc1644d4fa6cf89a33b598e647f5513.diff

LOG: Use llvm::less_first (NFC)

Added: 


Modified: 
clang/lib/AST/Interp/Function.cpp
clang/lib/Frontend/FrontendAction.cpp
clang/lib/Sema/SemaDeclCXX.cpp
clang/lib/Sema/SemaStmtAsm.cpp
clang/lib/StaticAnalyzer/Frontend/AnalyzerHelpFlags.cpp
lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
llvm/include/llvm/ExecutionEngine/Orc/Core.h
llvm/lib/CodeGen/MIRCanonicalizerPass.cpp
llvm/lib/IR/Attributes.cpp
llvm/lib/ObjCopy/MachO/MachOWriter.cpp
llvm/lib/ObjectYAML/MachOEmitter.cpp
llvm/tools/dsymutil/DebugMap.cpp
llvm/tools/llvm-reduce/deltas/ReduceAttributes.cpp

Removed: 




diff  --git a/clang/lib/AST/Interp/Function.cpp 
b/clang/lib/AST/Interp/Function.cpp
index 0ed13a92aa38d..6ba97df1cd30e 100644
--- a/clang/lib/AST/Interp/Function.cpp
+++ b/clang/lib/AST/Interp/Function.cpp
@@ -34,8 +34,7 @@ Function::ParamDescriptor 
Function::getParamDescriptor(unsigned Offset) const {
 SourceInfo Function::getSource(CodePtr PC) const {
   unsigned Offset = PC - getCodeBegin();
   using Elem = std::pair;
-  auto It = std::lower_bound(SrcMap.begin(), SrcMap.end(), Elem{Offset, {}},
- [](Elem A, Elem B) { return A.first < B.first; });
+  auto It = llvm::lower_bound(SrcMap, Elem{Offset, {}}, llvm::less_first());
   if (It == SrcMap.end() || It->first != Offset)
 llvm::report_fatal_error("missing source location");
   return It->second;

diff  --git a/clang/lib/Frontend/FrontendAction.cpp 
b/clang/lib/Frontend/FrontendAction.cpp
index 68c70dda12b9e..6b1f6364b13c3 100644
--- a/clang/lib/Frontend/FrontendAction.cpp
+++ b/clang/lib/Frontend/FrontendAction.cpp
@@ -413,11 +413,7 @@ static std::error_code collectModuleHeaderIncludes(
 
 // Sort header paths and make the header inclusion order deterministic
 // across 
diff erent OSs and filesystems.
-llvm::sort(Headers.begin(), Headers.end(), [](
-  const std::pair &LHS,
-  const std::pair &RHS) {
-return LHS.first < RHS.first;
-});
+llvm::sort(Headers.begin(), Headers.end(), llvm::less_first());
 for (auto &H : Headers) {
   // Include this header as part of the umbrella directory.
   Module->addTopHeader(H.second);

diff  --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index c470a46f58477..569b226da9233 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -5430,8 +5430,7 @@ static void DiagnoseBaseOrMemInitializerOrder(
 return;
 
   // Sort based on the ideal order, first in the pair.
-  llvm::sort(CorrelatedInitOrder,
- [](auto &LHS, auto &RHS) { return LHS.first < RHS.first; });
+  llvm::sort(CorrelatedInitOrder, llvm::less_first());
 
   // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to
   // emit the diagnostic before we can try adding notes.

diff  --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp
index fbca36b1216a8..c147d26b2dff3 100644
--- a/clang/lib/Sema/SemaStmtAsm.cpp
+++ b/clang/lib/Sema/SemaStmtAsm.cpp
@@ -716,10 +716,7 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, 
bool IsSimple,
   NamedOperandList.emplace_back(
   std::make_pair(Names[i]->getName(), Exprs[i]));
   // Sort NamedOperandList.
-  std::stable_sort(NamedOperandList.begin(), NamedOperandList.end(),
-  [](const NamedOperand &LHS, const NamedOperand &RHS) {
-return LHS.first < RHS.first;
-  });
+  llvm::stable_sort(NamedOperandList, llvm::less_first());
   // Find adjacent duplicate operand.
   SmallVector::iterator Found =
   std::adjacent_find(begin(NamedOperandList), end(NamedOperandList),

diff  --git a/clang/lib/StaticAnalyzer/Frontend/AnalyzerHelpFlags.cpp 
b/clang/lib/StaticAnalyzer/Frontend/AnalyzerHelpFlags.cpp
index eb6014a0629df..7cd15f0f65954 100644
--- a/clang/lib/StaticAnalyzer/Frontend/AnalyzerHelpFlags.cpp
+++ b/clang/lib/StaticAnalyzer/Frontend/AnalyzerHelpFlags.cpp
@@ -101,10 +101,7 @@ USAGE: -analyzer-config 
 #undef ANALYZER_OPTION_DEPENDS_ON_USER_MODE
   };
 
-  llvm::sort(PrintableOptions, [](const OptionAndDescriptionTy &LHS,
-  const OptionAndDescriptionTy &RHS) {
-return LHS.first < RHS.first;
-  });
+  llvm::sort(PrintableOptions, llvm::less_first());
 
   for (const auto &Pair : PrintableOptions) {
 AnalyzerOptions::printFormattedEntry(out, Pair, /*InitialPad*/ 2,

diff  --git a/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp 
b/lldb/source/Plugins/Sym

[clang] 8cc9fa6 - Use static_cast from SmallString to std::string (NFC)

2022-06-04 Thread Kazu Hirata via cfe-commits

Author: Kazu Hirata
Date: 2022-06-04T22:09:27-07:00
New Revision: 8cc9fa6f78237a5771a5f85eb9ef129ea85a54cf

URL: 
https://github.com/llvm/llvm-project/commit/8cc9fa6f78237a5771a5f85eb9ef129ea85a54cf
DIFF: 
https://github.com/llvm/llvm-project/commit/8cc9fa6f78237a5771a5f85eb9ef129ea85a54cf.diff

LOG: Use static_cast from SmallString to std::string (NFC)

Added: 


Modified: 
clang/lib/Driver/Driver.cpp
clang/tools/libclang/CIndexer.cpp
lldb/source/Utility/FileSpec.cpp

Removed: 




diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 3185ebcd46a4e..8e698a2a7cbef 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -973,7 +973,7 @@ bool Driver::loadConfigFile() {
 if (llvm::sys::fs::make_absolute(CfgDir).value() != 0)
   SystemConfigDir.clear();
 else
-  SystemConfigDir = std::string(CfgDir.begin(), CfgDir.end());
+  SystemConfigDir = static_cast(CfgDir);
   }
 }
 if (CLOptions->hasArg(options::OPT_config_user_dir_EQ)) {
@@ -984,7 +984,7 @@ bool Driver::loadConfigFile() {
 if (llvm::sys::fs::make_absolute(CfgDir).value() != 0)
   UserConfigDir.clear();
 else
-  UserConfigDir = std::string(CfgDir.begin(), CfgDir.end());
+  UserConfigDir = static_cast(CfgDir);
   }
 }
   }

diff  --git a/clang/tools/libclang/CIndexer.cpp 
b/clang/tools/libclang/CIndexer.cpp
index dab3fc4e201d0..77da2e4fa5ead 100644
--- a/clang/tools/libclang/CIndexer.cpp
+++ b/clang/tools/libclang/CIndexer.cpp
@@ -176,7 +176,7 @@ LibclangInvocationReporter::LibclangInvocationReporter(
   if (llvm::sys::fs::createUniqueFile(TempPath, FD, TempPath,
   llvm::sys::fs::OF_Text))
 return;
-  File = std::string(TempPath.begin(), TempPath.end());
+  File = static_cast(TempPath);
   llvm::raw_fd_ostream OS(FD, /*ShouldClose=*/true);
 
   // Write out the information about the invocation to it.

diff  --git a/lldb/source/Utility/FileSpec.cpp 
b/lldb/source/Utility/FileSpec.cpp
index eed3bbd46026f..c0dbc29bcd1f1 100644
--- a/lldb/source/Utility/FileSpec.cpp
+++ b/lldb/source/Utility/FileSpec.cpp
@@ -357,7 +357,7 @@ size_t FileSpec::GetPath(char *path, size_t path_max_len,
 std::string FileSpec::GetPath(bool denormalize) const {
   llvm::SmallString<64> result;
   GetPath(result, denormalize);
-  return std::string(result.begin(), result.end());
+  return static_cast(result);
 }
 
 const char *FileSpec::GetCString(bool denormalize) const {



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


[clang] e0039b8 - Use llvm::less_second (NFC)

2022-06-04 Thread Kazu Hirata via cfe-commits

Author: Kazu Hirata
Date: 2022-06-04T22:48:32-07:00
New Revision: e0039b8d6a5bd05e70203962f448569f2d2ef1c2

URL: 
https://github.com/llvm/llvm-project/commit/e0039b8d6a5bd05e70203962f448569f2d2ef1c2
DIFF: 
https://github.com/llvm/llvm-project/commit/e0039b8d6a5bd05e70203962f448569f2d2ef1c2.diff

LOG: Use llvm::less_second (NFC)

Added: 


Modified: 
clang/lib/StaticAnalyzer/Core/WorkList.cpp
llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
llvm/lib/IR/AsmWriter.cpp
llvm/lib/IR/Metadata.cpp
llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
llvm/lib/Transforms/IPO/LowerTypeTests.cpp
llvm/lib/Transforms/Scalar/GVNSink.cpp
llvm/lib/Transforms/Scalar/JumpThreading.cpp

Removed: 




diff  --git a/clang/lib/StaticAnalyzer/Core/WorkList.cpp 
b/clang/lib/StaticAnalyzer/Core/WorkList.cpp
index 348552ba73a9b..7042a9020837a 100644
--- a/clang/lib/StaticAnalyzer/Core/WorkList.cpp
+++ b/clang/lib/StaticAnalyzer/Core/WorkList.cpp
@@ -205,12 +205,6 @@ class UnexploredFirstPriorityQueue : public WorkList {
   using QueuePriority = std::pair;
   using QueueItem = std::pair;
 
-  struct ExplorationComparator {
-bool operator() (const QueueItem &LHS, const QueueItem &RHS) {
-  return LHS.second < RHS.second;
-}
-  };
-
   // Number of inserted nodes, used to emulate DFS ordering in the priority
   // queue when insertions are equal.
   unsigned long Counter = 0;
@@ -219,7 +213,7 @@ class UnexploredFirstPriorityQueue : public WorkList {
   VisitedTimesMap NumReached;
 
   // The top item is the largest one.
-  llvm::PriorityQueue, ExplorationComparator>
+  llvm::PriorityQueue, llvm::less_second>
   queue;
 
 public:
@@ -267,12 +261,6 @@ class UnexploredFirstPriorityLocationQueue : public 
WorkList {
   using QueuePriority = std::pair;
   using QueueItem = std::pair;
 
-  struct ExplorationComparator {
-bool operator() (const QueueItem &LHS, const QueueItem &RHS) {
-  return LHS.second < RHS.second;
-}
-  };
-
   // Number of inserted nodes, used to emulate DFS ordering in the priority
   // queue when insertions are equal.
   unsigned long Counter = 0;
@@ -281,7 +269,7 @@ class UnexploredFirstPriorityLocationQueue : public 
WorkList {
   VisitedTimesMap NumReached;
 
   // The top item is the largest one.
-  llvm::PriorityQueue, ExplorationComparator>
+  llvm::PriorityQueue, llvm::less_second>
   queue;
 
 public:

diff  --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp 
b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
index 18157d57dcb9a..81dc9677a8e08 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
@@ -257,9 +257,7 @@ static void predictValueUseListOrderImpl(const Value *V, 
const Function *F,
 return LU->getOperandNo() > RU->getOperandNo();
   });
 
-  if (llvm::is_sorted(List, [](const Entry &L, const Entry &R) {
-return L.second < R.second;
-  }))
+  if (llvm::is_sorted(List, llvm::less_second()))
 // Order is already correct.
 return;
 

diff  --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp 
b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
index 26d221100b984..c6442e18fca2a 100644
--- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
@@ -521,11 +521,7 @@ GlobalCtorDtorScraper::operator()(ThreadSafeModule TSM,
 
   for (auto E : COrDtors)
 InitsOrDeInits.push_back(std::make_pair(E.Func, E.Priority));
-  llvm::sort(InitsOrDeInits,
- [](const std::pair &LHS,
-const std::pair &RHS) {
-   return LHS.second < RHS.second;
- });
+  llvm::sort(InitsOrDeInits, llvm::less_second());
 
   auto *InitOrDeInitFuncEntryBlock =
   BasicBlock::Create(Ctx, "entry", InitOrDeInitFunc);

diff  --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index 66595bcfb9aab..44096eba86a22 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -223,9 +223,7 @@ predictValueUseListOrder(const Value *V, unsigned ID, const 
OrderMap &OM) {
 return LU->getOperandNo() > RU->getOperandNo();
   });
 
-  if (llvm::is_sorted(List, [](const Entry &L, const Entry &R) {
-return L.second < R.second;
-  }))
+  if (llvm::is_sorted(List, llvm::less_second()))
 // Order is already correct.
 return {};
 

diff  --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp
index b5ea17f77914b..55db2d22dcaef 100644
--- a/llvm/lib/IR/Metadata.cpp
+++ b/llvm/lib/IR/Metadata.cpp
@@ -282,9 +282,7 @@ void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata 
*MD) {
   // Copy out uses since UseMap will get touched below.
   using UseTy = std::pair>;
   SmallVector Uses(UseMap.begin(), UseMap.end());
-  llvm::sort(Uses, [](const UseTy &L, const UseTy &R) {
-return L.second.sec

[PATCH] D109977: LLVM Driver Multicall tool

2022-06-04 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

> llvm-driver can be disabled from builds by setting 
> LLVM_TOOL_LLVM_DRIVER_BUILD=Off.

I think this should be opt-in. The new `llvm` executable takes a lot of space 
and not needed by many developers/build bots.
It's useful to some groups (distributions) but they can specify the option 
themselves.
I think the modified code is quite stable, so don't worry about regressions 
just because this is not opt-in.




Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:24
+// --help or --version are passed directly to the llvm driver.
+int UnknownMain(int Argc, char **Argv) {
+  cl::OptionCategory LLVMDriverCategory("llvm options");

`static int unknownMain`




Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:25
+int UnknownMain(int Argc, char **Argv) {
+  cl::OptionCategory LLVMDriverCategory("llvm options");
+#define LLVM_DRIVER_TOOL(tool, entry, key) 
\

Prefer OptTable to cl:: for user-facing utilities. If simple, just open coding 
the help message.



Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:37
+
+  llvm_unreachable("We should never get here, parsing should always exit.");
+  return 1;

https://llvm.org/docs/CodingStandards.html#error-and-warning-messages



Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:50
+  bool ConsumeFirstArg = false;
+  if (LaunchedTool == "llvm") {
+if (Argc < 2)

Some distributions may want to use something like llvm-15. See some binary 
utilities how the version is handled.



Comment at: llvm/tools/llvm-driver/llvm-driver.cpp:58
+  // if it is launched through a symlink that is the tool name.
+  typedef int (*MainFunction)(int, char **);
+  MainFunction Func = StringSwitch(LaunchedTool)

If only used once, don't add a typedef (using is preferred)


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

https://reviews.llvm.org/D109977

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


[PATCH] D109977: LLVM Driver Multicall tool

2022-06-04 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

  % /tmp/out/custom1/bin/llvm --help
  OVERVIEW: llvm compiler driver
  
  USAGE: llvm [subcommand] [options]
  
  SUBCOMMANDS:
  
ar- ar  ## should be llvm-ar
bitcode-strip - bitcode-strip   ### should be llvm-bitcode-strip
clang - clang
clang++   - clang++
clang-cl  - clang-cl
clang-cpp - clang-cpp
cxxfilt   - cxxfilt   ### ditto
dlltool   - dlltool
dsymutil  - dsymutil
install-name-tool - install-name-tool
lib   - lib  # this is confusing. llvm-lib
objcopy   - objcopy
ranlib- ranlib
strip - strip
  
Type "llvm  --help" to get more help on a specific subcommand
  
  OPTIONS:
  
  Generic Options:
  
--help  - Display available options (--help-hidden for more)
--help-list - Display list of available options (--help-list-hidden for 
more)
--version   - Display the version of this program


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

https://reviews.llvm.org/D109977

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


[clang] d0d1c41 - Remove unneeded cl::ZeroOrMore for cl::list options

2022-06-04 Thread Fangrui Song via cfe-commits

Author: Fangrui Song
Date: 2022-06-04T23:51:13-07:00
New Revision: d0d1c416cb1eb60c8a9cff8d487c8fea92fe21f2

URL: 
https://github.com/llvm/llvm-project/commit/d0d1c416cb1eb60c8a9cff8d487c8fea92fe21f2
DIFF: 
https://github.com/llvm/llvm-project/commit/d0d1c416cb1eb60c8a9cff8d487c8fea92fe21f2.diff

LOG: Remove unneeded cl::ZeroOrMore for cl::list options

Added: 


Modified: 
clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
llvm/docs/CommandLine.rst

llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
llvm/tools/bugpoint/ExecutionDriver.cpp
llvm/tools/bugpoint/bugpoint.cpp
llvm/tools/llvm-cat/llvm-cat.cpp
llvm/tools/llvm-cov/CodeCoverage.cpp
llvm/tools/llvm-dis/llvm-dis.cpp
llvm/tools/llvm-dwp/llvm-dwp.cpp
llvm/tools/llvm-link/llvm-link.cpp
llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
llvm/tools/llvm-mc-disassemble-fuzzer/llvm-mc-disassemble-fuzzer.cpp
llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
llvm/tools/llvm-reduce/llvm-reduce.cpp
llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
llvm/unittests/Support/CommandLineTest.cpp
polly/lib/Transform/ScheduleOptimizer.cpp

Removed: 




diff  --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp 
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 5ddda57454b23..e7eec16e51150 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -78,7 +78,7 @@ static cl::opt OptLevel("opt-level",
  cl::cat(ClangLinkerWrapperCategory));
 
 static cl::list
-BitcodeLibraries("target-library", cl::ZeroOrMore,
+BitcodeLibraries("target-library",
  cl::desc("Path for the target bitcode library"),
  cl::cat(ClangLinkerWrapperCategory));
 
@@ -104,7 +104,7 @@ static cl::opt
cl::cat(ClangLinkerWrapperCategory));
 
 static cl::list
-PtxasArgs("ptxas-args", cl::ZeroOrMore,
+PtxasArgs("ptxas-args",
   cl::desc("Argument to pass to the ptxas invocation"),
   cl::cat(ClangLinkerWrapperCategory));
 

diff  --git a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp 
b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
index 1792923dd0159..080d7c9093dd6 100644
--- a/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
+++ b/clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
@@ -63,13 +63,13 @@ static cl::opt Help("h", cl::desc("Alias for -help"), 
cl::Hidden);
 static cl::OptionCategory
 ClangOffloadBundlerCategory("clang-offload-bundler options");
 static cl::list
-InputFileNames("input", cl::ZeroOrMore,
+InputFileNames("input",
cl::desc("Input file."
 " Can be specified multiple times "
 "for multiple input files."),
cl::cat(ClangOffloadBundlerCategory));
 static cl::list
-InputFileNamesDeprecatedOpt("inputs", cl::CommaSeparated, cl::ZeroOrMore,
+InputFileNamesDeprecatedOpt("inputs", cl::CommaSeparated,
 cl::desc("[,...] (deprecated)"),
 cl::cat(ClangOffloadBundlerCategory));
 static cl::list
@@ -79,7 +79,7 @@ static cl::list
  "for multiple output files."),
 cl::cat(ClangOffloadBundlerCategory));
 static cl::list
-OutputFileNamesDeprecatedOpt("outputs", cl::CommaSeparated, cl::ZeroOrMore,
+OutputFileNamesDeprecatedOpt("outputs", cl::CommaSeparated,
  cl::desc("[,...] (deprecated)"),
  cl::cat(ClangOffloadBundlerCategory));
 static cl::list

diff  --git a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp 
b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
index f05697539675d..eb348d05e3bb0 100644
--- a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
+++ b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp
@@ -38,7 +38,7 @@ static cl::opt OutputFile("o", cl::Required,
cl::cat(ClangOffloadPackagerCategory));
 
 static cl::list
-DeviceImages("image", cl::ZeroOrMore,
+DeviceImages("image",
  cl::desc("List of key and value arguments. Required keywords "
   "are 'file' and 'triple'."),
  cl::value_desc("=,..."),

diff  --git a/llvm/docs/CommandLine.rst b/llvm/docs/CommandLine.rst
index fef7e39ad86d2..3784db29ed874 100644
--- a/llvm/docs/CommandLine.rst
+++ b/llvm/docs/CommandLine.rst
@@ -767,7 +767,7 @@ The idiom for usage is like this:
 ..