[llvm-branch-commits] [llvm] 0cf9bfd - Revert "[CodeGen] Support start/stop in CodeGenPassBuilder"

2024-01-18 Thread via llvm-branch-commits

Author: paperchalice
Date: 2024-01-18T20:07:41+08:00
New Revision: 0cf9bfdbd448883a3cc65086d3824471e1f0ac23

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

LOG: Revert "[CodeGen] Support start/stop in CodeGenPassBuilder"

Added: 


Modified: 
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/TargetPassConfig.h
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Passes/PassBuilder.cpp
llvm/unittests/CodeGen/CodeGenPassBuilderTest.cpp

Removed: 




diff  --git a/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h 
b/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
index 12088f6fc35e0b..78ee7bef02ab1a 100644
--- a/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
@@ -44,7 +44,6 @@
 #include "llvm/CodeGen/ShadowStackGCLowering.h"
 #include "llvm/CodeGen/SjLjEHPrepare.h"
 #include "llvm/CodeGen/StackProtector.h"
-#include "llvm/CodeGen/TargetPassConfig.h"
 #include "llvm/CodeGen/UnreachableBlockElim.h"
 #include "llvm/CodeGen/WasmEHPrepare.h"
 #include "llvm/CodeGen/WinEHPrepare.h"
@@ -177,80 +176,73 @@ template  class CodeGenPassBuilder {
   // Function object to maintain state while adding codegen IR passes.
   class AddIRPass {
   public:
-AddIRPass(ModulePassManager &MPM, const DerivedT &PB) : MPM(MPM), PB(PB) {}
+AddIRPass(ModulePassManager &MPM) : MPM(MPM) {}
 ~AddIRPass() {
   if (!FPM.isEmpty())
 MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
 }
 
-template 
-void operator()(PassT &&Pass, StringRef Name = PassT::name()) {
+template  void operator()(PassT &&Pass) {
   static_assert((is_detected::value ||
  is_detected::value) &&
 "Only module pass and function pass are supported.");
 
-  if (!PB.runBeforeAdding(Name))
-return;
-
   // Add Function Pass
   if constexpr (is_detected::value) {
 FPM.addPass(std::forward(Pass));
-
-for (auto &C : PB.AfterCallbacks)
-  C(Name);
   } else {
 // Add Module Pass
 if (!FPM.isEmpty()) {
   MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
   FPM = FunctionPassManager();
 }
-
 MPM.addPass(std::forward(Pass));
-
-for (auto &C : PB.AfterCallbacks)
-  C(Name);
   }
 }
 
   private:
 ModulePassManager &MPM;
 FunctionPassManager FPM;
-const DerivedT &PB;
   };
 
   // Function object to maintain state while adding codegen machine passes.
   class AddMachinePass {
   public:
-AddMachinePass(MachineFunctionPassManager &PM, const DerivedT &PB)
-: PM(PM), PB(PB) {}
+AddMachinePass(MachineFunctionPassManager &PM) : PM(PM) {}
 
 template  void operator()(PassT &&Pass) {
   static_assert(
   is_detected::value,
   "Machine function pass must define a static member variable `Key`.");
-
-  if (!PB.runBeforeAdding(PassT::name()))
-return;
-
+  for (auto &C : BeforeCallbacks)
+if (!C(&PassT::Key))
+  return;
   PM.addPass(std::forward(Pass));
-
-  for (auto &C : PB.AfterCallbacks)
-C(PassT::name());
+  for (auto &C : AfterCallbacks)
+C(&PassT::Key);
 }
 
 template  void insertPass(MachinePassKey *ID, PassT Pass) {
-  PB.AfterCallbacks.emplace_back(
+  AfterCallbacks.emplace_back(
   [this, ID, Pass = std::move(Pass)](MachinePassKey *PassID) {
 if (PassID == ID)
   this->PM.addPass(std::move(Pass));
   });
 }
 
+void disablePass(MachinePassKey *ID) {
+  BeforeCallbacks.emplace_back(
+  [ID](MachinePassKey *PassID) { return PassID != ID; });
+}
+
 MachineFunctionPassManager releasePM() { return std::move(PM); }
 
   private:
 MachineFunctionPassManager ±
-const DerivedT &PB;
+SmallVector, 4>
+BeforeCallbacks;
+SmallVector, 4>
+AfterCallbacks;
   };
 
   LLVMTargetMachine &TM;
@@ -481,25 +473,6 @@ template  class CodeGenPassBuilder {
   const DerivedT &derived() const {
 return static_cast(*this);
   }
-
-  bool runBeforeAdding(StringRef Name) const {
-bool ShouldAdd = true;
-for (auto &C : BeforeCallbacks)
-  ShouldAdd &= C(Name);
-return ShouldAdd;
-  }
-
-  void setStartStopPasses(const TargetPassConfig::StartStopInfo &Info) const;
-
-  Error verifyStartStop(const TargetPassConfig::StartStopInfo &Info) const;
-
-  mutable SmallVector, 4>
-  BeforeCallbacks;
-  mutable SmallVector, 4> 
AfterCallbacks;
-
-  /// Helper variable for `-start-before/-start-after/-stop-before/-stop-after`
-  mutable bool Started = true;
-  mutable bool Stopped = true;
 };
 
 template 
@@ -507,17 +480,13 @@ Error CodeG

[llvm-branch-commits] [flang] [clang] [clang-tools-extra] [mlir] [libc] [libcxx] [openmp] [llvm] [lldb] [BOLT] Use continuous output addresses in delta encoding in BAT (PR #76904)

2024-01-18 Thread Rafael Auler via llvm-branch-commits

https://github.com/rafaelauler approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/76904
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [openmp] [clang-tools-extra] [libc] [flang] [llvm] [libcxx] [clang] [mlir] [lldb] [BOLT] Use continuous output addresses in delta encoding in BAT (PR #76904)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits

https://github.com/aaupov edited https://github.com/llvm/llvm-project/pull/76904
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [libcxx] 7800ae0 - Revert "[ASan][libc++] Turn on ASan annotations for short strings"

2024-01-18 Thread via llvm-branch-commits

Author: Vitaly Buka
Date: 2024-01-18T13:21:23-08:00
New Revision: 7800ae0a0f495bb2cc5cefd855339db72232640f

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

LOG: Revert "[ASan][libc++] Turn on ASan annotations for short strings"

Added: 


Modified: 
libcxx/include/string
libcxx/test/support/asan_testing.h

Removed: 

libcxx/test/libcxx/containers/strings/basic.string/asan_deque_integration.pass.cpp
libcxx/test/libcxx/containers/strings/basic.string/asan_short.pass.cpp

libcxx/test/libcxx/containers/strings/basic.string/asan_vector_integration.pass.cpp



diff  --git a/libcxx/include/string b/libcxx/include/string
index 4116f350a80476..e97139206d4fa7 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -659,6 +659,7 @@ _LIBCPP_PUSH_MACROS
 #else
 #  define _LIBCPP_STRING_INTERNAL_MEMORY_ACCESS
 #endif
+#define _LIBCPP_SHORT_STRING_ANNOTATIONS_ALLOWED false
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
@@ -1895,17 +1896,22 @@ private:
 #endif
   }
 
+  // ASan: short string is poisoned if and only if this function returns true.
+  _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool 
__asan_short_string_is_annotated() const _NOEXCEPT {
+return _LIBCPP_SHORT_STRING_ANNOTATIONS_ALLOWED && 
!__libcpp_is_constant_evaluated();
+  }
+
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void 
__annotate_new(size_type __current_size) const _NOEXCEPT {
 (void) __current_size;
 #if !defined(_LIBCPP_HAS_NO_ASAN) && defined(_LIBCPP_INSTRUMENTED_WITH_ASAN)
-if (!__libcpp_is_constant_evaluated())
+if (!__libcpp_is_constant_evaluated() && 
(__asan_short_string_is_annotated() || __is_long()))
   __annotate_contiguous_container(data() + capacity() + 1, data() + 
__current_size + 1);
 #endif
   }
 
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __annotate_delete() 
const _NOEXCEPT {
 #if !defined(_LIBCPP_HAS_NO_ASAN) && defined(_LIBCPP_INSTRUMENTED_WITH_ASAN)
-if (!__libcpp_is_constant_evaluated())
+if (!__libcpp_is_constant_evaluated() && 
(__asan_short_string_is_annotated() || __is_long()))
   __annotate_contiguous_container(data() + size() + 1, data() + capacity() 
+ 1);
 #endif
   }
@@ -1913,7 +1919,7 @@ private:
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void 
__annotate_increase(size_type __n) const _NOEXCEPT {
 (void) __n;
 #if !defined(_LIBCPP_HAS_NO_ASAN) && defined(_LIBCPP_INSTRUMENTED_WITH_ASAN)
-if (!__libcpp_is_constant_evaluated())
+if (!__libcpp_is_constant_evaluated() && 
(__asan_short_string_is_annotated() || __is_long()))
   __annotate_contiguous_container(data() + size() + 1, data() + size() + 1 
+ __n);
 #endif
   }
@@ -1921,7 +1927,7 @@ private:
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void 
__annotate_shrink(size_type __old_size) const _NOEXCEPT {
 (void) __old_size;
 #if !defined(_LIBCPP_HAS_NO_ASAN) && defined(_LIBCPP_INSTRUMENTED_WITH_ASAN)
-if (!__libcpp_is_constant_evaluated())
+if (!__libcpp_is_constant_evaluated() && 
(__asan_short_string_is_annotated() || __is_long()))
   __annotate_contiguous_container(data() + __old_size + 1, data() + size() 
+ 1);
 #endif
   }

diff  --git 
a/libcxx/test/libcxx/containers/strings/basic.string/asan_deque_integration.pass.cpp
 
b/libcxx/test/libcxx/containers/strings/basic.string/asan_deque_integration.pass.cpp
deleted file mode 100644
index b914609f35ddf3..00
--- 
a/libcxx/test/libcxx/containers/strings/basic.string/asan_deque_integration.pass.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-//===--===//
-//
-// 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
-//
-//===--===//
-
-// REQUIRES: asan
-// UNSUPPORTED: c++03
-
-#include 
-#include 
-#include 
-#include 
-#include "test_macros.h"
-#include "asan_testing.h"
-#include "min_allocator.h"
-
-// This tests exists to check if strings work well with deque, as those
-// may be partialy annotated, we cannot simply call
-// is_double_ended_contiguous_container_asan_correct, as it assumes that
-// object memory inside is not annotated, so we check everything in a more 
careful way.
-
-template 
-void verify_inside(D const& d) {
-  for (size_t i = 0; i < d.size(); ++i) {
-assert(is_string_asan_correct(d[i]));
-  }
-}
-
-template 
-S get_s(char c) {
-  S s;
-  for (size_t i = 0; i < N; ++i)
-s.push_back(c);
-
-  return s;
-}
-
-template 
-void test_string() {
-  size_t const N = sizeof(S) < 256 ? (4096 / sizeof(S)) : 16;
-
-  {
-C d1a(1), d1b(N), d1c(N + 1), d1d(32 * N)

[llvm-branch-commits] [libc] [openmp] [clang-tools-extra] [libcxx] [lldb] [flang] [clang] [mlir] [llvm] [BOLT] Deduplicate equal offsets in BAT (PR #76905)

2024-01-18 Thread Davide Italiano via llvm-branch-commits


@@ -207,15 +280,23 @@ void 
BoltAddressTranslation::parseMaps(std::vector &HotFuncs,
   const uint64_t OutputAddress = PrevAddress + OutputDelta;
   const uint64_t OutputOffset = OutputAddress - Address;
   PrevAddress = OutputAddress;
-  const int64_t InputDelta = DE.getSLEB128(&Offset, &Err);
-  InputOffset += InputDelta;
+  int64_t InputDelta = 0;
+  if (J < EqualElems) {
+InputOffset = (OutputOffset << 1) | (*BEBitMask)[J];
+  } else {
+InputDelta = DE.getSLEB128(&Offset, &Err);
+InputOffset += InputDelta;
+  }
   Map.insert(std::pair(OutputOffset, InputOffset));
   LLVM_DEBUG(
   dbgs() << formatv("{0:x} -> {1:x} ({2}/{3}b -> {4}/{5}b), {6:x}\n",
 OutputOffset, InputOffset, OutputDelta,
-encodeULEB128(OutputDelta, nulls()), InputDelta,
-encodeSLEB128(InputDelta, nulls()), 
OutputAddress));
+getULEB128Size(OutputDelta), InputDelta,
+(J < EqualElems) ? 0 : getSLEB128Size(InputDelta),
+OutputAddress));
 }
+if (BEBitMask)
+  delete BEBitMask;

dcci wrote:

Can you make this automatically memory managed?

https://github.com/llvm/llvm-project/pull/76905
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [flang] [openmp] [clang-tools-extra] [lldb] [libc] [libcxx] [mlir] [clang] [llvm] [BOLT] Deduplicate equal offsets in BAT (PR #76905)

2024-01-18 Thread Davide Italiano via llvm-branch-commits


@@ -110,6 +111,34 @@ void BoltAddressTranslation::write(const BinaryContext 
&BC, raw_ostream &OS) {
   outs() << "BOLT-INFO: Wrote " << Maps.size() << " BAT maps\n";
 }
 
+APInt BoltAddressTranslation::calculateBranchEntriesBitMask(MapTy &Map,
+size_t EqualElems) 
{
+  APInt BitMask(alignTo(EqualElems, 8), 0);
+  size_t Index = 0;
+  for (std::pair &KeyVal : Map) {
+if (Index == EqualElems)
+  break;
+const uint32_t OutputOffset = KeyVal.second;
+if (OutputOffset & BRANCHENTRY)
+  BitMask.setBit(Index);
+++Index;
+  }
+  return BitMask;
+}
+
+size_t BoltAddressTranslation::getNumEqualOffsets(const MapTy &Map) const {
+  size_t EqualOffsets = 0;
+  for (const std::pair &KeyVal : Map) {
+const uint32_t OutputOffset = KeyVal.first;
+const uint32_t InputOffset = KeyVal.second >> 1;
+if (OutputOffset == InputOffset)
+  ++EqualOffsets;
+else
+  break;

dcci wrote:

Do you want to stop here at the first offset that's different?

https://github.com/llvm/llvm-project/pull/76905
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] [lldb] [libcxx] [mlir] [openmp] [clang-tools-extra] [flang] [libc] [llvm] [BOLT] Deduplicate equal offsets in BAT (PR #76905)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits


@@ -110,6 +111,34 @@ void BoltAddressTranslation::write(const BinaryContext 
&BC, raw_ostream &OS) {
   outs() << "BOLT-INFO: Wrote " << Maps.size() << " BAT maps\n";
 }
 
+APInt BoltAddressTranslation::calculateBranchEntriesBitMask(MapTy &Map,
+size_t EqualElems) 
{
+  APInt BitMask(alignTo(EqualElems, 8), 0);
+  size_t Index = 0;
+  for (std::pair &KeyVal : Map) {
+if (Index == EqualElems)
+  break;
+const uint32_t OutputOffset = KeyVal.second;
+if (OutputOffset & BRANCHENTRY)
+  BitMask.setBit(Index);
+++Index;
+  }
+  return BitMask;
+}
+
+size_t BoltAddressTranslation::getNumEqualOffsets(const MapTy &Map) const {
+  size_t EqualOffsets = 0;
+  for (const std::pair &KeyVal : Map) {
+const uint32_t OutputOffset = KeyVal.first;
+const uint32_t InputOffset = KeyVal.second >> 1;
+if (OutputOffset == InputOffset)
+  ++EqualOffsets;
+else
+  break;

aaupov wrote:

Yes, that's by design. The idea is that if OutputOffset==InputOffset, only emit 
one of them. It's expected that if offsets start to diverge at some point, 
they're not reconverging.

https://github.com/llvm/llvm-project/pull/76905
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] [lldb] [libcxx] [mlir] [openmp] [clang-tools-extra] [flang] [libc] [llvm] [BOLT] Deduplicate equal offsets in BAT (PR #76905)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits


@@ -207,15 +280,23 @@ void 
BoltAddressTranslation::parseMaps(std::vector &HotFuncs,
   const uint64_t OutputAddress = PrevAddress + OutputDelta;
   const uint64_t OutputOffset = OutputAddress - Address;
   PrevAddress = OutputAddress;
-  const int64_t InputDelta = DE.getSLEB128(&Offset, &Err);
-  InputOffset += InputDelta;
+  int64_t InputDelta = 0;
+  if (J < EqualElems) {
+InputOffset = (OutputOffset << 1) | (*BEBitMask)[J];
+  } else {
+InputDelta = DE.getSLEB128(&Offset, &Err);
+InputOffset += InputDelta;
+  }
   Map.insert(std::pair(OutputOffset, InputOffset));
   LLVM_DEBUG(
   dbgs() << formatv("{0:x} -> {1:x} ({2}/{3}b -> {4}/{5}b), {6:x}\n",
 OutputOffset, InputOffset, OutputDelta,
-encodeULEB128(OutputDelta, nulls()), InputDelta,
-encodeSLEB128(InputDelta, nulls()), 
OutputAddress));
+getULEB128Size(OutputDelta), InputDelta,
+(J < EqualElems) ? 0 : getSLEB128Size(InputDelta),
+OutputAddress));
 }
+if (BEBitMask)
+  delete BEBitMask;

aaupov wrote:

Good point. I can keep APInt uninitialized if it's not used.

https://github.com/llvm/llvm-project/pull/76905
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] [lldb] [clang] [BOLT] Fix spurious boltedcollection from merge-fdata (PR #78653)

2024-01-18 Thread Rafael Auler via llvm-branch-commits

https://github.com/rafaelauler approved this pull request.


https://github.com/llvm/llvm-project/pull/78653
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang] [llvm] [lldb] [BOLT] Fix always-set boltedcollection in merge-fdata (PR #78653)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits

https://github.com/aaupov edited https://github.com/llvm/llvm-project/pull/78653
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [lldb] [clang] [llvm] [BOLT] Fix unconditional output of boltedcollection in merge-fdata (PR #78653)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits

https://github.com/aaupov edited https://github.com/llvm/llvm-project/pull/78653
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [lldb] [clang] [llvm] [BOLT] Fix unconditional output of boltedcollection in merge-fdata (PR #78653)

2024-01-18 Thread Amir Ayupov via llvm-branch-commits

https://github.com/aaupov edited https://github.com/llvm/llvm-project/pull/78653
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [flang] [libcxx] [mlir] [libc] [clang-tools-extra] [lldb] [clang] [openmp] [llvm] [BOLT] Deduplicate equal offsets in BAT (PR #76905)

2024-01-18 Thread Davide Italiano via llvm-branch-commits

https://github.com/dcci approved this pull request.

LG

https://github.com/llvm/llvm-project/pull/76905
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits