Skip to content

Commit 98dd7c6

Browse files
committed
[Inliner] Add tests for propagating more parameter attributes; NFC
1 parent b3c687b commit 98dd7c6

File tree

1 file changed

+152
-2
lines changed

1 file changed

+152
-2
lines changed

llvm/test/Transforms/Inline/access-attributes-prop.ll

Lines changed: 152 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ define dso_local void @foo3_writable(ptr %p) {
4747
ret void
4848
}
4949

50-
5150
define dso_local void @foo1_bar_aligned64_deref512(ptr %p) {
5251
; CHECK-LABEL: define {{[^@]+}}@foo1_bar_aligned64_deref512
5352
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -333,6 +332,16 @@ define void @prop_param_nonnull_and_align(ptr %p) {
333332
ret void
334333
}
335334

335+
define void @prop_param_nofree_and_align(ptr %p) {
336+
; CHECK-LABEL: define {{[^@]+}}@prop_param_nofree_and_align
337+
; CHECK-SAME: (ptr [[P:%.*]]) {
338+
; CHECK-NEXT: call void @bar1(ptr [[P]])
339+
; CHECK-NEXT: ret void
340+
;
341+
call void @foo1(ptr nofree align 32 %p)
342+
ret void
343+
}
344+
336345
define void @prop_param_deref_align_no_update(ptr %p) {
337346
; CHECK-LABEL: define {{[^@]+}}@prop_param_deref_align_no_update
338347
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -539,7 +548,6 @@ define void @prop_no_conflict_writable(ptr %p) {
539548
ret void
540549
}
541550

542-
543551
define void @prop_no_conflict_writable2(ptr %p) {
544552
; CHECK-LABEL: define {{[^@]+}}@prop_no_conflict_writable2
545553
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -600,3 +608,145 @@ define void @prop_byval_readonly2(ptr %p) {
600608
call void @foo_byval_readonly2(ptr %p)
601609
ret void
602610
}
611+
612+
declare void @bar5(i32)
613+
614+
define dso_local void @foo4_range_0_10(i32 %v) {
615+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_0_10
616+
; CHECK-SAME: (i32 [[V:%.*]]) {
617+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
618+
; CHECK-NEXT: ret void
619+
;
620+
call void @bar5(i32 range(i32 0, 10) %v)
621+
ret void
622+
}
623+
624+
define dso_local void @foo4_range_10_40(i32 %v) {
625+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_10_40
626+
; CHECK-SAME: (i32 [[V:%.*]]) {
627+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
628+
; CHECK-NEXT: ret void
629+
;
630+
call void @bar5(i32 range(i32 10, 40) %v)
631+
ret void
632+
}
633+
634+
define dso_local void @foo4_2_range_0_10(i32 range(i32 0, 10) %v) {
635+
; CHECK-LABEL: define {{[^@]+}}@foo4_2_range_0_10
636+
; CHECK-SAME: (i32 range(i32 0, 10) [[V:%.*]]) {
637+
; CHECK-NEXT: call void @bar5(i32 [[V]])
638+
; CHECK-NEXT: ret void
639+
;
640+
call void @bar5(i32 %v)
641+
ret void
642+
}
643+
644+
define dso_local void @foo4(i32 %v) {
645+
; CHECK-LABEL: define {{[^@]+}}@foo4
646+
; CHECK-SAME: (i32 [[V:%.*]]) {
647+
; CHECK-NEXT: call void @bar5(i32 [[V]])
648+
; CHECK-NEXT: ret void
649+
;
650+
call void @bar5(i32 %v)
651+
ret void
652+
}
653+
654+
define void @prop_range_empty_intersect(i32 %v) {
655+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_intersect
656+
; CHECK-SAME: (i32 [[V:%.*]]) {
657+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
658+
; CHECK-NEXT: ret void
659+
;
660+
call void @foo4_range_0_10(i32 range(i32 11, 50) %v)
661+
ret void
662+
}
663+
664+
define void @prop_range_empty(i32 %v) {
665+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty
666+
; CHECK-SAME: (i32 [[V:%.*]]) {
667+
; CHECK-NEXT: call void @bar5(i32 [[V]])
668+
; CHECK-NEXT: ret void
669+
;
670+
call void @foo4(i32 range(i32 1, 0) %v)
671+
ret void
672+
}
673+
674+
define void @prop_range_empty_with_intersect(i32 %v) {
675+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_with_intersect
676+
; CHECK-SAME: (i32 [[V:%.*]]) {
677+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
678+
; CHECK-NEXT: ret void
679+
;
680+
call void @foo4_range_0_10(i32 range(i32 1, 0) %v)
681+
ret void
682+
}
683+
684+
define void @prop_range_intersect1(i32 %v) {
685+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect1
686+
; CHECK-SAME: (i32 [[V:%.*]]) {
687+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
688+
; CHECK-NEXT: ret void
689+
;
690+
call void @foo4_range_0_10(i32 range(i32 0, 9) %v)
691+
ret void
692+
}
693+
694+
define void @prop_range_intersect2(i32 %v) {
695+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect2
696+
; CHECK-SAME: (i32 [[V:%.*]]) {
697+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
698+
; CHECK-NEXT: ret void
699+
;
700+
call void @foo4_range_0_10(i32 range(i32 1, 9) %v)
701+
ret void
702+
}
703+
704+
define void @prop_range_intersect3(i32 %v) {
705+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect3
706+
; CHECK-SAME: (i32 [[V:%.*]]) {
707+
; CHECK-NEXT: call void @bar5(i32 [[V]])
708+
; CHECK-NEXT: ret void
709+
;
710+
call void @foo4_2_range_0_10(i32 range(i32 0, 11) %v)
711+
ret void
712+
}
713+
714+
define void @prop_range_intersect4(i32 %v) {
715+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect4
716+
; CHECK-SAME: (i32 [[V:%.*]]) {
717+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
718+
; CHECK-NEXT: ret void
719+
;
720+
call void @foo4_range_0_10(i32 range(i32 40, 5) %v)
721+
ret void
722+
}
723+
724+
define void @prop_range_intersect5(i32 %v) {
725+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect5
726+
; CHECK-SAME: (i32 [[V:%.*]]) {
727+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
728+
; CHECK-NEXT: ret void
729+
;
730+
call void @foo4_range_10_40(i32 range(i32 30, 20) %v)
731+
ret void
732+
}
733+
734+
define void @prop_range_keep(i32 %v) {
735+
; CHECK-LABEL: define {{[^@]+}}@prop_range_keep
736+
; CHECK-SAME: (i32 [[V:%.*]]) {
737+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
738+
; CHECK-NEXT: ret void
739+
;
740+
call void @foo4_range_10_40(i32 %v)
741+
ret void
742+
}
743+
744+
define void @prop_range_direct(i32 %v) {
745+
; CHECK-LABEL: define {{[^@]+}}@prop_range_direct
746+
; CHECK-SAME: (i32 [[V:%.*]]) {
747+
; CHECK-NEXT: call void @bar5(i32 [[V]])
748+
; CHECK-NEXT: ret void
749+
;
750+
call void @foo4(i32 range(i32 1, 11) %v)
751+
ret void
752+
}

0 commit comments

Comments
 (0)