@@ -47,7 +47,6 @@ define dso_local void @foo3_writable(ptr %p) {
4747 ret void
4848}
4949
50-
5150define 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+
336345define 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-
543551define 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