Skip to content

Commit 1746460

Browse files
committed
[Test] Add some corner cases negative tests for D143726
- No common loop-variant; - One comparison against loop-variant;
1 parent 7f32c3d commit 1746460

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

llvm/test/Transforms/LICM/min_max.ll

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,4 +1163,74 @@ exit:
11631163
ret i32 %iv
11641164
}
11651165

1166+
; Do not optimize: comparison against different variant values.
1167+
define i32 @test_ult_different_variants_neg(i32 %start_1, i32 %start_2, i32 %inv_1, i32 %inv_2) {
1168+
; CHECK-LABEL: @test_ult_different_variants_neg(
1169+
; CHECK-NEXT: entry:
1170+
; CHECK-NEXT: br label [[LOOP:%.*]]
1171+
; CHECK: loop:
1172+
; CHECK-NEXT: [[IV_1:%.*]] = phi i32 [ [[START_1:%.*]], [[ENTRY:%.*]] ], [ [[IV_1_NEXT:%.*]], [[LOOP]] ]
1173+
; CHECK-NEXT: [[IV_2:%.*]] = phi i32 [ [[START_2:%.*]], [[ENTRY]] ], [ [[IV_2_NEXT:%.*]], [[LOOP]] ]
1174+
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ult i32 [[IV_1]], [[INV_1:%.*]]
1175+
; CHECK-NEXT: [[CMP_2:%.*]] = icmp ult i32 [[IV_2]], [[INV_2:%.*]]
1176+
; CHECK-NEXT: [[LOOP_COND:%.*]] = and i1 [[CMP_1]], [[CMP_2]]
1177+
; CHECK-NEXT: [[IV_1_NEXT]] = add i32 [[IV_1]], 1
1178+
; CHECK-NEXT: [[IV_2_NEXT]] = add i32 [[IV_2]], 1
1179+
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]]
1180+
; CHECK: exit:
1181+
; CHECK-NEXT: [[IV_1_LCSSA:%.*]] = phi i32 [ [[IV_1]], [[LOOP]] ]
1182+
; CHECK-NEXT: ret i32 [[IV_1_LCSSA]]
1183+
;
1184+
entry:
1185+
br label %loop
1186+
1187+
loop:
1188+
%iv_1 = phi i32 [%start_1, %entry], [%iv_1.next, %loop]
1189+
%iv_2 = phi i32 [%start_2, %entry], [%iv_2.next, %loop]
1190+
%cmp_1 = icmp ult i32 %iv_1, %inv_1
1191+
%cmp_2 = icmp ult i32 %iv_2, %inv_2
1192+
%loop_cond = and i1 %cmp_1, %cmp_2
1193+
%iv_1.next = add i32 %iv_1, 1
1194+
%iv_2.next = add i32 %iv_2, 1
1195+
br i1 %loop_cond, label %loop, label %exit
1196+
1197+
exit:
1198+
ret i32 %iv_1
1199+
}
1200+
1201+
; Do not optimize: one of comparisons is against loop-variant.
1202+
define i32 @test_ult_compare_against_variant_neg(i32 %start_1, i32 %start_2, i32 %inv_1, i32 %inv_2) {
1203+
; CHECK-LABEL: @test_ult_compare_against_variant_neg(
1204+
; CHECK-NEXT: entry:
1205+
; CHECK-NEXT: br label [[LOOP:%.*]]
1206+
; CHECK: loop:
1207+
; CHECK-NEXT: [[IV_1:%.*]] = phi i32 [ [[START_1:%.*]], [[ENTRY:%.*]] ], [ [[IV_1_NEXT:%.*]], [[LOOP]] ]
1208+
; CHECK-NEXT: [[IV_2:%.*]] = phi i32 [ [[START_2:%.*]], [[ENTRY]] ], [ [[IV_2_NEXT:%.*]], [[LOOP]] ]
1209+
; CHECK-NEXT: [[CMP_1:%.*]] = icmp ult i32 [[IV_1]], [[INV_1:%.*]]
1210+
; CHECK-NEXT: [[CMP_2:%.*]] = icmp ult i32 [[IV_1]], [[IV_2]]
1211+
; CHECK-NEXT: [[LOOP_COND:%.*]] = and i1 [[CMP_1]], [[CMP_2]]
1212+
; CHECK-NEXT: [[IV_1_NEXT]] = add i32 [[IV_1]], 1
1213+
; CHECK-NEXT: [[IV_2_NEXT]] = add i32 [[IV_2]], 1
1214+
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]]
1215+
; CHECK: exit:
1216+
; CHECK-NEXT: [[IV_1_LCSSA:%.*]] = phi i32 [ [[IV_1]], [[LOOP]] ]
1217+
; CHECK-NEXT: ret i32 [[IV_1_LCSSA]]
1218+
;
1219+
entry:
1220+
br label %loop
1221+
1222+
loop:
1223+
%iv_1 = phi i32 [%start_1, %entry], [%iv_1.next, %loop]
1224+
%iv_2 = phi i32 [%start_2, %entry], [%iv_2.next, %loop]
1225+
%cmp_1 = icmp ult i32 %iv_1, %inv_1
1226+
%cmp_2 = icmp ult i32 %iv_1, %iv_2
1227+
%loop_cond = and i1 %cmp_1, %cmp_2
1228+
%iv_1.next = add i32 %iv_1, 1
1229+
%iv_2.next = add i32 %iv_2, 1
1230+
br i1 %loop_cond, label %loop, label %exit
1231+
1232+
exit:
1233+
ret i32 %iv_1
1234+
}
1235+
11661236
declare void @use(i1)

0 commit comments

Comments
 (0)