1305 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp -show-mc-encoding -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd -show-mc-encoding -verify-machineinstrs | FileCheck %s --check-prefix=NDD4 5define void @ccmp8rr_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) {6; CHECK-LABEL: ccmp8rr_zf:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]9; CHECK-NEXT: ccmpneb {dfv=zf} %dl, %sil # encoding: [0x62,0xf4,0x14,0x05,0x38,0xd6]10; CHECK-NEXT: jne .LBB0_1 # encoding: [0x75,A]11; CHECK-NEXT: # fixup A - offset: 1, value: .LBB0_1, kind: FK_PCRel_112; CHECK-NEXT: # %bb.2: # %if.then13; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]14; CHECK-NEXT: jmp foo # TAILCALL15; CHECK-NEXT: # encoding: [0xeb,A]16; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_117; CHECK-NEXT: .LBB0_1: # %if.end18; CHECK-NEXT: retq # encoding: [0xc3]19;20; NDD-LABEL: ccmp8rr_zf:21; NDD: # %bb.0: # %entry22; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]23; NDD-NEXT: ccmpneb {dfv=zf} %dl, %sil # encoding: [0x62,0xf4,0x14,0x05,0x38,0xd6]24; NDD-NEXT: jne .LBB0_1 # encoding: [0x75,A]25; NDD-NEXT: # fixup A - offset: 1, value: .LBB0_1, kind: FK_PCRel_126; NDD-NEXT: # %bb.2: # %if.then27; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]28; NDD-NEXT: jmp foo # TAILCALL29; NDD-NEXT: # encoding: [0xeb,A]30; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_131; NDD-NEXT: .LBB0_1: # %if.end32; NDD-NEXT: retq # encoding: [0xc3]33entry:34 %cmp = icmp eq i8 %a, %c35 %cmp1 = icmp eq i8 %b, %c36 %or.cond = or i1 %cmp, %cmp137 br i1 %or.cond, label %if.then, label %if.end38 39if.then: ; preds = %entry40 tail call void (...) @foo()41 br label %if.end42 43if.end: ; preds = %entry, %if.then44 ret void45}46 47define void @ccmp8rr_cf(i8 noundef %a, i8 noundef %b) {48; CHECK-LABEL: ccmp8rr_cf:49; CHECK: # %bb.0: # %entry50; CHECK-NEXT: cmpb $2, %dil # encoding: [0x40,0x80,0xff,0x02]51; CHECK-NEXT: ccmpgeb {dfv=cf} $2, %sil # encoding: [0x62,0xf4,0x0c,0x0d,0x80,0xfe,0x02]52; CHECK-NEXT: jb .LBB1_1 # encoding: [0x72,A]53; CHECK-NEXT: # fixup A - offset: 1, value: .LBB1_1, kind: FK_PCRel_154; CHECK-NEXT: # %bb.2: # %if.then55; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]56; CHECK-NEXT: jmp foo # TAILCALL57; CHECK-NEXT: # encoding: [0xeb,A]58; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_159; CHECK-NEXT: .LBB1_1: # %if.end60; CHECK-NEXT: retq # encoding: [0xc3]61;62; NDD-LABEL: ccmp8rr_cf:63; NDD: # %bb.0: # %entry64; NDD-NEXT: cmpb $2, %dil # encoding: [0x40,0x80,0xff,0x02]65; NDD-NEXT: ccmpgeb {dfv=cf} $2, %sil # encoding: [0x62,0xf4,0x0c,0x0d,0x80,0xfe,0x02]66; NDD-NEXT: jb .LBB1_1 # encoding: [0x72,A]67; NDD-NEXT: # fixup A - offset: 1, value: .LBB1_1, kind: FK_PCRel_168; NDD-NEXT: # %bb.2: # %if.then69; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]70; NDD-NEXT: jmp foo # TAILCALL71; NDD-NEXT: # encoding: [0xeb,A]72; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_173; NDD-NEXT: .LBB1_1: # %if.end74; NDD-NEXT: retq # encoding: [0xc3]75entry:76 %cmp = icmp sgt i8 %a, 177 %tobool = icmp ugt i8 %b, 178 %or.cond = and i1 %cmp, %tobool79 br i1 %or.cond, label %if.then, label %if.end80 81if.then: ; preds = %entry82 tail call void (...) @foo()83 br label %if.end84 85if.end: ; preds = %if.then, %entry86 ret void87}88 89define i8 @ccmp8rr_sf(i8 %a, i8 %b, i8* nocapture %c) {90; CHECK-LABEL: ccmp8rr_sf:91; CHECK: # %bb.0: # %entry92; CHECK-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff]93; CHECK-NEXT: ccmpneb {dfv=sf} $2, %sil # encoding: [0x62,0xf4,0x24,0x05,0x80,0xfe,0x02]94; CHECK-NEXT: jl .LBB2_2 # encoding: [0x7c,A]95; CHECK-NEXT: # fixup A - offset: 1, value: .LBB2_2, kind: FK_PCRel_196; CHECK-NEXT: # %bb.1: # %if.then97; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a]98; CHECK-NEXT: .LBB2_2: # %if.end99; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]100; CHECK-NEXT: retq # encoding: [0xc3]101;102; NDD-LABEL: ccmp8rr_sf:103; NDD: # %bb.0: # %entry104; NDD-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff]105; NDD-NEXT: ccmpneb {dfv=sf} $2, %sil # encoding: [0x62,0xf4,0x24,0x05,0x80,0xfe,0x02]106; NDD-NEXT: jl .LBB2_2 # encoding: [0x7c,A]107; NDD-NEXT: # fixup A - offset: 1, value: .LBB2_2, kind: FK_PCRel_1108; NDD-NEXT: # %bb.1: # %if.then109; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a]110; NDD-NEXT: .LBB2_2: # %if.end111; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]112; NDD-NEXT: retq # encoding: [0xc3]113entry:114 %tobool = icmp ne i8 %a, 0115 %cmp = icmp sgt i8 %b, 1116 %or.cond = select i1 %tobool, i1 %cmp, i1 false117 br i1 %or.cond, label %if.then, label %if.end118 119if.then:120 store i8 %a, i8* %c, align 4121 br label %if.end122 123if.end:124 ret i8 0125}126 127define i8 @ccmp8rr_none(i8 %a, i8 %b, i8* nocapture %c) {128; CHECK-LABEL: ccmp8rr_none:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff]131; CHECK-NEXT: ccmpeb {dfv=} $2, %sil # encoding: [0x62,0xf4,0x04,0x04,0x80,0xfe,0x02]132; CHECK-NEXT: jl .LBB3_2 # encoding: [0x7c,A]133; CHECK-NEXT: # fixup A - offset: 1, value: .LBB3_2, kind: FK_PCRel_1134; CHECK-NEXT: # %bb.1: # %if.then135; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a]136; CHECK-NEXT: .LBB3_2: # %if.end137; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]138; CHECK-NEXT: retq # encoding: [0xc3]139;140; NDD-LABEL: ccmp8rr_none:141; NDD: # %bb.0: # %entry142; NDD-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff]143; NDD-NEXT: ccmpeb {dfv=} $2, %sil # encoding: [0x62,0xf4,0x04,0x04,0x80,0xfe,0x02]144; NDD-NEXT: jl .LBB3_2 # encoding: [0x7c,A]145; NDD-NEXT: # fixup A - offset: 1, value: .LBB3_2, kind: FK_PCRel_1146; NDD-NEXT: # %bb.1: # %if.then147; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a]148; NDD-NEXT: .LBB3_2: # %if.end149; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]150; NDD-NEXT: retq # encoding: [0xc3]151entry:152 %tobool = icmp ne i8 %a, 0153 %cmp = icmp sgt i8 %b, 1154 %or.cond = select i1 %tobool, i1 true, i1 %cmp155 br i1 %or.cond, label %if.then, label %if.end156 157if.then:158 store i8 %a, i8* %c, align 4159 br label %if.end160 161if.end:162 ret i8 0163}164 165define void @ccmp16rr_sf(i16 noundef %a, i16 noundef %b, i16 noundef %c) {166; CHECK-LABEL: ccmp16rr_sf:167; CHECK: # %bb.0: # %entry168; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]169; CHECK-NEXT: ccmplew {dfv=sf} %dx, %si # encoding: [0x62,0xf4,0x25,0x0e,0x39,0xd6]170; CHECK-NEXT: jge .LBB4_1 # encoding: [0x7d,A]171; CHECK-NEXT: # fixup A - offset: 1, value: .LBB4_1, kind: FK_PCRel_1172; CHECK-NEXT: # %bb.2: # %if.then173; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]174; CHECK-NEXT: jmp foo # TAILCALL175; CHECK-NEXT: # encoding: [0xeb,A]176; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1177; CHECK-NEXT: .LBB4_1: # %if.end178; CHECK-NEXT: retq # encoding: [0xc3]179;180; NDD-LABEL: ccmp16rr_sf:181; NDD: # %bb.0: # %entry182; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]183; NDD-NEXT: ccmplew {dfv=sf} %dx, %si # encoding: [0x62,0xf4,0x25,0x0e,0x39,0xd6]184; NDD-NEXT: jge .LBB4_1 # encoding: [0x7d,A]185; NDD-NEXT: # fixup A - offset: 1, value: .LBB4_1, kind: FK_PCRel_1186; NDD-NEXT: # %bb.2: # %if.then187; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]188; NDD-NEXT: jmp foo # TAILCALL189; NDD-NEXT: # encoding: [0xeb,A]190; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1191; NDD-NEXT: .LBB4_1: # %if.end192; NDD-NEXT: retq # encoding: [0xc3]193entry:194 %cmp = icmp sgt i16 %a, %c195 %cmp1 = icmp slt i16 %b, %c196 %or.cond = or i1 %cmp, %cmp1197 br i1 %or.cond, label %if.then, label %if.end198 199if.then: ; preds = %entry200 tail call void (...) @foo()201 br label %if.end202 203if.end: ; preds = %entry, %if.then204 ret void205}206 207define void @ccmp32rr_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) {208; CHECK-LABEL: ccmp32rr_cf:209; CHECK: # %bb.0: # %entry210; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]211; CHECK-NEXT: ccmpbl {dfv=cf} %edx, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x39,0xd6]212; CHECK-NEXT: ja .LBB5_1 # encoding: [0x77,A]213; CHECK-NEXT: # fixup A - offset: 1, value: .LBB5_1, kind: FK_PCRel_1214; CHECK-NEXT: # %bb.2: # %if.then215; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]216; CHECK-NEXT: jmp foo # TAILCALL217; CHECK-NEXT: # encoding: [0xeb,A]218; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1219; CHECK-NEXT: .LBB5_1: # %if.end220; CHECK-NEXT: retq # encoding: [0xc3]221;222; NDD-LABEL: ccmp32rr_cf:223; NDD: # %bb.0: # %entry224; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]225; NDD-NEXT: ccmpbl {dfv=cf} %edx, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x39,0xd6]226; NDD-NEXT: ja .LBB5_1 # encoding: [0x77,A]227; NDD-NEXT: # fixup A - offset: 1, value: .LBB5_1, kind: FK_PCRel_1228; NDD-NEXT: # %bb.2: # %if.then229; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]230; NDD-NEXT: jmp foo # TAILCALL231; NDD-NEXT: # encoding: [0xeb,A]232; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1233; NDD-NEXT: .LBB5_1: # %if.end234; NDD-NEXT: retq # encoding: [0xc3]235entry:236 %cmp = icmp uge i32 %a, %c237 %cmp1 = icmp ule i32 %b, %c238 %or.cond = or i1 %cmp, %cmp1239 br i1 %or.cond, label %if.then, label %if.end240 241if.then: ; preds = %entry242 tail call void (...) @foo()243 br label %if.end244 245if.end: ; preds = %entry, %if.then246 ret void247}248 249define void @ccmp64rr_of(i64 %a, i64 %b, i64 %c) {250; CHECK-LABEL: ccmp64rr_of:251; CHECK: # %bb.0: # %bb252; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]253; CHECK-NEXT: ccmpbq {dfv=of} %rsi, %rdi # encoding: [0x62,0xf4,0xc4,0x02,0x39,0xf7]254; CHECK-NEXT: jno .LBB6_1 # encoding: [0x71,A]255; CHECK-NEXT: # fixup A - offset: 1, value: .LBB6_1, kind: FK_PCRel_1256; CHECK-NEXT: # %bb.2: # %if.then257; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]258; CHECK-NEXT: jmp foo # TAILCALL259; CHECK-NEXT: # encoding: [0xeb,A]260; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1261; CHECK-NEXT: .LBB6_1: # %if.end262; CHECK-NEXT: retq # encoding: [0xc3]263;264; NDD-LABEL: ccmp64rr_of:265; NDD: # %bb.0: # %bb266; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]267; NDD-NEXT: ccmpbq {dfv=of} %rsi, %rdi # encoding: [0x62,0xf4,0xc4,0x02,0x39,0xf7]268; NDD-NEXT: jno .LBB6_1 # encoding: [0x71,A]269; NDD-NEXT: # fixup A - offset: 1, value: .LBB6_1, kind: FK_PCRel_1270; NDD-NEXT: # %bb.2: # %if.then271; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]272; NDD-NEXT: jmp foo # TAILCALL273; NDD-NEXT: # encoding: [0xeb,A]274; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1275; NDD-NEXT: .LBB6_1: # %if.end276; NDD-NEXT: retq # encoding: [0xc3]277bb:278 %cmp = icmp uge i64 %a, %c279 %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)280 %obit = extractvalue {i64, i1} %smul, 1281 %or.cond = or i1 %cmp, %obit282 br i1 %or.cond, label %if.then, label %if.end283 284if.then: ; preds = %entry285 tail call void (...) @foo()286 br label %if.end287 288if.end: ; preds = %entry, %if.then289 ret void290}291 292define void @ccmp64rr_of_crossbb(i64 %a, i64 %b) {293; CHECK-LABEL: ccmp64rr_of_crossbb:294; CHECK: # %bb.0: # %bb295; CHECK-NEXT: testq %rdi, %rdi # encoding: [0x48,0x85,0xff]296; CHECK-NEXT: je .LBB7_2 # encoding: [0x74,A]297; CHECK-NEXT: # fixup A - offset: 1, value: .LBB7_2, kind: FK_PCRel_1298; CHECK-NEXT: # %bb.1: # %bb1299; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]300; CHECK-NEXT: .LBB7_2: # %bb3301; CHECK-NEXT: retq # encoding: [0xc3]302;303; NDD-LABEL: ccmp64rr_of_crossbb:304; NDD: # %bb.0: # %bb305; NDD-NEXT: testq %rdi, %rdi # encoding: [0x48,0x85,0xff]306; NDD-NEXT: je .LBB7_2 # encoding: [0x74,A]307; NDD-NEXT: # fixup A - offset: 1, value: .LBB7_2, kind: FK_PCRel_1308; NDD-NEXT: # %bb.1: # %bb1309; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]310; NDD-NEXT: .LBB7_2: # %bb3311; NDD-NEXT: retq # encoding: [0xc3]312bb:313 %cond1 = icmp eq i64 %a, 0314 br i1 %cond1, label %bb3, label %bb1315 316bb1: ; preds = %bb317 %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b)318 %obit = extractvalue {i64, i1} %smul, 1319 br i1 %obit, label %bb3, label %bb2320 321bb2: ; preds = %bb1322 %tmp = ptrtoint ptr null to i64323 br label %bb3324 325bb3: ; preds = %bb2, %bb1, %bb326 ret void327}328 329define void @ccmp8ri_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) {330; CHECK-LABEL: ccmp8ri_zf:331; CHECK: # %bb.0: # %entry332; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]333; CHECK-NEXT: ccmpleb {dfv=zf} $123, %sil # encoding: [0x62,0xf4,0x14,0x0e,0x80,0xfe,0x7b]334; CHECK-NEXT: jne .LBB8_1 # encoding: [0x75,A]335; CHECK-NEXT: # fixup A - offset: 1, value: .LBB8_1, kind: FK_PCRel_1336; CHECK-NEXT: # %bb.2: # %if.then337; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]338; CHECK-NEXT: jmp foo # TAILCALL339; CHECK-NEXT: # encoding: [0xeb,A]340; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1341; CHECK-NEXT: .LBB8_1: # %if.end342; CHECK-NEXT: retq # encoding: [0xc3]343;344; NDD-LABEL: ccmp8ri_zf:345; NDD: # %bb.0: # %entry346; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]347; NDD-NEXT: ccmpleb {dfv=zf} $123, %sil # encoding: [0x62,0xf4,0x14,0x0e,0x80,0xfe,0x7b]348; NDD-NEXT: jne .LBB8_1 # encoding: [0x75,A]349; NDD-NEXT: # fixup A - offset: 1, value: .LBB8_1, kind: FK_PCRel_1350; NDD-NEXT: # %bb.2: # %if.then351; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]352; NDD-NEXT: jmp foo # TAILCALL353; NDD-NEXT: # encoding: [0xeb,A]354; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1355; NDD-NEXT: .LBB8_1: # %if.end356; NDD-NEXT: retq # encoding: [0xc3]357entry:358 %cmp = icmp sgt i8 %a, %c359 %cmp1 = icmp eq i8 %b, 123360 %or.cond = or i1 %cmp, %cmp1361 br i1 %or.cond, label %if.then, label %if.end362 363if.then: ; preds = %entry364 tail call void (...) @foo()365 br label %if.end366 367if.end: ; preds = %entry, %if.then368 ret void369}370 371define i8 @ccmp8ri_zf_double(i8 %a, double %b, i8* nocapture %c) {372; CHECK-LABEL: ccmp8ri_zf_double:373; CHECK: # %bb.0: # %entry374; CHECK-NEXT: xorpd %xmm1, %xmm1 # encoding: [0x66,0x0f,0x57,0xc9]375; CHECK-NEXT: ucomisd %xmm1, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc1]376; CHECK-NEXT: ccmpeb {dfv=zf} $123, %dil # encoding: [0x62,0xf4,0x14,0x04,0x80,0xff,0x7b]377; CHECK-NEXT: je .LBB9_2 # encoding: [0x74,A]378; CHECK-NEXT: # fixup A - offset: 1, value: .LBB9_2, kind: FK_PCRel_1379; CHECK-NEXT: # %bb.1: # %if.then380; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]381; CHECK-NEXT: .LBB9_2: # %if.end382; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]383; CHECK-NEXT: retq # encoding: [0xc3]384;385; NDD-LABEL: ccmp8ri_zf_double:386; NDD: # %bb.0: # %entry387; NDD-NEXT: xorpd %xmm1, %xmm1 # encoding: [0x66,0x0f,0x57,0xc9]388; NDD-NEXT: ucomisd %xmm1, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc1]389; NDD-NEXT: ccmpeb {dfv=zf} $123, %dil # encoding: [0x62,0xf4,0x14,0x04,0x80,0xff,0x7b]390; NDD-NEXT: je .LBB9_2 # encoding: [0x74,A]391; NDD-NEXT: # fixup A - offset: 1, value: .LBB9_2, kind: FK_PCRel_1392; NDD-NEXT: # %bb.1: # %if.then393; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]394; NDD-NEXT: .LBB9_2: # %if.end395; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]396; NDD-NEXT: retq # encoding: [0xc3]397entry:398 %tobool = icmp ne i8 %a, 123399 %cmp = fcmp ueq double %b, 0.0400 %or.cond = select i1 %tobool, i1 %cmp, i1 false401 br i1 %or.cond, label %if.then, label %if.end402 403if.then:404 store i8 %a, i8* %c, align 4405 br label %if.end406 407if.end:408 ret i8 0409}410 411define i8 @ccmp8ri_zf_double_p(i8 %a, double %b, i8* nocapture %c) {412; CHECK-LABEL: ccmp8ri_zf_double_p:413; CHECK: # %bb.0: # %entry414; CHECK-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b]415; CHECK-NEXT: setne %al # encoding: [0x0f,0x95,0xc0]416; CHECK-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0]417; CHECK-NEXT: setp %cl # encoding: [0x0f,0x9a,0xc1]418; CHECK-NEXT: andb %al, %cl # encoding: [0x20,0xc1]419; CHECK-NEXT: cmpb $1, %cl # encoding: [0x80,0xf9,0x01]420; CHECK-NEXT: jne .LBB10_2 # encoding: [0x75,A]421; CHECK-NEXT: # fixup A - offset: 1, value: .LBB10_2, kind: FK_PCRel_1422; CHECK-NEXT: # %bb.1: # %if.then423; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]424; CHECK-NEXT: .LBB10_2: # %if.end425; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]426; CHECK-NEXT: retq # encoding: [0xc3]427;428; NDD-LABEL: ccmp8ri_zf_double_p:429; NDD: # %bb.0: # %entry430; NDD-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b]431; NDD-NEXT: setne %al # encoding: [0x0f,0x95,0xc0]432; NDD-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0]433; NDD-NEXT: setp %cl # encoding: [0x0f,0x9a,0xc1]434; NDD-NEXT: andb %cl, %al # EVEX TO LEGACY Compression encoding: [0x20,0xc8]435; NDD-NEXT: cmpb $1, %al # encoding: [0x3c,0x01]436; NDD-NEXT: jne .LBB10_2 # encoding: [0x75,A]437; NDD-NEXT: # fixup A - offset: 1, value: .LBB10_2, kind: FK_PCRel_1438; NDD-NEXT: # %bb.1: # %if.then439; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]440; NDD-NEXT: .LBB10_2: # %if.end441; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]442; NDD-NEXT: retq # encoding: [0xc3]443entry:444 %tobool = icmp ne i8 %a, 123445 %cmp = fcmp uno double %b, 0.0446 %or.cond = select i1 %tobool, i1 %cmp, i1 false447 br i1 %or.cond, label %if.then, label %if.end448 449if.then:450 store i8 %a, i8* %c, align 4451 br label %if.end452 453if.end:454 ret i8 0455}456 457define i8 @ccmp8ri_zf_double_np(i8 %a, double %b, i8* nocapture %c) {458; CHECK-LABEL: ccmp8ri_zf_double_np:459; CHECK: # %bb.0: # %entry460; CHECK-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b]461; CHECK-NEXT: setne %al # encoding: [0x0f,0x95,0xc0]462; CHECK-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0]463; CHECK-NEXT: setnp %cl # encoding: [0x0f,0x9b,0xc1]464; CHECK-NEXT: andb %al, %cl # encoding: [0x20,0xc1]465; CHECK-NEXT: cmpb $1, %cl # encoding: [0x80,0xf9,0x01]466; CHECK-NEXT: jne .LBB11_2 # encoding: [0x75,A]467; CHECK-NEXT: # fixup A - offset: 1, value: .LBB11_2, kind: FK_PCRel_1468; CHECK-NEXT: # %bb.1: # %if.then469; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]470; CHECK-NEXT: .LBB11_2: # %if.end471; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]472; CHECK-NEXT: retq # encoding: [0xc3]473;474; NDD-LABEL: ccmp8ri_zf_double_np:475; NDD: # %bb.0: # %entry476; NDD-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b]477; NDD-NEXT: setne %al # encoding: [0x0f,0x95,0xc0]478; NDD-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0]479; NDD-NEXT: setnp %cl # encoding: [0x0f,0x9b,0xc1]480; NDD-NEXT: andb %cl, %al # EVEX TO LEGACY Compression encoding: [0x20,0xc8]481; NDD-NEXT: cmpb $1, %al # encoding: [0x3c,0x01]482; NDD-NEXT: jne .LBB11_2 # encoding: [0x75,A]483; NDD-NEXT: # fixup A - offset: 1, value: .LBB11_2, kind: FK_PCRel_1484; NDD-NEXT: # %bb.1: # %if.then485; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e]486; NDD-NEXT: .LBB11_2: # %if.end487; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]488; NDD-NEXT: retq # encoding: [0xc3]489entry:490 %tobool = icmp ne i8 %a, 123491 %cmp = fcmp ord double %b, 0.0492 %or.cond = select i1 %tobool, i1 %cmp, i1 false493 br i1 %or.cond, label %if.then, label %if.end494 495if.then:496 store i8 %a, i8* %c, align 4497 br label %if.end498 499if.end:500 ret i8 0501}502 503define void @ccmp16ri_zf(i16 noundef %a, i16 noundef %b, i16 noundef %c) {504; CHECK-LABEL: ccmp16ri_zf:505; CHECK: # %bb.0: # %entry506; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]507; CHECK-NEXT: movswl %si, %eax # encoding: [0x0f,0xbf,0xc6]508; CHECK-NEXT: ccmpael {dfv=sf} $1234, %eax # encoding: [0x62,0xf4,0x24,0x03,0x81,0xf8,0xd2,0x04,0x00,0x00]509; CHECK-NEXT: # imm = 0x4D2510; CHECK-NEXT: jge .LBB12_1 # encoding: [0x7d,A]511; CHECK-NEXT: # fixup A - offset: 1, value: .LBB12_1, kind: FK_PCRel_1512; CHECK-NEXT: # %bb.2: # %if.then513; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]514; CHECK-NEXT: jmp foo # TAILCALL515; CHECK-NEXT: # encoding: [0xeb,A]516; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1517; CHECK-NEXT: .LBB12_1: # %if.end518; CHECK-NEXT: retq # encoding: [0xc3]519;520; NDD-LABEL: ccmp16ri_zf:521; NDD: # %bb.0: # %entry522; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]523; NDD-NEXT: movswl %si, %eax # encoding: [0x0f,0xbf,0xc6]524; NDD-NEXT: ccmpael {dfv=sf} $1234, %eax # encoding: [0x62,0xf4,0x24,0x03,0x81,0xf8,0xd2,0x04,0x00,0x00]525; NDD-NEXT: # imm = 0x4D2526; NDD-NEXT: jge .LBB12_1 # encoding: [0x7d,A]527; NDD-NEXT: # fixup A - offset: 1, value: .LBB12_1, kind: FK_PCRel_1528; NDD-NEXT: # %bb.2: # %if.then529; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]530; NDD-NEXT: jmp foo # TAILCALL531; NDD-NEXT: # encoding: [0xeb,A]532; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1533; NDD-NEXT: .LBB12_1: # %if.end534; NDD-NEXT: retq # encoding: [0xc3]535entry:536 %cmp = icmp ult i16 %a, %c537 %cmp1 = icmp slt i16 %b, 1234538 %or.cond = or i1 %cmp, %cmp1539 br i1 %or.cond, label %if.then, label %if.end540 541if.then: ; preds = %entry542 tail call void (...) @foo()543 br label %if.end544 545if.end: ; preds = %entry, %if.then546 ret void547}548 549define void @ccmp32ri_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) {550; CHECK-LABEL: ccmp32ri_cf:551; CHECK: # %bb.0: # %entry552; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]553; CHECK-NEXT: ccmpbl {dfv=cf} $1048577, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x81,0xfe,0x01,0x00,0x10,0x00]554; CHECK-NEXT: # imm = 0x100001555; CHECK-NEXT: jae .LBB13_1 # encoding: [0x73,A]556; CHECK-NEXT: # fixup A - offset: 1, value: .LBB13_1, kind: FK_PCRel_1557; CHECK-NEXT: # %bb.2: # %if.then558; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]559; CHECK-NEXT: jmp foo # TAILCALL560; CHECK-NEXT: # encoding: [0xeb,A]561; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1562; CHECK-NEXT: .LBB13_1: # %if.end563; CHECK-NEXT: retq # encoding: [0xc3]564;565; NDD-LABEL: ccmp32ri_cf:566; NDD: # %bb.0: # %entry567; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]568; NDD-NEXT: ccmpbl {dfv=cf} $1048577, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x81,0xfe,0x01,0x00,0x10,0x00]569; NDD-NEXT: # imm = 0x100001570; NDD-NEXT: jae .LBB13_1 # encoding: [0x73,A]571; NDD-NEXT: # fixup A - offset: 1, value: .LBB13_1, kind: FK_PCRel_1572; NDD-NEXT: # %bb.2: # %if.then573; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]574; NDD-NEXT: jmp foo # TAILCALL575; NDD-NEXT: # encoding: [0xeb,A]576; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1577; NDD-NEXT: .LBB13_1: # %if.end578; NDD-NEXT: retq # encoding: [0xc3]579entry:580 %cmp = icmp uge i32 %a, %c581 %cmp1 = icmp ule i32 %b, 1048576582 %or.cond = or i1 %cmp, %cmp1583 br i1 %or.cond, label %if.then, label %if.end584 585if.then: ; preds = %entry586 tail call void (...) @foo()587 br label %if.end588 589if.end: ; preds = %entry, %if.then590 ret void591}592 593define void @ccmp64ri32_zf(i64 noundef %a, i64 noundef %b, i64 noundef %c) {594; CHECK-LABEL: ccmp64ri32_zf:595; CHECK: # %bb.0: # %entry596; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]597; CHECK-NEXT: ccmpbeq {dfv=sf} $123456, %rsi # encoding: [0x62,0xf4,0xa4,0x06,0x81,0xfe,0x40,0xe2,0x01,0x00]598; CHECK-NEXT: # imm = 0x1E240599; CHECK-NEXT: jge .LBB14_1 # encoding: [0x7d,A]600; CHECK-NEXT: # fixup A - offset: 1, value: .LBB14_1, kind: FK_PCRel_1601; CHECK-NEXT: # %bb.2: # %if.then602; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]603; CHECK-NEXT: jmp foo # TAILCALL604; CHECK-NEXT: # encoding: [0xeb,A]605; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1606; CHECK-NEXT: .LBB14_1: # %if.end607; CHECK-NEXT: retq # encoding: [0xc3]608;609; NDD-LABEL: ccmp64ri32_zf:610; NDD: # %bb.0: # %entry611; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]612; NDD-NEXT: ccmpbeq {dfv=sf} $123456, %rsi # encoding: [0x62,0xf4,0xa4,0x06,0x81,0xfe,0x40,0xe2,0x01,0x00]613; NDD-NEXT: # imm = 0x1E240614; NDD-NEXT: jge .LBB14_1 # encoding: [0x7d,A]615; NDD-NEXT: # fixup A - offset: 1, value: .LBB14_1, kind: FK_PCRel_1616; NDD-NEXT: # %bb.2: # %if.then617; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]618; NDD-NEXT: jmp foo # TAILCALL619; NDD-NEXT: # encoding: [0xeb,A]620; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1621; NDD-NEXT: .LBB14_1: # %if.end622; NDD-NEXT: retq # encoding: [0xc3]623entry:624 %cmp = icmp ugt i64 %a, %c625 %cmp1 = icmp slt i64 %b, 123456626 %or.cond = or i1 %cmp, %cmp1627 br i1 %or.cond, label %if.then, label %if.end628 629if.then: ; preds = %entry630 tail call void (...) @foo()631 br label %if.end632 633if.end: ; preds = %entry, %if.then634 ret void635}636 637define void @ccmp8rm_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c, ptr %ptr) {638; CHECK-LABEL: ccmp8rm_zf:639; CHECK: # %bb.0: # %entry640; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]641; CHECK-NEXT: ccmpneb {dfv=zf} (%rcx), %sil # encoding: [0x62,0xf4,0x14,0x05,0x3a,0x31]642; CHECK-NEXT: jne .LBB15_1 # encoding: [0x75,A]643; CHECK-NEXT: # fixup A - offset: 1, value: .LBB15_1, kind: FK_PCRel_1644; CHECK-NEXT: # %bb.2: # %if.then645; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]646; CHECK-NEXT: jmp foo # TAILCALL647; CHECK-NEXT: # encoding: [0xeb,A]648; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1649; CHECK-NEXT: .LBB15_1: # %if.end650; CHECK-NEXT: retq # encoding: [0xc3]651;652; NDD-LABEL: ccmp8rm_zf:653; NDD: # %bb.0: # %entry654; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7]655; NDD-NEXT: ccmpneb {dfv=zf} (%rcx), %sil # encoding: [0x62,0xf4,0x14,0x05,0x3a,0x31]656; NDD-NEXT: jne .LBB15_1 # encoding: [0x75,A]657; NDD-NEXT: # fixup A - offset: 1, value: .LBB15_1, kind: FK_PCRel_1658; NDD-NEXT: # %bb.2: # %if.then659; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]660; NDD-NEXT: jmp foo # TAILCALL661; NDD-NEXT: # encoding: [0xeb,A]662; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1663; NDD-NEXT: .LBB15_1: # %if.end664; NDD-NEXT: retq # encoding: [0xc3]665entry:666 %d = load i8, ptr %ptr667 %cmp = icmp eq i8 %a, %c668 %cmp1 = icmp eq i8 %b, %d669 %or.cond = or i1 %cmp, %cmp1670 br i1 %or.cond, label %if.then, label %if.end671 672if.then: ; preds = %entry673 tail call void (...) @foo()674 br label %if.end675 676if.end: ; preds = %entry, %if.then677 ret void678}679 680define void @ccmp16rm_sf(i16 noundef %a, i16 noundef %b, i16 noundef %c, ptr %ptr) {681; CHECK-LABEL: ccmp16rm_sf:682; CHECK: # %bb.0: # %entry683; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]684; CHECK-NEXT: ccmplew {dfv=sf} (%rcx), %si # encoding: [0x62,0xf4,0x25,0x0e,0x3b,0x31]685; CHECK-NEXT: jge .LBB16_1 # encoding: [0x7d,A]686; CHECK-NEXT: # fixup A - offset: 1, value: .LBB16_1, kind: FK_PCRel_1687; CHECK-NEXT: # %bb.2: # %if.then688; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]689; CHECK-NEXT: jmp foo # TAILCALL690; CHECK-NEXT: # encoding: [0xeb,A]691; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1692; CHECK-NEXT: .LBB16_1: # %if.end693; CHECK-NEXT: retq # encoding: [0xc3]694;695; NDD-LABEL: ccmp16rm_sf:696; NDD: # %bb.0: # %entry697; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7]698; NDD-NEXT: ccmplew {dfv=sf} (%rcx), %si # encoding: [0x62,0xf4,0x25,0x0e,0x3b,0x31]699; NDD-NEXT: jge .LBB16_1 # encoding: [0x7d,A]700; NDD-NEXT: # fixup A - offset: 1, value: .LBB16_1, kind: FK_PCRel_1701; NDD-NEXT: # %bb.2: # %if.then702; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]703; NDD-NEXT: jmp foo # TAILCALL704; NDD-NEXT: # encoding: [0xeb,A]705; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1706; NDD-NEXT: .LBB16_1: # %if.end707; NDD-NEXT: retq # encoding: [0xc3]708entry:709 %d = load i16, ptr %ptr710 %cmp = icmp sgt i16 %a, %c711 %cmp1 = icmp slt i16 %b, %d712 %or.cond = or i1 %cmp, %cmp1713 br i1 %or.cond, label %if.then, label %if.end714 715if.then: ; preds = %entry716 tail call void (...) @foo()717 br label %if.end718 719if.end: ; preds = %entry, %if.then720 ret void721}722 723define void @ccmp32rm_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c, ptr %ptr) {724; CHECK-LABEL: ccmp32rm_cf:725; CHECK: # %bb.0: # %entry726; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]727; CHECK-NEXT: ccmpgl {dfv=cf} (%rcx), %esi # encoding: [0x62,0xf4,0x0c,0x0f,0x3b,0x31]728; CHECK-NEXT: ja .LBB17_1 # encoding: [0x77,A]729; CHECK-NEXT: # fixup A - offset: 1, value: .LBB17_1, kind: FK_PCRel_1730; CHECK-NEXT: # %bb.2: # %if.then731; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]732; CHECK-NEXT: jmp foo # TAILCALL733; CHECK-NEXT: # encoding: [0xeb,A]734; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1735; CHECK-NEXT: .LBB17_1: # %if.end736; CHECK-NEXT: retq # encoding: [0xc3]737;738; NDD-LABEL: ccmp32rm_cf:739; NDD: # %bb.0: # %entry740; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7]741; NDD-NEXT: ccmpgl {dfv=cf} (%rcx), %esi # encoding: [0x62,0xf4,0x0c,0x0f,0x3b,0x31]742; NDD-NEXT: ja .LBB17_1 # encoding: [0x77,A]743; NDD-NEXT: # fixup A - offset: 1, value: .LBB17_1, kind: FK_PCRel_1744; NDD-NEXT: # %bb.2: # %if.then745; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]746; NDD-NEXT: jmp foo # TAILCALL747; NDD-NEXT: # encoding: [0xeb,A]748; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1749; NDD-NEXT: .LBB17_1: # %if.end750; NDD-NEXT: retq # encoding: [0xc3]751entry:752 %d = load i32, ptr %ptr753 %cmp = icmp sle i32 %a, %c754 %cmp1 = icmp ule i32 %b, %d755 %or.cond = or i1 %cmp, %cmp1756 br i1 %or.cond, label %if.then, label %if.end757 758if.then: ; preds = %entry759 tail call void (...) @foo()760 br label %if.end761 762if.end: ; preds = %entry, %if.then763 ret void764}765 766define void @ccmp64rm_sf(i64 noundef %a, i64 noundef %b, i64 noundef %c, ptr %ptr) {767; CHECK-LABEL: ccmp64rm_sf:768; CHECK: # %bb.0: # %entry769; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]770; CHECK-NEXT: ccmpleq {dfv=sf} (%rcx), %rsi # encoding: [0x62,0xf4,0xa4,0x0e,0x3b,0x31]771; CHECK-NEXT: jge .LBB18_1 # encoding: [0x7d,A]772; CHECK-NEXT: # fixup A - offset: 1, value: .LBB18_1, kind: FK_PCRel_1773; CHECK-NEXT: # %bb.2: # %if.then774; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]775; CHECK-NEXT: jmp foo # TAILCALL776; CHECK-NEXT: # encoding: [0xeb,A]777; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1778; CHECK-NEXT: .LBB18_1: # %if.end779; CHECK-NEXT: retq # encoding: [0xc3]780;781; NDD-LABEL: ccmp64rm_sf:782; NDD: # %bb.0: # %entry783; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]784; NDD-NEXT: ccmpleq {dfv=sf} (%rcx), %rsi # encoding: [0x62,0xf4,0xa4,0x0e,0x3b,0x31]785; NDD-NEXT: jge .LBB18_1 # encoding: [0x7d,A]786; NDD-NEXT: # fixup A - offset: 1, value: .LBB18_1, kind: FK_PCRel_1787; NDD-NEXT: # %bb.2: # %if.then788; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]789; NDD-NEXT: jmp foo # TAILCALL790; NDD-NEXT: # encoding: [0xeb,A]791; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1792; NDD-NEXT: .LBB18_1: # %if.end793; NDD-NEXT: retq # encoding: [0xc3]794entry:795 %d = load i64, ptr %ptr796 %cmp = icmp sgt i64 %a, %c797 %cmp1 = icmp slt i64 %b, %d798 %or.cond = or i1 %cmp, %cmp1799 br i1 %or.cond, label %if.then, label %if.end800 801if.then: ; preds = %entry802 tail call void (...) @foo()803 br label %if.end804 805if.end: ; preds = %entry, %if.then806 ret void807}808 809define void @ccmp8mr_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) {810; CHECK-LABEL: ccmp8mr_zf:811; CHECK: # %bb.0: # %entry812; CHECK-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7]813; CHECK-NEXT: ccmpgeb {dfv=zf} %sil, (%rdx) # encoding: [0x62,0xf4,0x14,0x0d,0x38,0x32]814; CHECK-NEXT: jne .LBB19_1 # encoding: [0x75,A]815; CHECK-NEXT: # fixup A - offset: 1, value: .LBB19_1, kind: FK_PCRel_1816; CHECK-NEXT: # %bb.2: # %if.then817; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]818; CHECK-NEXT: jmp foo # TAILCALL819; CHECK-NEXT: # encoding: [0xeb,A]820; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1821; CHECK-NEXT: .LBB19_1: # %if.end822; CHECK-NEXT: retq # encoding: [0xc3]823;824; NDD-LABEL: ccmp8mr_zf:825; NDD: # %bb.0: # %entry826; NDD-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7]827; NDD-NEXT: ccmpgeb {dfv=zf} %sil, (%rdx) # encoding: [0x62,0xf4,0x14,0x0d,0x38,0x32]828; NDD-NEXT: jne .LBB19_1 # encoding: [0x75,A]829; NDD-NEXT: # fixup A - offset: 1, value: .LBB19_1, kind: FK_PCRel_1830; NDD-NEXT: # %bb.2: # %if.then831; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]832; NDD-NEXT: jmp foo # TAILCALL833; NDD-NEXT: # encoding: [0xeb,A]834; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1835; NDD-NEXT: .LBB19_1: # %if.end836; NDD-NEXT: retq # encoding: [0xc3]837entry:838 %b = load i8, ptr %ptr839 %cmp = icmp slt i8 %a, %c840 %cmp1 = icmp eq i8 %b, %c841 %or.cond = or i1 %cmp, %cmp1842 br i1 %or.cond, label %if.then, label %if.end843 844if.then: ; preds = %entry845 tail call void (...) @foo()846 br label %if.end847 848if.end: ; preds = %entry, %if.then849 ret void850}851 852define void @ccmp16mr_sf(i16 noundef %a, i16 noundef %c, ptr %ptr) {853; CHECK-LABEL: ccmp16mr_sf:854; CHECK: # %bb.0: # %entry855; CHECK-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7]856; CHECK-NEXT: ccmplew {dfv=sf} %si, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x39,0x32]857; CHECK-NEXT: jge .LBB20_1 # encoding: [0x7d,A]858; CHECK-NEXT: # fixup A - offset: 1, value: .LBB20_1, kind: FK_PCRel_1859; CHECK-NEXT: # %bb.2: # %if.then860; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]861; CHECK-NEXT: jmp foo # TAILCALL862; CHECK-NEXT: # encoding: [0xeb,A]863; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1864; CHECK-NEXT: .LBB20_1: # %if.end865; CHECK-NEXT: retq # encoding: [0xc3]866;867; NDD-LABEL: ccmp16mr_sf:868; NDD: # %bb.0: # %entry869; NDD-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7]870; NDD-NEXT: ccmplew {dfv=sf} %si, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x39,0x32]871; NDD-NEXT: jge .LBB20_1 # encoding: [0x7d,A]872; NDD-NEXT: # fixup A - offset: 1, value: .LBB20_1, kind: FK_PCRel_1873; NDD-NEXT: # %bb.2: # %if.then874; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]875; NDD-NEXT: jmp foo # TAILCALL876; NDD-NEXT: # encoding: [0xeb,A]877; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1878; NDD-NEXT: .LBB20_1: # %if.end879; NDD-NEXT: retq # encoding: [0xc3]880entry:881 %b = load i16, ptr %ptr882 %cmp = icmp sgt i16 %a, %c883 %cmp1 = icmp slt i16 %b, %c884 %or.cond = or i1 %cmp, %cmp1885 br i1 %or.cond, label %if.then, label %if.end886 887if.then: ; preds = %entry888 tail call void (...) @foo()889 br label %if.end890 891if.end: ; preds = %entry, %if.then892 ret void893}894 895define void @ccmp32mr_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) {896; CHECK-LABEL: ccmp32mr_cf:897; CHECK: # %bb.0: # %entry898; CHECK-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7]899; CHECK-NEXT: ccmpll {dfv=cf} %esi, (%rdx) # encoding: [0x62,0xf4,0x0c,0x0c,0x39,0x32]900; CHECK-NEXT: ja .LBB21_1 # encoding: [0x77,A]901; CHECK-NEXT: # fixup A - offset: 1, value: .LBB21_1, kind: FK_PCRel_1902; CHECK-NEXT: # %bb.2: # %if.then903; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]904; CHECK-NEXT: jmp foo # TAILCALL905; CHECK-NEXT: # encoding: [0xeb,A]906; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1907; CHECK-NEXT: .LBB21_1: # %if.end908; CHECK-NEXT: retq # encoding: [0xc3]909;910; NDD-LABEL: ccmp32mr_cf:911; NDD: # %bb.0: # %entry912; NDD-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7]913; NDD-NEXT: ccmpll {dfv=cf} %esi, (%rdx) # encoding: [0x62,0xf4,0x0c,0x0c,0x39,0x32]914; NDD-NEXT: ja .LBB21_1 # encoding: [0x77,A]915; NDD-NEXT: # fixup A - offset: 1, value: .LBB21_1, kind: FK_PCRel_1916; NDD-NEXT: # %bb.2: # %if.then917; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]918; NDD-NEXT: jmp foo # TAILCALL919; NDD-NEXT: # encoding: [0xeb,A]920; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1921; NDD-NEXT: .LBB21_1: # %if.end922; NDD-NEXT: retq # encoding: [0xc3]923entry:924 %b = load i32, ptr %ptr925 %cmp = icmp sge i32 %a, %c926 %cmp1 = icmp ule i32 %b, %c927 %or.cond = or i1 %cmp, %cmp1928 br i1 %or.cond, label %if.then, label %if.end929 930if.then: ; preds = %entry931 tail call void (...) @foo()932 br label %if.end933 934if.end: ; preds = %entry, %if.then935 ret void936}937 938define void @ccmp64mr_sf(i64 noundef %a, i64 noundef %c, ptr %ptr) {939; CHECK-LABEL: ccmp64mr_sf:940; CHECK: # %bb.0: # %entry941; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]942; CHECK-NEXT: ccmpleq {dfv=sf} %rsi, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x39,0x32]943; CHECK-NEXT: jge .LBB22_1 # encoding: [0x7d,A]944; CHECK-NEXT: # fixup A - offset: 1, value: .LBB22_1, kind: FK_PCRel_1945; CHECK-NEXT: # %bb.2: # %if.then946; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]947; CHECK-NEXT: jmp foo # TAILCALL948; CHECK-NEXT: # encoding: [0xeb,A]949; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1950; CHECK-NEXT: .LBB22_1: # %if.end951; CHECK-NEXT: retq # encoding: [0xc3]952;953; NDD-LABEL: ccmp64mr_sf:954; NDD: # %bb.0: # %entry955; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]956; NDD-NEXT: ccmpleq {dfv=sf} %rsi, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x39,0x32]957; NDD-NEXT: jge .LBB22_1 # encoding: [0x7d,A]958; NDD-NEXT: # fixup A - offset: 1, value: .LBB22_1, kind: FK_PCRel_1959; NDD-NEXT: # %bb.2: # %if.then960; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]961; NDD-NEXT: jmp foo # TAILCALL962; NDD-NEXT: # encoding: [0xeb,A]963; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1964; NDD-NEXT: .LBB22_1: # %if.end965; NDD-NEXT: retq # encoding: [0xc3]966entry:967 %b = load i64, ptr %ptr968 %cmp = icmp sgt i64 %a, %c969 %cmp1 = icmp slt i64 %b, %c970 %or.cond = or i1 %cmp, %cmp1971 br i1 %or.cond, label %if.then, label %if.end972 973if.then: ; preds = %entry974 tail call void (...) @foo()975 br label %if.end976 977if.end: ; preds = %entry, %if.then978 ret void979}980 981define void @ccmp8mi_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) {982; CHECK-LABEL: ccmp8mi_zf:983; CHECK: # %bb.0: # %entry984; CHECK-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7]985; CHECK-NEXT: ccmpneb {dfv=zf} $123, (%rdx) # encoding: [0x62,0xf4,0x14,0x05,0x80,0x3a,0x7b]986; CHECK-NEXT: jne .LBB23_1 # encoding: [0x75,A]987; CHECK-NEXT: # fixup A - offset: 1, value: .LBB23_1, kind: FK_PCRel_1988; CHECK-NEXT: # %bb.2: # %if.then989; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]990; CHECK-NEXT: jmp foo # TAILCALL991; CHECK-NEXT: # encoding: [0xeb,A]992; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_1993; CHECK-NEXT: .LBB23_1: # %if.end994; CHECK-NEXT: retq # encoding: [0xc3]995;996; NDD-LABEL: ccmp8mi_zf:997; NDD: # %bb.0: # %entry998; NDD-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7]999; NDD-NEXT: ccmpneb {dfv=zf} $123, (%rdx) # encoding: [0x62,0xf4,0x14,0x05,0x80,0x3a,0x7b]1000; NDD-NEXT: jne .LBB23_1 # encoding: [0x75,A]1001; NDD-NEXT: # fixup A - offset: 1, value: .LBB23_1, kind: FK_PCRel_11002; NDD-NEXT: # %bb.2: # %if.then1003; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1004; NDD-NEXT: jmp foo # TAILCALL1005; NDD-NEXT: # encoding: [0xeb,A]1006; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11007; NDD-NEXT: .LBB23_1: # %if.end1008; NDD-NEXT: retq # encoding: [0xc3]1009entry:1010 %b = load i8, ptr %ptr1011 %cmp = icmp eq i8 %a, %c1012 %cmp1 = icmp eq i8 %b, 1231013 %or.cond = or i1 %cmp, %cmp11014 br i1 %or.cond, label %if.then, label %if.end1015 1016if.then: ; preds = %entry1017 tail call void (...) @foo()1018 br label %if.end1019 1020if.end: ; preds = %entry, %if.then1021 ret void1022}1023 1024define void @ccmp16mi_zf(i16 noundef %a, i16 noundef %c, ptr %ptr) {1025; CHECK-LABEL: ccmp16mi_zf:1026; CHECK: # %bb.0: # %entry1027; CHECK-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7]1028; CHECK-NEXT: ccmplew {dfv=sf} $1234, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x81,0x3a,0xd2,0x04]1029; CHECK-NEXT: # imm = 0x4D21030; CHECK-NEXT: jge .LBB24_1 # encoding: [0x7d,A]1031; CHECK-NEXT: # fixup A - offset: 1, value: .LBB24_1, kind: FK_PCRel_11032; CHECK-NEXT: # %bb.2: # %if.then1033; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1034; CHECK-NEXT: jmp foo # TAILCALL1035; CHECK-NEXT: # encoding: [0xeb,A]1036; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11037; CHECK-NEXT: .LBB24_1: # %if.end1038; CHECK-NEXT: retq # encoding: [0xc3]1039;1040; NDD-LABEL: ccmp16mi_zf:1041; NDD: # %bb.0: # %entry1042; NDD-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7]1043; NDD-NEXT: ccmplew {dfv=sf} $1234, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x81,0x3a,0xd2,0x04]1044; NDD-NEXT: # imm = 0x4D21045; NDD-NEXT: jge .LBB24_1 # encoding: [0x7d,A]1046; NDD-NEXT: # fixup A - offset: 1, value: .LBB24_1, kind: FK_PCRel_11047; NDD-NEXT: # %bb.2: # %if.then1048; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1049; NDD-NEXT: jmp foo # TAILCALL1050; NDD-NEXT: # encoding: [0xeb,A]1051; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11052; NDD-NEXT: .LBB24_1: # %if.end1053; NDD-NEXT: retq # encoding: [0xc3]1054entry:1055 %b = load i16, ptr %ptr1056 %cmp = icmp sgt i16 %a, %c1057 %cmp1 = icmp slt i16 %b, 12341058 %or.cond = or i1 %cmp, %cmp11059 br i1 %or.cond, label %if.then, label %if.end1060 1061if.then: ; preds = %entry1062 tail call void (...) @foo()1063 br label %if.end1064 1065if.end: ; preds = %entry, %if.then1066 ret void1067}1068 1069define void @ccmp32mi_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) {1070; CHECK-LABEL: ccmp32mi_cf:1071; CHECK: # %bb.0: # %entry1072; CHECK-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7]1073; CHECK-NEXT: ccmpnel {dfv=cf} $123457, (%rdx) # encoding: [0x62,0xf4,0x0c,0x05,0x81,0x3a,0x41,0xe2,0x01,0x00]1074; CHECK-NEXT: # imm = 0x1E2411075; CHECK-NEXT: jae .LBB25_1 # encoding: [0x73,A]1076; CHECK-NEXT: # fixup A - offset: 1, value: .LBB25_1, kind: FK_PCRel_11077; CHECK-NEXT: # %bb.2: # %if.then1078; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1079; CHECK-NEXT: jmp foo # TAILCALL1080; CHECK-NEXT: # encoding: [0xeb,A]1081; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11082; CHECK-NEXT: .LBB25_1: # %if.end1083; CHECK-NEXT: retq # encoding: [0xc3]1084;1085; NDD-LABEL: ccmp32mi_cf:1086; NDD: # %bb.0: # %entry1087; NDD-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7]1088; NDD-NEXT: ccmpnel {dfv=cf} $123457, (%rdx) # encoding: [0x62,0xf4,0x0c,0x05,0x81,0x3a,0x41,0xe2,0x01,0x00]1089; NDD-NEXT: # imm = 0x1E2411090; NDD-NEXT: jae .LBB25_1 # encoding: [0x73,A]1091; NDD-NEXT: # fixup A - offset: 1, value: .LBB25_1, kind: FK_PCRel_11092; NDD-NEXT: # %bb.2: # %if.then1093; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1094; NDD-NEXT: jmp foo # TAILCALL1095; NDD-NEXT: # encoding: [0xeb,A]1096; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11097; NDD-NEXT: .LBB25_1: # %if.end1098; NDD-NEXT: retq # encoding: [0xc3]1099entry:1100 %b = load i32, ptr %ptr1101 %cmp = icmp eq i32 %a, %c1102 %cmp1 = icmp ule i32 %b, 1234561103 %or.cond = or i1 %cmp, %cmp11104 br i1 %or.cond, label %if.then, label %if.end1105 1106if.then: ; preds = %entry1107 tail call void (...) @foo()1108 br label %if.end1109 1110if.end: ; preds = %entry, %if.then1111 ret void1112}1113 1114define void @ccmp64mi32_zf(i64 noundef %a, i64 noundef %c, ptr %ptr) {1115; CHECK-LABEL: ccmp64mi32_zf:1116; CHECK: # %bb.0: # %entry1117; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]1118; CHECK-NEXT: ccmpleq {dfv=sf} $123456, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x81,0x3a,0x40,0xe2,0x01,0x00]1119; CHECK-NEXT: # imm = 0x1E2401120; CHECK-NEXT: jge .LBB26_1 # encoding: [0x7d,A]1121; CHECK-NEXT: # fixup A - offset: 1, value: .LBB26_1, kind: FK_PCRel_11122; CHECK-NEXT: # %bb.2: # %if.then1123; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1124; CHECK-NEXT: jmp foo # TAILCALL1125; CHECK-NEXT: # encoding: [0xeb,A]1126; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11127; CHECK-NEXT: .LBB26_1: # %if.end1128; CHECK-NEXT: retq # encoding: [0xc3]1129;1130; NDD-LABEL: ccmp64mi32_zf:1131; NDD: # %bb.0: # %entry1132; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7]1133; NDD-NEXT: ccmpleq {dfv=sf} $123456, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x81,0x3a,0x40,0xe2,0x01,0x00]1134; NDD-NEXT: # imm = 0x1E2401135; NDD-NEXT: jge .LBB26_1 # encoding: [0x7d,A]1136; NDD-NEXT: # fixup A - offset: 1, value: .LBB26_1, kind: FK_PCRel_11137; NDD-NEXT: # %bb.2: # %if.then1138; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1139; NDD-NEXT: jmp foo # TAILCALL1140; NDD-NEXT: # encoding: [0xeb,A]1141; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11142; NDD-NEXT: .LBB26_1: # %if.end1143; NDD-NEXT: retq # encoding: [0xc3]1144entry:1145 %b = load i64, ptr %ptr1146 %cmp = icmp sgt i64 %a, %c1147 %cmp1 = icmp slt i64 %b, 1234561148 %or.cond = or i1 %cmp, %cmp11149 br i1 %or.cond, label %if.then, label %if.end1150 1151if.then: ; preds = %entry1152 tail call void (...) @foo()1153 br label %if.end1154 1155if.end: ; preds = %entry, %if.then1156 ret void1157}1158 1159define void @ccmp_continous(i32 noundef %a, i32 noundef %b, i32 noundef %c) {1160; CHECK-LABEL: ccmp_continous:1161; CHECK: # %bb.0: # %entry1162; CHECK-NEXT: testl %edi, %edi # encoding: [0x85,0xff]1163; CHECK-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02]1164; CHECK-NEXT: ccmpll {dfv=} $3, %edx # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfa,0x03]1165; CHECK-NEXT: jge .LBB27_1 # encoding: [0x7d,A]1166; CHECK-NEXT: # fixup A - offset: 1, value: .LBB27_1, kind: FK_PCRel_11167; CHECK-NEXT: # %bb.2: # %if.then1168; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1169; CHECK-NEXT: jmp foo # TAILCALL1170; CHECK-NEXT: # encoding: [0xeb,A]1171; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11172; CHECK-NEXT: .LBB27_1: # %if.end1173; CHECK-NEXT: retq # encoding: [0xc3]1174;1175; NDD-LABEL: ccmp_continous:1176; NDD: # %bb.0: # %entry1177; NDD-NEXT: testl %edi, %edi # encoding: [0x85,0xff]1178; NDD-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02]1179; NDD-NEXT: ccmpll {dfv=} $3, %edx # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfa,0x03]1180; NDD-NEXT: jge .LBB27_1 # encoding: [0x7d,A]1181; NDD-NEXT: # fixup A - offset: 1, value: .LBB27_1, kind: FK_PCRel_11182; NDD-NEXT: # %bb.2: # %if.then1183; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1184; NDD-NEXT: jmp foo # TAILCALL1185; NDD-NEXT: # encoding: [0xeb,A]1186; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11187; NDD-NEXT: .LBB27_1: # %if.end1188; NDD-NEXT: retq # encoding: [0xc3]1189entry:1190 %cmp = icmp slt i32 %a, 11191 %cmp1 = icmp slt i32 %b, 21192 %or.cond = and i1 %cmp, %cmp11193 %cmp3 = icmp slt i32 %c, 31194 %or.cond4 = and i1 %or.cond, %cmp31195 br i1 %or.cond4, label %if.then, label %if.end1196 1197if.then: ; preds = %entry1198 tail call void (...) @foo()1199 br label %if.end1200 1201if.end: ; preds = %if.then, %entry1202 ret void1203}1204 1205define i32 @ccmp_nobranch(i32 noundef %a, i32 noundef %b) {1206; CHECK-LABEL: ccmp_nobranch:1207; CHECK: # %bb.0: # %entry1208; CHECK-NEXT: testl %edi, %edi # encoding: [0x85,0xff]1209; CHECK-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02]1210; CHECK-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]1211; CHECK-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]1212; CHECK-NEXT: retq # encoding: [0xc3]1213;1214; NDD-LABEL: ccmp_nobranch:1215; NDD: # %bb.0: # %entry1216; NDD-NEXT: testl %edi, %edi # encoding: [0x85,0xff]1217; NDD-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02]1218; NDD-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]1219; NDD-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]1220; NDD-NEXT: retq # encoding: [0xc3]1221entry:1222 %cmp = icmp sgt i32 %a, 01223 %cmp1 = icmp sgt i32 %b, 11224 %or.cond.not = or i1 %cmp, %cmp11225 %. = zext i1 %or.cond.not to i321226 ret i32 %.1227}1228 1229define i32 @ccmp_continous_nobranch(i32 noundef %a, i32 noundef %b, i32 noundef %c) {1230; CHECK-LABEL: ccmp_continous_nobranch:1231; CHECK: # %bb.0: # %entry1232; CHECK-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02]1233; CHECK-NEXT: ccmpll {dfv=sf} $2, %esi # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfe,0x02]1234; CHECK-NEXT: ccmpll {dfv=sf} $4, %edx # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfa,0x04]1235; CHECK-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]1236; CHECK-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]1237; CHECK-NEXT: retq # encoding: [0xc3]1238;1239; NDD-LABEL: ccmp_continous_nobranch:1240; NDD: # %bb.0: # %entry1241; NDD-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02]1242; NDD-NEXT: ccmpll {dfv=sf} $2, %esi # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfe,0x02]1243; NDD-NEXT: ccmpll {dfv=sf} $4, %edx # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfa,0x04]1244; NDD-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0]1245; NDD-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]1246; NDD-NEXT: retq # encoding: [0xc3]1247entry:1248 %cmp = icmp sgt i32 %a, 11249 %cmp1 = icmp slt i32 %b, 21250 %cmp2 = icmp sgt i32 %c, 31251 %or1 = or i1 %cmp, %cmp11252 %or2 = and i1 %or1, %cmp21253 %. = zext i1 %or2 to i321254 ret i32 %.1255}1256 1257define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) {1258; CHECK-LABEL: ccmp64ri64:1259; CHECK: # %bb.0: # %entry1260; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]1261; CHECK-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]1262; CHECK-NEXT: # imm = 0x9167A66BBFE1263; CHECK-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]1264; CHECK-NEXT: jg .LBB30_1 # encoding: [0x7f,A]1265; CHECK-NEXT: # fixup A - offset: 1, value: .LBB30_1, kind: FK_PCRel_11266; CHECK-NEXT: # %bb.2: # %if.then1267; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1268; CHECK-NEXT: jmp foo # TAILCALL1269; CHECK-NEXT: # encoding: [0xeb,A]1270; CHECK-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11271; CHECK-NEXT: .LBB30_1: # %if.end1272; CHECK-NEXT: retq # encoding: [0xc3]1273;1274; NDD-LABEL: ccmp64ri64:1275; NDD: # %bb.0: # %entry1276; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7]1277; NDD-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00]1278; NDD-NEXT: # imm = 0x9167A66BBFE1279; NDD-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6]1280; NDD-NEXT: jg .LBB30_1 # encoding: [0x7f,A]1281; NDD-NEXT: # fixup A - offset: 1, value: .LBB30_1, kind: FK_PCRel_11282; NDD-NEXT: # %bb.2: # %if.then1283; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]1284; NDD-NEXT: jmp foo # TAILCALL1285; NDD-NEXT: # encoding: [0xeb,A]1286; NDD-NEXT: # fixup A - offset: 1, value: foo, kind: FK_PCRel_11287; NDD-NEXT: .LBB30_1: # %if.end1288; NDD-NEXT: retq # encoding: [0xc3]1289entry:1290 %cmp = icmp ugt i64 %a, %c1291 %cmp1 = icmp slt i64 %b, 99921474836471292 %or.cond = or i1 %cmp, %cmp11293 br i1 %or.cond, label %if.then, label %if.end1294 1295if.then: ; preds = %entry1296 tail call void (...) @foo()1297 br label %if.end1298 1299if.end: ; preds = %entry, %if.then1300 ret void1301}1302 1303declare dso_local void @foo(...)1304declare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone1305