[clang] [llvm] [IR] Convert from nocapture to captures(none) (PR #123181)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 16 02:40:24 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-hexagon

@llvm/pr-subscribers-backend-aarch64

Author: Nikita Popov (nikic)

<details>
<summary>Changes</summary>

This PR removes the old `nocapture` attribute, replacing it with the new `captures` attribute introduced in https://github.com/llvm/llvm-project/pull/116990. This change is intended to be essentially NFC, replacing existing uses of `nocapture` with `captures(none)` without adding any new analysis capabilities. Making use of non-`none` values is left for a followup.

Some notes:
 * `nocapture` will be upgraded to `captures(none)` by the bitcode reader.
 * `nocapture` will also be upgraded by the textual IR reader. This is to make it easier to use old IR files and somewhat reduce the test churn in this PR.
 * Helper APIs like `doesNotCapture()` will check for `captures(none)`.
 * MLIR import will convert `captures(none)` into an `llvm.nocapture` attribute. The representation in the LLVM IR dialect should be updated separately.

---

Patch is 1.86 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/123181.diff


374 Files Affected:

- (modified) clang/lib/CodeGen/CGCall.cpp (+1-1) 
- (modified) clang/lib/CodeGen/CGObjCGNU.cpp (+3-1) 
- (modified) clang/test/CodeGen/AArch64/pure-scalable-args.c (+5-5) 
- (modified) clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c (+1-1) 
- (modified) clang/test/CodeGen/PowerPC/aix-vaargs.c (+2-2) 
- (modified) clang/test/CodeGen/SystemZ/systemz-inline-asm.c (+1-1) 
- (modified) clang/test/CodeGen/X86/ms-x86-intrinsics.c (+2-2) 
- (modified) clang/test/CodeGen/arm-cmse-attr.c (+2-2) 
- (modified) clang/test/CodeGen/arm-vfp16-arguments.c (+1-1) 
- (modified) clang/test/CodeGen/arm-vfp16-arguments2.cpp (+5-5) 
- (modified) clang/test/CodeGen/attr-counted-by-pr110385.c (+18-9) 
- (modified) clang/test/CodeGen/attr-counted-by.c (+138-138) 
- (modified) clang/test/CodeGen/isfpclass.c (+1-1) 
- (modified) clang/test/CodeGen/math-libcalls-tbaa-indirect-args.c (+9-9) 
- (modified) clang/test/CodeGen/math-libcalls-tbaa.c (+7-7) 
- (modified) clang/test/CodeGen/mips-vector-return.c (+3-3) 
- (modified) clang/test/CodeGen/mips64-nontrivial-return.cpp (+1-1) 
- (modified) clang/test/CodeGen/ms-intrinsics-other.c (+38-38) 
- (modified) clang/test/CodeGen/ms-intrinsics.c (+153-153) 
- (modified) clang/test/CodeGen/nofpclass.c (+2-2) 
- (modified) clang/test/CodeGen/sanitize-metadata-nosanitize.c (+21-4) 
- (modified) clang/test/CodeGen/struct-copy.c (+1-1) 
- (modified) clang/test/CodeGen/tbaa-struct-bitfield-endianness.cpp (+1-1) 
- (modified) clang/test/CodeGen/transparent-union-type.c (+3-3) 
- (modified) clang/test/CodeGen/union-tbaa1.c (+1-1) 
- (modified) clang/test/CodeGenCUDA/amdgpu-kernel-arg-pointer-type.cu (+11-11) 
- (modified) clang/test/CodeGenCXX/bitfield-ir.cpp (+6-6) 
- (modified) clang/test/CodeGenCXX/inline-then-fold-variadics.cpp (+16-16) 
- (modified) clang/test/CodeGenCXX/noescape.cpp (+15-15) 
- (modified) clang/test/CodeGenCXX/wasm-args-returns.cpp (+1-1) 
- (modified) clang/test/CodeGenHLSL/inline-functions.hlsl (+1-1) 
- (modified) clang/test/CodeGenObjC/noescape.m (+13-13) 
- (modified) clang/test/CodeGenOpenCL/amdgpu-abi-struct-coerce.cl (+12-12) 
- (modified) clang/test/CodeGenOpenCL/amdgpu-call-kernel.cl (+1-1) 
- (modified) clang/test/CodeGenOpenCL/atomic-builtins-default-to-device-scope.cl (+34-34) 
- (modified) clang/test/CodeGenOpenCL/builtins-amdgcn-gfx950-read-tr.cl (+7-6) 
- (modified) clang/test/CodeGenOpenCL/kernel-param-alignment.cl (+6-6) 
- (modified) clang/test/CodeGenOpenCL/kernels-have-spir-cc-by-default.cl (+7-7) 
- (modified) clang/test/CodeGenOpenCL/preserve_vec3.cl (+9-9) 
- (modified) clang/test/CodeGenOpenCLCXX/array-type-infinite-loop.clcpp (+1-1) 
- (modified) clang/test/OpenMP/barrier_codegen.cpp (+1-1) 
- (modified) clang/test/OpenMP/bug54082.c (+8-8) 
- (modified) llvm/docs/LangRef.rst (+8-26) 
- (modified) llvm/docs/ReleaseNotes.md (+2) 
- (modified) llvm/include/llvm/AsmParser/LLToken.h (+2-1) 
- (modified) llvm/include/llvm/Frontend/OpenMP/OMPKinds.def (+8-7) 
- (modified) llvm/include/llvm/IR/Attributes.h (+1) 
- (modified) llvm/include/llvm/IR/Attributes.td (-3) 
- (modified) llvm/include/llvm/IR/InstrTypes.h (+5-7) 
- (modified) llvm/include/llvm/Support/ModRef.h (+17) 
- (modified) llvm/include/llvm/Transforms/IPO/Attributor.h (+7-3) 
- (modified) llvm/lib/AsmParser/LLLexer.cpp (+1) 
- (modified) llvm/lib/AsmParser/LLParser.cpp (+6) 
- (modified) llvm/lib/Bitcode/Reader/BitcodeReader.cpp (+12-3) 
- (modified) llvm/lib/Bitcode/Writer/BitcodeWriter.cpp (-2) 
- (modified) llvm/lib/IR/Attributes.cpp (+4-1) 
- (modified) llvm/lib/IR/Function.cpp (+1-1) 
- (modified) llvm/lib/IR/Instructions.cpp (+19) 
- (modified) llvm/lib/Target/DirectX/DXILPrepare.cpp (-1) 
- (modified) llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp (-2) 
- (modified) llvm/lib/Transforms/Coroutines/CoroFrame.cpp (+2-2) 
- (modified) llvm/lib/Transforms/Coroutines/SpillUtils.cpp (+2-2) 
- (modified) llvm/lib/Transforms/IPO/Attributor.cpp (+9-8) 
- (modified) llvm/lib/Transforms/IPO/AttributorAttributes.cpp (+34-25) 
- (modified) llvm/lib/Transforms/IPO/FunctionAttrs.cpp (+8-4) 
- (modified) llvm/lib/Transforms/Utils/BuildLibCalls.cpp (+3-2) 
- (modified) llvm/lib/Transforms/Utils/CodeExtractor.cpp (-1) 
- (modified) llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp (+4-2) 
- (modified) llvm/test/Analysis/StackSafetyAnalysis/lifetime.ll (+4-4) 
- (modified) llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll (+7-7) 
- (modified) llvm/test/Assembler/amdgcn-intrinsic-attributes.ll (+2-2) 
- (modified) llvm/test/Assembler/auto_upgrade_intrinsics.ll (+2-2) 
- (modified) llvm/test/Assembler/masked-load-store-intrinsics-attributes.ll (+6-5) 
- (modified) llvm/test/Bitcode/attributes-3.3.ll (+1-1) 
- (modified) llvm/test/Bitcode/attributes.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-3.6.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-3.7.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-3.8.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-3.9.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-4.0.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-5.0.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility-6.0.ll (+1-1) 
- (modified) llvm/test/Bitcode/compatibility.ll (+1-1) 
- (modified) llvm/test/Bitcode/function-address-space-fwd-decl.ll (+2-2) 
- (modified) llvm/test/Bitcode/highLevelStructure.3.2.ll (+6-6) 
- (modified) llvm/test/Bitcode/upgrade-memory-intrinsics.ll (+3-3) 
- (modified) llvm/test/CodeGen/AArch64/sve2-vscale-sinking.ll (+2-2) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-libcall-sincos-pass-ordering.ll (+2-2) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.defined.ll (+4-4) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.defined.nobuiltin.ll (+1-1) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.defined.sin.cos.ll (+3-3) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.ll (+53-53) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.nobuiltins.ll (+8-8) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-sincos.weak.ll (+2-2) 
- (modified) llvm/test/CodeGen/AMDGPU/attributor-flatscratchinit.ll (+2-2) 
- (modified) llvm/test/CodeGen/AMDGPU/fract-match.ll (+32-32) 
- (modified) llvm/test/CodeGen/AMDGPU/inline-attr.ll (+1-1) 
- (modified) llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-memcpy.ll (+1-1) 
- (modified) llvm/test/CodeGen/AMDGPU/nested-loop-conditions.ll (+4-4) 
- (modified) llvm/test/CodeGen/AMDGPU/perfhint.ll (+18-18) 
- (modified) llvm/test/CodeGen/AMDGPU/promote-alloca-globals.ll (+2-2) 
- (modified) llvm/test/CodeGen/AMDGPU/rewrite-out-arguments.ll (+44-44) 
- (modified) llvm/test/CodeGen/AMDGPU/vni8-live-reg-opt.ll (+8-8) 
- (modified) llvm/test/CodeGen/BPF/loop-exit-cond.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/load-inline.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/load-simple.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/load-unroll-inline.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/load-unroll.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-align.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-atomic.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-chain-oob.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-chain-u8-oob.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-chain-u8.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-chain.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-simple.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-unroll-inline.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-volatile.ll (+1-1) 
- (modified) llvm/test/CodeGen/BPF/preserve-static-offset/store-zero.ll (+1-1) 
- (modified) llvm/test/CodeGen/Hexagon/autohvx/vector-align-bad-move2.ll (+1-1) 
- (modified) llvm/test/CodeGen/Hexagon/autohvx/vector-align-overapping-stores.ll (+1-1) 
- (modified) llvm/test/CodeGen/NVPTX/lower-args-gridconstant.ll (+1-13) 
- (modified) llvm/test/CodeGen/NVPTX/lower-byval-args.ll (+39-39) 
- (modified) llvm/test/CodeGen/X86/codegen-prepare-addrmode-sext.ll (+1-1) 
- (modified) llvm/test/CodeGen/X86/no-plt-libcalls.ll (+1-1) 
- (modified) llvm/test/Feature/OperandBundles/function-attrs.ll (+1-1) 
- (modified) llvm/test/Instrumentation/HWAddressSanitizer/mem-attr.ll (+4-4) 
- (modified) llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll (+60-60) 
- (modified) llvm/test/Instrumentation/SanitizerCoverage/gep-tracing.ll (+4-4) 
- (modified) llvm/test/LTO/X86/mix-opaque-typed.ll (+1-1) 
- (modified) llvm/test/Other/cgscc-devirt-iteration.ll (+1-1) 
- (modified) llvm/test/Other/optimize-inrange-gep.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/funcattrs-prop-unknown.ll (+2-2) 
- (modified) llvm/test/Transforms/AlignmentFromAssumptions/alignment-from-assumptions-track-users.ll (+7-7) 
- (modified) llvm/test/Transforms/AlignmentFromAssumptions/simple.ll (+15-15) 
- (modified) llvm/test/Transforms/AlignmentFromAssumptions/simple32.ll (+11-11) 
- (modified) llvm/test/Transforms/ArgumentPromotion/BPF/argpromotion.ll (+1-1) 
- (modified) llvm/test/Transforms/ArgumentPromotion/actual-arguments.ll (+3-3) 
- (modified) llvm/test/Transforms/ArgumentPromotion/aliasing-and-non-aliasing-loads-with-clobber.ll (+2-2) 
- (modified) llvm/test/Transforms/ArgumentPromotion/variadic.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/X86/attributes.ll (+14-14) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/X86/min-legal-vector-width.ll (+56-56) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/X86/thiscall.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/alignment.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/array.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/attrs.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/basictest.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/byval-2.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/control-flow.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/inalloca.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll (+8-8) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/musttail.ll (+19-19) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/pr32917.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/sret.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/tail.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/ArgumentPromotion/variadic.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/IPConstantProp/PR26044.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/IPConstantProp/dangling-block-address.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/IPConstantProp/openmp_parallel_for.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/IPConstantProp/pthreads.ll (+6-6) 
- (modified) llvm/test/Transforms/Attributor/IPConstantProp/thread_local_acs.ll (+3-3) 
- (modified) llvm/test/Transforms/Attributor/address_space_info.ll (+15-15) 
- (modified) llvm/test/Transforms/Attributor/align.ll (+52-52) 
- (modified) llvm/test/Transforms/Attributor/allocator.ll (+7-7) 
- (modified) llvm/test/Transforms/Attributor/call-simplify-pointer-info.ll (+21-21) 
- (modified) llvm/test/Transforms/Attributor/callbacks.ll (+30-30) 
- (modified) llvm/test/Transforms/Attributor/callgraph.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/convergent.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/dereferenceable-1.ll (+17-17) 
- (modified) llvm/test/Transforms/Attributor/dereferenceable-2-inseltpoison.ll (+27-27) 
- (modified) llvm/test/Transforms/Attributor/dereferenceable-2.ll (+27-27) 
- (modified) llvm/test/Transforms/Attributor/heap_to_stack.ll (+50-50) 
- (modified) llvm/test/Transforms/Attributor/heap_to_stack_gpu.ll (+63-63) 
- (modified) llvm/test/Transforms/Attributor/internal-noalias.ll (+22-22) 
- (modified) llvm/test/Transforms/Attributor/issue87856.ll (+3-3) 
- (modified) llvm/test/Transforms/Attributor/liveness.ll (+16-16) 
- (modified) llvm/test/Transforms/Attributor/memory_locations.ll (+34-34) 
- (modified) llvm/test/Transforms/Attributor/misc.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/misc_crash.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/noalias.ll (+53-53) 
- (modified) llvm/test/Transforms/Attributor/nocapture-1.ll (+53-53) 
- (modified) llvm/test/Transforms/Attributor/nocapture-2.ll (+20-20) 
- (modified) llvm/test/Transforms/Attributor/nofpclass.ll (+7-7) 
- (modified) llvm/test/Transforms/Attributor/nofree.ll (+21-21) 
- (modified) llvm/test/Transforms/Attributor/nonnull.ll (+45-45) 
- (modified) llvm/test/Transforms/Attributor/norecurse.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/nosync.ll (+13-13) 
- (modified) llvm/test/Transforms/Attributor/noundef.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/openmp_parallel.ll (+22-22) 
- (modified) llvm/test/Transforms/Attributor/phi_bug_pointer_info.ll (+13-1) 
- (modified) llvm/test/Transforms/Attributor/pointer-info.ll (+5-5) 
- (modified) llvm/test/Transforms/Attributor/range.ll (+21-21) 
- (modified) llvm/test/Transforms/Attributor/read_write_returned_arguments_scc.ll (+15-15) 
- (modified) llvm/test/Transforms/Attributor/readattrs.ll (+21-21) 
- (modified) llvm/test/Transforms/Attributor/recursive_globals.ll (+3-3) 
- (modified) llvm/test/Transforms/Attributor/reduced/aapointer_info_map_invalidation.ll (+2-2) 
- (modified) llvm/test/Transforms/Attributor/reduced/clear_cached_analysis_for_deleted_functions.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/reduced/missed_cached_entry_for_intra_reachability.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/reduced/openmp_opt_constant_type_crash.ll (+1-1) 
- (modified) llvm/test/Transforms/Attributor/returned.ll (+32-32) 
- (modified) llvm/test/Transforms/Attributor/undefined_behavior.ll (+16-16) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-assume.ll (+27-27) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-dominance.ll (+4-4) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-gpu.ll (+12-12) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-instances.ll (+6-6) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-local-remote.ll (+32-32) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-pointer-info.ll (+86-86) 
- (modified) llvm/test/Transforms/Attributor/value-simplify-reachability.ll (+8-8) 
- (modified) llvm/test/Transforms/Attributor/value-simplify.ll (+20-20) 
- (modified) llvm/test/Transforms/Attributor/willreturn.ll (+5-5) 
- (modified) llvm/test/Transforms/CodeGenPrepare/AArch64/reduce-or-opt.ll (+4-4) 
- (modified) llvm/test/Transforms/Coroutines/coro-async.ll (+3-3) 
- (modified) llvm/test/Transforms/Coroutines/coro-noalias-param.ll (+1-1) 
- (modified) llvm/test/Transforms/DeadStoreElimination/trivial-dse-calls.ll (+10-10) 
- (modified) llvm/test/Transforms/ExpandMemCmp/AArch64/memcmp.ll (+32-32) 
- (modified) llvm/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll (+1-1) 
- (modified) llvm/test/Transforms/FunctionAttrs/arg_returned.ll (+2-2) 
- (modified) llvm/test/Transforms/FunctionAttrs/argmemonly.ll (+51-51) 
- (modified) llvm/test/Transforms/FunctionAttrs/convergent.ll (+2-2) 
- (modified) llvm/test/Transforms/FunctionAttrs/initializes.ll (+27-27) 
- (modified) llvm/test/Transforms/FunctionAttrs/make-buffer-rsrc.ll (+4-4) 
- (modified) llvm/test/Transforms/FunctionAttrs/nocapture.ll (+52-52) 
- (modified) llvm/test/Transforms/FunctionAttrs/nofree-attributor.ll (+4-4) 
- (modified) llvm/test/Transforms/FunctionAttrs/nonnull.ll (+12-12) 
- (modified) llvm/test/Transforms/FunctionAttrs/norecurse.ll (+6-6) 
- (modified) llvm/test/Transforms/FunctionAttrs/optnone.ll (+1-1) 
- (modified) llvm/test/Transforms/FunctionAttrs/out-of-bounds-iterator-bug.ll (+4-4) 
- (modified) llvm/test/Transforms/FunctionAttrs/readattrs.ll (+84-84) 
- (modified) llvm/test/Transforms/FunctionAttrs/readnone.ll (+6-6) 
- (modified) llvm/test/Transforms/FunctionAttrs/willreturn.ll (+1-1) 
- (modified) llvm/test/Transforms/FunctionAttrs/writeonly.ll (+46-46) 
- (modified) llvm/test/Transforms/FunctionSpecialization/function-specialization2.ll (+7-7) 
- (modified) llvm/test/Transforms/GVN/PRE/invariant-load.ll (+8-8) 
- (modified) llvm/test/Transforms/GVNHoist/infinite-loop-indirect.ll (+12-12) 
- (modified) llvm/test/Transforms/IRCE/variable-loop-bounds.ll (+21-21) 
- (modified) llvm/test/Transforms/IndVarSimplify/ada-loops.ll (+4-4) 
- (modified) llvm/test/Transforms/IndVarSimplify/lftr.ll (+1-1) 
- (modified) llvm/test/Transforms/IndVarSimplify/preserve-nsw-during-expansion.ll (+1-1) 
- (modified) llvm/test/Transforms/InferAddressSpaces/AMDGPU/store-pointer-to-self.ll (+1-1) 
- (modified) llvm/test/Transforms/InferAddressSpaces/NVPTX/bug31948.ll (+1-1) 
- (modified) llvm/test/Transforms/InferFunctionAttrs/annotate.ll (+161-161) 
- (modified) llvm/test/Transforms/Inline/align.ll (+5-5) 
- (modified) llvm/test/Transforms/Inline/byref-align.ll (+2-2) 
- (modified) llvm/test/Transforms/Inline/byval-align.ll (+2-2) 
- (modified) llvm/test/Transforms/Inline/byval.ll (+1-1) 
- (modified) llvm/test/Transforms/Inline/noalias-calls.ll (+4-4) 
- (modified) llvm/test/Transforms/Inline/noalias.ll (+2-2) 
- (modified) llvm/test/Transforms/Inline/noalias2.ll (+13-13) 
- (modified) llvm/test/Transforms/InstCombine/AMDGPU/llvm.amdgcn.wavefrontsize.ll (+9-9) 
- (modified) llvm/test/Transforms/InstCombine/NVPTX/isspacep.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/RISCV/libcall-arg-exts.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/RISCV/memcmp.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/SystemZ/libcall-arg-exts.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/call-cast-attrs.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/compare-alloca.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/compare-unescaped.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/memcpy-from-global.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/memset2.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/simplify-libcalls-inreg.ll (+5-5) 
- (modified) llvm/test/Transforms/InstCombine/str-int-2.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/str-int.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/strcall-no-nul.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/strto-1.ll (+14-14) 
- (modified) llvm/test/Transforms/InstCombine/trivial-dse-calls.ll (+7-7) 
- (modified) llvm/test/Transforms/InstCombine/unused-nonnull.ll (+2-2) 
- (modified) llvm/test/Transforms/LICM/hoist-mustexec.ll (+10-10) 
- (modified) llvm/test/Transforms/LICM/strlen.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopDataPrefetch/RISCV/basic.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopIdiom/AArch64/ctlz.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopInterchange/interchange-no-deps.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopPredication/scale.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopStrengthReduce/ARM/illegal-addr-modes.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopStrengthReduce/addrec-gep-address-space.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopStrengthReduce/addrec-gep.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopStrengthReduce/shl.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopUnroll/unroll-cleanup.ll (+1-1) 


``````````diff
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index e0cf6ca69f0df2..64fd58542aea27 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -2881,7 +2881,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name,
     }
 
     if (FI.getExtParameterInfo(ArgNo).isNoEscape())
-      Attrs.addAttribute(llvm::Attribute::NoCapture);
+      Attrs.addCapturesAttr(llvm::CaptureInfo::none());
 
     if (Attrs.hasAttributes()) {
       unsigned FirstIRArg, NumIRArgs;
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp
index cfc92be393940d..ebd88bb38849e1 100644
--- a/clang/lib/CodeGen/CGObjCGNU.cpp
+++ b/clang/lib/CodeGen/CGObjCGNU.cpp
@@ -773,7 +773,9 @@ class CGObjCGNUstep : public CGObjCGNU {
 
       // The lookup function is guaranteed not to capture the receiver pointer.
       if (auto *LookupFn2 = dyn_cast<llvm::Function>(LookupFn.getCallee()))
-        LookupFn2->addParamAttr(0, llvm::Attribute::NoCapture);
+        LookupFn2->addParamAttr(
+            0, llvm::Attribute::getWithCaptureInfo(CGF.getLLVMContext(),
+                                                   llvm::CaptureInfo::none()));
 
       llvm::Value *args[] = {
           EnforceType(Builder, ReceiverPtr.getPointer(), PtrToIdTy),
diff --git a/clang/test/CodeGen/AArch64/pure-scalable-args.c b/clang/test/CodeGen/AArch64/pure-scalable-args.c
index b03011e70b6a6f..fecd370d09be3b 100644
--- a/clang/test/CodeGen/AArch64/pure-scalable-args.c
+++ b/clang/test/CodeGen/AArch64/pure-scalable-args.c
@@ -67,7 +67,7 @@ void test_argpass_simple(PST *p) {
     void argpass_simple_callee(PST);
     argpass_simple_callee(*p);
 }
-// CHECK-AAPCS:      define dso_local void @test_argpass_simple(ptr nocapture noundef readonly %p)
+// CHECK-AAPCS:      define dso_local void @test_argpass_simple(ptr noundef readonly captures(none) %p)
 // CHECK-AAPCS-NEXT: entry:
 // CHECK-AAPCS-NEXT: %0 = load <2 x i8>, ptr %p, align 16
 // CHECK-AAPCS-NEXT: %cast.scalable = tail call <vscale x 2 x i8> @llvm.vector.insert.nxv2i8.v2i8(<vscale x 2 x i8> poison, <2 x i8> %0, i64 0)
@@ -292,7 +292,7 @@ PST test_return(PST *p) {
     return *p;
 }
 // CHECK-AAPCS:  define dso_local <{ <vscale x 16 x i1>, <vscale x 2 x double>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 16 x i8>, <vscale x 16 x i1> }> @test_return(ptr
-// CHECK-DARWIN: define void @test_return(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.PST) align 16 initializes((0, 96)) %agg.result, ptr nocapture noundef readonly %p)
+// CHECK-DARWIN: define void @test_return(ptr dead_on_unwind noalias writable writeonly sret(%struct.PST) align 16 captures(none) initializes((0, 96)) %agg.result, ptr noundef readonly captures(none) %p)
 
 // Corner case of 1-element aggregate
 //   p->x -> q0
@@ -300,7 +300,7 @@ SmallPST test_return_small_pst(SmallPST *p) {
     return *p;
 }
 // CHECK-AAPCS:  define dso_local <vscale x 4 x float> @test_return_small_pst(ptr
-// CHECK-DARWIN: define i128 @test_return_small_pst(ptr nocapture noundef readonly %p)
+// CHECK-DARWIN: define i128 @test_return_small_pst(ptr noundef readonly captures(none) %p)
 
 
 // Big PST, returned indirectly
@@ -308,8 +308,8 @@ SmallPST test_return_small_pst(SmallPST *p) {
 BigPST test_return_big_pst(BigPST *p) {
     return *p;
 }
-// CHECK-AAPCS:  define dso_local void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 initializes((0, 176)) %agg.result, ptr nocapture noundef readonly %p)
-// CHECK-DARWIN: define void @test_return_big_pst(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.BigPST) align 16 initializes((0, 176)) %agg.result, ptr nocapture noundef readonly %p)
+// CHECK-AAPCS:  define dso_local void @test_return_big_pst(ptr dead_on_unwind noalias writable writeonly sret(%struct.BigPST) align 16 captures(none) initializes((0, 176)) %agg.result, ptr noundef readonly captures(none) %p)
+// CHECK-DARWIN: define void @test_return_big_pst(ptr dead_on_unwind noalias writable writeonly sret(%struct.BigPST) align 16 captures(none) initializes((0, 176)) %agg.result, ptr noundef readonly captures(none) %p)
 
 // Variadic arguments are unnamed, PST passed indirectly.
 // (Passing SVE types to a variadic function currently unsupported by
diff --git a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c
index 28d69d52c9ae73..bbed683ac1fd7e 100644
--- a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c
+++ b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c
@@ -59,7 +59,7 @@ typedef int8_t vec_int8 __attribute__((vector_size(N / 8)));
 // CHECK128-NEXT:    ret <16 x i8> [[CASTFIXEDSVE]]
 
 // CHECK-LABEL: define{{.*}} void @f2(
-// CHECK-SAME:   ptr dead_on_unwind noalias nocapture writable writeonly sret(<[[#div(VBITS,8)]] x i8>) align 16 initializes((0, [[#div(VBITS,8)]])) %agg.result, ptr nocapture noundef readonly %0)
+// CHECK-SAME:   ptr dead_on_unwind noalias writable writeonly sret(<[[#div(VBITS,8)]] x i8>) align 16 captures(none) initializes((0, [[#div(VBITS,8)]])) %agg.result, ptr noundef readonly captures(none) %0)
 // CHECK-NEXT: entry:
 // CHECK-NEXT:   [[X:%.*]] = load <[[#div(VBITS,8)]] x i8>, ptr [[TMP0:%.*]], align 16, [[TBAA6:!tbaa !.*]]
 // CHECK-NEXT:   [[TMP1:%.*]] = tail call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
diff --git a/clang/test/CodeGen/PowerPC/aix-vaargs.c b/clang/test/CodeGen/PowerPC/aix-vaargs.c
index 724ba6560cdb97..8716a9e4698c48 100644
--- a/clang/test/CodeGen/PowerPC/aix-vaargs.c
+++ b/clang/test/CodeGen/PowerPC/aix-vaargs.c
@@ -68,8 +68,8 @@ void testva (int n, ...) {
 
 // CHECK: declare void @llvm.va_start.p0(ptr)
 
-// AIX32: declare void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i32, i1 immarg)
-// AIX64: declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)
+// AIX32: declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg)
+// AIX64: declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg)
 
 // CHECK: declare void @llvm.va_copy.p0(ptr, ptr)
 // CHECK: declare void @llvm.va_end.p0(ptr)
diff --git a/clang/test/CodeGen/SystemZ/systemz-inline-asm.c b/clang/test/CodeGen/SystemZ/systemz-inline-asm.c
index 2a9d6a5f874548..9e62b8e1079001 100644
--- a/clang/test/CodeGen/SystemZ/systemz-inline-asm.c
+++ b/clang/test/CodeGen/SystemZ/systemz-inline-asm.c
@@ -123,7 +123,7 @@ double test_f64(double f, double g) {
 long double test_f128(long double f, long double g) {
   asm("axbr %0, %2" : "=f" (f) : "0" (f), "f" (g));
   return f;
-// CHECK: define{{.*}} void @test_f128(ptr dead_on_unwind noalias nocapture writable writeonly sret(fp128) align 8 initializes((0, 16)) [[DEST:%.*]], ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1)
+// CHECK: define{{.*}} void @test_f128(ptr dead_on_unwind noalias writable writeonly sret(fp128) align 8 captures(none) initializes((0, 16)) [[DEST:%.*]], ptr noundef readonly captures(none) %0, ptr noundef readonly captures(none) %1)
 // CHECK: %f = load fp128, ptr %0
 // CHECK: %g = load fp128, ptr %1
 // CHECK: [[RESULT:%.*]] = tail call fp128 asm "axbr $0, $2", "=f,0,f"(fp128 %f, fp128 %g)
diff --git a/clang/test/CodeGen/X86/ms-x86-intrinsics.c b/clang/test/CodeGen/X86/ms-x86-intrinsics.c
index 94a1b372974b38..34cf690e6d5da1 100644
--- a/clang/test/CodeGen/X86/ms-x86-intrinsics.c
+++ b/clang/test/CodeGen/X86/ms-x86-intrinsics.c
@@ -171,7 +171,7 @@ __int64 test_mul128(__int64 Multiplier,
                     __int64 *HighProduct) {
   return _mul128(Multiplier, Multiplicand, HighProduct);
 }
-// CHECK-X64-LABEL: define dso_local i64 @test_mul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}} initializes((0, 8)) %HighProduct)
+// CHECK-X64-LABEL: define dso_local i64 @test_mul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{.*}} initializes((0, 8)) %HighProduct)
 // CHECK-X64: = sext i64 %Multiplier to i128
 // CHECK-X64: = sext i64 %Multiplicand to i128
 // CHECK-X64: = mul nsw i128 %
@@ -183,7 +183,7 @@ unsigned __int64 test_umul128(unsigned __int64 Multiplier,
                               unsigned __int64 *HighProduct) {
   return _umul128(Multiplier, Multiplicand, HighProduct);
 }
-// CHECK-X64-LABEL: define dso_local i64 @test_umul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{[a-z_ ]*}} initializes((0, 8)) %HighProduct)
+// CHECK-X64-LABEL: define dso_local i64 @test_umul128(i64 noundef %Multiplier, i64 noundef %Multiplicand, ptr{{.*}} initializes((0, 8)) %HighProduct)
 // CHECK-X64: = zext i64 %Multiplier to i128
 // CHECK-X64: = zext i64 %Multiplicand to i128
 // CHECK-X64: = mul nuw i128 %
diff --git a/clang/test/CodeGen/arm-cmse-attr.c b/clang/test/CodeGen/arm-cmse-attr.c
index 6322a82dfa4627..b01124a03df7b6 100644
--- a/clang/test/CodeGen/arm-cmse-attr.c
+++ b/clang/test/CodeGen/arm-cmse-attr.c
@@ -29,9 +29,9 @@ void f4(void) __attribute__((cmse_nonsecure_entry))
 {
 }
 
-// CHECK: define{{.*}} void @f1(ptr nocapture noundef readonly %fptr) {{[^#]*}}#0 {
+// CHECK: define{{.*}} void @f1(ptr noundef readonly captures(none) %fptr) {{[^#]*}}#0 {
 // CHECK: call void %fptr() #2
-// CHECK: define{{.*}} void @f2(ptr nocapture noundef readonly %fptr) {{[^#]*}}#0 {
+// CHECK: define{{.*}} void @f2(ptr noundef readonly captures(none) %fptr) {{[^#]*}}#0 {
 // CHECK: call void %fptr() #2
 // CHECK: define{{.*}} void @f3() {{[^#]*}}#1 {
 // CHECK: define{{.*}} void @f4() {{[^#]*}}#1 {
diff --git a/clang/test/CodeGen/arm-vfp16-arguments.c b/clang/test/CodeGen/arm-vfp16-arguments.c
index 3c6691df4747ab..c0bbb3df72bf3f 100644
--- a/clang/test/CodeGen/arm-vfp16-arguments.c
+++ b/clang/test/CodeGen/arm-vfp16-arguments.c
@@ -71,6 +71,6 @@ void test_hfa(hfa_t a) {}
 
 hfa_t ghfa;
 hfa_t test_ret_hfa(void) { return ghfa; }
-// CHECK-SOFT: define{{.*}} void @test_ret_hfa(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.hfa_t) align 8 initializes((0, 16)) %agg.result)
+// CHECK-SOFT: define{{.*}} void @test_ret_hfa(ptr dead_on_unwind noalias writable writeonly sret(%struct.hfa_t) align 8 captures(none) initializes((0, 16)) %agg.result)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @test_ret_hfa()
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.hfa_t @test_ret_hfa()
diff --git a/clang/test/CodeGen/arm-vfp16-arguments2.cpp b/clang/test/CodeGen/arm-vfp16-arguments2.cpp
index b810cfd0a6648f..6e9a24e70c141e 100644
--- a/clang/test/CodeGen/arm-vfp16-arguments2.cpp
+++ b/clang/test/CodeGen/arm-vfp16-arguments2.cpp
@@ -37,27 +37,27 @@ struct S5 : B1 {
   B1 M[1];
 };
 
-// CHECK-SOFT: define{{.*}} void @_Z2f12S1(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S1) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s1.coerce)
+// CHECK-SOFT: define{{.*}} void @_Z2f12S1(ptr dead_on_unwind noalias writable writeonly sret(%struct.S1) align 8 captures(none) initializes((0, 16)) %agg.result, [2 x i64] %s1.coerce)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f12S1([2 x <2 x i32>] returned %s1.coerce)
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S1 @_Z2f12S1(%struct.S1 returned %s1.coerce)
 struct S1 f1(struct S1 s1) { return s1; }
 
-// CHECK-SOFT: define{{.*}} void @_Z2f22S2(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S2) align 8 initializes((0, 16)) %agg.result, [4 x i32] %s2.coerce)
+// CHECK-SOFT: define{{.*}} void @_Z2f22S2(ptr dead_on_unwind noalias writable writeonly sret(%struct.S2) align 8 captures(none) initializes((0, 16)) %agg.result, [4 x i32] %s2.coerce)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f22S2([2 x <2 x i32>] returned %s2.coerce)
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S2 @_Z2f22S2(%struct.S2 %s2.coerce)
 struct S2 f2(struct S2 s2) { return s2; }
 
-// CHECK-SOFT: define{{.*}} void @_Z2f32S3(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S3) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s3.coerce)
+// CHECK-SOFT: define{{.*}} void @_Z2f32S3(ptr dead_on_unwind noalias writable writeonly sret(%struct.S3) align 8 captures(none) initializes((0, 16)) %agg.result, [2 x i64] %s3.coerce)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f32S3([2 x <2 x i32>] returned %s3.coerce)
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S3 @_Z2f32S3(%struct.S3 %s3.coerce)
 struct S3 f3(struct S3 s3) { return s3; }
 
-// CHECK-SOFT: define{{.*}} void @_Z2f42S4(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S4) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s4.coerce)
+// CHECK-SOFT: define{{.*}} void @_Z2f42S4(ptr dead_on_unwind noalias writable writeonly sret(%struct.S4) align 8 captures(none) initializes((0, 16)) %agg.result, [2 x i64] %s4.coerce)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc [2 x <2 x i32>] @_Z2f42S4([2 x <2 x i32>] returned %s4.coerce)
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S4 @_Z2f42S4(%struct.S4 %s4.coerce)
 struct S4 f4(struct S4 s4) { return s4; }
 
-// CHECK-SOFT: define{{.*}} void @_Z2f52S5(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.S5) align 8 initializes((0, 16)) %agg.result, [2 x i64] %s5.coerce)
+// CHECK-SOFT: define{{.*}} void @_Z2f52S5(ptr dead_on_unwind noalias writable writeonly sret(%struct.S5) align 8 captures(none) initializes((0, 16)) %agg.result, [2 x i64] %s5.coerce)
 // CHECK-HARD: define{{.*}} arm_aapcs_vfpcc %struct.S5 @_Z2f52S5(%struct.S5 %s5.coerce)
 // CHECK-FULL: define{{.*}} arm_aapcs_vfpcc %struct.S5 @_Z2f52S5(%struct.S5 %s5.coerce)
 struct S5 f5(struct S5 s5) { return s5; }
diff --git a/clang/test/CodeGen/attr-counted-by-pr110385.c b/clang/test/CodeGen/attr-counted-by-pr110385.c
index c2ff032334fe27..412c12cb687c42 100644
--- a/clang/test/CodeGen/attr-counted-by-pr110385.c
+++ b/clang/test/CodeGen/attr-counted-by-pr110385.c
@@ -26,16 +26,16 @@ struct bucket2 {
 void init(void * __attribute__((pass_dynamic_object_size(0))));
 
 // CHECK-LABEL: define dso_local void @test1(
-// CHECK-SAME: ptr nocapture noundef readonly [[FOO:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// CHECK-SAME: ptr noundef readonly captures(none) [[FOO:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-NEXT:  entry:
 // CHECK-NEXT:    [[GROWABLE:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 8
 // CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[GROWABLE]], align 8, !tbaa [[TBAA2:![0-9]+]]
 // CHECK-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 12
-// CHECK-NEXT:    [[DOT_COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 8
-// CHECK-NEXT:    [[DOT_COUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOT_COUNTED_BY_GEP]], align 4
-// CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[DOT_COUNTED_BY_LOAD]] to i64
+// CHECK-NEXT:    [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 8
+// CHECK-NEXT:    [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
+// CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[COUNTED_BY_LOAD]] to i64
 // CHECK-NEXT:    [[TMP2:%.*]] = shl nsw i64 [[TMP1]], 1
-// CHECK-NEXT:    [[TMP3:%.*]] = icmp sgt i32 [[DOT_COUNTED_BY_LOAD]], -1
+// CHECK-NEXT:    [[TMP3:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD]], -1
 // CHECK-NEXT:    [[TMP4:%.*]] = select i1 [[TMP3]], i64 [[TMP2]], i64 0
 // CHECK-NEXT:    tail call void @init(ptr noundef nonnull [[ARRAY]], i64 noundef [[TMP4]]) #[[ATTR2:[0-9]+]]
 // CHECK-NEXT:    ret void
@@ -48,11 +48,11 @@ void test1(struct bucket *foo) {
 // CHECK-SAME: ptr noundef [[FOO:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-NEXT:  entry:
 // CHECK-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 16
-// CHECK-NEXT:    [[DOT_COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 12
-// CHECK-NEXT:    [[DOT_COUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOT_COUNTED_BY_GEP]], align 4
-// CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[DOT_COUNTED_BY_LOAD]] to i64
+// CHECK-NEXT:    [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 12
+// CHECK-NEXT:    [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
+// CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[COUNTED_BY_LOAD]] to i64
 // CHECK-NEXT:    [[TMP1:%.*]] = shl nsw i64 [[TMP0]], 1
-// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[DOT_COUNTED_BY_LOAD]], -1
+// CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD]], -1
 // CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TMP2]], i64 [[TMP1]], i64 0
 // CHECK-NEXT:    tail call void @init(ptr noundef nonnull [[ARRAY]], i64 noundef [[TMP3]]) #[[ATTR2]]
 // CHECK-NEXT:    ret void
@@ -60,3 +60,12 @@ void test1(struct bucket *foo) {
 void test2(struct bucket2 *foo) {
         init(foo->growable.array);
 }
+//.
+// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META7:![0-9]+]], i64 8}
+// CHECK: [[META3]] = !{!"bucket", [[META4:![0-9]+]], i64 0, [[META7]], i64 8, [[META4]], i64 16}
+// CHECK: [[META4]] = !{!"int", [[META5:![0-9]+]], i64 0}
+// CHECK: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}
+// CHECK: [[META6]] = !{!"Simple C/C++ TBAA"}
+// CHECK: [[META7]] = !{!"p1 _ZTS8variable", [[META8:![0-9]+]], i64 0}
+// CHECK: [[META8]] = !{!"any pointer", [[META5]], i64 0}
+//.
diff --git a/clang/test/CodeGen/attr-counted-by.c b/clang/test/CodeGen/attr-counted-by.c
index 6b3cad5708835b..71fc6c5da2b854 100644
--- a/clang/test/CodeGen/attr-counted-by.c
+++ b/clang/test/CodeGen/attr-counted-by.c
@@ -75,7 +75,7 @@ struct anon_struct {
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
 // NO-SANITIZE-WITH-ATTR-LABEL: define dso_local void @test1(
-// NO-SANITIZE-WITH-ATTR-SAME: ptr nocapture noundef writeonly [[P:%.*]], i32 noundef [[INDEX:%.*]], i32 noundef [[VAL:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// NO-SANITIZE-WITH-ATTR-SAME: ptr noundef writeonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]], i32 noundef [[VAL:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // NO-SANITIZE-WITH-ATTR-NEXT:  entry:
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
@@ -93,7 +93,7 @@ struct anon_struct {
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
 // NO-SANITIZE-WITHOUT-ATTR-LABEL: define dso_local void @test1(
-// NO-SANITIZE-WITHOUT-ATTR-SAME: ptr nocapture noundef writeonly [[P:%.*]], i32 noundef [[INDEX:%.*]], i32 noundef [[VAL:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef writeonly captures(none) [[P:%.*]], i32 noundef [[INDEX:%.*]], i32 noundef [[VAL:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:  entry:
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
@@ -108,9 +108,9 @@ void test1(struct annotated *p, int index, int val) {
 // SANITIZE-WITH-ATTR-LABEL: define dso_local void @test2(
 // SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // SANITIZE-WITH-ATTR-NEXT:  entry:
-// SANITIZE-WITH-ATTR-NEXT:    [[DOT_COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
-// SANITIZE-WITH-ATTR-NEXT:    [[DOT_COUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOT_COUNTED_BY_GEP]], align 4
-// SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = zext i32 [[DOT_COUNTED_BY_LOAD]] to i64, !nosanitize [[META2]]
+// SANITIZE-WITH-ATTR-NEXT:    [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
+// SANITIZE-WITH-ATTR-NEXT:    [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
+// SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = zext i32 [[COUNTED_BY_LOAD]] to i64, !nosanitize [[META2]]
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[INDEX]], [[TMP0]], !nosanitize [[META2]]
 // SANITIZE-WITH-ATTR-NEXT:    br i1 [[TMP1]], label [[CONT3:%.*]], label [[HANDLER_OUT_OF_BOUNDS:%.*]], !prof [[PROF3]], !nosanitize [[META2]]
 // SANITIZE-WITH-ATTR:       handler.out_of_bounds:
@@ -119,17 +1...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/123181


More information about the llvm-commits mailing list