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/ArgumentPromotion/basictest.ll
Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
; IS__CGSCC_OPM-NEXT: [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3:[0-9]+]] | ; IS__CGSCC_OPM-NEXT: [[C:%.*]] = call i32 @test(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR3:[0-9]+]] | ||||
; IS__CGSCC_OPM-NEXT: ret i32 [[C]] | ; IS__CGSCC_OPM-NEXT: ret i32 [[C]] | ||||
; | ; | ||||
; 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 {{[^@]+}}@caller | ; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@caller | ||||
; IS__CGSCC_NPM-SAME: (i32 [[TMP0:%.*]]) #[[ATTR0]] { | ; IS__CGSCC_NPM-SAME: (i32 [[TMP0:%.*]]) #[[ATTR0]] { | ||||
; IS__CGSCC_NPM-NEXT: [[B_PRIV:%.*]] = alloca i32, align 4 | ; IS__CGSCC_NPM-NEXT: [[B_PRIV:%.*]] = alloca i32, align 4 | ||||
; IS__CGSCC_NPM-NEXT: [[TMP2:%.*]] = load i32, i32* [[B_PRIV]], align 4 | ; IS__CGSCC_NPM-NEXT: [[TMP2:%.*]] = load i32, i32* [[B_PRIV]], align 4 | ||||
; IS__CGSCC_NPM-NEXT: [[C:%.*]] = call i32 @test(i32 undef, i32 undef) #[[ATTR1:[0-9]+]] | ; IS__CGSCC_NPM-NEXT: [[C:%.*]] = call i32 @test(i32 undef, i32 2) #[[ATTR1:[0-9]+]] | ||||
; IS__CGSCC_NPM-NEXT: ret i32 undef | ; IS__CGSCC_NPM-NEXT: ret i32 undef | ||||
; | ; | ||||
%A = alloca i32 | %A = alloca i32 | ||||
store i32 1, i32* %A | store i32 1, i32* %A | ||||
%C = call i32 @test(i32* %A, i32* %B) | %C = call i32 @test(i32* %A, i32* %B) | ||||
ret i32 %C | ret i32 %C | ||||
} | } | ||||
define i32 @callercaller() { | define i32 @callercaller() { | ||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind readnone | ; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind readnone willreturn | ||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@callercaller | ; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@callercaller | ||||
; IS__TUNIT_OPM-SAME: () #[[ATTR2:[0-9]+]] { | ; IS__TUNIT_OPM-SAME: () #[[ATTR2:[0-9]+]] { | ||||
; IS__TUNIT_OPM-NEXT: [[B:%.*]] = alloca i32, align 4 | ; IS__TUNIT_OPM-NEXT: [[B:%.*]] = alloca i32, align 4 | ||||
; IS__TUNIT_OPM-NEXT: store i32 2, i32* [[B]], align 4 | ; IS__TUNIT_OPM-NEXT: store i32 2, i32* [[B]], align 4 | ||||
; IS__TUNIT_OPM-NEXT: [[X:%.*]] = call i32 @caller(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR4:[0-9]+]] | ; IS__TUNIT_OPM-NEXT: [[X:%.*]] = call i32 @caller(i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B]]) #[[ATTR4:[0-9]+]] | ||||
; IS__TUNIT_OPM-NEXT: ret i32 [[X]] | ; IS__TUNIT_OPM-NEXT: ret i32 [[X]] | ||||
; | ; | ||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind readnone | ; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind readnone willreturn | ||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callercaller | ; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callercaller | ||||
; IS__TUNIT_NPM-SAME: () #[[ATTR2:[0-9]+]] { | ; IS__TUNIT_NPM-SAME: () #[[ATTR2:[0-9]+]] { | ||||
; IS__TUNIT_NPM-NEXT: [[B:%.*]] = alloca i32, align 4 | ; IS__TUNIT_NPM-NEXT: [[B:%.*]] = alloca i32, align 4 | ||||
; IS__TUNIT_NPM-NEXT: store i32 2, i32* [[B]], align 4 | ; IS__TUNIT_NPM-NEXT: store i32 2, i32* [[B]], align 4 | ||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i32, i32* [[B]], align 4 | ; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i32, i32* [[B]], align 4 | ||||
; IS__TUNIT_NPM-NEXT: [[X:%.*]] = call i32 @caller(i32 [[TMP1]]) #[[ATTR4:[0-9]+]] | ; IS__TUNIT_NPM-NEXT: [[X:%.*]] = call i32 @caller(i32 [[TMP1]]) #[[ATTR4:[0-9]+]] | ||||
; IS__TUNIT_NPM-NEXT: ret i32 [[X]] | ; IS__TUNIT_NPM-NEXT: ret i32 [[X]] | ||||
; | ; | ||||
Show All 14 Lines | ; | ||||
store i32 2, i32* %B | store i32 2, i32* %B | ||||
%X = call i32 @caller(i32* %B) | %X = call i32 @caller(i32* %B) | ||||
ret i32 %X | ret i32 %X | ||||
} | } | ||||
;. | ;. | ||||
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly nofree nosync nounwind readonly willreturn } | ; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly nofree nosync nounwind readonly willreturn } | ||||
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn } | ; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn } | ||||
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { nofree nosync nounwind readnone } | ; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { nofree nosync nounwind readnone willreturn } | ||||
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { nofree nosync nounwind readonly willreturn } | ; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { nofree nosync nounwind readonly willreturn } | ||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { nofree nosync nounwind willreturn } | ; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { nofree nosync nounwind willreturn } | ||||
;. | ;. | ||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR0]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind readnone willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind readnone willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { nosync nounwind readonly willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR3]] = { nosync nounwind readonly willreturn } | ||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nounwind willreturn } | ; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nounwind willreturn } | ||||
;. | ;. | ||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn } | ; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn } | ||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nosync nounwind readnone willreturn } | ; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nosync nounwind readnone willreturn } | ||||
;. | ;. |