diff options
author | Nikita Popov <npopov@redhat.com> | 2025-01-29 16:56:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-29 16:56:47 +0100 |
commit | 29441e4f5fa5f5c7709f7cf180815ba97f611297 (patch) | |
tree | ec6e52b957d314139f9cc548f26068f3432fb6d8 /llvm/lib/IR/Attributes.cpp | |
parent | 3c3c850a45c8f1ea1e9d6aa514e2b6076d1a4534 (diff) | |
download | llvm-29441e4f5fa5f5c7709f7cf180815ba97f611297.zip llvm-29441e4f5fa5f5c7709f7cf180815ba97f611297.tar.gz llvm-29441e4f5fa5f5c7709f7cf180815ba97f611297.tar.bz2 |
[IR] Convert from nocapture to captures(none) (#123181)
This PR removes the old `nocapture` attribute, replacing it with the new
`captures` attribute introduced in #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.
Diffstat (limited to 'llvm/lib/IR/Attributes.cpp')
-rw-r--r-- | llvm/lib/IR/Attributes.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp index ceb3185..ef0591e 100644 --- a/llvm/lib/IR/Attributes.cpp +++ b/llvm/lib/IR/Attributes.cpp @@ -288,6 +288,10 @@ Attribute Attribute::getWithNoFPClass(LLVMContext &Context, return get(Context, NoFPClass, ClassMask); } +Attribute Attribute::getWithCaptureInfo(LLVMContext &Context, CaptureInfo CI) { + return get(Context, Captures, CI.toIntValue()); +} + Attribute Attribute::getWithAllocSizeArgs(LLVMContext &Context, unsigned ElemSizeArg, const std::optional<unsigned> &NumElemsArg) { @@ -2373,7 +2377,6 @@ AttributeMask AttributeFuncs::typeIncompatible(Type *Ty, AttributeSet AS, // Attributes that only apply to pointers. if (ASK & ASK_SAFE_TO_DROP) Incompatible.addAttribute(Attribute::NoAlias) - .addAttribute(Attribute::NoCapture) .addAttribute(Attribute::NonNull) .addAttribute(Attribute::ReadNone) .addAttribute(Attribute::ReadOnly) |