llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-coroutines Author: Zhijin Zeng (zengdage) <details> <summary>Changes</summary> As I known, 'this' pointer argument can't be changed in c++ instance method, and it always pointer to the current object itself, so maybe need to add 'readonly' attribute to it. --- Patch is 5.41 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/106499.diff 190 Files Affected: - (modified) clang/lib/CodeGen/CGCall.cpp (+1) - (modified) clang/test/CodeGen/attr-counted-by-pr88931.cpp (+2-2) - (modified) clang/test/CodeGen/attr-noundef.cpp (+3-3) - (modified) clang/test/CodeGen/paren-list-agg-init.cpp (+8-8) - (modified) clang/test/CodeGenCUDA/offload_via_llvm.cu (+2-2) - (modified) clang/test/CodeGenCUDA/record-layout.cu (+14-14) - (modified) clang/test/CodeGenCUDA/vtbl.cu (+1-1) - (modified) clang/test/CodeGenCXX/LoongArch/abi-lp64d-struct-inherit.cpp (+1-1) - (modified) clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp (+2-2) - (modified) clang/test/CodeGenCXX/amdgcn-func-arg.cpp (+4-4) - (modified) clang/test/CodeGenCXX/attr-musttail.cpp (+6-6) - (modified) clang/test/CodeGenCXX/attr-target-clones-aarch64.cpp (+12-12) - (modified) clang/test/CodeGenCXX/attr-target-version.cpp (+14-14) - (modified) clang/test/CodeGenCXX/control-flow-in-stmt-expr.cpp (+6-6) - (modified) clang/test/CodeGenCXX/cxx2a-consteval.cpp (+1-1) - (modified) clang/test/CodeGenCXX/cxx2b-deducing-this.cpp (+1-1) - (modified) clang/test/CodeGenCXX/fcheck-new.cpp (+1-1) - (modified) clang/test/CodeGenCXX/for-range.cpp (+18-18) - (modified) clang/test/CodeGenCXX/gh62818.cpp (+2-2) - (modified) clang/test/CodeGenCXX/ibm128-declarations.cpp (+4-4) - (modified) clang/test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp (+4-4) - (modified) clang/test/CodeGenCXX/matrix-casts.cpp (+2-2) - (modified) clang/test/CodeGenCXX/microsoft-abi-cdecl-method-sret.cpp (+1-1) - (modified) clang/test/CodeGenCXX/nrvo.cpp (+255-255) - (modified) clang/test/CodeGenCXX/pr13396.cpp (+6-6) - (modified) clang/test/CodeGenCXX/ptrauth-apple-kext-indirect-call-2.cpp (+1-1) - (modified) clang/test/CodeGenCXX/ptrauth-apple-kext-indirect-call.cpp (+2-2) - (modified) clang/test/CodeGenCXX/ptrauth-apple-kext-indirect-virtual-dtor-call.cpp (+5-5) - (modified) clang/test/CodeGenCXX/ptrauth-member-function-pointer.cpp (+5-5) - (modified) clang/test/CodeGenCXX/ptrauth-virtual-function.cpp (+23-23) - (modified) clang/test/CodeGenCXX/this-nonnull.cpp (+4-4) - (modified) clang/test/CodeGenCXX/trivial_abi_debuginfo.cpp (+2-2) - (modified) clang/test/CodeGenCXX/vtt-address-space.cpp (+12-12) - (modified) clang/test/CodeGenCoroutines/coro-suspend-cleanups.cpp (+1-1) - (modified) clang/test/CodeGenHLSL/this-assignment-overload.hlsl (+4-4) - (modified) clang/test/CodeGenHLSL/this-assignment.hlsl (+2-2) - (modified) clang/test/CodeGenHLSL/this-reference.hlsl (+2-2) - (modified) clang/test/CodeGenObjCXX/objc-struct-cxx-abi.mm (+3-3) - (modified) clang/test/OpenMP/distribute_firstprivate_codegen.cpp (+68-68) - (modified) clang/test/OpenMP/distribute_lastprivate_codegen.cpp (+76-76) - (modified) clang/test/OpenMP/distribute_parallel_for_codegen.cpp (+16-16) - (modified) clang/test/OpenMP/distribute_parallel_for_firstprivate_codegen.cpp (+76-76) - (modified) clang/test/OpenMP/distribute_parallel_for_lastprivate_codegen.cpp (+92-92) - (modified) clang/test/OpenMP/distribute_parallel_for_num_threads_codegen.cpp (+56-56) - (modified) clang/test/OpenMP/distribute_parallel_for_private_codegen.cpp (+92-92) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_codegen.cpp (+18-18) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_firstprivate_codegen.cpp (+134-134) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_lastprivate_codegen.cpp (+166-166) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_num_threads_codegen.cpp (+78-78) - (modified) clang/test/OpenMP/distribute_parallel_for_simd_private_codegen.cpp (+166-166) - (modified) clang/test/OpenMP/distribute_private_codegen.cpp (+76-76) - (modified) clang/test/OpenMP/distribute_simd_firstprivate_codegen.cpp (+126-126) - (modified) clang/test/OpenMP/distribute_simd_lastprivate_codegen.cpp (+150-150) - (modified) clang/test/OpenMP/distribute_simd_private_codegen.cpp (+150-150) - (modified) clang/test/OpenMP/distribute_simd_reduction_codegen.cpp (+3-3) - (modified) clang/test/OpenMP/for_firstprivate_codegen.cpp (+85-85) - (modified) clang/test/OpenMP/for_lastprivate_codegen.cpp (+117-117) - (modified) clang/test/OpenMP/for_linear_codegen.cpp (+35-35) - (modified) clang/test/OpenMP/for_private_codegen.cpp (+37-37) - (modified) clang/test/OpenMP/for_reduction_codegen.cpp () - (modified) clang/test/OpenMP/for_reduction_codegen_UDR.cpp (+107-107) - (modified) clang/test/OpenMP/irbuilder_for_iterator.cpp (+9-9) - (modified) clang/test/OpenMP/irbuilder_for_rangefor.cpp (+11-11) - (modified) clang/test/OpenMP/master_taskloop_in_reduction_codegen.cpp (+17-17) - (modified) clang/test/OpenMP/master_taskloop_simd_in_reduction_codegen.cpp (+25-25) - (modified) clang/test/OpenMP/nvptx_target_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/nvptx_target_parallel_reduction_codegen_tbaa_PR46146.cpp (+26-26) - (modified) clang/test/OpenMP/parallel_copyin_codegen.cpp (+122-122) - (modified) clang/test/OpenMP/parallel_firstprivate_codegen.cpp (+160-160) - (modified) clang/test/OpenMP/parallel_for_linear_codegen.cpp (+17-17) - (modified) clang/test/OpenMP/parallel_master_codegen.cpp (+9-9) - (modified) clang/test/OpenMP/parallel_master_taskloop_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/parallel_master_taskloop_firstprivate_codegen.cpp (+141-141) - (modified) clang/test/OpenMP/parallel_master_taskloop_lastprivate_codegen.cpp (+50-50) - (modified) clang/test/OpenMP/parallel_master_taskloop_simd_codegen.cpp (+28-28) - (modified) clang/test/OpenMP/parallel_master_taskloop_simd_firstprivate_codegen.cpp (+141-141) - (modified) clang/test/OpenMP/parallel_master_taskloop_simd_lastprivate_codegen.cpp (+95-95) - (modified) clang/test/OpenMP/parallel_private_codegen.cpp (+59-59) - (modified) clang/test/OpenMP/parallel_reduction_codegen.cpp (+100-100) - (modified) clang/test/OpenMP/reduction_compound_op.cpp (+106-106) - (modified) clang/test/OpenMP/reduction_implicit_map.cpp (+8-8) - (modified) clang/test/OpenMP/reverse_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/sections_firstprivate_codegen.cpp (+87-87) - (modified) clang/test/OpenMP/sections_lastprivate_codegen.cpp (+93-93) - (modified) clang/test/OpenMP/sections_private_codegen.cpp (+41-41) - (modified) clang/test/OpenMP/sections_reduction_codegen.cpp (+79-79) - (modified) clang/test/OpenMP/simd_private_taskloop_codegen.cpp (+158-158) - (modified) clang/test/OpenMP/single_codegen.cpp (+132-132) - (modified) clang/test/OpenMP/single_firstprivate_codegen.cpp () - (modified) clang/test/OpenMP/single_private_codegen.cpp () - (modified) clang/test/OpenMP/target_data_no_device_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/target_data_use_device_ptr_inheritance_codegen.cpp (+16-16) - (modified) clang/test/OpenMP/target_firstprivate_codegen.cpp (+24-24) - (modified) clang/test/OpenMP/target_has_device_addr_codegen.cpp (+30-30) - (modified) clang/test/OpenMP/target_has_device_addr_codegen_01.cpp (+12-12) - (modified) clang/test/OpenMP/target_in_reduction_codegen.cpp (+17-17) - (modified) clang/test/OpenMP/target_is_device_ptr_codegen.cpp (+48-48) - (modified) clang/test/OpenMP/target_map_codegen_hold.cpp (+4-4) - (modified) clang/test/OpenMP/target_map_member_expr_codegen.cpp (+10-10) - (modified) clang/test/OpenMP/target_ompx_dyn_cgroup_mem_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_parallel_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_parallel_for_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_parallel_for_simd_codegen.cpp (+16-16) - (modified) clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp (+304-304) - (modified) clang/test/OpenMP/target_parallel_generic_loop_codegen-2.cpp (+6-6) - (modified) clang/test/OpenMP/target_parallel_if_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_parallel_num_threads_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_dist_schedule_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_firstprivate_codegen.cpp (+128-128) - (modified) clang/test/OpenMP/target_teams_distribute_lastprivate_codegen.cpp (+76-76) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_dist_schedule_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_firstprivate_codegen.cpp (+261-261) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_lastprivate_codegen.cpp (+92-92) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_private_codegen.cpp (+161-161) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_reduction_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_collapse_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_firstprivate_codegen.cpp (+332-332) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_lastprivate_codegen.cpp (+166-166) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_private_codegen.cpp (+248-248) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_reduction_codegen.cpp (+3-3) - (modified) clang/test/OpenMP/target_teams_distribute_parallel_for_simd_schedule_codegen.cpp (+12-12) - (modified) clang/test/OpenMP/target_teams_distribute_private_codegen.cpp (+88-88) - (modified) clang/test/OpenMP/target_teams_distribute_reduction_codegen.cpp (+20-20) - (modified) clang/test/OpenMP/target_teams_distribute_simd_codegen.cpp (+16-16) - (modified) clang/test/OpenMP/target_teams_distribute_simd_collapse_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_teams_distribute_simd_dist_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/target_teams_distribute_simd_firstprivate_codegen.cpp (+199-199) - (modified) clang/test/OpenMP/target_teams_distribute_simd_lastprivate_codegen.cpp (+150-150) - (modified) clang/test/OpenMP/target_teams_distribute_simd_private_codegen.cpp (+175-175) - (modified) clang/test/OpenMP/target_teams_distribute_simd_reduction_codegen.cpp (+3-3) - (modified) clang/test/OpenMP/target_teams_generic_loop_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_generic_loop_private_codegen.cpp (+129-129) - (modified) clang/test/OpenMP/target_teams_generic_loop_reduction_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/target_teams_num_teams_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/target_teams_thread_limit_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/task_codegen.cpp (+160-160) - (modified) clang/test/OpenMP/task_in_reduction_codegen.cpp (+17-17) - (modified) clang/test/OpenMP/task_member_call_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/taskloop_in_reduction_codegen.cpp (+17-17) - (modified) clang/test/OpenMP/taskloop_simd_in_reduction_codegen.cpp (+25-25) - (modified) clang/test/OpenMP/teams_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_dist_schedule_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_firstprivate_codegen.cpp (+128-128) - (modified) clang/test/OpenMP/teams_distribute_lastprivate_codegen.cpp (+76-76) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_copyin_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_dist_schedule_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_firstprivate_codegen.cpp (+160-160) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_lastprivate_codegen.cpp (+92-92) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_num_threads_codegen.cpp (+34-34) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_private_codegen.cpp (+104-104) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_reduction_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_collapse_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_dist_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_firstprivate_codegen.cpp (+231-231) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_lastprivate_codegen.cpp (+166-166) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_num_threads_codegen.cpp (+48-48) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_private_codegen.cpp (+191-191) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_reduction_codegen.cpp (+3-3) - (modified) clang/test/OpenMP/teams_distribute_parallel_for_simd_schedule_codegen.cpp (+12-12) - (modified) clang/test/OpenMP/teams_distribute_private_codegen.cpp (+88-88) - (modified) clang/test/OpenMP/teams_distribute_reduction_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/teams_distribute_simd_codegen.cpp (+16-16) - (modified) clang/test/OpenMP/teams_distribute_simd_collapse_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_simd_dist_schedule_codegen.cpp (+8-8) - (modified) clang/test/OpenMP/teams_distribute_simd_firstprivate_codegen.cpp (+199-199) - (modified) clang/test/OpenMP/teams_distribute_simd_lastprivate_codegen.cpp (+150-150) - (modified) clang/test/OpenMP/teams_distribute_simd_private_codegen.cpp (+175-175) - (modified) clang/test/OpenMP/teams_distribute_simd_reduction_codegen.cpp (+3-3) - (modified) clang/test/OpenMP/teams_firstprivate_codegen.cpp (+128-128) - (modified) clang/test/OpenMP/teams_generic_loop_codegen-1.cpp (+4-4) - (modified) clang/test/OpenMP/teams_generic_loop_collapse_codegen.cpp (+4-4) - (modified) clang/test/OpenMP/teams_generic_loop_private_codegen.cpp (+88-88) - (modified) clang/test/OpenMP/teams_generic_loop_reduction_codegen.cpp (+2-2) - (modified) clang/test/OpenMP/teams_private_codegen.cpp (+112-112) - (modified) clang/test/OpenMP/threadprivate_codegen.cpp (+520-520) - (modified) clang/test/OpenMP/tile_codegen.cpp (+8-8) - (modified) clang/test/utils/update_cc_test_checks/Inputs/basic-cplusplus.cpp.expected (+6-6) - (modified) clang/test/utils/update_cc_test_checks/Inputs/explicit-template-instantiation.cpp.expected (+10-10) ``````````diff diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index ca2c79b51ac96b..7a3a3a8113e465 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2673,6 +2673,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, /*TBAAInfo=*/nullptr, /*forPointeeType=*/true) .getAsAlign(); Attrs.addAlignmentAttr(Alignment); + Attrs.addAttribute(llvm::Attribute::ReadOnly); ArgAttrs[IRArgs.first] = llvm::AttributeSet::get(getLLVMContext(), Attrs); } diff --git a/clang/test/CodeGen/attr-counted-by-pr88931.cpp b/clang/test/CodeGen/attr-counted-by-pr88931.cpp index 2a8cc1d07e50d9..4210b561ab0859 100644 --- a/clang/test/CodeGen/attr-counted-by-pr88931.cpp +++ b/clang/test/CodeGen/attr-counted-by-pr88931.cpp @@ -11,9 +11,9 @@ struct foo { void init(void * __attribute__((pass_dynamic_object_size(0)))); // CHECK-LABEL: define dso_local void @_ZN3foo3barC1Ev( -// CHECK-SAME: ptr noundef nonnull align 4 dereferenceable(1) [[THIS:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 { +// CHECK-SAME: ptr noundef nonnull readonly align 4 dereferenceable(1) [[THIS:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 { // CHECK-NEXT: entry: -// CHECK-NEXT: tail call void @_Z4initPvU25pass_dynamic_object_size0(ptr noundef nonnull [[THIS]], i64 noundef -1) #[[ATTR2:[0-9]+]] +// CHECK-NEXT: tail call void @_Z4initPvU25pass_dynamic_object_size0(ptr noundef nonnull readonly [[THIS]], i64 noundef -1) #[[ATTR2:[0-9]+]] // CHECK-NEXT: ret void // foo::bar::bar() { diff --git a/clang/test/CodeGen/attr-noundef.cpp b/clang/test/CodeGen/attr-noundef.cpp index abdf9496bd3963..c9ea72814711fb 100644 --- a/clang/test/CodeGen/attr-noundef.cpp +++ b/clang/test/CodeGen/attr-noundef.cpp @@ -85,9 +85,9 @@ void use_object() { obj.getData(); obj.getThis(); } -// CHECK: define linkonce_odr void @{{.*}}Object{{.*}}(ptr noundef nonnull align 4 dereferenceable(1) % -// CHECK: define linkonce_odr noundef i32 @{{.*}}Object{{.*}}getData{{.*}}(ptr noundef nonnull align 4 dereferenceable(1) % -// CHECK: define linkonce_odr noundef ptr @{{.*}}Object{{.*}}getThis{{.*}}(ptr noundef nonnull align 4 dereferenceable(1) % +// CHECK: define linkonce_odr void @{{.*}}Object{{.*}}(ptr noundef nonnull readonly align 4 dereferenceable(1) % +// CHECK: define linkonce_odr noundef i32 @{{.*}}Object{{.*}}getData{{.*}}(ptr noundef nonnull readonly align 4 dereferenceable(1) % +// CHECK: define linkonce_odr noundef ptr @{{.*}}Object{{.*}}getThis{{.*}}(ptr noundef nonnull readonly align 4 dereferenceable(1) % } // namespace check_this //************ Passing vector types diff --git a/clang/test/CodeGen/paren-list-agg-init.cpp b/clang/test/CodeGen/paren-list-agg-init.cpp index 235352382332a6..4686d34f64322d 100644 --- a/clang/test/CodeGen/paren-list-agg-init.cpp +++ b/clang/test/CodeGen/paren-list-agg-init.cpp @@ -390,13 +390,13 @@ namespace gh61145 { // CHECK-NEXT: [[V:%.*v.*]] = alloca [[STRUCT_VEC]], align 1 // CHECK-NEXT: [[AGG_TMP_ENSURED:%.*agg.tmp.ensured.*]] = alloca [[STRUCT_S1]], align 1 // a.k.a. Vec::Vec() - // CHECK-NEXT: call void @_ZN7gh611453VecC1Ev(ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecC1Ev(ptr noundef nonnull readonly align 1 dereferenceable(1) [[V]]) // a.k.a. Vec::Vec(Vec&&) - // CHECK-NEXT: call void @_ZN7gh611453VecC1EOS0_(ptr noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecC1EOS0_(ptr noundef nonnull readonly align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], ptr noundef nonnull align 1 dereferenceable(1) [[V]]) // a.k.a. S1::~S1() - // CHECK-NEXT: call void @_ZN7gh611452S1D1Ev(ptr noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) + // CHECK-NEXT: call void @_ZN7gh611452S1D1Ev(ptr noundef nonnull readonly align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) // a.k.a.Vec::~Vec() - // CHECK-NEXT: call void @_ZN7gh611453VecD1Ev(ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecD1Ev(ptr noundef nonnull readonly align 1 dereferenceable(1) [[V]]) // CHECK-NEXT: ret void template <int I> void make1() { @@ -410,15 +410,15 @@ namespace gh61145 { // CHECK-NEXT: [[V:%.*v.*]] = alloca [[STRUCT_VEC]], align 1 // CHECK-NEXT: [[AGG_TMP_ENSURED:%.*agg.tmp.ensured.*]] = alloca [[STRUCT_S2]], align 1 // a.k.a. Vec::Vec() - // CHECK-NEXT: call void @_ZN7gh611453VecC1Ev(ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecC1Ev(ptr noundef nonnull readonly align 1 dereferenceable(1) [[V]]) // a.k.a. Vec::Vec(Vec&&) - // CHECK-NEXT: call void @_ZN7gh611453VecC1EOS0_(ptr noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecC1EOS0_(ptr noundef nonnull readonly align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], ptr noundef nonnull align 1 dereferenceable(1) [[V]]) // CHECK-NEXT: [[C:%.*c.*]] = getelementptr inbounds nuw [[STRUCT_S2]], ptr [[AGG_TMP_ENSURED]], i32 0, i32 // CHECK-NEXT: store i8 0, ptr [[C]], align 1 // a.k.a. S2::~S2() - // CHECK-NEXT: call void @_ZN7gh611452S2D1Ev(ptr noundef nonnull align 1 dereferenceable(2) [[AGG_TMP_ENSURED]]) + // CHECK-NEXT: call void @_ZN7gh611452S2D1Ev(ptr noundef nonnull readonly align 1 dereferenceable(2) [[AGG_TMP_ENSURED]]) // a.k.a. Vec::~Vec() - // CHECK-NEXT: call void @_ZN7gh611453VecD1Ev(ptr noundef nonnull align 1 dereferenceable(1) [[V]]) + // CHECK-NEXT: call void @_ZN7gh611453VecD1Ev(ptr noundef nonnull readonly align 1 dereferenceable(1) [[V]]) // CHECK-NEXT: ret void template <int I> void make2() { diff --git a/clang/test/CodeGenCUDA/offload_via_llvm.cu b/clang/test/CodeGenCUDA/offload_via_llvm.cu index 434eba99c1795d..e729967949a0c8 100644 --- a/clang/test/CodeGenCUDA/offload_via_llvm.cu +++ b/clang/test/CodeGenCUDA/offload_via_llvm.cu @@ -72,8 +72,8 @@ __global__ void foo(int, short, void *, void *) {} // HST-NEXT: [[AGG_TMP:%.*]] = alloca [[STRUCT_DIM3:%.*]], align 4 // HST-NEXT: [[AGG_TMP1:%.*]] = alloca [[STRUCT_DIM3]], align 4 // HST-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 4 -// HST-NEXT: call void @_ZN4dim3C1Ejjj(ptr noundef nonnull align 4 dereferenceable(12) [[AGG_TMP]], i32 noundef 3, i32 noundef 1, i32 noundef 1) -// HST-NEXT: call void @_ZN4dim3C1Ejjj(ptr noundef nonnull align 4 dereferenceable(12) [[AGG_TMP1]], i32 noundef 7, i32 noundef 1, i32 noundef 1) +// HST-NEXT: call void @_ZN4dim3C1Ejjj(ptr noundef nonnull readonly align 4 dereferenceable(12) [[AGG_TMP]], i32 noundef 3, i32 noundef 1, i32 noundef 1) +// HST-NEXT: call void @_ZN4dim3C1Ejjj(ptr noundef nonnull readonly align 4 dereferenceable(12) [[AGG_TMP1]], i32 noundef 7, i32 noundef 1, i32 noundef 1) // HST-NEXT: [[CALL:%.*]] = call i32 @__llvmPushCallConfiguration(ptr noundef byval([[STRUCT_DIM3]]) align 4 [[AGG_TMP]], ptr noundef byval([[STRUCT_DIM3]]) align 4 [[AGG_TMP1]], i32 noundef 0, ptr noundef null) // HST-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[CALL]], 0 // HST-NEXT: br i1 [[TOBOOL]], label %[[KCALL_END:.*]], label %[[KCALL_CONFIGOK:.*]] diff --git a/clang/test/CodeGenCUDA/record-layout.cu b/clang/test/CodeGenCUDA/record-layout.cu index 847a81d88d280c..781151dd1a6885 100644 --- a/clang/test/CodeGenCUDA/record-layout.cu +++ b/clang/test/CodeGenCUDA/record-layout.cu @@ -101,12 +101,12 @@ void test_C() { // DEV: %vtable = load ptr addrspace(1), ptr %2, align 8 // DEV: %vfn = getelementptr inbounds ptr addrspace(1), ptr addrspace(1) %vtable, i64 1 // DEV: %3 = load ptr addrspace(1), ptr addrspace(1) %vfn, align 8 -// DEV: call addrspace(1) void %3(ptr noundef nonnull align 8 dereferenceable(24) %2) +// DEV: call addrspace(1) void %3(ptr noundef nonnull readonly align 8 dereferenceable(24) %2) // DEV: %4 = load ptr, ptr %j.addr.ascast, align 8 // DEV: %vtable2 = load ptr addrspace(1), ptr %4, align 8 // DEV: %vfn3 = getelementptr inbounds ptr addrspace(1), ptr addrspace(1) %vtable2, i64 2 // DEV: %5 = load ptr addrspace(1), ptr addrspace(1) %vfn3, align 8 -// DEV: call addrspace(1) void %5(ptr noundef nonnull align 8 dereferenceable(24) %4) +// DEV: call addrspace(1) void %5(ptr noundef nonnull readonly align 8 dereferenceable(24) %4) __device__ void J_dev(J *j) { j->i = 2; @@ -118,7 +118,7 @@ __device__ void J_dev(J *j) { // DEV: define dso_local amdgpu_kernel void @_Z8J_kernelv() // DEV: %j = alloca %struct.J, align 8, addrspace(5) // DEV: %j.ascast = addrspacecast ptr addrspace(5) %j to ptr -// DEV: call void @_ZN1JC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %j.ascast) +// DEV: call void @_ZN1JC1Ev(ptr noundef nonnull readonly align 8 dereferenceable(24) %j.ascast) // DEV: call void @_Z5J_devP1J(ptr noundef %j.ascast) __global__ void J_kernel() { @@ -137,12 +137,12 @@ __global__ void J_kernel() { // HOST: %vtable = load ptr, ptr %2, align 8 // HOST: %vfn = getelementptr inbounds ptr, ptr %vtable, i64 0 // HOST: %3 = load ptr, ptr %vfn, align 8 -// HOST: call void %3(ptr noundef nonnull align 8 dereferenceable(24) %2) +// HOST: call void %3(ptr noundef nonnull readonly align 8 dereferenceable(24) %2) // HOST: %4 = load ptr, ptr %j.addr, align 8 // HOST: %vtable2 = load ptr, ptr %4, align 8 // HOST: %vfn3 = getelementptr inbounds ptr, ptr %vtable2, i64 2 // HOST: %5 = load ptr, ptr %vfn3, align 8 -// HOST: call void %5(ptr noundef nonnull align 8 dereferenceable(24) %4) +// HOST: call void %5(ptr noundef nonnull readonly align 8 dereferenceable(24) %4) void J_host(J *j) { j->i = 12; @@ -153,7 +153,7 @@ void J_host(J *j) { // HOST: define dso_local void @"?test_J@@YAXXZ"() // HOST: %j = alloca %struct.J, align 8 -// HOST: %call = call noundef ptr @"??0J@@QEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(24) %j) +// HOST: %call = call noundef ptr @"??0J@@QEAA@XZ"(ptr noundef nonnull readonly align 8 dereferenceable(24) %j) // HOST: call void @"?J_host@@YAXPEAUJ@@@Z"(ptr noundef %j) void test_J() { @@ -162,37 +162,37 @@ void test_J() { J_kernel<<<1, 1>>>(); } -// HOST: define linkonce_odr dso_local noundef ptr @"??0J@@QEAA@XZ"(ptr noundef nonnull returned align 8 dereferenceable(24) %this) +// HOST: define linkonce_odr dso_local noundef ptr @"??0J@@QEAA@XZ"(ptr noundef nonnull readonly returned align 8 dereferenceable(24) %this) // HOST: %this.addr = alloca ptr, align 8 // HOST: store ptr %this, ptr %this.addr, align 8 // HOST: %this1 = load ptr, ptr %this.addr, align 8 -// HOST: %call = call noundef ptr @"??0I@@QEAA@XZ"(ptr noundef nonnull align 8 dereferenceable(16) %this1) #5 +// HOST: %call = call noundef ptr @"??0I@@QEAA@XZ"(ptr noundef nonnull readonly align 8 dereferenceable(16) %this1) #5 // HOST: store ptr @"??_7J@@6B@", ptr %this1, align 8 // HOST: ret ptr %this1 -// HOST: define linkonce_odr dso_local noundef ptr @"??0I@@QEAA@XZ"(ptr noundef nonnull returned align 8 dereferenceable(16) %this) +// HOST: define linkonce_odr dso_local noundef ptr @"??0I@@QEAA@XZ"(ptr noundef nonnull readonly returned align 8 dereferenceable(16) %this) // HOST: %this.addr = alloca ptr, align 8 // HOST: store ptr %this, ptr %this.addr, align 8 // HOST: %this1 = load ptr, ptr %this.addr, align 8 // HOST: store ptr @"??_7I@@6B@", ptr %this1, align 8 // HOST: ret ptr %this1 -// DEV: define linkonce_odr void @_ZN1JC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %this) +// DEV: define linkonce_odr void @_ZN1JC1Ev(ptr noundef nonnull readonly align 8 dereferenceable(24) %this) // DEV: %this.addr = alloca ptr, align 8, addrspace(5) // DEV: %this.addr.ascast = addrspacecast ptr addrspace(5) %this.addr to ptr // DEV: store ptr %this, ptr %this.addr.ascast, align 8 // DEV: %this1 = load ptr, ptr %this.addr.ascast, align 8 -// DEV: call void @_ZN1JC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %this1) +// DEV: call void @_ZN1JC2Ev(ptr noundef nonnull readonly align 8 dereferenceable(24) %this1) -// DEV: define linkonce_odr void @_ZN1JC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %this) +// DEV: define linkonce_odr void @_ZN1JC2Ev(ptr noundef nonnull readonly align 8 dereferenceable(24) %this) // DEV: %this.addr = alloca ptr, align 8, addrspace(5) // DEV: %this.addr.ascast = addrspacecast ptr addrspace(5) %this.addr to ptr // DEV: store ptr %this, ptr %this.addr.ascast, align 8 // DEV: %this1 = load ptr, ptr %this.addr.ascast, align 8 -// DEV: call void @_ZN1IC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %this1) +// DEV: call void @_ZN1IC2Ev(ptr noundef nonnull readonly align 8 dereferenceable(16) %this1) // DEV: store ptr addrspace(1) getelementptr inbounds inrange(-16, 24) ({ [5 x ptr addrspace(1)] }, ptr addrspace(1) @_ZTV1J, i32 0, i32 0, i32 2), ptr %this1, align 8 -// DEV: define linkonce_odr void @_ZN1IC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %this) +// DEV: define linkonce_odr void @_ZN1IC2Ev(ptr noundef nonnull readonly align 8 dereferenceable(16) %this) // DEV: %this.addr = alloca ptr, align 8, addrspace(5) // DEV: %this.addr.ascast = addrspacecast ptr addrspace(5) %this.addr to ptr // DEV: store ptr %this, ptr %this.addr.ascast, align 8 diff --git a/clang/test/CodeGenCUDA/vtbl.cu b/clang/test/CodeGenCUDA/vtbl.cu index 4c3bb8436c49fe..32bfda0371a143 100644 --- a/clang/test/CodeGenCUDA/vtbl.cu +++ b/clang/test/CodeGenCUDA/vtbl.cu @@ -3,7 +3,7 @@ #include "Inputs/cuda.h" -// CHECK-LABEL: define {{.*}}@_ZN1AC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) +// CHECK-LABEL: define {{.*}}@_ZN1AC2Ev(ptr noundef nonnull readonly align 8 dereferenceable(8) %this) // CHECK: store ptr %this, ptr %this.addr.ascast // CHECK: %this1 = load ptr, ptr %this.addr.ascast // CHECK: store ptr addrspace(1) {{.*}} @_ZTV1A{{.*}}, ptr %this1 diff --git a/clang/test/CodeGenCXX/LoongArch/abi-lp64d-struct-inherit.cpp b/clang/test/CodeGenCXX/LoongArch/abi-lp64d-struct-inherit.cpp index 6d8018564bd6c7..8680a0a8fdfb01 100644 --- a/clang/test/CodeGenCXX/LoongArch/abi-lp64d-struct-inherit.cpp +++ b/clang/test/CodeGenCXX/LoongArch/abi-lp64d-struct-inherit.cpp @@ -69,7 +69,7 @@ struct child5_virtual_s : virtual parent5_virtual_s { float f1; }; -// CHECK-LABEL: define{{.*}} void @_ZN16child5_virtual_sC1EOS_(ptr noundef nonnull align 8 dereferenceable(12) %this, ptr noundef nonnull align 8 dereferenceable(12) %0) +// CHECK-LABEL: define{{.*}} void @_ZN16child5_virtual_sC1EOS_(ptr noundef nonnull readonly align 8 dereferenceable(12) %this, ptr noundef nonnull align 8 dereferenceable(12) %0) struct child5_virtual_s int32_float_virtual_struct_inheritance(struct child5_virtual_s a) { return a; } diff --git a/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp b/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp index c1f93101410006..816b088c200424 100644 --- a/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp +++ b/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp @@ -74,8 +74,8 @@ int x; // CHECK-NEXT: entry: // CHECK-NEXT: [[A:%.*]] = alloca [[CLASS_A:%.*]], align 4, addrspace(5) // CHECK-NEXT: [[A_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[A]] to ptr -// CHECK-NEXT: call void @_ZN1AC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[A_ASCAST]]) -// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[A_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AC1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[A_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[A_ASCAST]]) // CHECK-NEXT: ret void // void func3() { diff --git a/clang/test/CodeGenCXX/amdgcn-func-arg.cpp b/clang/test/CodeGenCXX/amdgcn-func-arg.cpp index a5f83dc91b0381..7ef65f430d4cd6 100644 --- a/clang/test/CodeGenCXX/amdgcn-func-arg.cpp +++ b/clang/test/CodeGenCXX/amdgcn-func-arg.cpp @@ -39,13 +39,13 @@ void func_with_indirect_arg(A a) { // CHECK-NEXT: [[AGG_TMP:%.*]] = alloca [[CLASS_A]], align 4, addrspace(5) // CHECK-NEXT: [[A_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[A]] to ptr // CHECK-NEXT: [[AGG_TMP_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[AGG_TMP]] to ptr -// CHECK-NEXT: call void @_ZN1AC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[A_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AC1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[A_ASCAST]]) // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[AGG_TMP_ASCAST]], ptr align 4 [[A_ASCAST]], i64 4, i1 false) // CHECK-NEXT: [[AGG_TMP_ASCAST_ASCAST:%.*]] = addrspacecast ptr [[AGG_TMP_ASCAST]] to ptr addrspace(5) // CHECK-NEXT: call void @_Z22func_with_indirect_arg1A(ptr addrspace(5) noundef [[AGG_TMP_ASCAST_ASCAST]]) -// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[AGG_TMP_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[AGG_TMP_ASCAST]]) // CHECK-NEXT: call void @_Z17func_with_ref_argR1A(ptr noundef nonnull align 4 dereferenceable(4) [[A_ASCAST]]) -// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[A_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[A_ASCAST]]) // CHECK-NEXT: ret void // void test_indirect_arg_auto() { @@ -61,7 +61,7 @@ void test_indirect_arg_auto() { // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[AGG_TMP_ASCAST]], ptr align 4 addrspacecast (ptr addrspace(1) @g_a to ptr), i64 4, i1 false) // CHECK-NEXT: [[AGG_TMP_ASCAST_ASCAST:%.*]] = addrspacecast ptr [[AGG_TMP_ASCAST]] to ptr addrspace(5) // CHECK-NEXT: call void @_Z22func_with_indirect_arg1A(ptr addrspace(5) noundef [[AGG_TMP_ASCAST_ASCAST]]) -// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[AGG_TMP_ASCAST]]) +// CHECK-NEXT: call void @_ZN1AD1Ev(ptr noundef nonnull readonly align 4 dereferenceable(4) [[AGG_TMP_ASCAST]]) // CHECK-NEXT: call void @_Z17func_with_ref_argR1A(ptr noundef nonnull align 4 dereferenceable(4) addrspacecast (ptr addrspace(1) @g_a to ptr)) // CHECK-NEXT: ret void // diff --git a/clang/test/CodeGenCXX/attr-musttail.cpp b/clang/test/CodeGenCXX/attr-musttail.cpp index c0081ec232e4a6..83705d7aa898ce 100644 --- a/clang/test/CodeGenCXX/attr-musttail.cpp +++ b/clang/test/CodeGenCXX/attr-musttail.cpp @@ -36,7 +36,7 @@ int Foo::TailFrom(int x) { [[clang::musttail]] return MemberFunction(x); } -// CHECK: %call = musttail call noundef i32 @_ZN3Foo14MemberFunctionEi(ptr noundef nonnull align 1 dereferenceable(1) %this1, i32 noundef %0) +// CHECK: %call = musttail call noundef i32 @_ZN3Foo14MemberFunctionEi(ptr noundef nonnull readonly align 1 dereferenceable(1) %this1, i32 noundef %0) int Func3(int x) { [[clang::musttail]] return Foo::StaticMethod(x); @@ -57,13 +57,13 @@ int Foo::TailFrom2(int x) { [[clang::musttail]] return ((*this).*pmf)(x); } -// CHECK: %call = musttail call noundef i32 %5(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %6) +// CHECK: %call = musttail call noundef i32 %5(ptr noundef nonnull readonly align 1 dereferenceable(1) %1, i32 noundef %6) int Foo::TailFrom3(int x) { [[clang::musttail]] return (this->*pmf)(x); } -// CHECK: %call = musttail call noundef i32 %5(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %6) +// CHECK: %call = musttail call noundef i32 %5(ptr noundef nonnull readonly align 1 dereferenceable(1) %1, i32 noundef %6) void ReturnsVoid(); @@ -152,7 +152,7 @@ void Struct3::NonConstMemberFunction(int *i) { [[clang::musttail]] return ConstMemberFunction(i); } -// CHECK: musttail call void @_ZNK7Struct319ConstMemberFunctionEPKi(ptr noundef nonnull align 1 dereferenceable(1) %this1, ptr noundef %0) +// CHECK: musttail call void @_ZNK7Struct319ConstMemberFunctionEPKi(ptr noundef nonnull readonly align 1 dereferenceable(1) %this1, ptr noundef %0) struct HasNonTrivialCopyConstructor { HasNonTrivialCopyConstructor(const HasNonTrivialCopyConstructor &); @@ -213,7 +213,7 @@ int TestNonCapturingLambda() { [[clang::musttail]] return (+lambda)(); } -// CHECK: %call = call noundef ptr @"_ZZ22TestNonCapturing... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/106499 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits