@@ -604,36 +604,57 @@ exit:
604
604
605
605
;; ICE was caused by assert for the load used in the uncountable exit condition
606
606
;; being guaranteed to execute.
607
- @e = external addrspace ( 21 ) global [4 x i8 ]
608
- define void @crash_conditional_load_for_uncountable_exit () {
607
+ @ee.global = external global [4 x i8 ]
608
+ define void @crash_conditional_load_for_uncountable_exit (ptr dereferenceable ( 40 ) noalias %store.area ) {
609
609
; CHECK-LABEL: LV: Checking a loop in 'crash_conditional_load_for_uncountable_exit'
610
610
; CHECK: LV: Not vectorizing: Load for uncountable exit not guaranteed to execute.
611
611
entry:
612
- br label %cont
612
+ br label %for.body
613
613
614
- handler.out_of_bounds:
615
- unreachable
614
+ for.body:
615
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.inc ]
616
+ %ee.addr = getelementptr i8 , ptr @ee.global , i64 %iv
617
+ br i1 false , label %ee.block , label %invalid.block
618
+
619
+ ee.block:
620
+ %ee.val = load i8 , ptr %ee.addr , align 1
621
+ store i16 0 , ptr %store.area , align 2
622
+ %ee.cmp = icmp eq i8 %ee.val , 0
623
+ br i1 %ee.cmp , label %for.inc , label %invalid.block
616
624
617
- cont :
618
- %h.06 = phi i64 [ 0 , %entry ], [ %inc , %a.exit ]
619
- %arrayidx = getelementptr i8 , ptr addrspace ( 21 ) @e , i64 %h.06
620
- br i1 false , label %cont1 , label %handler.type_mismatch
625
+ for.inc :
626
+ %iv.next = add nuw nsw i64 %iv , 1
627
+ %counted.cond = icmp eq i64 %iv.next , 10
628
+ br i1 %counted.cond , label %invalid.block , label %for.body
621
629
622
- handler.type_mismatch :
630
+ invalid.block :
623
631
unreachable
632
+ }
633
+
634
+ define void @crash_conditional_load_for_uncountable_exit_argptr (ptr dereferenceable (40 ) noalias %store.area , ptr dereferenceable (4 ) %load.area , i1 %skip.cond ) {
635
+ ; CHECK-LABEL: LV: Checking a loop in 'crash_conditional_load_for_uncountable_exit_argptr'
636
+ ; CHECK: LV: Not vectorizing: Loop has too many uncountable exits.
637
+ entry:
638
+ br label %for.body
624
639
625
- cont1:
626
- %0 = load i8 , ptr addrspace (21 ) %arrayidx , align 1
627
- store i16 0 , ptr null , align 2
628
- %cmp.not.i.i = icmp eq i8 %0 , 0
629
- br i1 %cmp.not.i.i , label %a.exit , label %if.then.i.i
640
+ for.body:
641
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.inc ]
642
+ %ee.addr = getelementptr i8 , ptr %load.area , i64 %iv
643
+ br i1 %skip.cond , label %ee.block , label %invalid.block
630
644
631
- if.then.i.i:
632
- unreachable
645
+ ee.block:
646
+ %ee.val = load i8 , ptr %ee.addr , align 1
647
+ store i16 0 , ptr %store.area , align 2
648
+ %ee.cmp = icmp eq i8 %ee.val , 0
649
+ br i1 %ee.cmp , label %for.inc , label %invalid.block
633
650
634
- a.exit:
635
- %inc = add i64 %h.06 , 1
636
- br i1 true , label %handler.out_of_bounds , label %cont
651
+ for.inc:
652
+ %iv.next = add nuw nsw i64 %iv , 1
653
+ %counted.cond = icmp eq i64 %iv.next , 10
654
+ br i1 %counted.cond , label %invalid.block , label %for.body
655
+
656
+ invalid.block:
657
+ unreachable
637
658
}
638
659
639
660
0 commit comments