Skip to content

Commit df7cb15

Browse files
committed
Add two sub-tests in ccmp LIT test for validate peephole optimization.
1 parent ce9e3ab commit df7cb15

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

llvm/test/CodeGen/X86/apx/ccmp.ll

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
13031373
declare dso_local void @foo(...)
13041374
declare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone

0 commit comments

Comments
 (0)