Commit
59cc39ae141f92c01836064cd033c537f16dec5e
by Akira[ObjC][ARC] Use the addresses of the ARC runtime functions instead of integer 0/1 for the operand of bundle "clang.arc.attachedcall"
This should make it easier to understand what the IR is doing and also simplify some of the passes as they no longer have to translate the integer values to the runtime functions.
Differential Revision: https://reviews.llvm.org/D102996
|
 | clang/test/CodeGenObjCXX/arc-rv-attr.mm |
 | clang/lib/CodeGen/CGObjC.cpp |
 | clang/test/CodeGenObjC/arc-rv-attr.m |
Commit
dea6f71af0fdd7c54cacd43f5fb15e293924fa20
by Akira[ObjC][ARC] Use the addresses of the ARC runtime functions instead of integer 0/1 for the operand of bundle "clang.arc.attachedcall"
https://reviews.llvm.org/D102996 changes the operand of bundle "clang.arc.attachedcall". This patch makes changes to llvm that are needed to handle the new IR.
This should make it easier to understand what the IR is doing and also simplify some of the passes as they no longer have to translate the integer values to the runtime functions.
Differential Revision: https://reviews.llvm.org/D103000
|
 | llvm/docs/LangRef.rst |
 | llvm/test/CodeGen/X86/expand-call-rvmarker.mir |
 | llvm/lib/IR/Verifier.cpp |
 | llvm/lib/Target/X86/X86ISelLowering.cpp |
 | llvm/test/Transforms/DeadArgElim/deadretval.ll |
 | llvm/include/llvm/IR/InstrTypes.h |
 | llvm/test/Transforms/SCCP/clang-arc-rv.ll |
 | llvm/lib/Target/X86/X86InstrCompiler.td |
 | llvm/lib/Transforms/ObjCARC/ObjCARC.cpp |
 | llvm/lib/Transforms/Utils/InlineFunction.cpp |
 | llvm/test/Verifier/invoke.ll |
 | llvm/lib/Transforms/ObjCARC/ObjCARC.h |
 | llvm/test/Transforms/ObjCARC/contract-rv-attr.ll |
 | llvm/include/llvm/IR/Function.h |
 | llvm/lib/Target/X86/X86InstrControl.td |
 | llvm/test/CodeGen/AArch64/call-rv-marker.ll |
 | llvm/test/Transforms/ObjCARC/contract-marker-funclet.ll |
 | llvm/test/Transforms/TailCallElim/deopt-bundle.ll |
 | llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp |
 | llvm/test/Verifier/operand-bundles.ll |
 | llvm/test/CodeGen/X86/call-rv-marker.ll |
 | llvm/include/llvm/Analysis/ObjCARCUtil.h |
 | llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp |
 | llvm/test/Transforms/Inline/inline-retainRV-call.ll |
 | llvm/lib/IR/Function.cpp |
 | llvm/lib/Target/X86/X86ExpandPseudo.cpp |
 | llvm/test/Transforms/ObjCARC/rv.ll |
Commit
b4e88d4db12e9460e581de453c8603eb280f145b
by Louis Dionne[libc++][NFC] Rename _EnableIf to __enable_if_t for consistency
In other places in the code, we use lowercase spelling for things that are not available in prior standards.
Differential Revision: https://reviews.llvm.org/D109435
|
 | libcxx/include/__iterator/iterator_traits.h |
 | libcxx/include/queue |
 | libcxx/include/math.h |
 | libcxx/include/__functional/bind.h |
 | libcxx/include/__memory/allocator_traits.h |
 | libcxx/include/__memory/shared_ptr.h |
 | libcxx/include/stack |
 | libcxx/include/type_traits |
 | libcxx/include/tuple |
 | libcxx/include/string |
 | libcxx/include/__iterator/reverse_iterator.h |
 | libcxx/include/bitset |
 | libcxx/include/__functional/reference_wrapper.h |
 | libcxx/include/__memory/pointer_traits.h |
 | libcxx/include/__iterator/advance.h |
 | libcxx/include/__iterator/move_iterator.h |
Commit
3e54de4df232f1cfc9570ea7958abee8d04f7b0b
by nikita.ppv[ConstantHoisting] Support opaque pointers
Directly use i8 for GEP, rather than fetching element type of i8*.
|
 | llvm/test/CodeGen/AArch64/consthoist-gep.ll |
 | llvm/lib/Transforms/Scalar/ConstantHoisting.cpp |
Commit
585c594d749a2a88150b63804587af85abdabeaa
by listmailMove delinearization logic out of SCEV [NFC]
None of this logic has anything to do with SCEV's internals, it just uses the existing public APIs. As a result, we can move the code from ScalarEvolution.cpp/hpp to Delinearization.cpp/hpp with only minor changes.
This was discussed in advance on today's loop opt call. It turned out to be easy as hoped.
|
 | llvm/include/llvm/Analysis/Delinearization.h |
 | llvm/lib/Analysis/DependenceAnalysis.cpp |
 | llvm/lib/Analysis/LoopCacheAnalysis.cpp |
 | llvm/include/llvm/Analysis/ScalarEvolution.h |
 | llvm/lib/Analysis/Delinearization.cpp |
 | llvm/lib/Analysis/ScalarEvolution.cpp |
Commit
ff7a332e6f5d4b09b4e437cc2c014367724b3eee
by Louis Dionne[libc++] Revert OpenBSD-related changes to the documentation
This commit partially reverts 0954e2b2d038 and 3fa4cff97480, which make changes to the libc++ documentation implifying that OpenBSD is supported. Neither of these changes have been reviewed AFAICT, so I'm reverting as a matter of enforcing:
1. That changes get reviewed before being committed 2. That we have a discussion and a support plan for supporting OpenBSD officially in libc++
Please note that I would be thrilled to support OpenBSD officially in libc++, however doing so requires more than adding a note in the docs. In particular, please make sure you read the note in [1] about setting up CI testing for OpenBSD.
[1]: https://libcxx.llvm.org/#platform-and-compiler-support
Differential Revision: https://reviews.llvm.org/D109373
|
 | libcxx/docs/index.rst |
 | libcxx/docs/UsingLibcxx.rst |
Commit
b493124ae2de5074acc8207155274f84732cd06b
by aeubanks[MemorySSA] Support invariant.group metadata
The implementation is mostly copied from MemDepAnalysis. We want to look at all loads and stores to the same pointer operand. Bitcasts and zero GEPs of a pointer are considered the same pointer value. We choose the most dominating instruction.
Since updating MemorySSA with invariant.group is non-trivial, for now handling of invariant.group is not cached in any way, so it's part of the walker. The number of loads/stores with invariant.group is small for now anyway. We can revisit if this actually noticeably affects compile times.
To avoid invariant.group affecting optimized uses, we need to have optimizeUsesInBlock() not use invariant.group in any way.
Co-authored-by: Piotr Padlewski <prazek@google.com>
Reviewed By: asbirlea, nikic, Prazek
Differential Revision: https://reviews.llvm.org/D109134
|
 | llvm/test/Analysis/MemorySSA/invariant-groups.ll |
 | llvm/test/Transforms/NewGVN/invariant.group.ll |
 | llvm/lib/Analysis/MemorySSA.cpp |
 | llvm/test/Transforms/NewGVN/invariant.group-xfail.ll |
 | llvm/unittests/Analysis/MemorySSATest.cpp |
Commit
806ff3c4a42c7393a0bbeab3dd1c0295f61ad457
by wanyu9511[AIX] Check for typedef properly when getting preferred type align
The current check for typedef is naive and doesn't deal with any convoluted cases. This patch makes use of the new 'AlignRequirement' enum field from 'TypeInfo' to determine whether or not this is an 'aligned' attribute on a typedef.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D109387
|
 | clang/lib/AST/ASTContext.cpp |
 | clang/test/Layout/aix-power-alignment-typedef-2.cpp |
Commit
6dfdc6bfd22a92e06a027527f4eb794009811175
by nikita.ppv[SROA] Support opaque pointers
Make the following changes in order to support opaque pointers in SROA:
* Generate i8 GEPs for opaque pointers. * Explicitly enforce that promotable allocas only have stores of the alloca type -- previously this was implicitly enforced. * Replace a check for pointer element type with load/store type.
Differential Revision: https://reviews.llvm.org/D109259
|
 | llvm/test/Transforms/SROA/basictest-opaque-ptrs.ll |
 | llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp |
 | llvm/lib/Transforms/Scalar/SROA.cpp |
Commit
8ae69338819d18d7a3669d8b51591bf742c61946
by llvm-project[Polly] Compile fix after Delinearization move.
by commit 585c594d749a2a88150b63804587af85abdabeaa
|
 | polly/lib/Analysis/ScopDetection.cpp |
Commit
40a89da65ce85163123cdfec66afdcf2fa3687ce
by clattner[Canonicalize] Don't call isBeforeInBlock in OperationFolder::tryToFold.
This patch (e4635e6328c8) fixed a bug where a newly generated/reused constant wouldn't dominate a folded operation. It did so by calling isBeforeInBlock to move the constant around on demand. This introduced a significant compile time regression, because "isBeforeInBlock" is O(n) in the size of a block the first time it is called, and the cache is invalidated any time canonicalize changes something big in the block.
This fixes LLVM PR51738 and this CIRCT issue: https://github.com/llvm/circt/issues/1700
This does affect the order of constants left in the top of a block, I staged in the testsuite changes in rG42431b8207a5.
Differential Revision: https://reviews.llvm.org/D109454
|
 | mlir/lib/Transforms/Utils/FoldUtils.cpp |
Commit
f4726e72386d4107f427f3b4825bdfb92d0d1a1e
by flo[LAA] Remove unused OrigPtr from replaceSymbolicStrideSCEV (NFC).
The OrigPtr argument is not used in tree.
|
 | llvm/lib/Analysis/LoopAccessAnalysis.cpp |
 | llvm/include/llvm/Analysis/LoopAccessAnalysis.h |
Commit
d1d4f365566ce9aae40d1f46cae517e4fe8fe6ee
by Jonas Devlieghere[lldb] Make sure there's a value for the key before dereferencing.
Make sure there's a value for the shared_cache_base_address key exists in the dictionary before trying to dereference the value.
rdar://76894476
|
 | lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp |
Commit
41c73671d0b851c601ceb85c7e38afa21819bde7
by jonathanchesterfield[openmp] Re-enable test from D109057, now with windows path aware regex
|
 | clang/test/Driver/openmp-offload-gpu.c |
Commit
14850a062845bef842ee54417b8a0771dbc732a4
by gclaytonLog to the right stream in DwarfTransformer::handleDie().
Since we might end up using multiple threads when logging information in the DWARFTransformer, the handleDie() method must use the supplied stream named "OS" when logging warnings and errors. When we use multiple threads, we log to a thread specific stream buffer and then use a mutex to ensure our output doesn't overlap when we emit warnings and errors after a thread is done.
Differential Revision: https://reviews.llvm.org/D109401
|
 | llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp |
Commit
407e07aa67ab56c92cdec1fdbf6b121afbceddaf
by martin[runtimes] Set more paths when building runtimes standalone
These paths are needed when building with per-target runtime directories.
(It's possible to fix this by manually setting these when invoking cmake, but one isn't supposed to need to do that.)
Also set LLVM_TOOLS_BINARY_DIR while touching this area (as it's also unset in this case) even if it isn't specifically needed by the per-target runtime configuration.
Differential Revision: https://reviews.llvm.org/D107895
|
 | runtimes/CMakeLists.txt |
 | libcxx/cmake/Modules/HandleOutOfTreeLLVM.cmake |
Commit
c4e8a2136c00473f42e54a05bd2634ffc08388ca
by martin[runtimes] Allow overriding where CMake installs RUNTIME type libraries (DLLs)
Differential Revision: https://reviews.llvm.org/D107892
|
 | libcxx/src/CMakeLists.txt |
 | libunwind/CMakeLists.txt |
 | libcxxabi/CMakeLists.txt |
 | libcxxabi/src/CMakeLists.txt |
 | libunwind/src/CMakeLists.txt |
 | libcxx/CMakeLists.txt |
Commit
088577a38e603d3537816de1f2a249d598de8dd9
by llvm-project[Delinerization] Require by offset to be zero.
Users of delinearization assume that the the offset into the array element is zero. In most cases it will indeed be zero, but if it is not, the delinearization has to fail since it violates that assumption without the API even allowing to signal to the caller that the by offset is non-zero.
This bug caused Polly to miscompile blender (526.blender_r from SPEC CPU 2017) in -polly-process-unprofitable mode. The SCEV expression incorrectly delinearized has been reduced in the test case byte_offset.ll. The dropped offset into the array element of size 4 (a float) is ((sext i32 %mul7.i4534 to i64) + {(sext i32 %i1 to i64),+,((sext i32 (1 + ((1 + %shl.i.i) * (1 + %shl.i.i)) + %shl.i.i) to i64) * (sext i32 %i1 to i64))}<%for.body703>). This significant component was just dropped, and the wrong pointer was computed when regenerating code from the remaining delinearized subscripts. This occurred during blender's subsurface scattering implementation. As a result, blender's rendering diverged from the reference image.
Patch D108885 would also fix the API.
Reviewed By: bmahjour
Differential Revision: https://reviews.llvm.org/D109133
|
 | llvm/lib/Analysis/Delinearization.cpp |
 | llvm/test/Analysis/Delinearization/byte_offset.ll |
Commit
e62f4f172e34b9283ce04c871512165c78ef5f39
by jonathanchesterfield[openmp] 41c73671d0, this time with staged patch applied
|
 | clang/test/Driver/openmp-offload-gpu.c |
Commit
0375734439a0eaeab76a48eff6ef974017bbf4fe
by efriedma[NFC] Add extra test for D106331
|
 | llvm/test/Analysis/ScalarEvolution/no-wrap-symbolic-becount.ll |
Commit
a574f0e0c347cd8bee97e6770022aeb537542b22
by craig.topper[RISCV] Disable use of i128 shift libcalls on RV32.
Since i128 isn't a legal C type on RV32, I don't believe libgcc implements these functions for RV32. compiler-rt does implement them because i128 support is enabled in order to handle long double.
This is consistent with 32-bit X86 and ARM.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D109383
|
 | llvm/lib/Target/RISCV/RISCVISelLowering.cpp |
 | llvm/test/CodeGen/RISCV/shifts.ll |
Commit
fe15347a1e03588376073f38b625acacb93122f4
by aeubanksPort the cost model printer to New PM
Reviewed By: asbirlea
Differential Revision: https://reviews.llvm.org/D109284
|
 | llvm/test/CodeGen/ARM/vselect_imax.ll |
 | llvm/test/CodeGen/ARM/vcvt-cost.ll |
 | llvm/lib/Passes/PassRegistry.def |
 | llvm/lib/Analysis/CostModel.cpp |
 | llvm/include/llvm/Analysis/CostModel.h |
 | llvm/lib/Passes/PassBuilder.cpp |
Commit
7ff67d5bf8d049b368625b6fe06c50aedc222939
by david.green[AArch64] Rewrite floatdp_1source.ll test. NFC
Rewrite this test to not rely on volatile stores in a large function, just use separate functions like any other test would.
|
 | llvm/test/CodeGen/AArch64/floatdp_1source.ll |
Commit
144cd22baef2d068f077e514de1b4f0d8b0973cf
by andrew.litteken[CodeExtractor] Creating exit stubs based off original order branch instructions.
Previously the CodeExtractor created exit stubs, and the subsequent return value of the outlined function based on the order of out-of-region blocks after splitting any phi nodes, and collecting the blocks to be outlined. This could cause differences in order if there was a difference of exit block phi nodes between the two regions. This patch moves the collection of the output target blocks to be before this occurs, so that the assignment of target block to output value will be the same, regardless of the contents of the output block.
Reviewers: paquette, roelofs
Differential Revision: https://reviews.llvm.org/D108657
|
 | llvm/include/llvm/Transforms/Utils/CodeExtractor.h |
 | llvm/unittests/Transforms/Utils/CodeExtractorTest.cpp |
 | llvm/lib/Transforms/Utils/CodeExtractor.cpp |
Commit
4b5e260b1d5b463a3488372bd7df183ae60ef883
by listmail[SCEV] Simplify findExistingSCEVInCache interface [NFC]
We were returning a tuple when all but one caller only cared about one piece of the return value. That one caller can inline the complexity, and we can simplify all other uses.
|
 | llvm/lib/Analysis/ScalarEvolution.cpp |
 | llvm/include/llvm/Analysis/ScalarEvolution.h |