@@ -1199,13 +1199,13 @@ define i64 @reduction_with_phi_with_one_incoming_on_backedge(i16 %n, ptr %A) {
1199
1199
; CHECK-SAME: i16 [[N:%.*]], ptr [[A:%.*]]) {
1200
1200
; CHECK-NEXT: entry:
1201
1201
; CHECK-NEXT: [[SMAX:%.*]] = call i16 @llvm.smax.i16(i16 [[N]], i16 2)
1202
- ; CHECK-NEXT: [[TMP0:%.*]] = add nsw i16 [[SMAX]], -1
1203
- ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i16 [[TMP0]] to i32
1202
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i16 [[SMAX]] to i32
1203
+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw i32 [[TMP0]], -1
1204
1204
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp slt i16 [[N]], 5
1205
1205
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1206
1206
; CHECK: vector.ph:
1207
- ; CHECK-NEXT: [[N_VEC:%.*]] = and i32 [[TMP1]], 32764
1208
- ; CHECK-NEXT: [[DOTCAST:%.*]] = trunc nuw nsw i32 [[N_VEC]] to i16
1207
+ ; CHECK-NEXT: [[N_VEC:%.*]] = and i32 [[TMP1]], -4
1208
+ ; CHECK-NEXT: [[DOTCAST:%.*]] = trunc nsw i32 [[N_VEC]] to i16
1209
1209
; CHECK-NEXT: [[IND_END:%.*]] = or disjoint i16 [[DOTCAST]], 1
1210
1210
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
1211
1211
; CHECK: vector.body:
@@ -1222,7 +1222,7 @@ define i64 @reduction_with_phi_with_one_incoming_on_backedge(i16 %n, ptr %A) {
1222
1222
; CHECK-NEXT: br i1 [[TMP5]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]]
1223
1223
; CHECK: middle.block:
1224
1224
; CHECK-NEXT: [[TMP6:%.*]] = call i64 @llvm.vector.reduce.add.v4i64(<4 x i64> [[TMP4]])
1225
- ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N_VEC ]], [[TMP1 ]]
1225
+ ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[TMP1 ]], [[N_VEC ]]
1226
1226
; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
1227
1227
; CHECK: scalar.ph:
1228
1228
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i16 [ [[IND_END]], [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
@@ -1277,13 +1277,13 @@ define i64 @reduction_with_phi_with_two_incoming_on_backedge(i16 %n, ptr %A) {
1277
1277
; CHECK-SAME: i16 [[N:%.*]], ptr [[A:%.*]]) {
1278
1278
; CHECK-NEXT: entry:
1279
1279
; CHECK-NEXT: [[SMAX:%.*]] = call i16 @llvm.smax.i16(i16 [[N]], i16 2)
1280
- ; CHECK-NEXT: [[TMP0:%.*]] = add nsw i16 [[SMAX]], -1
1281
- ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i16 [[TMP0]] to i32
1280
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i16 [[SMAX]] to i32
1281
+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw i32 [[TMP0]], -1
1282
1282
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp slt i16 [[N]], 5
1283
1283
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
1284
1284
; CHECK: vector.ph:
1285
- ; CHECK-NEXT: [[N_VEC:%.*]] = and i32 [[TMP1]], 32764
1286
- ; CHECK-NEXT: [[DOTCAST:%.*]] = trunc nuw nsw i32 [[N_VEC]] to i16
1285
+ ; CHECK-NEXT: [[N_VEC:%.*]] = and i32 [[TMP1]], -4
1286
+ ; CHECK-NEXT: [[DOTCAST:%.*]] = trunc nsw i32 [[N_VEC]] to i16
1287
1287
; CHECK-NEXT: [[IND_END:%.*]] = or disjoint i16 [[DOTCAST]], 1
1288
1288
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
1289
1289
; CHECK: vector.body:
@@ -1300,7 +1300,7 @@ define i64 @reduction_with_phi_with_two_incoming_on_backedge(i16 %n, ptr %A) {
1300
1300
; CHECK-NEXT: br i1 [[TMP5]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP26:![0-9]+]]
1301
1301
; CHECK: middle.block:
1302
1302
; CHECK-NEXT: [[TMP6:%.*]] = call i64 @llvm.vector.reduce.add.v4i64(<4 x i64> [[TMP4]])
1303
- ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N_VEC ]], [[TMP1 ]]
1303
+ ; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[TMP1 ]], [[N_VEC ]]
1304
1304
; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
1305
1305
; CHECK: scalar.ph:
1306
1306
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i16 [ [[IND_END]], [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
0 commit comments