Skip to content

Commit 272c27c

Browse files
committed
[Inliner] Add tests for propagating more parameter attributes; NFC
1 parent 3f156ef commit 272c27c

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:%.*]]) {
@@ -580,3 +588,145 @@ define ptr @callee_bad_param_prop(ptr readonly %x) {
580588
%r = tail call ptr @llvm.ptrmask(ptr %x, i64 -1)
581589
ret ptr %r
582590
}
591+
592+
declare void @bar5(i32)
593+
594+
define dso_local void @foo4_range_0_10(i32 %v) {
595+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_0_10
596+
; CHECK-SAME: (i32 [[V:%.*]]) {
597+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
598+
; CHECK-NEXT: ret void
599+
;
600+
call void @bar5(i32 range(i32 0, 10) %v)
601+
ret void
602+
}
603+
604+
define dso_local void @foo4_range_10_40(i32 %v) {
605+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_10_40
606+
; CHECK-SAME: (i32 [[V:%.*]]) {
607+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
608+
; CHECK-NEXT: ret void
609+
;
610+
call void @bar5(i32 range(i32 10, 40) %v)
611+
ret void
612+
}
613+
614+
define dso_local void @foo4_2_range_0_10(i32 range(i32 0, 10) %v) {
615+
; CHECK-LABEL: define {{[^@]+}}@foo4_2_range_0_10
616+
; CHECK-SAME: (i32 range(i32 0, 10) [[V:%.*]]) {
617+
; CHECK-NEXT: call void @bar5(i32 [[V]])
618+
; CHECK-NEXT: ret void
619+
;
620+
call void @bar5(i32 %v)
621+
ret void
622+
}
623+
624+
define dso_local void @foo4(i32 %v) {
625+
; CHECK-LABEL: define {{[^@]+}}@foo4
626+
; CHECK-SAME: (i32 [[V:%.*]]) {
627+
; CHECK-NEXT: call void @bar5(i32 [[V]])
628+
; CHECK-NEXT: ret void
629+
;
630+
call void @bar5(i32 %v)
631+
ret void
632+
}
633+
634+
define void @prop_range_empty_intersect(i32 %v) {
635+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_intersect
636+
; CHECK-SAME: (i32 [[V:%.*]]) {
637+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
638+
; CHECK-NEXT: ret void
639+
;
640+
call void @foo4_range_0_10(i32 range(i32 11, 50) %v)
641+
ret void
642+
}
643+
644+
define void @prop_range_empty(i32 %v) {
645+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty
646+
; CHECK-SAME: (i32 [[V:%.*]]) {
647+
; CHECK-NEXT: call void @bar5(i32 [[V]])
648+
; CHECK-NEXT: ret void
649+
;
650+
call void @foo4(i32 range(i32 1, 0) %v)
651+
ret void
652+
}
653+
654+
define void @prop_range_empty_with_intersect(i32 %v) {
655+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_with_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 1, 0) %v)
661+
ret void
662+
}
663+
664+
define void @prop_range_intersect1(i32 %v) {
665+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect1
666+
; CHECK-SAME: (i32 [[V:%.*]]) {
667+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
668+
; CHECK-NEXT: ret void
669+
;
670+
call void @foo4_range_0_10(i32 range(i32 0, 9) %v)
671+
ret void
672+
}
673+
674+
define void @prop_range_intersect2(i32 %v) {
675+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect2
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, 9) %v)
681+
ret void
682+
}
683+
684+
define void @prop_range_intersect3(i32 %v) {
685+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect3
686+
; CHECK-SAME: (i32 [[V:%.*]]) {
687+
; CHECK-NEXT: call void @bar5(i32 [[V]])
688+
; CHECK-NEXT: ret void
689+
;
690+
call void @foo4_2_range_0_10(i32 range(i32 0, 11) %v)
691+
ret void
692+
}
693+
694+
define void @prop_range_intersect4(i32 %v) {
695+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect4
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 40, 5) %v)
701+
ret void
702+
}
703+
704+
define void @prop_range_intersect5(i32 %v) {
705+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect5
706+
; CHECK-SAME: (i32 [[V:%.*]]) {
707+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
708+
; CHECK-NEXT: ret void
709+
;
710+
call void @foo4_range_10_40(i32 range(i32 30, 20) %v)
711+
ret void
712+
}
713+
714+
define void @prop_range_keep(i32 %v) {
715+
; CHECK-LABEL: define {{[^@]+}}@prop_range_keep
716+
; CHECK-SAME: (i32 [[V:%.*]]) {
717+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
718+
; CHECK-NEXT: ret void
719+
;
720+
call void @foo4_range_10_40(i32 %v)
721+
ret void
722+
}
723+
724+
define void @prop_range_direct(i32 %v) {
725+
; CHECK-LABEL: define {{[^@]+}}@prop_range_direct
726+
; CHECK-SAME: (i32 [[V:%.*]]) {
727+
; CHECK-NEXT: call void @bar5(i32 [[V]])
728+
; CHECK-NEXT: ret void
729+
;
730+
call void @foo4(i32 range(i32 1, 11) %v)
731+
ret void
732+
}

0 commit comments

Comments
 (0)