|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
611ffcf4 |
| 14-Jul-2022 |
Kazu Hirata <[email protected]> |
[llvm] Use value instead of getValue (NFC)
|
| #
34a5c2bc |
| 07-Jul-2022 |
Nikita Popov <[email protected]> |
[BasicBlockUtils] Allow critical edge splitting with callbr terminators
After D129205, we support SplitBlockPredecessors() for predecessors with callbr terminators. This means that it is now also sa
[BasicBlockUtils] Allow critical edge splitting with callbr terminators
After D129205, we support SplitBlockPredecessors() for predecessors with callbr terminators. This means that it is now also safe to invoke critical edge splitting for an edge coming from a callbr terminator. Remove checks in various passes that were protecting against that.
Differential Revision: https://reviews.llvm.org/D129256
show more ...
|
| #
89a99ec9 |
| 07-Jul-2022 |
Vir Narula <[email protected]> |
[GVN] Bug fix to reportMayClobberedLoad remark
Bug fix to avoid assert crashing when generating remarks for GVN crashing.
Intention of assert is correct but ignores edge case of instructions being
[GVN] Bug fix to reportMayClobberedLoad remark
Bug fix to avoid assert crashing when generating remarks for GVN crashing.
Intention of assert is correct but ignores edge case of instructions being equivalent.
Reduced input that causes crash when remarks are turned on: ``` target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64-apple-macosx12.0.0"
define ptr @ReplaceWithTidy(ptr %zz_hold) { cond.end480.us: %0 = load ptr, ptr null, align 8 store ptr %0, ptr %0, align 8 store ptr null, ptr %zz_hold, align 8 %1 = load ptr, ptr %0, align 8 store ptr %1, ptr null, align 8 ret ptr null } ```
Reviewed By: fhahn
Differential Revision: https://reviews.llvm.org/D129235
show more ...
|
| #
3b7c3a65 |
| 25-Jun-2022 |
Kazu Hirata <[email protected]> |
Revert "Don't use Optional::hasValue (NFC)"
This reverts commit aa8feeefd3ac6c78ee8f67bf033976fc7d68bc6d.
|
| #
aa8feeef |
| 25-Jun-2022 |
Kazu Hirata <[email protected]> |
Don't use Optional::hasValue (NFC)
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5 |
|
| #
871197d0 |
| 08-Jun-2022 |
Nikita Popov <[email protected]> |
[MemoryBuiltins] Accept any value in getInitialValueOfAllocation() (NFC)
Drop the requirement that getInitialValueOfAllocation() must be passed an allocator function, shifting the responsibility for
[MemoryBuiltins] Accept any value in getInitialValueOfAllocation() (NFC)
Drop the requirement that getInitialValueOfAllocation() must be passed an allocator function, shifting the responsibility for checking that into the function (which it does anyway). The motivation is to avoid some calls to isAllocationFn(), which has somewhat ill-defined semantics (given the number of allocator-related attributes we have floating around...)
(For this function, all we eventually need is an allockind of zeroed or uninitialized.)
Differential Revision: https://reviews.llvm.org/D127274
show more ...
|
| #
7a47ee51 |
| 21-Jun-2022 |
Kazu Hirata <[email protected]> |
[llvm] Don't use Optional::getValue (NFC)
|
| #
129b531c |
| 19-Jun-2022 |
Kazu Hirata <[email protected]> |
[llvm] Use value_or instead of getValueOr (NFC)
|
| #
b8c2781f |
| 09-Jun-2022 |
Simon Moll <[email protected]> |
[NFC] format InstructionSimplify & lowerCaseFunctionNames
Clang-format InstructionSimplify and convert all "FunctionName"s to "functionName". This patch does touch a lot of files but gets done with
[NFC] format InstructionSimplify & lowerCaseFunctionNames
Clang-format InstructionSimplify and convert all "FunctionName"s to "functionName". This patch does touch a lot of files but gets done with the cleanup of InstructionSimplify in one commit.
This is the alternative to the less invasive clang-format only patch: D126783
Reviewed By: spatel, rengolin
Differential Revision: https://reviews.llvm.org/D126889
show more ...
|
| #
557efc9a |
| 04-Jun-2022 |
Fangrui Song <[email protected]> |
[llvm] Remove unneeded cl::ZeroOrMore for cl::opt options. NFC
Some cl::ZeroOrMore were added to avoid the `may only occur zero or one times!` error. More were added due to cargo cult. Since the err
[llvm] Remove unneeded cl::ZeroOrMore for cl::opt options. NFC
Some cl::ZeroOrMore were added to avoid the `may only occur zero or one times!` error. More were added due to cargo cult. Since the error has been removed, cl::ZeroOrMore is unneeded.
Also remove cl::init(false) while touching the lines.
show more ...
|
| #
1721ff1d |
| 25-May-2022 |
Nikita Popov <[email protected]> |
[GVN] Enable enable-split-backedge-in-load-pre option by default
This option was added in D89854. It prevents GVN from performing load PRE in a loop, if doing so would require critical edge splittin
[GVN] Enable enable-split-backedge-in-load-pre option by default
This option was added in D89854. It prevents GVN from performing load PRE in a loop, if doing so would require critical edge splitting on the backedge. From the review:
> I know that GVN Load PRE negatively impacts peeling, > loop predication, so the passes expecting that latch has > a conditional branch.
In the PhaseOrdering test in this patch, splitting the backedge negatively affects vectorization: After critical edge splitting, the loop gets rotated, effectively peeling off the first loop iteration. The effect is that the first element is handled separately, then the bulk of the elements use a vectorized reduction (but using unaligned, off-by-one memory accesses) and then a tail of 15 elements is handled separately again.
It's probably worth noting that the loop load PRE from D99926 is not affected by this change (as it does not need backedge splitting). This is about normal load PRE that happens to occur inside a loop.
Differential Revision: https://reviews.llvm.org/D126382
show more ...
|
| #
939a4346 |
| 26-May-2022 |
Owen Anderson <[email protected]> |
Revert "Replace the custom linked list in LeaderTableEntry with TinyPtrVector."
This reverts commit 1e9114984490b83d4665f12a11f84c83f50ca8f0.
Pending further discussion.
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
1e911498 |
| 09-May-2022 |
Owen Anderson <[email protected]> |
Replace the custom linked list in LeaderTableEntry with TinyPtrVector.
The purpose of the custom linked list was to optimize for the case of a single-element list. It turns out that TinyPtrVector ha
Replace the custom linked list in LeaderTableEntry with TinyPtrVector.
The purpose of the custom linked list was to optimize for the case of a single-element list. It turns out that TinyPtrVector handles the same basic scenario even better, reducing the size of LeaderTableEntry by 33%, and requiring only log2(N) allocations as the size of the list grows. The only downside is that we have to store the Value's and BasicBlock's in separate vectors, which is slightly awkward in a few cases. Fortunately that ends up being entirely encapsulated inside helper functions.
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D125205
show more ...
|
|
Revision tags: llvmorg-14.0.3 |
|
| #
b9dc5651 |
| 27-Apr-2022 |
Nikita Popov <[email protected]> |
[GVN] Encode GEPs in offset representation
When using opaque pointers, convert GEPs into offset representation of the form P + V1 * Scale1 + V2 * Scale2 + ... + ConstantOffset. This allows us to rec
[GVN] Encode GEPs in offset representation
When using opaque pointers, convert GEPs into offset representation of the form P + V1 * Scale1 + V2 * Scale2 + ... + ConstantOffset. This allows us to recognize equivalent address calculations even if the GEPs don't use the same source element type.
This fixes an opaque pointer codegen regression seen in rustc.
Differential Revision: https://reviews.llvm.org/D124527
show more ...
|
|
Revision tags: llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
46776f75 |
| 05-Apr-2022 |
Martin Storsjö <[email protected]> |
Fix warnings about variables that are set but only used in debug mode
Add void casts to mark the variables used, next to the places where they are used in assert or `LLVM_DEBUG()` expressions.
Diff
Fix warnings about variables that are set but only used in debug mode
Add void casts to mark the variables used, next to the places where they are used in assert or `LLVM_DEBUG()` expressions.
Differential Revision: https://reviews.llvm.org/D123117
show more ...
|
| #
cf18ec44 |
| 14-Mar-2022 |
Nikita Popov <[email protected]> |
[GVN] Check load type in select PRE
This is no longer implicitly guaranteed with opaque pointers.
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3 |
|
| #
59630917 |
| 02-Mar-2022 |
serge-sans-paille <[email protected]> |
Cleanup includes: Transform/Scalar
Estimated impact on preprocessor output line: before: 1062981579 after: 1062494547
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cl
Cleanup includes: Transform/Scalar
Estimated impact on preprocessor output line: before: 1062981579 after: 1062494547
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup Differential Revision: https://reviews.llvm.org/D120817
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc2 |
|
| #
2a1b1f1b |
| 11-Feb-2022 |
Nikita Popov <[email protected]> |
[GVN] Store source element type for GEP expressions
To avoid incorrectly merging GEPs with different source types under opaque pointers.
To avoid increasing the Expression structure size, this reus
[GVN] Store source element type for GEP expressions
To avoid incorrectly merging GEPs with different source types under opaque pointers.
To avoid increasing the Expression structure size, this reuses the existing type member. The code does not rely on this to be the expression result type, it's only used as a disambiguator.
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1 |
|
| #
1c9f1542 |
| 02-Feb-2022 |
Florian Hahn <[email protected]> |
[GVN] Replace PointerIntPair with separate pointer & kind fields (NFC).
After adding another value kind in 8a12cae862af, Value * pointers do not have enough available empty bits to store the kind (e
[GVN] Replace PointerIntPair with separate pointer & kind fields (NFC).
After adding another value kind in 8a12cae862af, Value * pointers do not have enough available empty bits to store the kind (e.g. on ARM)
To address this, the patch replaces the PointerIntPair with separate value and kind fields.
show more ...
|
| #
8a12cae8 |
| 02-Feb-2022 |
Florian Hahn <[email protected]> |
[GVN] Support load of pointer-select to value-select conversion.
This patch extends the available-value logic to detect loads of pointer-selects that can be replaced by a value select.
For example,
[GVN] Support load of pointer-select to value-select conversion.
This patch extends the available-value logic to detect loads of pointer-selects that can be replaced by a value select.
For example, consider the code below:
loop: %sel.phi = phi i32* [ %start, %ph ], [ %sel, %ph ] %l = load %ptr %l.sel = load %sel.phi %sel = select cond, %ptr, %sel.phi ...
exit: %res = load %sel use(%res)
The load of the pointer phi can be replaced by a load of the start value outside the loop and a new phi/select chain based on the loaded values, as illustrated below
%l.start = load %start loop: sel.phi.prom = phi i32 [ %l.start, %ph ], [ %sel.prom, %ph ] %l = load %ptr %sel.prom = select cond, %l, %sel.phi.prom ... exit: use(%sel.prom)
This is a first step towards alllowing vectorizing loops using common libc++ library functions, like std::min_element (https://clang.godbolt.org/z/6czGzzqbs)
#include <vector> #include <algorithm>
int foo(const std::vector<int> &V) { return *std::min_element(V.begin(), V.end()); }
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D118143
show more ...
|
|
Revision tags: llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
6b0ff096 |
| 07-Jan-2022 |
Philip Reames <[email protected]> |
Extract utility function for checking initial value of allocation [NFC, try 2]
This is a reoccuring pattern, we can consolidate three copies into one. The main motivation is to reduce usages of isM
Extract utility function for checking initial value of allocation [NFC, try 2]
This is a reoccuring pattern, we can consolidate three copies into one. The main motivation is to reduce usages of isMallocLike.
The original commit (which was quickly reverted) didn't account for the allocation function could be an invoke, test coverage for that case added in this commit.
show more ...
|
| #
c6a0c158 |
| 07-Jan-2022 |
Philip Reames <[email protected]> |
Revert "Extract utility function for checking initial value of allocation [NFC]"
This reverts commit 9ce30fe86f58df45b2c5daa601802593601c471d. Appears to be causing a problem on a buildbot, revert
Revert "Extract utility function for checking initial value of allocation [NFC]"
This reverts commit 9ce30fe86f58df45b2c5daa601802593601c471d. Appears to be causing a problem on a buildbot, revert while investigating.
https://green.lab.llvm.org/green//job/clang-stage1-RA/26818/consoleFull#-1502953973d489585b-5106-414a-ac11-3ff90657619c
show more ...
|
| #
9ce30fe8 |
| 07-Jan-2022 |
Philip Reames <[email protected]> |
Extract utility function for checking initial value of allocation [NFC]
This is a reoccuring pattern, we can consolidate three copies into one. The main motivation is to reduce usages of isMallocLi
Extract utility function for checking initial value of allocation [NFC]
This is a reoccuring pattern, we can consolidate three copies into one. The main motivation is to reduce usages of isMallocLike.
show more ...
|
| #
84b285d6 |
| 30-Dec-2021 |
Nuno Lopes <[email protected]> |
[GVN] Set phi entries of unreachable predecessors to poison instead of undef This matches NewGVN's behavior.
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
7505b704 |
| 14-Nov-2021 |
Kazu Hirata <[email protected]> |
[llvm] Use GetElementPtrInst::indices (NFC)
|