Skip to content

Commit c304152

Browse files
committed
[Inliner] Add tests for propagating more parameter attributes; NFC
1 parent 195ba45 commit c304152

File tree

1 file changed

+114
-2
lines changed

1 file changed

+114
-2
lines changed

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

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

49-
5049
define dso_local void @foo1_bar_aligned64_deref512(ptr %p) {
5150
; CHECK-LABEL: define {{[^@]+}}@foo1_bar_aligned64_deref512
5251
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -322,6 +321,16 @@ define void @prop_param_nonnull_and_align(ptr %p) {
322321
ret void
323322
}
324323

324+
define void @prop_param_nofree_and_align(ptr %p) {
325+
; CHECK-LABEL: define {{[^@]+}}@prop_param_nofree_and_align
326+
; CHECK-SAME: (ptr [[P:%.*]]) {
327+
; CHECK-NEXT: call void @bar1(ptr [[P]])
328+
; CHECK-NEXT: ret void
329+
;
330+
call void @foo1(ptr nofree align 32 %p)
331+
ret void
332+
}
333+
325334
define void @prop_param_deref_align_no_update(ptr %p) {
326335
; CHECK-LABEL: define {{[^@]+}}@prop_param_deref_align_no_update
327336
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -528,7 +537,6 @@ define void @prop_no_conflict_writable(ptr %p) {
528537
ret void
529538
}
530539

531-
532540
define void @prop_no_conflict_writable2(ptr %p) {
533541
; CHECK-LABEL: define {{[^@]+}}@prop_no_conflict_writable2
534542
; CHECK-SAME: (ptr [[P:%.*]]) {
@@ -539,3 +547,107 @@ define void @prop_no_conflict_writable2(ptr %p) {
539547
ret void
540548
}
541549

550+
declare void @bar4(i32)
551+
552+
define dso_local void @foo4_range_0_10(i32 %v) {
553+
; CHECK-LABEL: define {{[^@]+}}@foo4_range_0_10
554+
; CHECK-SAME: (i32 [[V:%.*]]) {
555+
; CHECK-NEXT: call void @bar4(i32 range(i32 0, 10) [[V]])
556+
; CHECK-NEXT: ret void
557+
;
558+
call void @bar4(i32 range(i32 0, 10) %v)
559+
ret void
560+
}
561+
562+
define dso_local void @foo4_2_range_0_10(i32 range(i32 0, 10) %v) {
563+
; CHECK-LABEL: define {{[^@]+}}@foo4_2_range_0_10
564+
; CHECK-SAME: (i32 range(i32 0, 10) [[V:%.*]]) {
565+
; CHECK-NEXT: call void @bar4(i32 [[V]])
566+
; CHECK-NEXT: ret void
567+
;
568+
call void @bar4(i32 %v)
569+
ret void
570+
}
571+
572+
573+
define dso_local void @foo4(i32 %v) {
574+
; CHECK-LABEL: define {{[^@]+}}@foo4
575+
; CHECK-SAME: (i32 [[V:%.*]]) {
576+
; CHECK-NEXT: call void @bar4(i32 [[V]])
577+
; CHECK-NEXT: ret void
578+
;
579+
call void @bar4(i32 %v)
580+
ret void
581+
}
582+
583+
584+
585+
define void @prop_range_empty_intersect(i32 %v) {
586+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_intersect
587+
; CHECK-SAME: (i32 [[V:%.*]]) {
588+
; CHECK-NEXT: call void @bar4(i32 range(i32 0, 10) [[V]])
589+
; CHECK-NEXT: ret void
590+
;
591+
call void @foo4_range_0_10(i32 range(i32 11, 50) %v)
592+
ret void
593+
}
594+
595+
define void @prop_range_empty(i32 %v) {
596+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty
597+
; CHECK-SAME: (i32 [[V:%.*]]) {
598+
; CHECK-NEXT: call void @bar4(i32 [[V]])
599+
; CHECK-NEXT: ret void
600+
;
601+
call void @foo4(i32 range(i32 1, 0) %v)
602+
ret void
603+
}
604+
605+
define void @prop_range_empty_with_intersect(i32 %v) {
606+
; CHECK-LABEL: define {{[^@]+}}@prop_range_empty_with_intersect
607+
; CHECK-SAME: (i32 [[V:%.*]]) {
608+
; CHECK-NEXT: call void @bar4(i32 range(i32 0, 10) [[V]])
609+
; CHECK-NEXT: ret void
610+
;
611+
call void @foo4_range_0_10(i32 range(i32 1, 0) %v)
612+
ret void
613+
}
614+
615+
define void @prop_range_intersect1(i32 %v) {
616+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect1
617+
; CHECK-SAME: (i32 [[V:%.*]]) {
618+
; CHECK-NEXT: call void @bar4(i32 range(i32 0, 10) [[V]])
619+
; CHECK-NEXT: ret void
620+
;
621+
call void @foo4_range_0_10(i32 range(i32 0, 9) %v)
622+
ret void
623+
}
624+
625+
define void @prop_range_intersect2(i32 %v) {
626+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect2
627+
; CHECK-SAME: (i32 [[V:%.*]]) {
628+
; CHECK-NEXT: call void @bar4(i32 range(i32 0, 10) [[V]])
629+
; CHECK-NEXT: ret void
630+
;
631+
call void @foo4_range_0_10(i32 range(i32 1, 9) %v)
632+
ret void
633+
}
634+
635+
define void @prop_range_intersect3(i32 %v) {
636+
; CHECK-LABEL: define {{[^@]+}}@prop_range_intersect3
637+
; CHECK-SAME: (i32 [[V:%.*]]) {
638+
; CHECK-NEXT: call void @bar4(i32 [[V]])
639+
; CHECK-NEXT: ret void
640+
;
641+
call void @foo4_2_range_0_10(i32 range(i32 0, 11) %v)
642+
ret void
643+
}
644+
645+
define void @prop_range_direct(i32 %v) {
646+
; CHECK-LABEL: define {{[^@]+}}@prop_range_direct
647+
; CHECK-SAME: (i32 [[V:%.*]]) {
648+
; CHECK-NEXT: call void @bar4(i32 [[V]])
649+
; CHECK-NEXT: ret void
650+
;
651+
call void @foo4(i32 range(i32 1, 11) %v)
652+
ret void
653+
}

0 commit comments

Comments
 (0)