| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[Backport][BOLT] Fix incorrect basic block output addresses (#70000) Some optimization passes may duplicate basic blocks and assign the same input offset to a number of different blocks in a function. This is done e.g. to correctly map debugging ranges for duplicated code. However, duplicate input offsets present a problem when we use AddressMap to generate new addresses for basic blocks. The output address is calculated based on the input offset and will be the same for blocks with identical offsets. The result is potentially incorrect debug info and BAT records. To address the issue, we have to eliminate the dependency on input offsets while generating output addresses for a basic block. Each block has a unique label, hence we extend AddressMap to include address lookup based on MCSymbol and use the new functionality to update block addresses. | 10 个月前 | |
[BOLT] Port from llvm-bolt repo [Part 4] Co-authored-by: rfwang07<wangrufeng5@huawei.com> Co-authored-by: eastb233<xiezhiheng@huawei.com> | 5 个月前 | |
[BOLT] Port from llvm-bolt repo [Part 4] Co-authored-by: rfwang07<wangrufeng5@huawei.com> Co-authored-by: eastb233<xiezhiheng@huawei.com> | 5 个月前 | |
Revert "[Backport][BOLT][RISCV] Recognize mapping symbols" This reverts commit 7a0759b59ebacd1d898352585798cdb032b92306. | 5 个月前 | |
[bolt] Remove unneeded cl::ZeroOrMore for cl::opt options | 4 年前 | |
[Backport][BOLT] Fix NOP instruction emission on x86 (#72186) Use MCAsmBackend::writeNopData() interface to emit NOP instructions on x86. There are multiple forms of NOP instruction on x86 with different sizes. Currently, LLVM's assembly/disassembly does not support all forms correctly which can lead to a breakage of input code semantics, e.g. if the program relies on NOP instructions for reserving a patch space. Add "--keep-nops" option to preserve NOP instructions. | 10 个月前 | |
[Backport][BOLT] Extend calculateEmittedSize() for block size calculation (#73076) This commit modifies BinaryContext::calculateEmittedSize() to update the BinaryBasicBlock::OutputAddressRange of each basic block in the function in place. BinaryBasicBlock::getOutputSize() now gives the emitted size of the basic block. | 10 个月前 | |
Add Om for Kunpeng Opts | 5 个月前 | |
[BOLT] Fix a warning in release builds This patch fixes: bolt/lib/Core/BinarySection.cpp:120:24: error: unused variable 'Relocation' [-Werror,-Wunused-variable] | 3 年前 | |
[BOLT] Port from llvm-bolt repo [Part 4] Co-authored-by: rfwang07<wangrufeng5@huawei.com> Co-authored-by: eastb233<xiezhiheng@huawei.com> | 5 个月前 | |
[BOLT][DWARF] Replace MD5 with hash_combine Slight performance improvement, based on perf. Collected on clang-17 built with DWARF4 + split dwarf. MD5 8:46.50 real, 713.38 user, 64.19 sys, 0 amem, 41933136 mmem 8:27.44 real, 708.55 user, 63.83 sys, 0 amem, 41906576 mmem 8:40.37 real, 724.63 user, 62.56 sys, 0 amem, 42319572 mmem hash_combine 8:03.99 real, 681.92 user, 60.04 sys, 0 amem, 42459204 mmem 8:02.92 real, 685.20 user, 62.56 sys, 0 amem, 41879164 mmem 7:57.85 real, 690.27 user, 60.12 sys, 0 amem, 41806240 mmem Reviewed By: maksfb Differential Revision: https://reviews.llvm.org/D155764 | 2 年前 | |
[BOLT][DWARF] Fix performance regression running BOLT on binaries build with DWARF4 In one of the previous diffs LocBuffer was changed to pass by value. This lead to performance regression running BOLT on binaries with DWARF4 split dwarf. Reviewed By: maksfb Differential Revision: https://reviews.llvm.org/D155763 | 2 年前 | |
[Backport][BOLT] Rename isLoad/isStore to mayLoad/mayStore As discussed in D159266, for some instructions it's impossible to know statically if they will load/store (e.g., predicated instructions). Therefore, mayLoad/mayStore are more appropriate names. | 10 个月前 | |
[Backport][BOLT] Fix C++ exceptions when LPStart is specified (#72737) Whenever LPStartEncoding was different from DW_EH_PE_omit, we used to miscalculate LPStart. As a result, landing pads were assigned wrong addresses. Fix that. | 10 个月前 | |
[BOLT] Use range-based for loops (NFC) LLVM Coding Standards discourage for_each unless callable objects already exist. | 3 年前 | |
[Backport][BOLT] Always match stale entry blocks Two (minor) improvements for stale matching: - always match entry blocks to each other, even if there is a hash mismatch; - ignore nops in (loose) hash computation. I record a small improvement in inference quality on my benchmarks. Tests are not affected Reviewed By: Amir Differential Revision: https://reviews.llvm.org/D159488 | 10 个月前 | |
[BOLT][NFC] Remove C-style out of bounds array ref Old code breaks build with libstdc++ with assertions. Fix it. | 3 年前 | |
[BOLT] fix print-mem-data not working (#156332) This option print-mem-data is currently not working, use this fix to restore its functionality. | 9 个月前 | |
[bolt] Use llvm::sys::RWMutex instead of std::shared_timed_mutex This has the following advantages: - std::shared_timed_mutex is macOS 10.12+ only. llvm::sys::RWMutex automatically switches to a different implementation internally when targeting older macOS versions. - bolt only needs std::shared_mutex, not std::shared_timed_mutex. llvm::sys::RWMutex automatically uses std::shared_mutex internally where available. std::shared_mutex and RWMutex have the same API, so no code changes other than types and includes are needed. Differential Revision: https://reviews.llvm.org/D138423 | 3 年前 | |
[Backport][BOLT] Support instrumentation hook via DT_FINI_ARRAY (#67348) BOLT currently hooks its its instrumentation finalization function via DT_FINI. However, this method of calling finalization routines is not supported anymore on newer ABIs like RISC-V. DT_FINI_ARRAY is preferred there. This patch adds support for hooking into DT_FINI_ARRAY instead if the binary does not have a DT_FINI entry. If it does, DT_FINI takes precedence so this patch should not change how the currently supported instrumentation targets behave. DT_FINI_ARRAY points to an array in memory of DT_FINI_ARRAYSZ bytes. It consists of pointer-length entries that contain the addresses of finalization functions. However, the addresses are only filled-in by the dynamic linker at load time using relative relocations. This makes hooking via DT_FINI_ARRAY a bit more complicated than via DT_FINI. The implementation works as follows: - While scanning the binary: find the section where DT_FINI_ARRAY points to, read its first dynamic relocation and use its addend to find the address of the fini function we will use to hook; - While writing the output file: overwrite the addend of the dynamic relocation with the address of the runtime library's fini function. Updating the dynamic relocation required a bit of boiler plate: since dynamic relocations are stored in a std::multiset which doesn't support getting mutable references to its items, functions were added to BinarySection to take an existing relocation and insert a new one. | 10 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 个月前 | ||
| 5 个月前 | ||
| 5 个月前 | ||
| 5 个月前 | ||
| 4 年前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 5 个月前 | ||
| 3 年前 | ||
| 5 个月前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 3 年前 | ||
| 10 个月前 | ||
| 3 年前 | ||
| 9 个月前 | ||
| 3 年前 | ||
| 10 个月前 |