- May 02, 2024
-
-
Florian Hahn authored
This patch adds loadCSE support to simplifyLoopAfterUnroll. It is based on EarlyCSE's implementation using ScopeHashTable and is using SCEV for accessed pointers to check to find redundant loads after unrolling. This applies to the late unroll pass only, for full unrolling those redundant loads will be cleaned up by the regular pipeline. The current approach constructs MSSA on-demand per-loop, but there is still small but notable compile-time impact: stage1-O3 +0.04% stage1-ReleaseThinLTO +0.06% stage1-ReleaseLTO-g +0.05% stage1-O0-g +0.02% stage2-O3 +0.09% stage2-O0-g +0.04% stage2-clang +0.02% https://llvm-compile-time-tracker.com/compare.php?from=c089fa5a729e217d0c0d4647656386dac1a1b135&to=ec7c0f27cb5c12b600d9adfc8543d131765ec7be&stat=instructions:u This benefits some workloads with runtime-unrolling disabled, where users use pragmas to force unrolling, as well as with runtime unrolling enabled. On SPEC/MultiSource, this removes a number of loads after unrolling on AArch64 with runtime unrolling enabled. ``` External/S...te/526.blender_r/526.blender_r 96 MultiSourc...rks/mediabench/gsm/toast/toast 39 SingleSource/Benchmarks/Misc/ffbench 4 External/SPEC/CINT2006/403.gcc/403.gcc 18 MultiSourc.../Applications/JM/ldecod/ldecod 4 MultiSourc.../mediabench/jpeg/jpeg-6a/cjpeg 6 MultiSourc...OE-ProxyApps-C/miniGMG/miniGMG 9 MultiSourc...e/Applications/ClamAV/clamscan 4 MultiSourc.../MallocBench/espresso/espresso 3 MultiSourc...dence-flt/LinearDependence-flt 2 MultiSourc...ch/office-ispell/office-ispell 4 MultiSourc...ch/consumer-jpeg/consumer-jpeg 6 MultiSourc...ench/security-sha/security-sha 11 MultiSourc...chmarks/McCat/04-bisect/bisect 3 SingleSour...tTests/2020-01-06-coverage-009 12 MultiSourc...ench/telecomm-gsm/telecomm-gsm 39 MultiSourc...lds-flt/CrossingThresholds-flt 24 MultiSourc...dence-dbl/LinearDependence-dbl 2 External/S...C/CINT2006/445.gobmk/445.gobmk 6 MultiSourc...enchmarks/mafft/pairlocalalign 53 External/S...31.deepsjeng_r/531.deepsjeng_r 3 External/S...rate/510.parest_r/510.parest_r 58 External/S...NT2006/464.h264ref/464.h264ref 29 External/S...NT2017rate/502.gcc_r/502.gcc_r 45 External/S...C/CINT2006/456.hmmer/456.hmmer 6 External/S...te/538.imagick_r/538.imagick_r 18 External/S.../CFP2006/447.dealII/447.dealII 4 MultiSourc...OE-ProxyApps-C++/miniFE/miniFE 12 External/S...2017rate/525.x264_r/525.x264_r 36 MultiSourc...Benchmarks/7zip/7zip-benchmark 33 MultiSourc...hmarks/ASC_Sequoia/AMGmk/AMGmk 2 MultiSourc...chmarks/VersaBench/8b10b/8b10b 1 MultiSourc.../Applications/JM/lencod/lencod 116 MultiSourc...lds-dbl/CrossingThresholds-dbl 24 MultiSource/Benchmarks/McCat/05-eks/eks 15 ``` PR: https://github.com/llvm/llvm-project/pull/83860
-
Sven van Haastregt authored
Place constant initializer globals into the constant address space. Clang generates such globals for e.g. larger array member initializers of classes and then emits copy operations from the global to the object(s). The globals are never written so they ought to be in the constant address space.
-
Krishna Narayanan authored
Fixes #53079
-
zxc12523 authored
fix #89414
-
David Spickett authored
Missing llvm:: namespace for StringRef.
-
Lang Hames authored
This adds a removePlugin operation to ObjectLinkingLayer. The removal of a plugin will be visible in all links started after the removal (ongoing links started before the removal will still use the removed plugin). Coding my way home: 17.56037S, 149.61118W
-
David Spickett authored
Fixes #48759 As stated on the issue this was fixed by a change in FreeBSD 13, and I've confirmed that it passes on 14 as well.
-
David Spickett authored
This relates to #56084. vectorcall only works on x86 https://clang.llvm.org/docs/AttributeReference.html#vectorcall so elsewhere it fails to compile. Which is expected on AArch64 for example so is treated as a pass.
-
David Spickett authored
This was last modified in 4fd3347d in 2021 and was made obsolete by the RST version that edb874b2 added in 2019. There are some differences but at this point, I'd bet the RST is the correct one.
-
David Spickett authored
Except when referring to the program binaries.
-
David Spickett authored
[clang][Docs] Add release note for {target}-none-{environment} triple normalization changes (#90734) That were implemented by https://github.com/llvm/llvm-project/pull/89638. -
Oleksandr T authored
Fixes #85447 --- This PR resolves a crash in `ActOnUninitializedDecl` due to an oversight in updating the `isInvalidDecl` state before invocation. The crash occurs due to a missing invocation of `setInvalidDecl()` for an invalid `Anon` declaration. To address this issue, the `setInvalidDecl()` method is now properly invoked to mark the `Anon` declaration as invalid before running `ActOnUninitializedDecl()`.
-
Christian Sigg authored
-
Matt Arsenault authored
-
Matt Arsenault authored
-
martinboehme authored
Trying to do so can cause crashes -- see newly added test and the comments in the fix. We're starting to see a repeating pattern here: We're getting crashes because `ResultObjectVisitor` and `getReferencedDecls()` don't agree on which parts of the AST to visit and, hence, which fields should be modeled. I think we should ensure consistency between these two parts of the code by using a `RecursiveASTVisitor` in `getReferencedDecls()`[^1]; the `Traverse...()` functions that control which parts of the AST we visit would go in a common base class that would be used for both `ResultObjectVisitor` and `getReferencedDecls()`. I'd like to focus this PR, however, on a targeted fix for the current crash and postpone the refactoring to a later PR (which will be easier to revert if there are unintended side-effects). [^1]: As an added bonus, this would make the code better structured and more efficient than the current sequence of `if (dyn_cast<T>(...))` statements).
-
Yeting Kuo authored
PseudoTail should be a software guarded branch in Ziciflp, since its branch target is known in link time. JALR/C.JR/C.JALR with rs1 as t2 is termed a software guarded branch. Such branches do not need to land on a lpad instruction. ABI Change PR: https://github.com/riscv-non-isa/riscv-asm-manual/pull/93
-
Matheus Izvekov authored
This patch will finally allow us to mark C++17 support in clang as complete. In order to implement this as a DR and avoid breaking reasonable code that worked before P0522, this patch implements a provisional resolution for CWG2398: When deducing template template parameters against each other, and the argument side names a template specialization, instead of just deducing A, we deduce a synthesized template template parameter based on A, but with it's parameters using the template specialization's arguments as defaults. The driver flag is deprecated with a warning. Fixes https://github.com/llvm/llvm-project/issues/36505 -
Maksim Panchenko authored
To match profile data to code we need to know branch instruction offsets within a function. For this reason, we mark branches with the "Offset" annotation while disassembling the code. However, _dynamic_ branches in the Linux kernel could be NOPs in disassembled code, and we ignore them while adding annotations. We need to explicitly add the "Offset" annotation while creating dynamic branches. Note that without this change, `getInstructionAtOffset()` would still return a branch instruction if the offset matched the last instruction in a basic block (and the profile data was matched correctly). However, the function failed for cases when the searched instruction was followed by an unconditional jump. "Offset" annotation solves this case.
-
Maksim Panchenko authored
While rewriting the Linux kernel, we try to fit optimized functions into their original boundaries. When a function becomes larger, we skip it during the rewrite and end up with less than optimal code layout. To overcome that issue, add support for --split-function option so that hot part of the function could be fit into the original space. The cold part should go to reserved space in the binary.
-
Ryosuke Niwa authored
-
Piotr Zegar authored
From now readability-const-return-type won't provide warnings for returning const types, where const is not on top level. In such case const there is a performance issue, but not a readability. Closes #73270
-
Piotr Zegar authored
Improved bugprone-casting-through-void check by ignoring casts where source is already a void pointer, making middle void pointer casts bug-free. Closes #87069
-
Congcong Cai authored
-
Yeting Kuo authored
When Zicfilp enabled, this avoids selecting indirect jumps to PseudoBRIND/PseudoCALLIndirect/PseudoTAILIndirect, since they may uses X7 as rs1 and be identified as a software guarded jump. There is an another PR #66762 to use software guarded jump for jumptable branch.
-
Andreas Jonson authored
Think that it can be good to reduce the number of copies created when working with ConstantRangeAttributes.
-
Maksim Panchenko authored
Use BOLTReserved to track binary space preallocated for BOLT.
-
Nikita Popov authored
Vectors are always tightly packed, and elements of non-byte-sized usually do not have a well-defined (byte) offset. Fixes https://github.com/llvm/llvm-project/issues/90695.
-
YunQiang Su authored
When parsing a 3-component triple, after we determine Arch and Env, if the middle component is "none", treat it as OS instead of Vendor. See: https://discourse.llvm.org/t/rfc-baremetal-target-triple-normalization/78524 Fixes: #89582.
-
Heejin Ahn authored
#80923 newly enabled multivalue and reference-types in the generic CPU. But enabling reference-types ended up breaking up Wasm's Chromium CI (https://chromium-review.googlesource.com/c/emscripten-releases/+/5500231) because the way the table index is encoded is different from MVP (u32) vs. reference-types (LEB), which caused different encodings for `call_indirect`. And Chromium CI's and Emscripten's minimum required node version is v16, which does not yet support reference-types, which does not recognize that table index encoding. reference-types is first supported in node v17.2. We knew the current minimum required node for Emscripten (v16) did not support reference-types, but thought it was fine because unless you explicitly use `__funcref` or `__externref` things would be fine, and if you want to use them explicitly, you would have a newer node. But it turned out it also affected the encoding of `call_indirect`. While we are discussing the potential solutions, I will disable reference-types to unblock the rolls.
-
Peter Klausler authored
Some additional portability warnings now issue for a test; ensure that they are expected.
-
Peiming Liu authored
-
Aiden Grossman authored
This was added in def0823f to fix a bot failure, specifically for the standalone build. This does not seem to be an issue anymore, and setting the policy explicitly to OLD causes warnings with newer CMake versions. This patch removes setting the policy to OLD to get rid of the warning.
-
Med Ismail Bennani authored
This patch extends the `llvm::sys::RWMutex` class to fullfill the `Lockable` requirement to include attempted locking, by implementing a `bool try_lock` member function. As the name suggests, this method will try to acquire to lock in a non-blocking fashion and release it immediately. If it managed to acquire the lock, returns `true`, otherwise returns `false`. Signed-off-by:Med Ismail Bennani <ismail@bennani.ma>
-
Peter Klausler authored
Fix a warning from some build compilers about an unused lambda capture. There are some `if constexpr` branches in the body of the code that do not use the capture.
-
Craig Topper authored
Use an index variable and array indexing instead of manipulating a temporary StringRef.
-
Craig Topper authored
As the list of profiles grow, this will be a more efficient lookup. Because the profile name is a prefix of the Arch string, we use upper_bound to find the first profile that definitely comes after the Arch string. If that isn't the first supported profile, we move back 1 profile and see if that profile is a prefix of our Arch string.
-
Craig Topper authored
Previously we used SpecificInt_match which created a 64 bit APInt containing all ones. This was then checked against other constants by using APInt::isSameValue. If the constnats have different bitwidths, APInt::isSameValue will zero extend the constant to make them match. This means for any constant less than 64 bits, m_AllOnes was guaranteed to fail since the zero extended value would not match all ones. I think would also incorrectly consider an i128 with 64 leading zeros and 64 trailing zeros as matching m_AllOnes. To avoid this, this patch adds a new matcher class that just calls isAllOnesOrAllOnesSplat.
-
Mircea Trofin authored
This adds instrumenting callsites to PGOInstrumentation, *if* contextual profiling is requested. The latter also enables inserting counters in the entry basic block and disables value profiling (the latter is a point in time change) This change adds the skeleton of the contextual profiling lowering pass, just so we can introduce the flag controlling that and the API to check that. The actual lowering pass will be introduced in a subsequent patch. (Tracking Issue: #89287, RFC referenced there)
-
Vitaly Buka authored
In rare cases `SplitBlockAndInsertSimpleForLoop` in `paintOrigin` crashes outsize iterators. Somehow existing `SplitBlockAndInsertIfThen` do not invalidate iterators.
-