@@ -45,47 +45,19 @@ for.end: ; preds = %for.body
45
45
define void @trip3_i8 (ptr noalias nocapture noundef %dst , ptr noalias nocapture noundef readonly %src ) #0 {
46
46
; CHECK-LABEL: @trip3_i8(
47
47
; CHECK-NEXT: entry:
48
- ; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
49
- ; CHECK: vector.ph:
50
- ; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
51
- ; CHECK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 2
52
- ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], 1
53
- ; CHECK-NEXT: [[N_RND_UP:%.*]] = add i64 3, [[TMP2]]
54
- ; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N_RND_UP]], [[TMP1]]
55
- ; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]]
56
- ; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.vscale.i64()
57
- ; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 2
58
- ; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
59
- ; CHECK: vector.body:
60
- ; CHECK-NEXT: [[ACTIVE_LANE_MASK:%.*]] = call <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64 0, i64 3)
61
- ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[DST:%.*]], i64 0
62
- ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i8, ptr [[TMP8]], i32 0
63
- ; CHECK-NEXT: [[WIDE_MASKED_LOAD:%.*]] = call <vscale x 2 x i8> @llvm.masked.load.nxv2i8.p0(ptr [[TMP9]], i32 1, <vscale x 2 x i1> [[ACTIVE_LANE_MASK]], <vscale x 2 x i8> poison)
64
- ; CHECK-NEXT: [[TMP10:%.*]] = shl <vscale x 2 x i8> [[WIDE_MASKED_LOAD]], splat (i8 1)
65
- ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i8, ptr [[DST1:%.*]], i64 0
66
- ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[TMP11]], i32 0
67
- ; CHECK-NEXT: [[WIDE_MASKED_LOAD1:%.*]] = call <vscale x 2 x i8> @llvm.masked.load.nxv2i8.p0(ptr [[TMP12]], i32 1, <vscale x 2 x i1> [[ACTIVE_LANE_MASK]], <vscale x 2 x i8> poison)
68
- ; CHECK-NEXT: [[TMP13:%.*]] = add <vscale x 2 x i8> [[TMP10]], [[WIDE_MASKED_LOAD1]]
69
- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[TMP11]], i32 0
70
- ; CHECK-NEXT: call void @llvm.masked.store.nxv2i8.p0(<vscale x 2 x i8> [[TMP13]], ptr [[TMP14]], i32 1, <vscale x 2 x i1> [[ACTIVE_LANE_MASK]])
71
- ; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]]
72
- ; CHECK: middle.block:
73
- ; CHECK-NEXT: br i1 true, label [[FOR_END:%.*]], label [[SCALAR_PH]]
74
- ; CHECK: scalar.ph:
75
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
76
48
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
77
49
; CHECK: for.body:
78
- ; CHECK-NEXT: [[I_08:%.*]] = phi i64 [ [[BC_RESUME_VAL]] , [[SCALAR_PH ]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
79
- ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[I_08]]
50
+ ; CHECK-NEXT: [[I_08:%.*]] = phi i64 [ 0 , [[ENTRY:%.* ]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
51
+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[DST:%.* ]], i64 [[I_08]]
80
52
; CHECK-NEXT: [[TMP15:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
81
53
; CHECK-NEXT: [[MUL:%.*]] = shl i8 [[TMP15]], 1
82
- ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DST1]], i64 [[I_08]]
54
+ ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DST1:%.* ]], i64 [[I_08]]
83
55
; CHECK-NEXT: [[TMP16:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
84
56
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[MUL]], [[TMP16]]
85
57
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
86
58
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
87
59
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 3
88
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP0:![0-9]+ ]]
60
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END:%.* ]], label [[FOR_BODY]]
89
61
; CHECK: for.end:
90
62
; CHECK-NEXT: ret void
91
63
;
@@ -112,47 +84,19 @@ for.end: ; preds = %for.body
112
84
define void @trip5_i8 (ptr noalias nocapture noundef %dst , ptr noalias nocapture noundef readonly %src ) #0 {
113
85
; CHECK-LABEL: @trip5_i8(
114
86
; CHECK-NEXT: entry:
115
- ; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
116
- ; CHECK: vector.ph:
117
- ; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
118
- ; CHECK-NEXT: [[TMP1:%.*]] = mul i64 [[TMP0]], 4
119
- ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], 1
120
- ; CHECK-NEXT: [[N_RND_UP:%.*]] = add i64 5, [[TMP2]]
121
- ; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N_RND_UP]], [[TMP1]]
122
- ; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]]
123
- ; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.vscale.i64()
124
- ; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 4
125
- ; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
126
- ; CHECK: vector.body:
127
- ; CHECK-NEXT: [[ACTIVE_LANE_MASK:%.*]] = call <vscale x 4 x i1> @llvm.get.active.lane.mask.nxv4i1.i64(i64 0, i64 5)
128
- ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[DST:%.*]], i64 0
129
- ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i8, ptr [[TMP8]], i32 0
130
- ; CHECK-NEXT: [[WIDE_MASKED_LOAD:%.*]] = call <vscale x 4 x i8> @llvm.masked.load.nxv4i8.p0(ptr [[TMP9]], i32 1, <vscale x 4 x i1> [[ACTIVE_LANE_MASK]], <vscale x 4 x i8> poison)
131
- ; CHECK-NEXT: [[TMP10:%.*]] = shl <vscale x 4 x i8> [[WIDE_MASKED_LOAD]], splat (i8 1)
132
- ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i8, ptr [[DST1:%.*]], i64 0
133
- ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[TMP11]], i32 0
134
- ; CHECK-NEXT: [[WIDE_MASKED_LOAD1:%.*]] = call <vscale x 4 x i8> @llvm.masked.load.nxv4i8.p0(ptr [[TMP12]], i32 1, <vscale x 4 x i1> [[ACTIVE_LANE_MASK]], <vscale x 4 x i8> poison)
135
- ; CHECK-NEXT: [[TMP13:%.*]] = add <vscale x 4 x i8> [[TMP10]], [[WIDE_MASKED_LOAD1]]
136
- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[TMP11]], i32 0
137
- ; CHECK-NEXT: call void @llvm.masked.store.nxv4i8.p0(<vscale x 4 x i8> [[TMP13]], ptr [[TMP14]], i32 1, <vscale x 4 x i1> [[ACTIVE_LANE_MASK]])
138
- ; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]]
139
- ; CHECK: middle.block:
140
- ; CHECK-NEXT: br i1 true, label [[FOR_END:%.*]], label [[SCALAR_PH]]
141
- ; CHECK: scalar.ph:
142
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
143
87
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
144
88
; CHECK: for.body:
145
- ; CHECK-NEXT: [[I_08:%.*]] = phi i64 [ [[BC_RESUME_VAL]] , [[SCALAR_PH ]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
146
- ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[DST]], i64 [[I_08]]
89
+ ; CHECK-NEXT: [[I_08:%.*]] = phi i64 [ 0 , [[ENTRY:%.* ]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
90
+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[DST:%.* ]], i64 [[I_08]]
147
91
; CHECK-NEXT: [[TMP15:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
148
92
; CHECK-NEXT: [[MUL:%.*]] = shl i8 [[TMP15]], 1
149
- ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DST1]], i64 [[I_08]]
93
+ ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[DST1:%.* ]], i64 [[I_08]]
150
94
; CHECK-NEXT: [[TMP16:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
151
95
; CHECK-NEXT: [[ADD:%.*]] = add i8 [[MUL]], [[TMP16]]
152
96
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
153
97
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
154
98
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 5
155
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP3:![0-9]+ ]]
99
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END:%.* ]], label [[FOR_BODY]]
156
100
; CHECK: for.end:
157
101
; CHECK-NEXT: ret void
158
102
;
@@ -219,7 +163,7 @@ define void @trip8_i8(ptr noalias nocapture noundef %dst, ptr noalias nocapture
219
163
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
220
164
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
221
165
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 8
222
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
166
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP0 :![0-9]+]]
223
167
; CHECK: for.end:
224
168
; CHECK-NEXT: ret void
225
169
;
@@ -277,7 +221,7 @@ define void @trip16_i8(ptr noalias nocapture noundef %dst, ptr noalias nocapture
277
221
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
278
222
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
279
223
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 16
280
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP5 :![0-9]+]]
224
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP3 :![0-9]+]]
281
225
; CHECK: for.end:
282
226
; CHECK-NEXT: ret void
283
227
;
@@ -336,7 +280,7 @@ define void @trip32_i8(ptr noalias nocapture noundef %dst, ptr noalias nocapture
336
280
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
337
281
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
338
282
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 32
339
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
283
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
340
284
; CHECK: for.end:
341
285
; CHECK-NEXT: ret void
342
286
;
@@ -379,7 +323,7 @@ define void @trip24_i8(ptr noalias nocapture noundef %dst, ptr noalias nocapture
379
323
; CHECK-NEXT: store <8 x i8> [[TMP6]], ptr [[TMP5]], align 1
380
324
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
381
325
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i64 [[INDEX_NEXT]], 24
382
- ; CHECK-NEXT: br i1 [[TMP7]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
326
+ ; CHECK-NEXT: br i1 [[TMP7]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5 :![0-9]+]]
383
327
; CHECK: middle.block:
384
328
; CHECK-NEXT: br i1 true, label [[FOR_END:%.*]], label [[SCALAR_PH]]
385
329
; CHECK: scalar.ph:
@@ -396,7 +340,7 @@ define void @trip24_i8(ptr noalias nocapture noundef %dst, ptr noalias nocapture
396
340
; CHECK-NEXT: store i8 [[ADD]], ptr [[ARRAYIDX1]], align 1
397
341
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_08]], 1
398
342
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC]], 24
399
- ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
343
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
400
344
; CHECK: for.end:
401
345
; CHECK-NEXT: ret void
402
346
;
0 commit comments