Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
clang/test/CodeGenObjCXX/arc-blocks.mm
Show First 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK: [[INVOKE_CONT4]]: | // CHECK: [[INVOKE_CONT4]]: | ||||
// CHECK: ret void | // CHECK: ret void | ||||
// CHECK: [[LPAD]]: | // CHECK: [[LPAD]]: | ||||
// CHECK: br label %[[EHCLEANUP:.*]] | // CHECK: br label %[[EHCLEANUP:.*]] | ||||
// CHECK: [[LPAD3]]: | // CHECK: [[LPAD3]]: | ||||
// CHECK: invoke void @_ZN5test12S0D1Ev(%[[STRUCT_TEST1_S0]]* {{[^,]*}} %[[V12]]) | // CHECK: call unwindabort void @_ZN5test12S0D1Ev(%[[STRUCT_TEST1_S0]]* {{[^,]*}} %[[V12]]) | ||||
// CHECK: to label %[[INVOKE_CONT5:.*]] unwind label %[[TERMINATE_LPAD:.*]] | |||||
// CHECK: [[INVOKE_CONT5]]: | |||||
// CHECK: br label %[[EHCLEANUP]] | // CHECK: br label %[[EHCLEANUP]] | ||||
// CHECK: [[EHCLEANUP]]: | // CHECK: [[EHCLEANUP]]: | ||||
// CHECK: call void @llvm.objc.destroyWeak(i8** %[[V8]]) | // CHECK: call void @llvm.objc.destroyWeak(i8** %[[V8]]) | ||||
// CHECK: %[[V21:.*]] = load i8*, i8** %[[V5]], align 8 | // CHECK: %[[V21:.*]] = load i8*, i8** %[[V5]], align 8 | ||||
// CHECK: call void @_Block_object_dispose(i8* %[[V21]], i32 8) | // CHECK: call void @_Block_object_dispose(i8* %[[V21]], i32 8) | ||||
// CHECK: call void @llvm.objc.storeStrong(i8** %[[V10]], i8* null) | // CHECK: call void @llvm.objc.storeStrong(i8** %[[V10]], i8* null) | ||||
// CHECK: br label %[[EH_RESUME:.*]] | // CHECK: br label %[[EH_RESUME:.*]] | ||||
// CHECK: [[EH_RESUME]]: | // CHECK: [[EH_RESUME]]: | ||||
// CHECK: resume { i8*, i32 } | // CHECK: resume { i8*, i32 } | ||||
// CHECK: [[TERMINATE_LPAD]]: | |||||
// CHECK: call void @__clang_call_terminate( | |||||
// CHECK-O1-LABEL: define linkonce_odr hidden void @__copy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | // CHECK-O1-LABEL: define linkonce_odr hidden void @__copy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | ||||
// CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | // CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | ||||
// CHECK-NOEXCP: define linkonce_odr hidden void @__copy_helper_block_8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | // CHECK-NOEXCP: define linkonce_odr hidden void @__copy_helper_block_8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | ||||
// CHECK: define linkonce_odr hidden void @__destroy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | // CHECK: define linkonce_odr hidden void @__destroy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | ||||
// CHECK: %[[BLOCK:.*]] = bitcast i8* %{{.*}} to <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* | // CHECK: %[[BLOCK:.*]] = bitcast i8* %{{.*}} to <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* | ||||
// CHECK: %[[V4:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK]], i32 0, i32 5 | // CHECK: %[[V4:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK]], i32 0, i32 5 | ||||
// CHECK: %[[V2:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK]], i32 0, i32 6 | // CHECK: %[[V2:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK]], i32 0, i32 6 | ||||
Show All 10 Lines | |||||
// CHECK: [[INVOKE_CONT2]]: | // CHECK: [[INVOKE_CONT2]]: | ||||
// CHECK: call void @llvm.objc.destroyWeak(i8** %[[V3]]) | // CHECK: call void @llvm.objc.destroyWeak(i8** %[[V3]]) | ||||
// CHECK: %[[V7:.*]] = load i8*, i8** %[[V2]], align 8 | // CHECK: %[[V7:.*]] = load i8*, i8** %[[V2]], align 8 | ||||
// CHECK: call void @_Block_object_dispose(i8* %[[V7]], i32 8) | // CHECK: call void @_Block_object_dispose(i8* %[[V7]], i32 8) | ||||
// CHECK: call void @llvm.objc.storeStrong(i8** %[[V4]], i8* null) | // CHECK: call void @llvm.objc.storeStrong(i8** %[[V4]], i8* null) | ||||
// CHECK: ret void | // CHECK: ret void | ||||
// CHECK: [[LPAD]]: | // CHECK: [[LPAD]]: | ||||
// CHECK: invoke void @_ZN5test12S0D1Ev(%[[STRUCT_TEST1_S0]]* {{[^,]*}} %[[V5]]) | // CHECK: call unwindabort void @_ZN5test12S0D1Ev(%[[STRUCT_TEST1_S0]]* {{[^,]*}} %[[V5]]) | ||||
// CHECK: to label %[[INVOKE_CONT3:.*]] unwind label %[[TERMINATE_LPAD:.*]] | // CHECK: br label %[[EHCLEANUP]] | ||||
// CHECK: [[LPAD1]] | // CHECK: [[LPAD1]] | ||||
// CHECK: br label %[[EHCLEANUP:.*]] | // CHECK: br label %[[EHCLEANUP:.*]] | ||||
// CHECK: [[INVOKE_CONT3]]: | |||||
// CHECK: br label %[[EHCLEANUP]] | |||||
// CHECK: [[EHCLEANUP]]: | // CHECK: [[EHCLEANUP]]: | ||||
// CHECK: call void @llvm.objc.destroyWeak(i8** %[[V3]]) | // CHECK: call void @llvm.objc.destroyWeak(i8** %[[V3]]) | ||||
// CHECK: %[[V14:.*]] = load i8*, i8** %[[V2]], align 8 | // CHECK: %[[V14:.*]] = load i8*, i8** %[[V2]], align 8 | ||||
// CHECK: call void @_Block_object_dispose(i8* %[[V14]], i32 8) | // CHECK: call void @_Block_object_dispose(i8* %[[V14]], i32 8) | ||||
// CHECK: call void @llvm.objc.storeStrong(i8** %[[V4]], i8* null) | // CHECK: call void @llvm.objc.storeStrong(i8** %[[V4]], i8* null) | ||||
// CHECK: br label %[[EH_RESUME:.*]] | // CHECK: br label %[[EH_RESUME:.*]] | ||||
// CHECK: [[EH_RESUME]]: | // CHECK: [[EH_RESUME]]: | ||||
// CHECK: resume { i8*, i32 } | // CHECK: resume { i8*, i32 } | ||||
// CHECK: [[TERMINATE_LPAD]]: | |||||
// CHECK: call void @__clang_call_terminate( | |||||
// CHECK-O1-LABEL: define linkonce_odr hidden void @__destroy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | // CHECK-O1-LABEL: define linkonce_odr hidden void @__destroy_helper_block_ea8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | ||||
// CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | // CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | ||||
// CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | // CHECK-O1: call void @llvm.objc.release({{.*}}) {{.*}} !clang.imprecise_release | ||||
// CHECK-NOEXCP: define linkonce_odr hidden void @__destroy_helper_block_8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | // CHECK-NOEXCP: define linkonce_odr hidden void @__destroy_helper_block_8_32s40r48w56c15_ZTSN5test12S0E60c15_ZTSN5test12S0E( | ||||
namespace { | namespace { | ||||
struct TrivialInternal { | struct TrivialInternal { | ||||
int a; | int a; | ||||
▲ Show 20 Lines • Show All 165 Lines • Show Last 20 Lines |