Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/Attributor/value-simplify.ll
Show First 20 Lines • Show All 505 Lines • ▼ Show 20 Lines | |||||
; IS__CGSCC____-NEXT: ret void | ; IS__CGSCC____-NEXT: ret void | ||||
; | ; | ||||
store %struct.X* %a, %struct.X** %b | store %struct.X* %a, %struct.X** %b | ||||
ret void | ret void | ||||
} | } | ||||
; FIXME: Alignment and dereferenceability are not propagated to the argument | ; FIXME: Alignment and dereferenceability are not propagated to the argument | ||||
define void @complicated_args_sret(%struct.X** %b) { | define void @complicated_args_sret(%struct.X** %b) { | ||||
; | ; | ||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly | |||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_sret | |||||
; IS__TUNIT_OPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] { | |||||
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 1073741824 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR4:[0-9]+]] | |||||
; IS__TUNIT_OPM-NEXT: ret void | |||||
; | ; | ||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly | ; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly | ||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_sret | ; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_sret | ||||
; IS__TUNIT_NPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] { | ; IS__TUNIT____-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] { | ||||
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 1073741824 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR3:[0-9]+]] | ; IS__TUNIT____-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 1073741824 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR3:[0-9]+]] | ||||
; IS__TUNIT_NPM-NEXT: ret void | ; IS__TUNIT____-NEXT: ret void | ||||
; | ; | ||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly | ; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly | ||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_sret | ; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_sret | ||||
; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2]] { | ; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2]] { | ||||
; IS__CGSCC____-NEXT: unreachable | ; IS__CGSCC____-NEXT: unreachable | ||||
; | ; | ||||
call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b) | call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b) | ||||
ret void | ret void | ||||
Show All 19 Lines | |||||
; IS__CGSCC____-NEXT: ret %struct.X* null | ; IS__CGSCC____-NEXT: ret %struct.X* null | ||||
; | ; | ||||
%call = call %struct.X* @test_nest(%struct.X* null) | %call = call %struct.X* @test_nest(%struct.X* null) | ||||
ret %struct.X* %call | ret %struct.X* %call | ||||
} | } | ||||
@S = external global %struct.X | @S = external global %struct.X | ||||
define internal void @test_byval(%struct.X* byval(%struct.X) %a) { | define internal void @test_byval(%struct.X* byval(%struct.X) %a) { | ||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | ; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly | ||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@test_byval | |||||
; IS__TUNIT_OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR2]] { | |||||
; IS__TUNIT_OPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A]], i32 0, i32 0 | |||||
; IS__TUNIT_OPM-NEXT: store i8* null, i8** [[G0]], align 8 | |||||
; IS__TUNIT_OPM-NEXT: ret void | |||||
; | |||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly | |||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@test_byval | |||||
; IS__TUNIT_NPM-SAME: (i8* [[TMP0:%.*]]) #[[ATTR2]] { | |||||
; IS__TUNIT_NPM-NEXT: [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8 | |||||
; IS__TUNIT_NPM-NEXT: [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8** | |||||
; IS__TUNIT_NPM-NEXT: store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8 | |||||
; IS__TUNIT_NPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0 | |||||
; IS__TUNIT_NPM-NEXT: store i8* null, i8** [[G0]], align 8 | |||||
; IS__TUNIT_NPM-NEXT: ret void | |||||
; | |||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly | |||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@test_byval | ; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@test_byval | ||||
; IS__CGSCC_OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR1]] { | ; IS__CGSCC_OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR2]] { | ||||
; IS__CGSCC_OPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A]], i32 0, i32 0 | ; IS__CGSCC_OPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A]], i32 0, i32 0 | ||||
; IS__CGSCC_OPM-NEXT: store i8* null, i8** [[G0]], align 8 | ; IS__CGSCC_OPM-NEXT: store i8* null, i8** [[G0]], align 8 | ||||
; IS__CGSCC_OPM-NEXT: ret void | ; IS__CGSCC_OPM-NEXT: ret void | ||||
; | ; | ||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | ; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | ||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test_byval | ; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test_byval | ||||
; IS__CGSCC_NPM-SAME: (i8* noalias nocapture nofree readnone [[TMP0:%.*]]) #[[ATTR1]] { | ; IS__CGSCC_NPM-SAME: (i8* noalias nocapture nofree readnone [[TMP0:%.*]]) #[[ATTR1]] { | ||||
; IS__CGSCC_NPM-NEXT: [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8 | ; IS__CGSCC_NPM-NEXT: [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8 | ||||
; IS__CGSCC_NPM-NEXT: [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8** | ; IS__CGSCC_NPM-NEXT: [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8** | ||||
; IS__CGSCC_NPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0 | ; IS__CGSCC_NPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A_PRIV]], i32 0, i32 0 | ||||
; IS__CGSCC_NPM-NEXT: store i8* null, i8** [[G0]], align 8 | |||||
; IS__CGSCC_NPM-NEXT: ret void | ; IS__CGSCC_NPM-NEXT: ret void | ||||
; | ; | ||||
%g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0 | %g0 = getelementptr %struct.X, %struct.X* %a, i32 0, i32 0 | ||||
store i8* null, i8** %g0 | store i8* null, i8** %g0 | ||||
ret void | ret void | ||||
} | } | ||||
define void @complicated_args_byval() { | define void @complicated_args_byval() { | ||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn | ; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn writeonly | ||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_byval | ; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_byval | ||||
; IS__TUNIT____-SAME: () #[[ATTR1]] { | ; IS__TUNIT_OPM-SAME: () #[[ATTR3]] { | ||||
; IS__TUNIT____-NEXT: ret void | ; IS__TUNIT_OPM-NEXT: call void @test_byval(%struct.X* nocapture nofree noundef nonnull readonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR3]] | ||||
; IS__TUNIT_OPM-NEXT: ret void | |||||
; | ; | ||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | ; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn writeonly | ||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_byval | ; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_byval | ||||
; IS__CGSCC____-SAME: () #[[ATTR1]] { | ; IS__TUNIT_NPM-SAME: () #[[ATTR3]] { | ||||
; IS__CGSCC____-NEXT: ret void | ; IS__TUNIT_NPM-NEXT: [[S_CAST:%.*]] = bitcast %struct.X* @S to i8** | ||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i8*, i8** [[S_CAST]], align 8 | |||||
; IS__TUNIT_NPM-NEXT: call void @test_byval(i8* [[TMP1]]) #[[ATTR3]] | |||||
; IS__TUNIT_NPM-NEXT: ret void | |||||
; | |||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | |||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_byval | |||||
; IS__CGSCC_OPM-SAME: () #[[ATTR1]] { | |||||
; IS__CGSCC_OPM-NEXT: call void @test_byval(%struct.X* noalias nocapture nofree noundef nonnull readnone byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR6:[0-9]+]] | |||||
; IS__CGSCC_OPM-NEXT: ret void | |||||
; | |||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn | |||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_byval | |||||
; IS__CGSCC_NPM-SAME: () #[[ATTR1]] { | |||||
; IS__CGSCC_NPM-NEXT: ret void | |||||
; | ; | ||||
call void @test_byval(%struct.X* byval(%struct.X) @S) | call void @test_byval(%struct.X* byval(%struct.X) @S) | ||||
ret void | ret void | ||||
} | } | ||||
declare void @sync() | declare void @sync() | ||||
; Make sure we *do not* load @S here! | ; Make sure we *do not* load @S here! | ||||
define internal i8*@test_byval2(%struct.X* byval(%struct.X) %a) { | define internal i8*@test_byval2(%struct.X* byval(%struct.X) %a) { | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | |||||
; | ; | ||||
%c = call i8* @test_byval2(%struct.X* byval(%struct.X) @S) | %c = call i8* @test_byval2(%struct.X* byval(%struct.X) @S) | ||||
ret i8* %c | ret i8* %c | ||||
} | } | ||||
define void @fixpoint_changed(i32* %p) { | define void @fixpoint_changed(i32* %p) { | ||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind writeonly | ; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind writeonly | ||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@fixpoint_changed | ; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@fixpoint_changed | ||||
; IS__TUNIT_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3:[0-9]+]] { | ; IS__TUNIT_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] { | ||||
; IS__TUNIT_OPM-NEXT: entry: | ; IS__TUNIT_OPM-NEXT: entry: | ||||
; IS__TUNIT_OPM-NEXT: br label [[FOR_COND:%.*]] | ; IS__TUNIT_OPM-NEXT: br label [[FOR_COND:%.*]] | ||||
; IS__TUNIT_OPM: for.cond: | ; IS__TUNIT_OPM: for.cond: | ||||
; IS__TUNIT_OPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] | ; IS__TUNIT_OPM-NEXT: [[J_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[SW_EPILOG:%.*]] ] | ||||
; IS__TUNIT_OPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 | ; IS__TUNIT_OPM-NEXT: [[CMP:%.*]] = icmp slt i32 [[J_0]], 30 | ||||
; IS__TUNIT_OPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] | ; IS__TUNIT_OPM-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] | ||||
; IS__TUNIT_OPM: for.body: | ; IS__TUNIT_OPM: for.body: | ||||
; IS__TUNIT_OPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ | ; IS__TUNIT_OPM-NEXT: switch i32 [[J_0]], label [[SW_EPILOG]] [ | ||||
▲ Show 20 Lines • Show All 195 Lines • ▼ Show 20 Lines | |||||
; IS__CGSCC____-SAME: () #[[ATTR1]] { | ; IS__CGSCC____-SAME: () #[[ATTR1]] { | ||||
; IS__CGSCC____-NEXT: ret i8 undef | ; IS__CGSCC____-NEXT: ret i8 undef | ||||
; | ; | ||||
%c = add i8 %a, 7 | %c = add i8 %a, 7 | ||||
ret i8 %c | ret i8 %c | ||||
} | } | ||||
define void @user_as3() { | define void @user_as3() { | ||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn writeonly | ; IS__TUNIT____: Function Attrs: nofree nosync nounwind willreturn writeonly | ||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@user_as3 | ; IS__TUNIT____-LABEL: define {{[^@]+}}@user_as3 | ||||
; IS__TUNIT_OPM-SAME: () #[[ATTR4]] { | ; IS__TUNIT____-SAME: () #[[ATTR3]] { | ||||
; IS__TUNIT_OPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ; IS__TUNIT____-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ||||
; IS__TUNIT_OPM-NEXT: ret void | ; IS__TUNIT____-NEXT: ret void | ||||
; | |||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn writeonly | |||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@user_as3 | |||||
; IS__TUNIT_NPM-SAME: () #[[ATTR3]] { | |||||
; IS__TUNIT_NPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | |||||
; IS__TUNIT_NPM-NEXT: ret void | |||||
; | ; | ||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user_as3 | ; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user_as3 | ||||
; IS__CGSCC_OPM-SAME: () #[[ATTR4:[0-9]+]] { | ; IS__CGSCC_OPM-SAME: () #[[ATTR4:[0-9]+]] { | ||||
; IS__CGSCC_OPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ; IS__CGSCC_OPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ||||
; IS__CGSCC_OPM-NEXT: ret void | ; IS__CGSCC_OPM-NEXT: ret void | ||||
; | ; | ||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@user_as3 | ; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@user_as3 | ||||
; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] { | ; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] { | ||||
; IS__CGSCC_NPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ; IS__CGSCC_NPM-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4 | ||||
; IS__CGSCC_NPM-NEXT: ret void | ; IS__CGSCC_NPM-NEXT: ret void | ||||
; | ; | ||||
%call = call fastcc i32 addrspace(3)* @const_ptr_return_as3() | %call = call fastcc i32 addrspace(3)* @const_ptr_return_as3() | ||||
store i32 0, i32 addrspace(3)* %call | store i32 0, i32 addrspace(3)* %call | ||||
ret void | ret void | ||||
} | } | ||||
define void @user() { | define void @user() { | ||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn writeonly | ; IS__TUNIT____: Function Attrs: nofree nosync nounwind willreturn writeonly | ||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@user | ; IS__TUNIT____-LABEL: define {{[^@]+}}@user | ||||
; IS__TUNIT_OPM-SAME: () #[[ATTR4]] { | ; IS__TUNIT____-SAME: () #[[ATTR3]] { | ||||
; IS__TUNIT_OPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 | ; IS__TUNIT____-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 | ||||
; IS__TUNIT_OPM-NEXT: ret void | ; IS__TUNIT____-NEXT: ret void | ||||
; | |||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn writeonly | |||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@user | |||||
; IS__TUNIT_NPM-SAME: () #[[ATTR3]] { | |||||
; IS__TUNIT_NPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 | |||||
; IS__TUNIT_NPM-NEXT: ret void | |||||
; | ; | ||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user | ; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@user | ||||
; IS__CGSCC_OPM-SAME: () #[[ATTR4]] { | ; IS__CGSCC_OPM-SAME: () #[[ATTR4]] { | ||||
; IS__CGSCC_OPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 | ; IS__CGSCC_OPM-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4 | ||||
; IS__CGSCC_OPM-NEXT: ret void | ; IS__CGSCC_OPM-NEXT: ret void | ||||
; | ; | ||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly | ||||
▲ Show 20 Lines • Show All 336 Lines • ▼ Show 20 Lines | join: | ||||
uselistorder label %join, { 1, 0 } | uselistorder label %join, { 1, 0 } | ||||
} | } | ||||
;. | ;. | ||||
; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ||||
; IS__TUNIT_OPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } | ; IS__TUNIT_OPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } | ||||
; IS__TUNIT_OPM: attributes #[[ATTR2]] = { argmemonly nofree nosync nounwind willreturn writeonly } | ; IS__TUNIT_OPM: attributes #[[ATTR2]] = { argmemonly nofree nosync nounwind willreturn writeonly } | ||||
; IS__TUNIT_OPM: attributes #[[ATTR3]] = { argmemonly nofree nosync nounwind writeonly } | ; IS__TUNIT_OPM: attributes #[[ATTR3]] = { nofree nosync nounwind willreturn writeonly } | ||||
; IS__TUNIT_OPM: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn writeonly } | ; IS__TUNIT_OPM: attributes #[[ATTR4]] = { argmemonly nofree nosync nounwind writeonly } | ||||
; IS__TUNIT_OPM: attributes #[[ATTR5]] = { willreturn } | ; IS__TUNIT_OPM: attributes #[[ATTR5]] = { willreturn } | ||||
;. | ;. | ||||
; IS__TUNIT_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ; IS__TUNIT_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ||||
; IS__TUNIT_NPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } | ; IS__TUNIT_NPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn } | ||||
; IS__TUNIT_NPM: attributes #[[ATTR2]] = { argmemonly nofree nosync nounwind willreturn writeonly } | ; IS__TUNIT_NPM: attributes #[[ATTR2]] = { argmemonly nofree nosync nounwind willreturn writeonly } | ||||
; IS__TUNIT_NPM: attributes #[[ATTR3]] = { nofree nosync nounwind willreturn writeonly } | ; IS__TUNIT_NPM: attributes #[[ATTR3]] = { nofree nosync nounwind willreturn writeonly } | ||||
; IS__TUNIT_NPM: attributes #[[ATTR4]] = { willreturn } | ; IS__TUNIT_NPM: attributes #[[ATTR4]] = { willreturn } | ||||
;. | ;. | ||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } | ; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind writeonly } | ; IS__CGSCC_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind writeonly } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly } | ; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR5]] = { willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR6]] = { nounwind willreturn writeonly } | |||||
;. | ;. | ||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn } | ||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } | ; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } | ||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } | ; IS__CGSCC_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly } | ||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind willreturn writeonly } | ; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind willreturn writeonly } | ||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { willreturn } | ; IS__CGSCC_NPM: attributes #[[ATTR4]] = { willreturn } | ||||
;. | ;. | ||||
; CHECK: [[RNG0]] = !{i32 0, i32 -2147483648} | ; CHECK: [[RNG0]] = !{i32 0, i32 -2147483648} | ||||
;. | ;. |