[llvm-branch-commits] [llvm] 0cf9bfd - Revert "[CodeGen] Support start/stop in CodeGenPassBuilder"
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)
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)
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"
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)
@@ -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)
@@ -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)
@@ -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)
@@ -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)
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)
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)
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)
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)
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