1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp -show-mc-encoding -verify-machineinstrs | FileCheck %s 3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd -show-mc-encoding -verify-machineinstrs | FileCheck %s --check-prefix=NDD 4 5define void @ccmp8rr_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) { 6; CHECK-LABEL: ccmp8rr_zf: 7; CHECK: # %bb.0: # %entry 8; 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-1, kind: FK_PCRel_1 12; CHECK-NEXT: # %bb.2: # %if.then 13; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 14; CHECK-NEXT: jmp foo # TAILCALL 15; CHECK-NEXT: # encoding: [0xeb,A] 16; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 17; CHECK-NEXT: .LBB0_1: # %if.end 18; CHECK-NEXT: retq # encoding: [0xc3] 19; 20; NDD-LABEL: ccmp8rr_zf: 21; NDD: # %bb.0: # %entry 22; 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-1, kind: FK_PCRel_1 26; NDD-NEXT: # %bb.2: # %if.then 27; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 28; NDD-NEXT: jmp foo # TAILCALL 29; NDD-NEXT: # encoding: [0xeb,A] 30; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 31; NDD-NEXT: .LBB0_1: # %if.end 32; NDD-NEXT: retq # encoding: [0xc3] 33entry: 34 %cmp = icmp eq i8 %a, %c 35 %cmp1 = icmp eq i8 %b, %c 36 %or.cond = or i1 %cmp, %cmp1 37 br i1 %or.cond, label %if.then, label %if.end 38 39if.then: ; preds = %entry 40 tail call void (...) @foo() 41 br label %if.end 42 43if.end: ; preds = %entry, %if.then 44 ret void 45} 46 47define void @ccmp8rr_cf(i8 noundef %a, i8 noundef %b) { 48; CHECK-LABEL: ccmp8rr_cf: 49; CHECK: # %bb.0: # %entry 50; 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-1, kind: FK_PCRel_1 54; CHECK-NEXT: # %bb.2: # %if.then 55; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 56; CHECK-NEXT: jmp foo # TAILCALL 57; CHECK-NEXT: # encoding: [0xeb,A] 58; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 59; CHECK-NEXT: .LBB1_1: # %if.end 60; CHECK-NEXT: retq # encoding: [0xc3] 61; 62; NDD-LABEL: ccmp8rr_cf: 63; NDD: # %bb.0: # %entry 64; 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-1, kind: FK_PCRel_1 68; NDD-NEXT: # %bb.2: # %if.then 69; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 70; NDD-NEXT: jmp foo # TAILCALL 71; NDD-NEXT: # encoding: [0xeb,A] 72; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 73; NDD-NEXT: .LBB1_1: # %if.end 74; NDD-NEXT: retq # encoding: [0xc3] 75entry: 76 %cmp = icmp sgt i8 %a, 1 77 %tobool = icmp ugt i8 %b, 1 78 %or.cond = and i1 %cmp, %tobool 79 br i1 %or.cond, label %if.then, label %if.end 80 81if.then: ; preds = %entry 82 tail call void (...) @foo() 83 br label %if.end 84 85if.end: ; preds = %if.then, %entry 86 ret void 87} 88 89define i8 @ccmp8rr_sf(i8 %a, i8 %b, i8* nocapture %c) { 90; CHECK-LABEL: ccmp8rr_sf: 91; CHECK: # %bb.0: # %entry 92; 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-1, kind: FK_PCRel_1 96; CHECK-NEXT: # %bb.1: # %if.then 97; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 98; CHECK-NEXT: .LBB2_2: # %if.end 99; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 100; CHECK-NEXT: retq # encoding: [0xc3] 101; 102; NDD-LABEL: ccmp8rr_sf: 103; NDD: # %bb.0: # %entry 104; 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-1, kind: FK_PCRel_1 108; NDD-NEXT: # %bb.1: # %if.then 109; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 110; NDD-NEXT: .LBB2_2: # %if.end 111; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 112; NDD-NEXT: retq # encoding: [0xc3] 113entry: 114 %tobool = icmp ne i8 %a, 0 115 %cmp = icmp sgt i8 %b, 1 116 %or.cond = select i1 %tobool, i1 %cmp, i1 false 117 br i1 %or.cond, label %if.then, label %if.end 118 119if.then: 120 store i8 %a, i8* %c, align 4 121 br label %if.end 122 123if.end: 124 ret i8 0 125} 126 127define i8 @ccmp8rr_none(i8 %a, i8 %b, i8* nocapture %c) { 128; CHECK-LABEL: ccmp8rr_none: 129; CHECK: # %bb.0: # %entry 130; 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-1, kind: FK_PCRel_1 134; CHECK-NEXT: # %bb.1: # %if.then 135; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 136; CHECK-NEXT: .LBB3_2: # %if.end 137; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 138; CHECK-NEXT: retq # encoding: [0xc3] 139; 140; NDD-LABEL: ccmp8rr_none: 141; NDD: # %bb.0: # %entry 142; 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-1, kind: FK_PCRel_1 146; NDD-NEXT: # %bb.1: # %if.then 147; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 148; NDD-NEXT: .LBB3_2: # %if.end 149; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 150; NDD-NEXT: retq # encoding: [0xc3] 151entry: 152 %tobool = icmp ne i8 %a, 0 153 %cmp = icmp sgt i8 %b, 1 154 %or.cond = select i1 %tobool, i1 true, i1 %cmp 155 br i1 %or.cond, label %if.then, label %if.end 156 157if.then: 158 store i8 %a, i8* %c, align 4 159 br label %if.end 160 161if.end: 162 ret i8 0 163} 164 165define void @ccmp16rr_sf(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 166; CHECK-LABEL: ccmp16rr_sf: 167; CHECK: # %bb.0: # %entry 168; 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-1, kind: FK_PCRel_1 172; CHECK-NEXT: # %bb.2: # %if.then 173; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 174; CHECK-NEXT: jmp foo # TAILCALL 175; CHECK-NEXT: # encoding: [0xeb,A] 176; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 177; CHECK-NEXT: .LBB4_1: # %if.end 178; CHECK-NEXT: retq # encoding: [0xc3] 179; 180; NDD-LABEL: ccmp16rr_sf: 181; NDD: # %bb.0: # %entry 182; 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-1, kind: FK_PCRel_1 186; NDD-NEXT: # %bb.2: # %if.then 187; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 188; NDD-NEXT: jmp foo # TAILCALL 189; NDD-NEXT: # encoding: [0xeb,A] 190; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 191; NDD-NEXT: .LBB4_1: # %if.end 192; NDD-NEXT: retq # encoding: [0xc3] 193entry: 194 %cmp = icmp sgt i16 %a, %c 195 %cmp1 = icmp slt i16 %b, %c 196 %or.cond = or i1 %cmp, %cmp1 197 br i1 %or.cond, label %if.then, label %if.end 198 199if.then: ; preds = %entry 200 tail call void (...) @foo() 201 br label %if.end 202 203if.end: ; preds = %entry, %if.then 204 ret void 205} 206 207define void @ccmp32rr_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 208; CHECK-LABEL: ccmp32rr_cf: 209; CHECK: # %bb.0: # %entry 210; 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-1, kind: FK_PCRel_1 214; CHECK-NEXT: # %bb.2: # %if.then 215; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 216; CHECK-NEXT: jmp foo # TAILCALL 217; CHECK-NEXT: # encoding: [0xeb,A] 218; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 219; CHECK-NEXT: .LBB5_1: # %if.end 220; CHECK-NEXT: retq # encoding: [0xc3] 221; 222; NDD-LABEL: ccmp32rr_cf: 223; NDD: # %bb.0: # %entry 224; 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-1, kind: FK_PCRel_1 228; NDD-NEXT: # %bb.2: # %if.then 229; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 230; NDD-NEXT: jmp foo # TAILCALL 231; NDD-NEXT: # encoding: [0xeb,A] 232; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 233; NDD-NEXT: .LBB5_1: # %if.end 234; NDD-NEXT: retq # encoding: [0xc3] 235entry: 236 %cmp = icmp uge i32 %a, %c 237 %cmp1 = icmp ule i32 %b, %c 238 %or.cond = or i1 %cmp, %cmp1 239 br i1 %or.cond, label %if.then, label %if.end 240 241if.then: ; preds = %entry 242 tail call void (...) @foo() 243 br label %if.end 244 245if.end: ; preds = %entry, %if.then 246 ret void 247} 248 249define void @ccmp64rr_of(i64 %a, i64 %b, i64 %c) { 250; CHECK-LABEL: ccmp64rr_of: 251; CHECK: # %bb.0: # %bb 252; 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-1, kind: FK_PCRel_1 256; CHECK-NEXT: # %bb.2: # %if.then 257; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 258; CHECK-NEXT: jmp foo # TAILCALL 259; CHECK-NEXT: # encoding: [0xeb,A] 260; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 261; CHECK-NEXT: .LBB6_1: # %if.end 262; CHECK-NEXT: retq # encoding: [0xc3] 263; 264; NDD-LABEL: ccmp64rr_of: 265; NDD: # %bb.0: # %bb 266; 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-1, kind: FK_PCRel_1 270; NDD-NEXT: # %bb.2: # %if.then 271; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 272; NDD-NEXT: jmp foo # TAILCALL 273; NDD-NEXT: # encoding: [0xeb,A] 274; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 275; NDD-NEXT: .LBB6_1: # %if.end 276; NDD-NEXT: retq # encoding: [0xc3] 277bb: 278 %cmp = icmp uge i64 %a, %c 279 %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) 280 %obit = extractvalue {i64, i1} %smul, 1 281 %or.cond = or i1 %cmp, %obit 282 br i1 %or.cond, label %if.then, label %if.end 283 284if.then: ; preds = %entry 285 tail call void (...) @foo() 286 br label %if.end 287 288if.end: ; preds = %entry, %if.then 289 ret void 290} 291 292define void @ccmp64rr_of_crossbb(i64 %a, i64 %b) { 293; CHECK-LABEL: ccmp64rr_of_crossbb: 294; CHECK: # %bb.0: # %bb 295; 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-1, kind: FK_PCRel_1 298; CHECK-NEXT: # %bb.1: # %bb1 299; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 300; CHECK-NEXT: .LBB7_2: # %bb3 301; CHECK-NEXT: retq # encoding: [0xc3] 302; 303; NDD-LABEL: ccmp64rr_of_crossbb: 304; NDD: # %bb.0: # %bb 305; 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-1, kind: FK_PCRel_1 308; NDD-NEXT: # %bb.1: # %bb1 309; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 310; NDD-NEXT: .LBB7_2: # %bb3 311; NDD-NEXT: retq # encoding: [0xc3] 312bb: 313 %cond1 = icmp eq i64 %a, 0 314 br i1 %cond1, label %bb3, label %bb1 315 316bb1: ; preds = %bb 317 %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) 318 %obit = extractvalue {i64, i1} %smul, 1 319 br i1 %obit, label %bb3, label %bb2 320 321bb2: ; preds = %bb1 322 %tmp = ptrtoint ptr null to i64 323 br label %bb3 324 325bb3: ; preds = %bb2, %bb1, %bb 326 ret void 327} 328 329define void @ccmp8ri_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) { 330; CHECK-LABEL: ccmp8ri_zf: 331; CHECK: # %bb.0: # %entry 332; 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-1, kind: FK_PCRel_1 336; CHECK-NEXT: # %bb.2: # %if.then 337; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 338; CHECK-NEXT: jmp foo # TAILCALL 339; CHECK-NEXT: # encoding: [0xeb,A] 340; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 341; CHECK-NEXT: .LBB8_1: # %if.end 342; CHECK-NEXT: retq # encoding: [0xc3] 343; 344; NDD-LABEL: ccmp8ri_zf: 345; NDD: # %bb.0: # %entry 346; 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-1, kind: FK_PCRel_1 350; NDD-NEXT: # %bb.2: # %if.then 351; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 352; NDD-NEXT: jmp foo # TAILCALL 353; NDD-NEXT: # encoding: [0xeb,A] 354; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 355; NDD-NEXT: .LBB8_1: # %if.end 356; NDD-NEXT: retq # encoding: [0xc3] 357entry: 358 %cmp = icmp sgt i8 %a, %c 359 %cmp1 = icmp eq i8 %b, 123 360 %or.cond = or i1 %cmp, %cmp1 361 br i1 %or.cond, label %if.then, label %if.end 362 363if.then: ; preds = %entry 364 tail call void (...) @foo() 365 br label %if.end 366 367if.end: ; preds = %entry, %if.then 368 ret void 369} 370 371define i8 @ccmp8ri_zf_double(i8 %a, double %b, i8* nocapture %c) { 372; CHECK-LABEL: ccmp8ri_zf_double: 373; CHECK: # %bb.0: # %entry 374; 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-1, kind: FK_PCRel_1 379; CHECK-NEXT: # %bb.1: # %if.then 380; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 381; CHECK-NEXT: .LBB9_2: # %if.end 382; 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: # %entry 387; 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-1, kind: FK_PCRel_1 392; NDD-NEXT: # %bb.1: # %if.then 393; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 394; NDD-NEXT: .LBB9_2: # %if.end 395; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 396; NDD-NEXT: retq # encoding: [0xc3] 397entry: 398 %tobool = icmp ne i8 %a, 123 399 %cmp = fcmp ueq double %b, 0.0 400 %or.cond = select i1 %tobool, i1 %cmp, i1 false 401 br i1 %or.cond, label %if.then, label %if.end 402 403if.then: 404 store i8 %a, i8* %c, align 4 405 br label %if.end 406 407if.end: 408 ret i8 0 409} 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: # %entry 414; 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-1, kind: FK_PCRel_1 422; CHECK-NEXT: # %bb.1: # %if.then 423; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 424; CHECK-NEXT: .LBB10_2: # %if.end 425; 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: # %entry 430; 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-1, kind: FK_PCRel_1 438; NDD-NEXT: # %bb.1: # %if.then 439; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 440; NDD-NEXT: .LBB10_2: # %if.end 441; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 442; NDD-NEXT: retq # encoding: [0xc3] 443entry: 444 %tobool = icmp ne i8 %a, 123 445 %cmp = fcmp uno double %b, 0.0 446 %or.cond = select i1 %tobool, i1 %cmp, i1 false 447 br i1 %or.cond, label %if.then, label %if.end 448 449if.then: 450 store i8 %a, i8* %c, align 4 451 br label %if.end 452 453if.end: 454 ret i8 0 455} 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: # %entry 460; 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-1, kind: FK_PCRel_1 468; CHECK-NEXT: # %bb.1: # %if.then 469; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 470; CHECK-NEXT: .LBB11_2: # %if.end 471; 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: # %entry 476; 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-1, kind: FK_PCRel_1 484; NDD-NEXT: # %bb.1: # %if.then 485; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 486; NDD-NEXT: .LBB11_2: # %if.end 487; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 488; NDD-NEXT: retq # encoding: [0xc3] 489entry: 490 %tobool = icmp ne i8 %a, 123 491 %cmp = fcmp ord double %b, 0.0 492 %or.cond = select i1 %tobool, i1 %cmp, i1 false 493 br i1 %or.cond, label %if.then, label %if.end 494 495if.then: 496 store i8 %a, i8* %c, align 4 497 br label %if.end 498 499if.end: 500 ret i8 0 501} 502 503define void @ccmp16ri_zf(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 504; CHECK-LABEL: ccmp16ri_zf: 505; CHECK: # %bb.0: # %entry 506; 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 = 0x4D2 510; CHECK-NEXT: jge .LBB12_1 # encoding: [0x7d,A] 511; CHECK-NEXT: # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1 512; CHECK-NEXT: # %bb.2: # %if.then 513; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 514; CHECK-NEXT: jmp foo # TAILCALL 515; CHECK-NEXT: # encoding: [0xeb,A] 516; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 517; CHECK-NEXT: .LBB12_1: # %if.end 518; CHECK-NEXT: retq # encoding: [0xc3] 519; 520; NDD-LABEL: ccmp16ri_zf: 521; NDD: # %bb.0: # %entry 522; 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 = 0x4D2 526; NDD-NEXT: jge .LBB12_1 # encoding: [0x7d,A] 527; NDD-NEXT: # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1 528; NDD-NEXT: # %bb.2: # %if.then 529; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 530; NDD-NEXT: jmp foo # TAILCALL 531; NDD-NEXT: # encoding: [0xeb,A] 532; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 533; NDD-NEXT: .LBB12_1: # %if.end 534; NDD-NEXT: retq # encoding: [0xc3] 535entry: 536 %cmp = icmp ult i16 %a, %c 537 %cmp1 = icmp slt i16 %b, 1234 538 %or.cond = or i1 %cmp, %cmp1 539 br i1 %or.cond, label %if.then, label %if.end 540 541if.then: ; preds = %entry 542 tail call void (...) @foo() 543 br label %if.end 544 545if.end: ; preds = %entry, %if.then 546 ret void 547} 548 549define void @ccmp32ri_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 550; CHECK-LABEL: ccmp32ri_cf: 551; CHECK: # %bb.0: # %entry 552; 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 = 0x100001 555; CHECK-NEXT: jae .LBB13_1 # encoding: [0x73,A] 556; CHECK-NEXT: # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1 557; CHECK-NEXT: # %bb.2: # %if.then 558; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 559; CHECK-NEXT: jmp foo # TAILCALL 560; CHECK-NEXT: # encoding: [0xeb,A] 561; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 562; CHECK-NEXT: .LBB13_1: # %if.end 563; CHECK-NEXT: retq # encoding: [0xc3] 564; 565; NDD-LABEL: ccmp32ri_cf: 566; NDD: # %bb.0: # %entry 567; 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 = 0x100001 570; NDD-NEXT: jae .LBB13_1 # encoding: [0x73,A] 571; NDD-NEXT: # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1 572; NDD-NEXT: # %bb.2: # %if.then 573; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 574; NDD-NEXT: jmp foo # TAILCALL 575; NDD-NEXT: # encoding: [0xeb,A] 576; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 577; NDD-NEXT: .LBB13_1: # %if.end 578; NDD-NEXT: retq # encoding: [0xc3] 579entry: 580 %cmp = icmp uge i32 %a, %c 581 %cmp1 = icmp ule i32 %b, 1048576 582 %or.cond = or i1 %cmp, %cmp1 583 br i1 %or.cond, label %if.then, label %if.end 584 585if.then: ; preds = %entry 586 tail call void (...) @foo() 587 br label %if.end 588 589if.end: ; preds = %entry, %if.then 590 ret void 591} 592 593define void @ccmp64ri32_zf(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 594; CHECK-LABEL: ccmp64ri32_zf: 595; CHECK: # %bb.0: # %entry 596; 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 = 0x1E240 599; CHECK-NEXT: jge .LBB14_1 # encoding: [0x7d,A] 600; CHECK-NEXT: # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1 601; CHECK-NEXT: # %bb.2: # %if.then 602; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 603; CHECK-NEXT: jmp foo # TAILCALL 604; CHECK-NEXT: # encoding: [0xeb,A] 605; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 606; CHECK-NEXT: .LBB14_1: # %if.end 607; CHECK-NEXT: retq # encoding: [0xc3] 608; 609; NDD-LABEL: ccmp64ri32_zf: 610; NDD: # %bb.0: # %entry 611; 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 = 0x1E240 614; NDD-NEXT: jge .LBB14_1 # encoding: [0x7d,A] 615; NDD-NEXT: # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1 616; NDD-NEXT: # %bb.2: # %if.then 617; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 618; NDD-NEXT: jmp foo # TAILCALL 619; NDD-NEXT: # encoding: [0xeb,A] 620; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 621; NDD-NEXT: .LBB14_1: # %if.end 622; NDD-NEXT: retq # encoding: [0xc3] 623entry: 624 %cmp = icmp ugt i64 %a, %c 625 %cmp1 = icmp slt i64 %b, 123456 626 %or.cond = or i1 %cmp, %cmp1 627 br i1 %or.cond, label %if.then, label %if.end 628 629if.then: ; preds = %entry 630 tail call void (...) @foo() 631 br label %if.end 632 633if.end: ; preds = %entry, %if.then 634 ret void 635} 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: # %entry 640; 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-1, kind: FK_PCRel_1 644; CHECK-NEXT: # %bb.2: # %if.then 645; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 646; CHECK-NEXT: jmp foo # TAILCALL 647; CHECK-NEXT: # encoding: [0xeb,A] 648; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 649; CHECK-NEXT: .LBB15_1: # %if.end 650; CHECK-NEXT: retq # encoding: [0xc3] 651; 652; NDD-LABEL: ccmp8rm_zf: 653; NDD: # %bb.0: # %entry 654; 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-1, kind: FK_PCRel_1 658; NDD-NEXT: # %bb.2: # %if.then 659; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 660; NDD-NEXT: jmp foo # TAILCALL 661; NDD-NEXT: # encoding: [0xeb,A] 662; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 663; NDD-NEXT: .LBB15_1: # %if.end 664; NDD-NEXT: retq # encoding: [0xc3] 665entry: 666 %d = load i8, ptr %ptr 667 %cmp = icmp eq i8 %a, %c 668 %cmp1 = icmp eq i8 %b, %d 669 %or.cond = or i1 %cmp, %cmp1 670 br i1 %or.cond, label %if.then, label %if.end 671 672if.then: ; preds = %entry 673 tail call void (...) @foo() 674 br label %if.end 675 676if.end: ; preds = %entry, %if.then 677 ret void 678} 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: # %entry 683; 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-1, kind: FK_PCRel_1 687; CHECK-NEXT: # %bb.2: # %if.then 688; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 689; CHECK-NEXT: jmp foo # TAILCALL 690; CHECK-NEXT: # encoding: [0xeb,A] 691; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 692; CHECK-NEXT: .LBB16_1: # %if.end 693; CHECK-NEXT: retq # encoding: [0xc3] 694; 695; NDD-LABEL: ccmp16rm_sf: 696; NDD: # %bb.0: # %entry 697; 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-1, kind: FK_PCRel_1 701; NDD-NEXT: # %bb.2: # %if.then 702; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 703; NDD-NEXT: jmp foo # TAILCALL 704; NDD-NEXT: # encoding: [0xeb,A] 705; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 706; NDD-NEXT: .LBB16_1: # %if.end 707; NDD-NEXT: retq # encoding: [0xc3] 708entry: 709 %d = load i16, ptr %ptr 710 %cmp = icmp sgt i16 %a, %c 711 %cmp1 = icmp slt i16 %b, %d 712 %or.cond = or i1 %cmp, %cmp1 713 br i1 %or.cond, label %if.then, label %if.end 714 715if.then: ; preds = %entry 716 tail call void (...) @foo() 717 br label %if.end 718 719if.end: ; preds = %entry, %if.then 720 ret void 721} 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: # %entry 726; 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-1, kind: FK_PCRel_1 730; CHECK-NEXT: # %bb.2: # %if.then 731; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 732; CHECK-NEXT: jmp foo # TAILCALL 733; CHECK-NEXT: # encoding: [0xeb,A] 734; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 735; CHECK-NEXT: .LBB17_1: # %if.end 736; CHECK-NEXT: retq # encoding: [0xc3] 737; 738; NDD-LABEL: ccmp32rm_cf: 739; NDD: # %bb.0: # %entry 740; 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-1, kind: FK_PCRel_1 744; NDD-NEXT: # %bb.2: # %if.then 745; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 746; NDD-NEXT: jmp foo # TAILCALL 747; NDD-NEXT: # encoding: [0xeb,A] 748; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 749; NDD-NEXT: .LBB17_1: # %if.end 750; NDD-NEXT: retq # encoding: [0xc3] 751entry: 752 %d = load i32, ptr %ptr 753 %cmp = icmp sle i32 %a, %c 754 %cmp1 = icmp ule i32 %b, %d 755 %or.cond = or i1 %cmp, %cmp1 756 br i1 %or.cond, label %if.then, label %if.end 757 758if.then: ; preds = %entry 759 tail call void (...) @foo() 760 br label %if.end 761 762if.end: ; preds = %entry, %if.then 763 ret void 764} 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: # %entry 769; 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-1, kind: FK_PCRel_1 773; CHECK-NEXT: # %bb.2: # %if.then 774; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 775; CHECK-NEXT: jmp foo # TAILCALL 776; CHECK-NEXT: # encoding: [0xeb,A] 777; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 778; CHECK-NEXT: .LBB18_1: # %if.end 779; CHECK-NEXT: retq # encoding: [0xc3] 780; 781; NDD-LABEL: ccmp64rm_sf: 782; NDD: # %bb.0: # %entry 783; 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-1, kind: FK_PCRel_1 787; NDD-NEXT: # %bb.2: # %if.then 788; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 789; NDD-NEXT: jmp foo # TAILCALL 790; NDD-NEXT: # encoding: [0xeb,A] 791; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 792; NDD-NEXT: .LBB18_1: # %if.end 793; NDD-NEXT: retq # encoding: [0xc3] 794entry: 795 %d = load i64, ptr %ptr 796 %cmp = icmp sgt i64 %a, %c 797 %cmp1 = icmp slt i64 %b, %d 798 %or.cond = or i1 %cmp, %cmp1 799 br i1 %or.cond, label %if.then, label %if.end 800 801if.then: ; preds = %entry 802 tail call void (...) @foo() 803 br label %if.end 804 805if.end: ; preds = %entry, %if.then 806 ret void 807} 808 809define void @ccmp8mr_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) { 810; CHECK-LABEL: ccmp8mr_zf: 811; CHECK: # %bb.0: # %entry 812; 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-1, kind: FK_PCRel_1 816; CHECK-NEXT: # %bb.2: # %if.then 817; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 818; CHECK-NEXT: jmp foo # TAILCALL 819; CHECK-NEXT: # encoding: [0xeb,A] 820; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 821; CHECK-NEXT: .LBB19_1: # %if.end 822; CHECK-NEXT: retq # encoding: [0xc3] 823; 824; NDD-LABEL: ccmp8mr_zf: 825; NDD: # %bb.0: # %entry 826; 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-1, kind: FK_PCRel_1 830; NDD-NEXT: # %bb.2: # %if.then 831; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 832; NDD-NEXT: jmp foo # TAILCALL 833; NDD-NEXT: # encoding: [0xeb,A] 834; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 835; NDD-NEXT: .LBB19_1: # %if.end 836; NDD-NEXT: retq # encoding: [0xc3] 837entry: 838 %b = load i8, ptr %ptr 839 %cmp = icmp slt i8 %a, %c 840 %cmp1 = icmp eq i8 %b, %c 841 %or.cond = or i1 %cmp, %cmp1 842 br i1 %or.cond, label %if.then, label %if.end 843 844if.then: ; preds = %entry 845 tail call void (...) @foo() 846 br label %if.end 847 848if.end: ; preds = %entry, %if.then 849 ret void 850} 851 852define void @ccmp16mr_sf(i16 noundef %a, i16 noundef %c, ptr %ptr) { 853; CHECK-LABEL: ccmp16mr_sf: 854; CHECK: # %bb.0: # %entry 855; 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-1, kind: FK_PCRel_1 859; CHECK-NEXT: # %bb.2: # %if.then 860; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 861; CHECK-NEXT: jmp foo # TAILCALL 862; CHECK-NEXT: # encoding: [0xeb,A] 863; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 864; CHECK-NEXT: .LBB20_1: # %if.end 865; CHECK-NEXT: retq # encoding: [0xc3] 866; 867; NDD-LABEL: ccmp16mr_sf: 868; NDD: # %bb.0: # %entry 869; 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-1, kind: FK_PCRel_1 873; NDD-NEXT: # %bb.2: # %if.then 874; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 875; NDD-NEXT: jmp foo # TAILCALL 876; NDD-NEXT: # encoding: [0xeb,A] 877; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 878; NDD-NEXT: .LBB20_1: # %if.end 879; NDD-NEXT: retq # encoding: [0xc3] 880entry: 881 %b = load i16, ptr %ptr 882 %cmp = icmp sgt i16 %a, %c 883 %cmp1 = icmp slt i16 %b, %c 884 %or.cond = or i1 %cmp, %cmp1 885 br i1 %or.cond, label %if.then, label %if.end 886 887if.then: ; preds = %entry 888 tail call void (...) @foo() 889 br label %if.end 890 891if.end: ; preds = %entry, %if.then 892 ret void 893} 894 895define void @ccmp32mr_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) { 896; CHECK-LABEL: ccmp32mr_cf: 897; CHECK: # %bb.0: # %entry 898; 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-1, kind: FK_PCRel_1 902; CHECK-NEXT: # %bb.2: # %if.then 903; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 904; CHECK-NEXT: jmp foo # TAILCALL 905; CHECK-NEXT: # encoding: [0xeb,A] 906; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 907; CHECK-NEXT: .LBB21_1: # %if.end 908; CHECK-NEXT: retq # encoding: [0xc3] 909; 910; NDD-LABEL: ccmp32mr_cf: 911; NDD: # %bb.0: # %entry 912; 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-1, kind: FK_PCRel_1 916; NDD-NEXT: # %bb.2: # %if.then 917; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 918; NDD-NEXT: jmp foo # TAILCALL 919; NDD-NEXT: # encoding: [0xeb,A] 920; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 921; NDD-NEXT: .LBB21_1: # %if.end 922; NDD-NEXT: retq # encoding: [0xc3] 923entry: 924 %b = load i32, ptr %ptr 925 %cmp = icmp sge i32 %a, %c 926 %cmp1 = icmp ule i32 %b, %c 927 %or.cond = or i1 %cmp, %cmp1 928 br i1 %or.cond, label %if.then, label %if.end 929 930if.then: ; preds = %entry 931 tail call void (...) @foo() 932 br label %if.end 933 934if.end: ; preds = %entry, %if.then 935 ret void 936} 937 938define void @ccmp64mr_sf(i64 noundef %a, i64 noundef %c, ptr %ptr) { 939; CHECK-LABEL: ccmp64mr_sf: 940; CHECK: # %bb.0: # %entry 941; 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-1, kind: FK_PCRel_1 945; CHECK-NEXT: # %bb.2: # %if.then 946; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 947; CHECK-NEXT: jmp foo # TAILCALL 948; CHECK-NEXT: # encoding: [0xeb,A] 949; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 950; CHECK-NEXT: .LBB22_1: # %if.end 951; CHECK-NEXT: retq # encoding: [0xc3] 952; 953; NDD-LABEL: ccmp64mr_sf: 954; NDD: # %bb.0: # %entry 955; 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-1, kind: FK_PCRel_1 959; NDD-NEXT: # %bb.2: # %if.then 960; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 961; NDD-NEXT: jmp foo # TAILCALL 962; NDD-NEXT: # encoding: [0xeb,A] 963; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 964; NDD-NEXT: .LBB22_1: # %if.end 965; NDD-NEXT: retq # encoding: [0xc3] 966entry: 967 %b = load i64, ptr %ptr 968 %cmp = icmp sgt i64 %a, %c 969 %cmp1 = icmp slt i64 %b, %c 970 %or.cond = or i1 %cmp, %cmp1 971 br i1 %or.cond, label %if.then, label %if.end 972 973if.then: ; preds = %entry 974 tail call void (...) @foo() 975 br label %if.end 976 977if.end: ; preds = %entry, %if.then 978 ret void 979} 980 981define void @ccmp8mi_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) { 982; CHECK-LABEL: ccmp8mi_zf: 983; CHECK: # %bb.0: # %entry 984; 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-1, kind: FK_PCRel_1 988; CHECK-NEXT: # %bb.2: # %if.then 989; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 990; CHECK-NEXT: jmp foo # TAILCALL 991; CHECK-NEXT: # encoding: [0xeb,A] 992; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 993; CHECK-NEXT: .LBB23_1: # %if.end 994; CHECK-NEXT: retq # encoding: [0xc3] 995; 996; NDD-LABEL: ccmp8mi_zf: 997; NDD: # %bb.0: # %entry 998; 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-1, kind: FK_PCRel_1 1002; NDD-NEXT: # %bb.2: # %if.then 1003; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1004; NDD-NEXT: jmp foo # TAILCALL 1005; NDD-NEXT: # encoding: [0xeb,A] 1006; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1007; NDD-NEXT: .LBB23_1: # %if.end 1008; NDD-NEXT: retq # encoding: [0xc3] 1009entry: 1010 %b = load i8, ptr %ptr 1011 %cmp = icmp eq i8 %a, %c 1012 %cmp1 = icmp eq i8 %b, 123 1013 %or.cond = or i1 %cmp, %cmp1 1014 br i1 %or.cond, label %if.then, label %if.end 1015 1016if.then: ; preds = %entry 1017 tail call void (...) @foo() 1018 br label %if.end 1019 1020if.end: ; preds = %entry, %if.then 1021 ret void 1022} 1023 1024define void @ccmp16mi_zf(i16 noundef %a, i16 noundef %c, ptr %ptr) { 1025; CHECK-LABEL: ccmp16mi_zf: 1026; CHECK: # %bb.0: # %entry 1027; 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 = 0x4D2 1030; CHECK-NEXT: jge .LBB24_1 # encoding: [0x7d,A] 1031; CHECK-NEXT: # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1 1032; CHECK-NEXT: # %bb.2: # %if.then 1033; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1034; CHECK-NEXT: jmp foo # TAILCALL 1035; CHECK-NEXT: # encoding: [0xeb,A] 1036; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1037; CHECK-NEXT: .LBB24_1: # %if.end 1038; CHECK-NEXT: retq # encoding: [0xc3] 1039; 1040; NDD-LABEL: ccmp16mi_zf: 1041; NDD: # %bb.0: # %entry 1042; 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 = 0x4D2 1045; NDD-NEXT: jge .LBB24_1 # encoding: [0x7d,A] 1046; NDD-NEXT: # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1 1047; NDD-NEXT: # %bb.2: # %if.then 1048; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1049; NDD-NEXT: jmp foo # TAILCALL 1050; NDD-NEXT: # encoding: [0xeb,A] 1051; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1052; NDD-NEXT: .LBB24_1: # %if.end 1053; NDD-NEXT: retq # encoding: [0xc3] 1054entry: 1055 %b = load i16, ptr %ptr 1056 %cmp = icmp sgt i16 %a, %c 1057 %cmp1 = icmp slt i16 %b, 1234 1058 %or.cond = or i1 %cmp, %cmp1 1059 br i1 %or.cond, label %if.then, label %if.end 1060 1061if.then: ; preds = %entry 1062 tail call void (...) @foo() 1063 br label %if.end 1064 1065if.end: ; preds = %entry, %if.then 1066 ret void 1067} 1068 1069define void @ccmp32mi_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) { 1070; CHECK-LABEL: ccmp32mi_cf: 1071; CHECK: # %bb.0: # %entry 1072; 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 = 0x1E241 1075; CHECK-NEXT: jae .LBB25_1 # encoding: [0x73,A] 1076; CHECK-NEXT: # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1 1077; CHECK-NEXT: # %bb.2: # %if.then 1078; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1079; CHECK-NEXT: jmp foo # TAILCALL 1080; CHECK-NEXT: # encoding: [0xeb,A] 1081; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1082; CHECK-NEXT: .LBB25_1: # %if.end 1083; CHECK-NEXT: retq # encoding: [0xc3] 1084; 1085; NDD-LABEL: ccmp32mi_cf: 1086; NDD: # %bb.0: # %entry 1087; 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 = 0x1E241 1090; NDD-NEXT: jae .LBB25_1 # encoding: [0x73,A] 1091; NDD-NEXT: # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1 1092; NDD-NEXT: # %bb.2: # %if.then 1093; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1094; NDD-NEXT: jmp foo # TAILCALL 1095; NDD-NEXT: # encoding: [0xeb,A] 1096; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1097; NDD-NEXT: .LBB25_1: # %if.end 1098; NDD-NEXT: retq # encoding: [0xc3] 1099entry: 1100 %b = load i32, ptr %ptr 1101 %cmp = icmp eq i32 %a, %c 1102 %cmp1 = icmp ule i32 %b, 123456 1103 %or.cond = or i1 %cmp, %cmp1 1104 br i1 %or.cond, label %if.then, label %if.end 1105 1106if.then: ; preds = %entry 1107 tail call void (...) @foo() 1108 br label %if.end 1109 1110if.end: ; preds = %entry, %if.then 1111 ret void 1112} 1113 1114define void @ccmp64mi32_zf(i64 noundef %a, i64 noundef %c, ptr %ptr) { 1115; CHECK-LABEL: ccmp64mi32_zf: 1116; CHECK: # %bb.0: # %entry 1117; 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 = 0x1E240 1120; CHECK-NEXT: jge .LBB26_1 # encoding: [0x7d,A] 1121; CHECK-NEXT: # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1 1122; CHECK-NEXT: # %bb.2: # %if.then 1123; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1124; CHECK-NEXT: jmp foo # TAILCALL 1125; CHECK-NEXT: # encoding: [0xeb,A] 1126; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1127; CHECK-NEXT: .LBB26_1: # %if.end 1128; CHECK-NEXT: retq # encoding: [0xc3] 1129; 1130; NDD-LABEL: ccmp64mi32_zf: 1131; NDD: # %bb.0: # %entry 1132; 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 = 0x1E240 1135; NDD-NEXT: jge .LBB26_1 # encoding: [0x7d,A] 1136; NDD-NEXT: # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1 1137; NDD-NEXT: # %bb.2: # %if.then 1138; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1139; NDD-NEXT: jmp foo # TAILCALL 1140; NDD-NEXT: # encoding: [0xeb,A] 1141; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1142; NDD-NEXT: .LBB26_1: # %if.end 1143; NDD-NEXT: retq # encoding: [0xc3] 1144entry: 1145 %b = load i64, ptr %ptr 1146 %cmp = icmp sgt i64 %a, %c 1147 %cmp1 = icmp slt i64 %b, 123456 1148 %or.cond = or i1 %cmp, %cmp1 1149 br i1 %or.cond, label %if.then, label %if.end 1150 1151if.then: ; preds = %entry 1152 tail call void (...) @foo() 1153 br label %if.end 1154 1155if.end: ; preds = %entry, %if.then 1156 ret void 1157} 1158 1159define void @ccmp_continous(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 1160; CHECK-LABEL: ccmp_continous: 1161; CHECK: # %bb.0: # %entry 1162; 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-1, kind: FK_PCRel_1 1167; CHECK-NEXT: # %bb.2: # %if.then 1168; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1169; CHECK-NEXT: jmp foo # TAILCALL 1170; CHECK-NEXT: # encoding: [0xeb,A] 1171; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1172; CHECK-NEXT: .LBB27_1: # %if.end 1173; CHECK-NEXT: retq # encoding: [0xc3] 1174; 1175; NDD-LABEL: ccmp_continous: 1176; NDD: # %bb.0: # %entry 1177; 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-1, kind: FK_PCRel_1 1182; NDD-NEXT: # %bb.2: # %if.then 1183; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1184; NDD-NEXT: jmp foo # TAILCALL 1185; NDD-NEXT: # encoding: [0xeb,A] 1186; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1187; NDD-NEXT: .LBB27_1: # %if.end 1188; NDD-NEXT: retq # encoding: [0xc3] 1189entry: 1190 %cmp = icmp slt i32 %a, 1 1191 %cmp1 = icmp slt i32 %b, 2 1192 %or.cond = and i1 %cmp, %cmp1 1193 %cmp3 = icmp slt i32 %c, 3 1194 %or.cond4 = and i1 %or.cond, %cmp3 1195 br i1 %or.cond4, label %if.then, label %if.end 1196 1197if.then: ; preds = %entry 1198 tail call void (...) @foo() 1199 br label %if.end 1200 1201if.end: ; preds = %if.then, %entry 1202 ret void 1203} 1204 1205define i32 @ccmp_nobranch(i32 noundef %a, i32 noundef %b) { 1206; CHECK-LABEL: ccmp_nobranch: 1207; CHECK: # %bb.0: # %entry 1208; 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: # %entry 1216; 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, 0 1223 %cmp1 = icmp sgt i32 %b, 1 1224 %or.cond.not = or i1 %cmp, %cmp1 1225 %. = zext i1 %or.cond.not to i32 1226 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: # %entry 1232; 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: # %entry 1241; 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, 1 1249 %cmp1 = icmp slt i32 %b, 2 1250 %cmp2 = icmp sgt i32 %c, 3 1251 %or1 = or i1 %cmp, %cmp1 1252 %or2 = and i1 %or1, %cmp2 1253 %. = zext i1 %or2 to i32 1254 ret i32 %. 1255} 1256 1257define void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 1258; CHECK-LABEL: ccmp64ri64: 1259; CHECK: # %bb.0: # %entry 1260; 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 = 0x9167A66BBFE 1263; 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-1, kind: FK_PCRel_1 1266; CHECK-NEXT: # %bb.2: # %if.then 1267; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1268; CHECK-NEXT: jmp foo # TAILCALL 1269; CHECK-NEXT: # encoding: [0xeb,A] 1270; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1271; CHECK-NEXT: .LBB30_1: # %if.end 1272; CHECK-NEXT: retq # encoding: [0xc3] 1273; 1274; NDD-LABEL: ccmp64ri64: 1275; NDD: # %bb.0: # %entry 1276; 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 = 0x9167A66BBFE 1279; 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-1, kind: FK_PCRel_1 1282; NDD-NEXT: # %bb.2: # %if.then 1283; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1284; NDD-NEXT: jmp foo # TAILCALL 1285; NDD-NEXT: # encoding: [0xeb,A] 1286; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1287; NDD-NEXT: .LBB30_1: # %if.end 1288; NDD-NEXT: retq # encoding: [0xc3] 1289entry: 1290 %cmp = icmp ugt i64 %a, %c 1291 %cmp1 = icmp slt i64 %b, 9992147483647 1292 %or.cond = or i1 %cmp, %cmp1 1293 br i1 %or.cond, label %if.then, label %if.end 1294 1295if.then: ; preds = %entry 1296 tail call void (...) @foo() 1297 br label %if.end 1298 1299if.end: ; preds = %entry, %if.then 1300 ret void 1301} 1302 1303declare dso_local void @foo(...) 1304declare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone 1305