@@ -1300,5 +1300,75 @@ if.end: ; preds = %entry, %if.then
1300
1300
ret void
1301
1301
}
1302
1302
1303
+ define void @ccmp_continous_adjust_imm (i32 noundef %a , i32 noundef %b ) {
1304
+ ; CHECK-LABEL: ccmp_continous_adjust_imm:
1305
+ ; CHECK: # %bb.0: # %entry
1306
+ ; CHECK-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02]
1307
+ ; CHECK-NEXT: ccmpll {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfe,0x02]
1308
+ ; CHECK-NEXT: jg .LBB31_1 # encoding: [0x7f,A]
1309
+ ; CHECK-NEXT: # fixup A - offset: 1, value: .LBB31_1-1, kind: FK_PCRel_1
1310
+ ; CHECK-NEXT: # %bb.2: # %if.then
1311
+ ; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]
1312
+ ; CHECK-NEXT: jmp foo # TAILCALL
1313
+ ; CHECK-NEXT: # encoding: [0xeb,A]
1314
+ ; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1
1315
+ ; CHECK-NEXT: .LBB31_1: # %if.end
1316
+ ; CHECK-NEXT: retq # encoding: [0xc3]
1317
+ ;
1318
+ ; NDD-LABEL: ccmp_continous_adjust_imm:
1319
+ ; NDD: # %bb.0: # %entry
1320
+ ; NDD-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02]
1321
+ ; NDD-NEXT: ccmpll {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfe,0x02]
1322
+ ; NDD-NEXT: jg .LBB31_1 # encoding: [0x7f,A]
1323
+ ; NDD-NEXT: # fixup A - offset: 1, value: .LBB31_1-1, kind: FK_PCRel_1
1324
+ ; NDD-NEXT: # %bb.2: # %if.then
1325
+ ; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]
1326
+ ; NDD-NEXT: jmp foo # TAILCALL
1327
+ ; NDD-NEXT: # encoding: [0xeb,A]
1328
+ ; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1
1329
+ ; NDD-NEXT: .LBB31_1: # %if.end
1330
+ ; NDD-NEXT: retq # encoding: [0xc3]
1331
+ entry:
1332
+ %cmp = icmp slt i32 %a , 2
1333
+ %cmp1 = icmp slt i32 %b , 2
1334
+ %or.cond = and i1 %cmp , %cmp1
1335
+ %cmp3 = icmp slt i32 %b , 3
1336
+ %or.cond4 = and i1 %or.cond , %cmp3
1337
+ br i1 %or.cond4 , label %if.then , label %if.end
1338
+
1339
+ if.then: ; preds = %entry
1340
+ tail call void (...) @foo ()
1341
+ br label %if.end
1342
+
1343
+ if.end: ; preds = %if.then, %entry
1344
+ ret void
1345
+ }
1346
+
1347
+ define i32 @ccmp_continous_nobranch_adjust_imm (i32 noundef %a , i32 noundef %b ) {
1348
+ ; CHECK-LABEL: ccmp_continous_nobranch_adjust_imm:
1349
+ ; CHECK: # %bb.0: # %entry
1350
+ ; CHECK-NEXT: cmpl $2, %esi # encoding: [0x83,0xfe,0x02]
1351
+ ; CHECK-NEXT: ccmpgl {dfv=} $2, %edi # encoding: [0x62,0xf4,0x04,0x0f,0x83,0xff,0x02]
1352
+ ; CHECK-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]
1353
+ ; CHECK-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]
1354
+ ; CHECK-NEXT: retq # encoding: [0xc3]
1355
+ ;
1356
+ ; NDD-LABEL: ccmp_continous_nobranch_adjust_imm:
1357
+ ; NDD: # %bb.0: # %entry
1358
+ ; NDD-NEXT: cmpl $2, %esi # encoding: [0x83,0xfe,0x02]
1359
+ ; NDD-NEXT: ccmpgl {dfv=} $2, %edi # encoding: [0x62,0xf4,0x04,0x0f,0x83,0xff,0x02]
1360
+ ; NDD-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]
1361
+ ; NDD-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]
1362
+ ; NDD-NEXT: retq # encoding: [0xc3]
1363
+ entry:
1364
+ %cmp = icmp sgt i32 %a , 1
1365
+ %cmp1 = icmp slt i32 %b , 2
1366
+ %cmp2 = icmp slt i32 %b , 3
1367
+ %or1 = or i1 %cmp , %cmp1
1368
+ %or2 = or i1 %or1 , %cmp2
1369
+ %. = zext i1 %or2 to i32
1370
+ ret i32 %.
1371
+ }
1372
+
1303
1373
declare dso_local void @foo (...)
1304
1374
declare {i64 , i1 } @llvm.ssub.with.overflow.i64 (i64 , i64 ) nounwind readnone
0 commit comments