@@ -1300,5 +1300,75 @@ if.end: ; preds = %entry, %if.then
13001300 ret void
13011301}
13021302
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+
13031373declare dso_local void @foo (...)
13041374declare {i64 , i1 } @llvm.ssub.with.overflow.i64 (i64 , i64 ) nounwind readnone
0 commit comments