Skip to content

Commit 939ff72

Browse files
committed
[Inliner] Add tests for propagating more parameter attributes; NFC
1 parent 0fccae9 commit 939ff72

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:%.*]]) {
@@ -559,3 +567,145 @@ define void @prop_byval_readonly(ptr %p) {
559567
call void @foo_byval_readonly(ptr %p)
560568
ret void
561569
}
570+
571+
declare void @bar5(i32)
572+
573+
define dso_local void @foo4_range_0_10(i32 %v) {
574+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_0_10
575+
; CHECK-SAME: (i32 [[V:%.*]]) {
576+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
577+
; CHECK-NEXT: ret void
578+
;
579+
call void @bar5(i32 range(i32 0, 10) %v)
580+
ret void
581+
}
582+
583+
define dso_local void @foo4_range_10_40(i32 %v) {
584+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_10_40
585+
; CHECK-SAME: (i32 [[V:%.*]]) {
586+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
587+
; CHECK-NEXT: ret void
588+
;
589+
call void @bar5(i32 range(i32 10, 40) %v)
590+
ret void
591+
}
592+
593+
define dso_local void @foo4_2_range_0_10(i32 range(i32 0, 10) %v) {
594+
; CHECK-LABEL: define {{[^@]+}}@foo4_2_range_0_10
595+
; CHECK-SAME: (i32 range(i32 0, 10) [[V:%.*]]) {
596+
; CHECK-NEXT: call void @bar5(i32 [[V]])
597+
; CHECK-NEXT: ret void
598+
;
599+
call void @bar5(i32 %v)
600+
ret void
601+
}
602+
603+
define dso_local void @foo4(i32 %v) {
604+
; CHECK-LABEL: define {{[^@]+}}@foo4
605+
; CHECK-SAME: (i32 [[V:%.*]]) {
606+
; CHECK-NEXT: call void @bar5(i32 [[V]])
607+
; CHECK-NEXT: ret void
608+
;
609+
call void @bar5(i32 %v)
610+
ret void
611+
}
612+
613+
define void @prop_range_empty_intersect(i32 %v) {
614+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_intersect
615+
; CHECK-SAME: (i32 [[V:%.*]]) {
616+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
617+
; CHECK-NEXT: ret void
618+
;
619+
call void @foo4_range_0_10(i32 range(i32 11, 50) %v)
620+
ret void
621+
}
622+
623+
define void @prop_range_empty(i32 %v) {
624+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty
625+
; CHECK-SAME: (i32 [[V:%.*]]) {
626+
; CHECK-NEXT: call void @bar5(i32 [[V]])
627+
; CHECK-NEXT: ret void
628+
;
629+
call void @foo4(i32 range(i32 1, 0) %v)
630+
ret void
631+
}
632+
633+
define void @prop_range_empty_with_intersect(i32 %v) {
634+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_with_intersect
635+
; CHECK-SAME: (i32 [[V:%.*]]) {
636+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
637+
; CHECK-NEXT: ret void
638+
;
639+
call void @foo4_range_0_10(i32 range(i32 1, 0) %v)
640+
ret void
641+
}
642+
643+
define void @prop_range_intersect1(i32 %v) {
644+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect1
645+
; CHECK-SAME: (i32 [[V:%.*]]) {
646+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
647+
; CHECK-NEXT: ret void
648+
;
649+
call void @foo4_range_0_10(i32 range(i32 0, 9) %v)
650+
ret void
651+
}
652+
653+
define void @prop_range_intersect2(i32 %v) {
654+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect2
655+
; CHECK-SAME: (i32 [[V:%.*]]) {
656+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
657+
; CHECK-NEXT: ret void
658+
;
659+
call void @foo4_range_0_10(i32 range(i32 1, 9) %v)
660+
ret void
661+
}
662+
663+
define void @prop_range_intersect3(i32 %v) {
664+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect3
665+
; CHECK-SAME: (i32 [[V:%.*]]) {
666+
; CHECK-NEXT: call void @bar5(i32 [[V]])
667+
; CHECK-NEXT: ret void
668+
;
669+
call void @foo4_2_range_0_10(i32 range(i32 0, 11) %v)
670+
ret void
671+
}
672+
673+
define void @prop_range_intersect4(i32 %v) {
674+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect4
675+
; CHECK-SAME: (i32 [[V:%.*]]) {
676+
; CHECK-NEXT: call void @bar5(i32 range(i32 0, 10) [[V]])
677+
; CHECK-NEXT: ret void
678+
;
679+
call void @foo4_range_0_10(i32 range(i32 40, 5) %v)
680+
ret void
681+
}
682+
683+
define void @prop_range_intersect5(i32 %v) {
684+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect5
685+
; CHECK-SAME: (i32 [[V:%.*]]) {
686+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
687+
; CHECK-NEXT: ret void
688+
;
689+
call void @foo4_range_10_40(i32 range(i32 30, 20) %v)
690+
ret void
691+
}
692+
693+
define void @prop_range_keep(i32 %v) {
694+
; CHECK-LABEL: define {{[^@]+}}@prop_range_keep
695+
; CHECK-SAME: (i32 [[V:%.*]]) {
696+
; CHECK-NEXT: call void @bar5(i32 range(i32 10, 40) [[V]])
697+
; CHECK-NEXT: ret void
698+
;
699+
call void @foo4_range_10_40(i32 %v)
700+
ret void
701+
}
702+
703+
define void @prop_range_direct(i32 %v) {
704+
; CHECK-LABEL: define {{[^@]+}}@prop_range_direct
705+
; CHECK-SAME: (i32 [[V:%.*]]) {
706+
; CHECK-NEXT: call void @bar5(i32 [[V]])
707+
; CHECK-NEXT: ret void
708+
;
709+
call void @foo4(i32 range(i32 1, 11) %v)
710+
ret void
711+
}

0 commit comments

Comments
 (0)