@@ -46,7 +46,6 @@ define dso_local void @foo3_writable(ptr %p) {
4646 ret void
4747}
4848
49-
5049define 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+
325334define 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-
532540define 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