11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2- ; RUN: opt -S < %s -p loop-vectorize -enable-early-exit-vectorization -enable-early-exit-vectorization \
3- ; RUN: | FileCheck %s --check-prefix=MAY_FAULT
2+ ; RUN: opt -S < %s -p loop-vectorize | FileCheck %s
43
54declare void @init_mem (ptr , i64 );
65
76
87define i64 @same_exit_block_pre_inc_use1_too_small_allocas () {
9- ; MAY_FAULT -LABEL: define i64 @same_exit_block_pre_inc_use1_too_small_allocas() {
10- ; MAY_FAULT -NEXT: entry:
11- ; MAY_FAULT -NEXT: [[P1:%.*]] = alloca [42 x i8], align 1
12- ; MAY_FAULT -NEXT: [[P2:%.*]] = alloca [42 x i8], align 1
13- ; MAY_FAULT -NEXT: call void @init_mem(ptr [[P1]], i64 1024)
14- ; MAY_FAULT -NEXT: call void @init_mem(ptr [[P2]], i64 1024)
15- ; MAY_FAULT -NEXT: br label [[LOOP:%.*]]
16- ; MAY_FAULT : loop:
17- ; MAY_FAULT -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
18- ; MAY_FAULT -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
19- ; MAY_FAULT -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
20- ; MAY_FAULT -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
21- ; MAY_FAULT -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
22- ; MAY_FAULT -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
23- ; MAY_FAULT -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
24- ; MAY_FAULT : loop.inc:
25- ; MAY_FAULT -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
26- ; MAY_FAULT -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
27- ; MAY_FAULT -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
28- ; MAY_FAULT : loop.end:
29- ; MAY_FAULT -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
30- ; MAY_FAULT -NEXT: ret i64 [[RETVAL]]
8+ ; CHECK -LABEL: define i64 @same_exit_block_pre_inc_use1_too_small_allocas() {
9+ ; CHECK -NEXT: entry:
10+ ; CHECK -NEXT: [[P1:%.*]] = alloca [42 x i8], align 1
11+ ; CHECK -NEXT: [[P2:%.*]] = alloca [42 x i8], align 1
12+ ; CHECK -NEXT: call void @init_mem(ptr [[P1]], i64 1024)
13+ ; CHECK -NEXT: call void @init_mem(ptr [[P2]], i64 1024)
14+ ; CHECK -NEXT: br label [[LOOP:%.*]]
15+ ; CHECK : loop:
16+ ; CHECK -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
17+ ; CHECK -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
18+ ; CHECK -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
19+ ; CHECK -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
20+ ; CHECK -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
21+ ; CHECK -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
22+ ; CHECK -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
23+ ; CHECK : loop.inc:
24+ ; CHECK -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
25+ ; CHECK -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
26+ ; CHECK -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
27+ ; CHECK : loop.end:
28+ ; CHECK -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
29+ ; CHECK -NEXT: ret i64 [[RETVAL]]
3130;
3231entry:
3332 %p1 = alloca [42 x i8 ]
@@ -57,25 +56,25 @@ loop.end:
5756
5857
5958define i64 @same_exit_block_pre_inc_use1_too_small_deref_ptrs (ptr dereferenceable (42 ) %p1 , ptr dereferenceable (42 ) %p2 ) {
60- ; MAY_FAULT -LABEL: define i64 @same_exit_block_pre_inc_use1_too_small_deref_ptrs(
61- ; MAY_FAULT -SAME: ptr dereferenceable(42) [[P1:%.*]], ptr dereferenceable(42) [[P2:%.*]]) {
62- ; MAY_FAULT -NEXT: entry:
63- ; MAY_FAULT -NEXT: br label [[LOOP:%.*]]
64- ; MAY_FAULT : loop:
65- ; MAY_FAULT -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
66- ; MAY_FAULT -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
67- ; MAY_FAULT -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
68- ; MAY_FAULT -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
69- ; MAY_FAULT -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
70- ; MAY_FAULT -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
71- ; MAY_FAULT -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
72- ; MAY_FAULT : loop.inc:
73- ; MAY_FAULT -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
74- ; MAY_FAULT -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
75- ; MAY_FAULT -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
76- ; MAY_FAULT : loop.end:
77- ; MAY_FAULT -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
78- ; MAY_FAULT -NEXT: ret i64 [[RETVAL]]
59+ ; CHECK -LABEL: define i64 @same_exit_block_pre_inc_use1_too_small_deref_ptrs(
60+ ; CHECK -SAME: ptr dereferenceable(42) [[P1:%.*]], ptr dereferenceable(42) [[P2:%.*]]) {
61+ ; CHECK -NEXT: entry:
62+ ; CHECK -NEXT: br label [[LOOP:%.*]]
63+ ; CHECK : loop:
64+ ; CHECK -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
65+ ; CHECK -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
66+ ; CHECK -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
67+ ; CHECK -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
68+ ; CHECK -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
69+ ; CHECK -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
70+ ; CHECK -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
71+ ; CHECK : loop.inc:
72+ ; CHECK -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
73+ ; CHECK -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
74+ ; CHECK -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
75+ ; CHECK : loop.end:
76+ ; CHECK -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
77+ ; CHECK -NEXT: ret i64 [[RETVAL]]
7978;
8079entry:
8180 br label %loop
@@ -101,25 +100,25 @@ loop.end:
101100
102101
103102define i64 @same_exit_block_pre_inc_use1_unknown_ptrs (ptr %p1 , ptr %p2 ) {
104- ; MAY_FAULT -LABEL: define i64 @same_exit_block_pre_inc_use1_unknown_ptrs(
105- ; MAY_FAULT -SAME: ptr [[P1:%.*]], ptr [[P2:%.*]]) {
106- ; MAY_FAULT -NEXT: entry:
107- ; MAY_FAULT -NEXT: br label [[LOOP:%.*]]
108- ; MAY_FAULT : loop:
109- ; MAY_FAULT -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
110- ; MAY_FAULT -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
111- ; MAY_FAULT -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
112- ; MAY_FAULT -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
113- ; MAY_FAULT -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
114- ; MAY_FAULT -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
115- ; MAY_FAULT -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
116- ; MAY_FAULT : loop.inc:
117- ; MAY_FAULT -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
118- ; MAY_FAULT -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
119- ; MAY_FAULT -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
120- ; MAY_FAULT : loop.end:
121- ; MAY_FAULT -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
122- ; MAY_FAULT -NEXT: ret i64 [[RETVAL]]
103+ ; CHECK -LABEL: define i64 @same_exit_block_pre_inc_use1_unknown_ptrs(
104+ ; CHECK -SAME: ptr [[P1:%.*]], ptr [[P2:%.*]]) {
105+ ; CHECK -NEXT: entry:
106+ ; CHECK -NEXT: br label [[LOOP:%.*]]
107+ ; CHECK : loop:
108+ ; CHECK -NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
109+ ; CHECK -NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX]]
110+ ; CHECK -NEXT: [[LD1:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
111+ ; CHECK -NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX]]
112+ ; CHECK -NEXT: [[LD2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
113+ ; CHECK -NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1]], [[LD2]]
114+ ; CHECK -NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
115+ ; CHECK : loop.inc:
116+ ; CHECK -NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
117+ ; CHECK -NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
118+ ; CHECK -NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
119+ ; CHECK : loop.end:
120+ ; CHECK -NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
121+ ; CHECK -NEXT: ret i64 [[RETVAL]]
123122;
124123entry:
125124 br label %loop
0 commit comments