
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.
18 lines
451 B
C
18 lines
451 B
C
// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
|
|
struct x { int a[100]; };
|
|
|
|
|
|
void foo(struct x *P, struct x *Q) {
|
|
// CHECK-LABEL: @foo(
|
|
// CHECK: call void @llvm.memcpy.p0.p0
|
|
*P = *Q;
|
|
}
|
|
|
|
// CHECK: declare void @llvm.memcpy.p0.p0{{.*}}(ptr noalias writeonly captures(none), ptr noalias readonly
|
|
|
|
void bar(struct x *P, struct x *Q) {
|
|
// CHECK-LABEL: @bar(
|
|
// CHECK: call void @llvm.memcpy.p0.p0
|
|
__builtin_memcpy(P, Q, sizeof(struct x));
|
|
}
|