1331eb8a0SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2a8a21bbeSShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp -show-mc-encoding -verify-machineinstrs | FileCheck %s 3a8a21bbeSShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd -show-mc-encoding -verify-machineinstrs | FileCheck %s --check-prefix=NDD 4331eb8a0SShengchen Kan 5331eb8a0SShengchen Kandefine void @ccmp8rr_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) { 6331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8rr_zf: 7331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 8a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 9a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpneb {dfv=zf} %dl, %sil # encoding: [0x62,0xf4,0x14,0x05,0x38,0xd6] 10a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB0_1 # encoding: [0x75,A] 11a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB0_1-1, kind: FK_PCRel_1 12331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 13a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 14331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 15a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 16a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 17331eb8a0SShengchen Kan; CHECK-NEXT: .LBB0_1: # %if.end 18a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 19331eb8a0SShengchen Kan; 20331eb8a0SShengchen Kan; NDD-LABEL: ccmp8rr_zf: 21331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 22a8a21bbeSShengchen Kan; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 23a8a21bbeSShengchen Kan; NDD-NEXT: ccmpneb {dfv=zf} %dl, %sil # encoding: [0x62,0xf4,0x14,0x05,0x38,0xd6] 24a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB0_1 # encoding: [0x75,A] 25a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB0_1-1, kind: FK_PCRel_1 26331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 27a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 28331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 29a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 30a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 31331eb8a0SShengchen Kan; NDD-NEXT: .LBB0_1: # %if.end 32a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 33331eb8a0SShengchen Kanentry: 34331eb8a0SShengchen Kan %cmp = icmp eq i8 %a, %c 35331eb8a0SShengchen Kan %cmp1 = icmp eq i8 %b, %c 36331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 37331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 38331eb8a0SShengchen Kan 39331eb8a0SShengchen Kanif.then: ; preds = %entry 40331eb8a0SShengchen Kan tail call void (...) @foo() 41331eb8a0SShengchen Kan br label %if.end 42331eb8a0SShengchen Kan 43331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 44331eb8a0SShengchen Kan ret void 45331eb8a0SShengchen Kan} 46331eb8a0SShengchen Kan 47331eb8a0SShengchen Kandefine void @ccmp8rr_cf(i8 noundef %a, i8 noundef %b) { 48331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8rr_cf: 49331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 50a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb $2, %dil # encoding: [0x40,0x80,0xff,0x02] 51a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpgeb {dfv=cf} $2, %sil # encoding: [0x62,0xf4,0x0c,0x0d,0x80,0xfe,0x02] 52a8a21bbeSShengchen Kan; CHECK-NEXT: jb .LBB1_1 # encoding: [0x72,A] 53a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB1_1-1, kind: FK_PCRel_1 54331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 55a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 56331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 57a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 58a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 59331eb8a0SShengchen Kan; CHECK-NEXT: .LBB1_1: # %if.end 60a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 61331eb8a0SShengchen Kan; 62331eb8a0SShengchen Kan; NDD-LABEL: ccmp8rr_cf: 63331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 64a8a21bbeSShengchen Kan; NDD-NEXT: cmpb $2, %dil # encoding: [0x40,0x80,0xff,0x02] 65a8a21bbeSShengchen Kan; NDD-NEXT: ccmpgeb {dfv=cf} $2, %sil # encoding: [0x62,0xf4,0x0c,0x0d,0x80,0xfe,0x02] 66a8a21bbeSShengchen Kan; NDD-NEXT: jb .LBB1_1 # encoding: [0x72,A] 67a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB1_1-1, kind: FK_PCRel_1 68331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 69a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 70331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 71a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 72a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 73331eb8a0SShengchen Kan; NDD-NEXT: .LBB1_1: # %if.end 74a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 75331eb8a0SShengchen Kanentry: 76331eb8a0SShengchen Kan %cmp = icmp sgt i8 %a, 1 77331eb8a0SShengchen Kan %tobool = icmp ugt i8 %b, 1 78331eb8a0SShengchen Kan %or.cond = and i1 %cmp, %tobool 79331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 80331eb8a0SShengchen Kan 81331eb8a0SShengchen Kanif.then: ; preds = %entry 82331eb8a0SShengchen Kan tail call void (...) @foo() 83331eb8a0SShengchen Kan br label %if.end 84331eb8a0SShengchen Kan 85331eb8a0SShengchen Kanif.end: ; preds = %if.then, %entry 86331eb8a0SShengchen Kan ret void 87331eb8a0SShengchen Kan} 88331eb8a0SShengchen Kan 89331eb8a0SShengchen Kandefine i8 @ccmp8rr_sf(i8 %a, i8 %b, i8* nocapture %c) { 90331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8rr_sf: 91331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 92a8a21bbeSShengchen Kan; CHECK-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff] 93a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpneb {dfv=sf} $2, %sil # encoding: [0x62,0xf4,0x24,0x05,0x80,0xfe,0x02] 94a8a21bbeSShengchen Kan; CHECK-NEXT: jl .LBB2_2 # encoding: [0x7c,A] 95a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB2_2-1, kind: FK_PCRel_1 96331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %if.then 97a8a21bbeSShengchen Kan; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 98331eb8a0SShengchen Kan; CHECK-NEXT: .LBB2_2: # %if.end 99a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 100a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 101331eb8a0SShengchen Kan; 102331eb8a0SShengchen Kan; NDD-LABEL: ccmp8rr_sf: 103331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 104a8a21bbeSShengchen Kan; NDD-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff] 105a8a21bbeSShengchen Kan; NDD-NEXT: ccmpneb {dfv=sf} $2, %sil # encoding: [0x62,0xf4,0x24,0x05,0x80,0xfe,0x02] 106a8a21bbeSShengchen Kan; NDD-NEXT: jl .LBB2_2 # encoding: [0x7c,A] 107a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB2_2-1, kind: FK_PCRel_1 108331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %if.then 109a8a21bbeSShengchen Kan; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 110331eb8a0SShengchen Kan; NDD-NEXT: .LBB2_2: # %if.end 111a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 112a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 113331eb8a0SShengchen Kanentry: 114331eb8a0SShengchen Kan %tobool = icmp ne i8 %a, 0 115331eb8a0SShengchen Kan %cmp = icmp sgt i8 %b, 1 116331eb8a0SShengchen Kan %or.cond = select i1 %tobool, i1 %cmp, i1 false 117331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 118331eb8a0SShengchen Kan 119331eb8a0SShengchen Kanif.then: 120331eb8a0SShengchen Kan store i8 %a, i8* %c, align 4 121331eb8a0SShengchen Kan br label %if.end 122331eb8a0SShengchen Kan 123331eb8a0SShengchen Kanif.end: 124331eb8a0SShengchen Kan ret i8 0 125331eb8a0SShengchen Kan} 126331eb8a0SShengchen Kan 127331eb8a0SShengchen Kandefine i8 @ccmp8rr_none(i8 %a, i8 %b, i8* nocapture %c) { 128331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8rr_none: 129331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 130a8a21bbeSShengchen Kan; CHECK-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff] 131a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpeb {dfv=} $2, %sil # encoding: [0x62,0xf4,0x04,0x04,0x80,0xfe,0x02] 132a8a21bbeSShengchen Kan; CHECK-NEXT: jl .LBB3_2 # encoding: [0x7c,A] 133a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB3_2-1, kind: FK_PCRel_1 134331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %if.then 135a8a21bbeSShengchen Kan; CHECK-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 136331eb8a0SShengchen Kan; CHECK-NEXT: .LBB3_2: # %if.end 137a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 138a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 139331eb8a0SShengchen Kan; 140331eb8a0SShengchen Kan; NDD-LABEL: ccmp8rr_none: 141331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 142a8a21bbeSShengchen Kan; NDD-NEXT: testb %dil, %dil # encoding: [0x40,0x84,0xff] 143a8a21bbeSShengchen Kan; NDD-NEXT: ccmpeb {dfv=} $2, %sil # encoding: [0x62,0xf4,0x04,0x04,0x80,0xfe,0x02] 144a8a21bbeSShengchen Kan; NDD-NEXT: jl .LBB3_2 # encoding: [0x7c,A] 145a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB3_2-1, kind: FK_PCRel_1 146331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %if.then 147a8a21bbeSShengchen Kan; NDD-NEXT: movb %dil, (%rdx) # encoding: [0x40,0x88,0x3a] 148331eb8a0SShengchen Kan; NDD-NEXT: .LBB3_2: # %if.end 149a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 150a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 151331eb8a0SShengchen Kanentry: 152331eb8a0SShengchen Kan %tobool = icmp ne i8 %a, 0 153331eb8a0SShengchen Kan %cmp = icmp sgt i8 %b, 1 154331eb8a0SShengchen Kan %or.cond = select i1 %tobool, i1 true, i1 %cmp 155331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 156331eb8a0SShengchen Kan 157331eb8a0SShengchen Kanif.then: 158331eb8a0SShengchen Kan store i8 %a, i8* %c, align 4 159331eb8a0SShengchen Kan br label %if.end 160331eb8a0SShengchen Kan 161331eb8a0SShengchen Kanif.end: 162331eb8a0SShengchen Kan ret i8 0 163331eb8a0SShengchen Kan} 164331eb8a0SShengchen Kan 165331eb8a0SShengchen Kandefine void @ccmp16rr_sf(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 166331eb8a0SShengchen Kan; CHECK-LABEL: ccmp16rr_sf: 167331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 168a8a21bbeSShengchen Kan; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 169a8a21bbeSShengchen Kan; CHECK-NEXT: ccmplew {dfv=sf} %dx, %si # encoding: [0x62,0xf4,0x25,0x0e,0x39,0xd6] 170a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB4_1 # encoding: [0x7d,A] 171a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB4_1-1, kind: FK_PCRel_1 172331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 173a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 174331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 175a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 176a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 177331eb8a0SShengchen Kan; CHECK-NEXT: .LBB4_1: # %if.end 178a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 179331eb8a0SShengchen Kan; 180331eb8a0SShengchen Kan; NDD-LABEL: ccmp16rr_sf: 181331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 182a8a21bbeSShengchen Kan; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 183a8a21bbeSShengchen Kan; NDD-NEXT: ccmplew {dfv=sf} %dx, %si # encoding: [0x62,0xf4,0x25,0x0e,0x39,0xd6] 184a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB4_1 # encoding: [0x7d,A] 185a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB4_1-1, kind: FK_PCRel_1 186331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 187a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 188331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 189a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 190a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 191331eb8a0SShengchen Kan; NDD-NEXT: .LBB4_1: # %if.end 192a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 193331eb8a0SShengchen Kanentry: 194331eb8a0SShengchen Kan %cmp = icmp sgt i16 %a, %c 195331eb8a0SShengchen Kan %cmp1 = icmp slt i16 %b, %c 196331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 197331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 198331eb8a0SShengchen Kan 199331eb8a0SShengchen Kanif.then: ; preds = %entry 200331eb8a0SShengchen Kan tail call void (...) @foo() 201331eb8a0SShengchen Kan br label %if.end 202331eb8a0SShengchen Kan 203331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 204331eb8a0SShengchen Kan ret void 205331eb8a0SShengchen Kan} 206331eb8a0SShengchen Kan 207331eb8a0SShengchen Kandefine void @ccmp32rr_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 208331eb8a0SShengchen Kan; CHECK-LABEL: ccmp32rr_cf: 209331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 210a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 211a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpbl {dfv=cf} %edx, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x39,0xd6] 212a8a21bbeSShengchen Kan; CHECK-NEXT: ja .LBB5_1 # encoding: [0x77,A] 213a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB5_1-1, kind: FK_PCRel_1 214331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 215a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 216331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 217a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 218a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 219331eb8a0SShengchen Kan; CHECK-NEXT: .LBB5_1: # %if.end 220a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 221331eb8a0SShengchen Kan; 222331eb8a0SShengchen Kan; NDD-LABEL: ccmp32rr_cf: 223331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 224a8a21bbeSShengchen Kan; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 225a8a21bbeSShengchen Kan; NDD-NEXT: ccmpbl {dfv=cf} %edx, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x39,0xd6] 226a8a21bbeSShengchen Kan; NDD-NEXT: ja .LBB5_1 # encoding: [0x77,A] 227a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB5_1-1, kind: FK_PCRel_1 228331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 229a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 230331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 231a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 232a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 233331eb8a0SShengchen Kan; NDD-NEXT: .LBB5_1: # %if.end 234a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 235331eb8a0SShengchen Kanentry: 236331eb8a0SShengchen Kan %cmp = icmp uge i32 %a, %c 237331eb8a0SShengchen Kan %cmp1 = icmp ule i32 %b, %c 238331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 239331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 240331eb8a0SShengchen Kan 241331eb8a0SShengchen Kanif.then: ; preds = %entry 242331eb8a0SShengchen Kan tail call void (...) @foo() 243331eb8a0SShengchen Kan br label %if.end 244331eb8a0SShengchen Kan 245331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 246331eb8a0SShengchen Kan ret void 247331eb8a0SShengchen Kan} 248331eb8a0SShengchen Kan 249331eb8a0SShengchen Kandefine void @ccmp64rr_of(i64 %a, i64 %b, i64 %c) { 250331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64rr_of: 251331eb8a0SShengchen Kan; CHECK: # %bb.0: # %bb 252a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 253a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpbq {dfv=of} %rsi, %rdi # encoding: [0x62,0xf4,0xc4,0x02,0x39,0xf7] 254a8a21bbeSShengchen Kan; CHECK-NEXT: jno .LBB6_1 # encoding: [0x71,A] 255a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB6_1-1, kind: FK_PCRel_1 256331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 257a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 258331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 259a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 260a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 261331eb8a0SShengchen Kan; CHECK-NEXT: .LBB6_1: # %if.end 262a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 263331eb8a0SShengchen Kan; 264331eb8a0SShengchen Kan; NDD-LABEL: ccmp64rr_of: 265331eb8a0SShengchen Kan; NDD: # %bb.0: # %bb 266a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 267a8a21bbeSShengchen Kan; NDD-NEXT: ccmpbq {dfv=of} %rsi, %rdi # encoding: [0x62,0xf4,0xc4,0x02,0x39,0xf7] 268a8a21bbeSShengchen Kan; NDD-NEXT: jno .LBB6_1 # encoding: [0x71,A] 269a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB6_1-1, kind: FK_PCRel_1 270331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 271a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 272331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 273a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 274a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 275331eb8a0SShengchen Kan; NDD-NEXT: .LBB6_1: # %if.end 276a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 277331eb8a0SShengchen Kanbb: 278331eb8a0SShengchen Kan %cmp = icmp uge i64 %a, %c 279331eb8a0SShengchen Kan %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) 280331eb8a0SShengchen Kan %obit = extractvalue {i64, i1} %smul, 1 281331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %obit 282331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 283331eb8a0SShengchen Kan 284331eb8a0SShengchen Kanif.then: ; preds = %entry 285331eb8a0SShengchen Kan tail call void (...) @foo() 286331eb8a0SShengchen Kan br label %if.end 287331eb8a0SShengchen Kan 288331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 289331eb8a0SShengchen Kan ret void 290331eb8a0SShengchen Kan} 291331eb8a0SShengchen Kan 292331eb8a0SShengchen Kandefine void @ccmp64rr_of_crossbb(i64 %a, i64 %b) { 293331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64rr_of_crossbb: 294331eb8a0SShengchen Kan; CHECK: # %bb.0: # %bb 295a8a21bbeSShengchen Kan; CHECK-NEXT: testq %rdi, %rdi # encoding: [0x48,0x85,0xff] 296a8a21bbeSShengchen Kan; CHECK-NEXT: je .LBB7_2 # encoding: [0x74,A] 297a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB7_2-1, kind: FK_PCRel_1 298331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %bb1 299a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 300331eb8a0SShengchen Kan; CHECK-NEXT: .LBB7_2: # %bb3 301a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 302331eb8a0SShengchen Kan; 303331eb8a0SShengchen Kan; NDD-LABEL: ccmp64rr_of_crossbb: 304331eb8a0SShengchen Kan; NDD: # %bb.0: # %bb 305a8a21bbeSShengchen Kan; NDD-NEXT: testq %rdi, %rdi # encoding: [0x48,0x85,0xff] 306a8a21bbeSShengchen Kan; NDD-NEXT: je .LBB7_2 # encoding: [0x74,A] 307a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB7_2-1, kind: FK_PCRel_1 308331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %bb1 309a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 310331eb8a0SShengchen Kan; NDD-NEXT: .LBB7_2: # %bb3 311a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 312331eb8a0SShengchen Kanbb: 313331eb8a0SShengchen Kan %cond1 = icmp eq i64 %a, 0 314331eb8a0SShengchen Kan br i1 %cond1, label %bb3, label %bb1 315331eb8a0SShengchen Kan 316331eb8a0SShengchen Kanbb1: ; preds = %bb 317331eb8a0SShengchen Kan %smul = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) 318331eb8a0SShengchen Kan %obit = extractvalue {i64, i1} %smul, 1 319331eb8a0SShengchen Kan br i1 %obit, label %bb3, label %bb2 320331eb8a0SShengchen Kan 321331eb8a0SShengchen Kanbb2: ; preds = %bb1 322331eb8a0SShengchen Kan %tmp = ptrtoint ptr null to i64 323331eb8a0SShengchen Kan br label %bb3 324331eb8a0SShengchen Kan 325331eb8a0SShengchen Kanbb3: ; preds = %bb2, %bb1, %bb 326331eb8a0SShengchen Kan ret void 327331eb8a0SShengchen Kan} 328331eb8a0SShengchen Kan 329331eb8a0SShengchen Kandefine void @ccmp8ri_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c) { 330331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8ri_zf: 331331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 332a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 333a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpleb {dfv=zf} $123, %sil # encoding: [0x62,0xf4,0x14,0x0e,0x80,0xfe,0x7b] 334a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB8_1 # encoding: [0x75,A] 335a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB8_1-1, kind: FK_PCRel_1 336331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 337a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 338331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 339a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 340a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 341331eb8a0SShengchen Kan; CHECK-NEXT: .LBB8_1: # %if.end 342a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 343331eb8a0SShengchen Kan; 344331eb8a0SShengchen Kan; NDD-LABEL: ccmp8ri_zf: 345331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 346a8a21bbeSShengchen Kan; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 347a8a21bbeSShengchen Kan; NDD-NEXT: ccmpleb {dfv=zf} $123, %sil # encoding: [0x62,0xf4,0x14,0x0e,0x80,0xfe,0x7b] 348a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB8_1 # encoding: [0x75,A] 349a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB8_1-1, kind: FK_PCRel_1 350331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 351a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 352331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 353a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 354a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 355331eb8a0SShengchen Kan; NDD-NEXT: .LBB8_1: # %if.end 356a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 357331eb8a0SShengchen Kanentry: 358331eb8a0SShengchen Kan %cmp = icmp sgt i8 %a, %c 359331eb8a0SShengchen Kan %cmp1 = icmp eq i8 %b, 123 360331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 361331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 362331eb8a0SShengchen Kan 363331eb8a0SShengchen Kanif.then: ; preds = %entry 364331eb8a0SShengchen Kan tail call void (...) @foo() 365331eb8a0SShengchen Kan br label %if.end 366331eb8a0SShengchen Kan 367331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 368331eb8a0SShengchen Kan ret void 369331eb8a0SShengchen Kan} 370331eb8a0SShengchen Kan 371331eb8a0SShengchen Kandefine i8 @ccmp8ri_zf_double(i8 %a, double %b, i8* nocapture %c) { 372331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8ri_zf_double: 373331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 374a8a21bbeSShengchen Kan; CHECK-NEXT: xorpd %xmm1, %xmm1 # encoding: [0x66,0x0f,0x57,0xc9] 375a8a21bbeSShengchen Kan; CHECK-NEXT: ucomisd %xmm1, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc1] 376a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpeb {dfv=zf} $123, %dil # encoding: [0x62,0xf4,0x14,0x04,0x80,0xff,0x7b] 377a8a21bbeSShengchen Kan; CHECK-NEXT: je .LBB9_2 # encoding: [0x74,A] 378a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB9_2-1, kind: FK_PCRel_1 379331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %if.then 380a8a21bbeSShengchen Kan; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 381331eb8a0SShengchen Kan; CHECK-NEXT: .LBB9_2: # %if.end 382a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 383a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 384331eb8a0SShengchen Kan; 385331eb8a0SShengchen Kan; NDD-LABEL: ccmp8ri_zf_double: 386331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 387a8a21bbeSShengchen Kan; NDD-NEXT: xorpd %xmm1, %xmm1 # encoding: [0x66,0x0f,0x57,0xc9] 388a8a21bbeSShengchen Kan; NDD-NEXT: ucomisd %xmm1, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc1] 389a8a21bbeSShengchen Kan; NDD-NEXT: ccmpeb {dfv=zf} $123, %dil # encoding: [0x62,0xf4,0x14,0x04,0x80,0xff,0x7b] 390a8a21bbeSShengchen Kan; NDD-NEXT: je .LBB9_2 # encoding: [0x74,A] 391a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB9_2-1, kind: FK_PCRel_1 392331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %if.then 393a8a21bbeSShengchen Kan; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 394331eb8a0SShengchen Kan; NDD-NEXT: .LBB9_2: # %if.end 395a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 396a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 397331eb8a0SShengchen Kanentry: 398331eb8a0SShengchen Kan %tobool = icmp ne i8 %a, 123 399331eb8a0SShengchen Kan %cmp = fcmp ueq double %b, 0.0 400331eb8a0SShengchen Kan %or.cond = select i1 %tobool, i1 %cmp, i1 false 401331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 402331eb8a0SShengchen Kan 403331eb8a0SShengchen Kanif.then: 404331eb8a0SShengchen Kan store i8 %a, i8* %c, align 4 405331eb8a0SShengchen Kan br label %if.end 406331eb8a0SShengchen Kan 407331eb8a0SShengchen Kanif.end: 408331eb8a0SShengchen Kan ret i8 0 409331eb8a0SShengchen Kan} 410331eb8a0SShengchen Kan 411331eb8a0SShengchen Kandefine i8 @ccmp8ri_zf_double_p(i8 %a, double %b, i8* nocapture %c) { 412331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8ri_zf_double_p: 413331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 414a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b] 415a8a21bbeSShengchen Kan; CHECK-NEXT: setne %al # encoding: [0x0f,0x95,0xc0] 416a8a21bbeSShengchen Kan; CHECK-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0] 417a8a21bbeSShengchen Kan; CHECK-NEXT: setp %cl # encoding: [0x0f,0x9a,0xc1] 418a8a21bbeSShengchen Kan; CHECK-NEXT: andb %al, %cl # encoding: [0x20,0xc1] 419a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb $1, %cl # encoding: [0x80,0xf9,0x01] 420a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB10_2 # encoding: [0x75,A] 421a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB10_2-1, kind: FK_PCRel_1 422331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %if.then 423a8a21bbeSShengchen Kan; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 424331eb8a0SShengchen Kan; CHECK-NEXT: .LBB10_2: # %if.end 425a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 426a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 427331eb8a0SShengchen Kan; 428331eb8a0SShengchen Kan; NDD-LABEL: ccmp8ri_zf_double_p: 429331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 430a8a21bbeSShengchen Kan; NDD-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b] 431a8a21bbeSShengchen Kan; NDD-NEXT: setne %al # encoding: [0x0f,0x95,0xc0] 432a8a21bbeSShengchen Kan; NDD-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0] 433a8a21bbeSShengchen Kan; NDD-NEXT: setp %cl # encoding: [0x0f,0x9a,0xc1] 434a8a21bbeSShengchen Kan; NDD-NEXT: andb %cl, %al # EVEX TO LEGACY Compression encoding: [0x20,0xc8] 435a8a21bbeSShengchen Kan; NDD-NEXT: cmpb $1, %al # encoding: [0x3c,0x01] 436a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB10_2 # encoding: [0x75,A] 437a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB10_2-1, kind: FK_PCRel_1 438331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %if.then 439a8a21bbeSShengchen Kan; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 440331eb8a0SShengchen Kan; NDD-NEXT: .LBB10_2: # %if.end 441a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 442a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 443331eb8a0SShengchen Kanentry: 444331eb8a0SShengchen Kan %tobool = icmp ne i8 %a, 123 445331eb8a0SShengchen Kan %cmp = fcmp uno double %b, 0.0 446331eb8a0SShengchen Kan %or.cond = select i1 %tobool, i1 %cmp, i1 false 447331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 448331eb8a0SShengchen Kan 449331eb8a0SShengchen Kanif.then: 450331eb8a0SShengchen Kan store i8 %a, i8* %c, align 4 451331eb8a0SShengchen Kan br label %if.end 452331eb8a0SShengchen Kan 453331eb8a0SShengchen Kanif.end: 454331eb8a0SShengchen Kan ret i8 0 455331eb8a0SShengchen Kan} 456331eb8a0SShengchen Kan 457331eb8a0SShengchen Kandefine i8 @ccmp8ri_zf_double_np(i8 %a, double %b, i8* nocapture %c) { 458331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8ri_zf_double_np: 459331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 460a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b] 461a8a21bbeSShengchen Kan; CHECK-NEXT: setne %al # encoding: [0x0f,0x95,0xc0] 462a8a21bbeSShengchen Kan; CHECK-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0] 463a8a21bbeSShengchen Kan; CHECK-NEXT: setnp %cl # encoding: [0x0f,0x9b,0xc1] 464a8a21bbeSShengchen Kan; CHECK-NEXT: andb %al, %cl # encoding: [0x20,0xc1] 465a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb $1, %cl # encoding: [0x80,0xf9,0x01] 466a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB11_2 # encoding: [0x75,A] 467a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB11_2-1, kind: FK_PCRel_1 468331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.1: # %if.then 469a8a21bbeSShengchen Kan; CHECK-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 470331eb8a0SShengchen Kan; CHECK-NEXT: .LBB11_2: # %if.end 471a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 472a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 473331eb8a0SShengchen Kan; 474331eb8a0SShengchen Kan; NDD-LABEL: ccmp8ri_zf_double_np: 475331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 476a8a21bbeSShengchen Kan; NDD-NEXT: cmpb $123, %dil # encoding: [0x40,0x80,0xff,0x7b] 477a8a21bbeSShengchen Kan; NDD-NEXT: setne %al # encoding: [0x0f,0x95,0xc0] 478a8a21bbeSShengchen Kan; NDD-NEXT: ucomisd %xmm0, %xmm0 # encoding: [0x66,0x0f,0x2e,0xc0] 479a8a21bbeSShengchen Kan; NDD-NEXT: setnp %cl # encoding: [0x0f,0x9b,0xc1] 480a8a21bbeSShengchen Kan; NDD-NEXT: andb %cl, %al # EVEX TO LEGACY Compression encoding: [0x20,0xc8] 481a8a21bbeSShengchen Kan; NDD-NEXT: cmpb $1, %al # encoding: [0x3c,0x01] 482a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB11_2 # encoding: [0x75,A] 483a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB11_2-1, kind: FK_PCRel_1 484331eb8a0SShengchen Kan; NDD-NEXT: # %bb.1: # %if.then 485a8a21bbeSShengchen Kan; NDD-NEXT: movb %dil, (%rsi) # encoding: [0x40,0x88,0x3e] 486331eb8a0SShengchen Kan; NDD-NEXT: .LBB11_2: # %if.end 487a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 488a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 489331eb8a0SShengchen Kanentry: 490331eb8a0SShengchen Kan %tobool = icmp ne i8 %a, 123 491331eb8a0SShengchen Kan %cmp = fcmp ord double %b, 0.0 492331eb8a0SShengchen Kan %or.cond = select i1 %tobool, i1 %cmp, i1 false 493331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 494331eb8a0SShengchen Kan 495331eb8a0SShengchen Kanif.then: 496331eb8a0SShengchen Kan store i8 %a, i8* %c, align 4 497331eb8a0SShengchen Kan br label %if.end 498331eb8a0SShengchen Kan 499331eb8a0SShengchen Kanif.end: 500331eb8a0SShengchen Kan ret i8 0 501331eb8a0SShengchen Kan} 502331eb8a0SShengchen Kan 503331eb8a0SShengchen Kandefine void @ccmp16ri_zf(i16 noundef %a, i16 noundef %b, i16 noundef %c) { 504331eb8a0SShengchen Kan; CHECK-LABEL: ccmp16ri_zf: 505331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 506a8a21bbeSShengchen Kan; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 507a8a21bbeSShengchen Kan; CHECK-NEXT: movswl %si, %eax # encoding: [0x0f,0xbf,0xc6] 508a9183b88SShengchen Kan; CHECK-NEXT: ccmpael {dfv=sf} $1234, %eax # encoding: [0x62,0xf4,0x24,0x03,0x81,0xf8,0xd2,0x04,0x00,0x00] 509a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x4D2 510a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB12_1 # encoding: [0x7d,A] 511a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1 512331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 513a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 514331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 515a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 516a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 517331eb8a0SShengchen Kan; CHECK-NEXT: .LBB12_1: # %if.end 518a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 519331eb8a0SShengchen Kan; 520331eb8a0SShengchen Kan; NDD-LABEL: ccmp16ri_zf: 521331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 522a8a21bbeSShengchen Kan; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 523a8a21bbeSShengchen Kan; NDD-NEXT: movswl %si, %eax # encoding: [0x0f,0xbf,0xc6] 524a9183b88SShengchen Kan; NDD-NEXT: ccmpael {dfv=sf} $1234, %eax # encoding: [0x62,0xf4,0x24,0x03,0x81,0xf8,0xd2,0x04,0x00,0x00] 525a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x4D2 526a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB12_1 # encoding: [0x7d,A] 527a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1 528331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 529a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 530331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 531a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 532a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 533331eb8a0SShengchen Kan; NDD-NEXT: .LBB12_1: # %if.end 534a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 535331eb8a0SShengchen Kanentry: 536331eb8a0SShengchen Kan %cmp = icmp ult i16 %a, %c 537331eb8a0SShengchen Kan %cmp1 = icmp slt i16 %b, 1234 538331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 539331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 540331eb8a0SShengchen Kan 541331eb8a0SShengchen Kanif.then: ; preds = %entry 542331eb8a0SShengchen Kan tail call void (...) @foo() 543331eb8a0SShengchen Kan br label %if.end 544331eb8a0SShengchen Kan 545331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 546331eb8a0SShengchen Kan ret void 547331eb8a0SShengchen Kan} 548331eb8a0SShengchen Kan 549331eb8a0SShengchen Kandefine void @ccmp32ri_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 550331eb8a0SShengchen Kan; CHECK-LABEL: ccmp32ri_cf: 551331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 552a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 553a9183b88SShengchen Kan; CHECK-NEXT: ccmpbl {dfv=cf} $1048577, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x81,0xfe,0x01,0x00,0x10,0x00] 554a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x100001 555a8a21bbeSShengchen Kan; CHECK-NEXT: jae .LBB13_1 # encoding: [0x73,A] 556a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1 557331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 558a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 559331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 560a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 561a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 562331eb8a0SShengchen Kan; CHECK-NEXT: .LBB13_1: # %if.end 563a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 564331eb8a0SShengchen Kan; 565331eb8a0SShengchen Kan; NDD-LABEL: ccmp32ri_cf: 566331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 567a8a21bbeSShengchen Kan; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 568a9183b88SShengchen Kan; NDD-NEXT: ccmpbl {dfv=cf} $1048577, %esi # encoding: [0x62,0xf4,0x0c,0x02,0x81,0xfe,0x01,0x00,0x10,0x00] 569a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x100001 570a8a21bbeSShengchen Kan; NDD-NEXT: jae .LBB13_1 # encoding: [0x73,A] 571a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1 572331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 573a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 574331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 575a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 576a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 577331eb8a0SShengchen Kan; NDD-NEXT: .LBB13_1: # %if.end 578a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 579331eb8a0SShengchen Kanentry: 580331eb8a0SShengchen Kan %cmp = icmp uge i32 %a, %c 581a8a21bbeSShengchen Kan %cmp1 = icmp ule i32 %b, 1048576 582331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 583331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 584331eb8a0SShengchen Kan 585331eb8a0SShengchen Kanif.then: ; preds = %entry 586331eb8a0SShengchen Kan tail call void (...) @foo() 587331eb8a0SShengchen Kan br label %if.end 588331eb8a0SShengchen Kan 589331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 590331eb8a0SShengchen Kan ret void 591331eb8a0SShengchen Kan} 592331eb8a0SShengchen Kan 593331eb8a0SShengchen Kandefine void @ccmp64ri32_zf(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 594331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64ri32_zf: 595331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 596a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 597a9183b88SShengchen Kan; CHECK-NEXT: ccmpbeq {dfv=sf} $123456, %rsi # encoding: [0x62,0xf4,0xa4,0x06,0x81,0xfe,0x40,0xe2,0x01,0x00] 598a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x1E240 599a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB14_1 # encoding: [0x7d,A] 600a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1 601331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 602a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 603331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 604a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 605a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 606331eb8a0SShengchen Kan; CHECK-NEXT: .LBB14_1: # %if.end 607a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 608331eb8a0SShengchen Kan; 609331eb8a0SShengchen Kan; NDD-LABEL: ccmp64ri32_zf: 610331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 611a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 612a9183b88SShengchen Kan; NDD-NEXT: ccmpbeq {dfv=sf} $123456, %rsi # encoding: [0x62,0xf4,0xa4,0x06,0x81,0xfe,0x40,0xe2,0x01,0x00] 613a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x1E240 614a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB14_1 # encoding: [0x7d,A] 615a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1 616331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 617a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 618331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 619a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 620a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 621331eb8a0SShengchen Kan; NDD-NEXT: .LBB14_1: # %if.end 622a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 623331eb8a0SShengchen Kanentry: 624331eb8a0SShengchen Kan %cmp = icmp ugt i64 %a, %c 625331eb8a0SShengchen Kan %cmp1 = icmp slt i64 %b, 123456 626331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 627331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 628331eb8a0SShengchen Kan 629331eb8a0SShengchen Kanif.then: ; preds = %entry 630331eb8a0SShengchen Kan tail call void (...) @foo() 631331eb8a0SShengchen Kan br label %if.end 632331eb8a0SShengchen Kan 633331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 634331eb8a0SShengchen Kan ret void 635331eb8a0SShengchen Kan} 636331eb8a0SShengchen Kan 637331eb8a0SShengchen Kandefine void @ccmp8rm_zf(i8 noundef %a, i8 noundef %b, i8 noundef %c, ptr %ptr) { 638331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8rm_zf: 639331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 640a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 641a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpneb {dfv=zf} (%rcx), %sil # encoding: [0x62,0xf4,0x14,0x05,0x3a,0x31] 642a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB15_1 # encoding: [0x75,A] 643a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB15_1-1, kind: FK_PCRel_1 644331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 645a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 646331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 647a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 648a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 649331eb8a0SShengchen Kan; CHECK-NEXT: .LBB15_1: # %if.end 650a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 651331eb8a0SShengchen Kan; 652331eb8a0SShengchen Kan; NDD-LABEL: ccmp8rm_zf: 653331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 654a8a21bbeSShengchen Kan; NDD-NEXT: cmpb %dl, %dil # encoding: [0x40,0x38,0xd7] 655a8a21bbeSShengchen Kan; NDD-NEXT: ccmpneb {dfv=zf} (%rcx), %sil # encoding: [0x62,0xf4,0x14,0x05,0x3a,0x31] 656a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB15_1 # encoding: [0x75,A] 657a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB15_1-1, kind: FK_PCRel_1 658331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 659a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 660331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 661a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 662a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 663331eb8a0SShengchen Kan; NDD-NEXT: .LBB15_1: # %if.end 664a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 665331eb8a0SShengchen Kanentry: 666331eb8a0SShengchen Kan %d = load i8, ptr %ptr 667331eb8a0SShengchen Kan %cmp = icmp eq i8 %a, %c 668331eb8a0SShengchen Kan %cmp1 = icmp eq i8 %b, %d 669331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 670331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 671331eb8a0SShengchen Kan 672331eb8a0SShengchen Kanif.then: ; preds = %entry 673331eb8a0SShengchen Kan tail call void (...) @foo() 674331eb8a0SShengchen Kan br label %if.end 675331eb8a0SShengchen Kan 676331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 677331eb8a0SShengchen Kan ret void 678331eb8a0SShengchen Kan} 679331eb8a0SShengchen Kan 680331eb8a0SShengchen Kandefine void @ccmp16rm_sf(i16 noundef %a, i16 noundef %b, i16 noundef %c, ptr %ptr) { 681331eb8a0SShengchen Kan; CHECK-LABEL: ccmp16rm_sf: 682331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 683a8a21bbeSShengchen Kan; CHECK-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 684a8a21bbeSShengchen Kan; CHECK-NEXT: ccmplew {dfv=sf} (%rcx), %si # encoding: [0x62,0xf4,0x25,0x0e,0x3b,0x31] 685a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB16_1 # encoding: [0x7d,A] 686a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB16_1-1, kind: FK_PCRel_1 687331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 688a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 689331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 690a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 691a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 692331eb8a0SShengchen Kan; CHECK-NEXT: .LBB16_1: # %if.end 693a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 694331eb8a0SShengchen Kan; 695331eb8a0SShengchen Kan; NDD-LABEL: ccmp16rm_sf: 696331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 697a8a21bbeSShengchen Kan; NDD-NEXT: cmpw %dx, %di # encoding: [0x66,0x39,0xd7] 698a8a21bbeSShengchen Kan; NDD-NEXT: ccmplew {dfv=sf} (%rcx), %si # encoding: [0x62,0xf4,0x25,0x0e,0x3b,0x31] 699a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB16_1 # encoding: [0x7d,A] 700a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB16_1-1, kind: FK_PCRel_1 701331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 702a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 703331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 704a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 705a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 706331eb8a0SShengchen Kan; NDD-NEXT: .LBB16_1: # %if.end 707a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 708331eb8a0SShengchen Kanentry: 709331eb8a0SShengchen Kan %d = load i16, ptr %ptr 710331eb8a0SShengchen Kan %cmp = icmp sgt i16 %a, %c 711331eb8a0SShengchen Kan %cmp1 = icmp slt i16 %b, %d 712331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 713331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 714331eb8a0SShengchen Kan 715331eb8a0SShengchen Kanif.then: ; preds = %entry 716331eb8a0SShengchen Kan tail call void (...) @foo() 717331eb8a0SShengchen Kan br label %if.end 718331eb8a0SShengchen Kan 719331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 720331eb8a0SShengchen Kan ret void 721331eb8a0SShengchen Kan} 722331eb8a0SShengchen Kan 723331eb8a0SShengchen Kandefine void @ccmp32rm_cf(i32 noundef %a, i32 noundef %b, i32 noundef %c, ptr %ptr) { 724331eb8a0SShengchen Kan; CHECK-LABEL: ccmp32rm_cf: 725331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 726a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 727a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpgl {dfv=cf} (%rcx), %esi # encoding: [0x62,0xf4,0x0c,0x0f,0x3b,0x31] 728a8a21bbeSShengchen Kan; CHECK-NEXT: ja .LBB17_1 # encoding: [0x77,A] 729a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB17_1-1, kind: FK_PCRel_1 730331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 731a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 732331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 733a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 734a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 735331eb8a0SShengchen Kan; CHECK-NEXT: .LBB17_1: # %if.end 736a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 737331eb8a0SShengchen Kan; 738331eb8a0SShengchen Kan; NDD-LABEL: ccmp32rm_cf: 739331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 740a8a21bbeSShengchen Kan; NDD-NEXT: cmpl %edx, %edi # encoding: [0x39,0xd7] 741a8a21bbeSShengchen Kan; NDD-NEXT: ccmpgl {dfv=cf} (%rcx), %esi # encoding: [0x62,0xf4,0x0c,0x0f,0x3b,0x31] 742a8a21bbeSShengchen Kan; NDD-NEXT: ja .LBB17_1 # encoding: [0x77,A] 743a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB17_1-1, kind: FK_PCRel_1 744331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 745a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 746331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 747a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 748a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 749331eb8a0SShengchen Kan; NDD-NEXT: .LBB17_1: # %if.end 750a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 751331eb8a0SShengchen Kanentry: 752331eb8a0SShengchen Kan %d = load i32, ptr %ptr 753331eb8a0SShengchen Kan %cmp = icmp sle i32 %a, %c 754331eb8a0SShengchen Kan %cmp1 = icmp ule i32 %b, %d 755331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 756331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 757331eb8a0SShengchen Kan 758331eb8a0SShengchen Kanif.then: ; preds = %entry 759331eb8a0SShengchen Kan tail call void (...) @foo() 760331eb8a0SShengchen Kan br label %if.end 761331eb8a0SShengchen Kan 762331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 763331eb8a0SShengchen Kan ret void 764331eb8a0SShengchen Kan} 765331eb8a0SShengchen Kan 766331eb8a0SShengchen Kandefine void @ccmp64rm_sf(i64 noundef %a, i64 noundef %b, i64 noundef %c, ptr %ptr) { 767331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64rm_sf: 768331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 769a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 770a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpleq {dfv=sf} (%rcx), %rsi # encoding: [0x62,0xf4,0xa4,0x0e,0x3b,0x31] 771a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB18_1 # encoding: [0x7d,A] 772a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB18_1-1, kind: FK_PCRel_1 773331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 774a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 775331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 776a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 777a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 778331eb8a0SShengchen Kan; CHECK-NEXT: .LBB18_1: # %if.end 779a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 780331eb8a0SShengchen Kan; 781331eb8a0SShengchen Kan; NDD-LABEL: ccmp64rm_sf: 782331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 783a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 784a8a21bbeSShengchen Kan; NDD-NEXT: ccmpleq {dfv=sf} (%rcx), %rsi # encoding: [0x62,0xf4,0xa4,0x0e,0x3b,0x31] 785a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB18_1 # encoding: [0x7d,A] 786a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB18_1-1, kind: FK_PCRel_1 787331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 788a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 789331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 790a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 791a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 792331eb8a0SShengchen Kan; NDD-NEXT: .LBB18_1: # %if.end 793a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 794331eb8a0SShengchen Kanentry: 795331eb8a0SShengchen Kan %d = load i64, ptr %ptr 796331eb8a0SShengchen Kan %cmp = icmp sgt i64 %a, %c 797331eb8a0SShengchen Kan %cmp1 = icmp slt i64 %b, %d 798331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 799331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 800331eb8a0SShengchen Kan 801331eb8a0SShengchen Kanif.then: ; preds = %entry 802331eb8a0SShengchen Kan tail call void (...) @foo() 803331eb8a0SShengchen Kan br label %if.end 804331eb8a0SShengchen Kan 805331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 806331eb8a0SShengchen Kan ret void 807331eb8a0SShengchen Kan} 808331eb8a0SShengchen Kan 809331eb8a0SShengchen Kandefine void @ccmp8mr_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) { 810331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8mr_zf: 811331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 812a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7] 813a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpgeb {dfv=zf} %sil, (%rdx) # encoding: [0x62,0xf4,0x14,0x0d,0x38,0x32] 814a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB19_1 # encoding: [0x75,A] 815a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB19_1-1, kind: FK_PCRel_1 816331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 817a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 818331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 819a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 820a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 821331eb8a0SShengchen Kan; CHECK-NEXT: .LBB19_1: # %if.end 822a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 823331eb8a0SShengchen Kan; 824331eb8a0SShengchen Kan; NDD-LABEL: ccmp8mr_zf: 825331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 826a8a21bbeSShengchen Kan; NDD-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7] 827a8a21bbeSShengchen Kan; NDD-NEXT: ccmpgeb {dfv=zf} %sil, (%rdx) # encoding: [0x62,0xf4,0x14,0x0d,0x38,0x32] 828a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB19_1 # encoding: [0x75,A] 829a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB19_1-1, kind: FK_PCRel_1 830331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 831a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 832331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 833a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 834a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 835331eb8a0SShengchen Kan; NDD-NEXT: .LBB19_1: # %if.end 836a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 837331eb8a0SShengchen Kanentry: 838331eb8a0SShengchen Kan %b = load i8, ptr %ptr 839331eb8a0SShengchen Kan %cmp = icmp slt i8 %a, %c 840331eb8a0SShengchen Kan %cmp1 = icmp eq i8 %b, %c 841331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 842331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 843331eb8a0SShengchen Kan 844331eb8a0SShengchen Kanif.then: ; preds = %entry 845331eb8a0SShengchen Kan tail call void (...) @foo() 846331eb8a0SShengchen Kan br label %if.end 847331eb8a0SShengchen Kan 848331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 849331eb8a0SShengchen Kan ret void 850331eb8a0SShengchen Kan} 851331eb8a0SShengchen Kan 852331eb8a0SShengchen Kandefine void @ccmp16mr_sf(i16 noundef %a, i16 noundef %c, ptr %ptr) { 853331eb8a0SShengchen Kan; CHECK-LABEL: ccmp16mr_sf: 854331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 855a8a21bbeSShengchen Kan; CHECK-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7] 856a8a21bbeSShengchen Kan; CHECK-NEXT: ccmplew {dfv=sf} %si, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x39,0x32] 857a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB20_1 # encoding: [0x7d,A] 858a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB20_1-1, kind: FK_PCRel_1 859331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 860a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 861331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 862a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 863a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 864331eb8a0SShengchen Kan; CHECK-NEXT: .LBB20_1: # %if.end 865a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 866331eb8a0SShengchen Kan; 867331eb8a0SShengchen Kan; NDD-LABEL: ccmp16mr_sf: 868331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 869a8a21bbeSShengchen Kan; NDD-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7] 870a8a21bbeSShengchen Kan; NDD-NEXT: ccmplew {dfv=sf} %si, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x39,0x32] 871a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB20_1 # encoding: [0x7d,A] 872a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB20_1-1, kind: FK_PCRel_1 873331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 874a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 875331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 876a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 877a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 878331eb8a0SShengchen Kan; NDD-NEXT: .LBB20_1: # %if.end 879a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 880331eb8a0SShengchen Kanentry: 881331eb8a0SShengchen Kan %b = load i16, ptr %ptr 882331eb8a0SShengchen Kan %cmp = icmp sgt i16 %a, %c 883331eb8a0SShengchen Kan %cmp1 = icmp slt i16 %b, %c 884331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 885331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 886331eb8a0SShengchen Kan 887331eb8a0SShengchen Kanif.then: ; preds = %entry 888331eb8a0SShengchen Kan tail call void (...) @foo() 889331eb8a0SShengchen Kan br label %if.end 890331eb8a0SShengchen Kan 891331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 892331eb8a0SShengchen Kan ret void 893331eb8a0SShengchen Kan} 894331eb8a0SShengchen Kan 895331eb8a0SShengchen Kandefine void @ccmp32mr_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) { 896331eb8a0SShengchen Kan; CHECK-LABEL: ccmp32mr_cf: 897331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 898a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7] 899a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpll {dfv=cf} %esi, (%rdx) # encoding: [0x62,0xf4,0x0c,0x0c,0x39,0x32] 900a8a21bbeSShengchen Kan; CHECK-NEXT: ja .LBB21_1 # encoding: [0x77,A] 901a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB21_1-1, kind: FK_PCRel_1 902331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 903a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 904331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 905a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 906a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 907331eb8a0SShengchen Kan; CHECK-NEXT: .LBB21_1: # %if.end 908a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 909331eb8a0SShengchen Kan; 910331eb8a0SShengchen Kan; NDD-LABEL: ccmp32mr_cf: 911331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 912a8a21bbeSShengchen Kan; NDD-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7] 913a8a21bbeSShengchen Kan; NDD-NEXT: ccmpll {dfv=cf} %esi, (%rdx) # encoding: [0x62,0xf4,0x0c,0x0c,0x39,0x32] 914a8a21bbeSShengchen Kan; NDD-NEXT: ja .LBB21_1 # encoding: [0x77,A] 915a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB21_1-1, kind: FK_PCRel_1 916331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 917a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 918331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 919a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 920a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 921331eb8a0SShengchen Kan; NDD-NEXT: .LBB21_1: # %if.end 922a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 923331eb8a0SShengchen Kanentry: 924331eb8a0SShengchen Kan %b = load i32, ptr %ptr 925331eb8a0SShengchen Kan %cmp = icmp sge i32 %a, %c 926331eb8a0SShengchen Kan %cmp1 = icmp ule i32 %b, %c 927331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 928331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 929331eb8a0SShengchen Kan 930331eb8a0SShengchen Kanif.then: ; preds = %entry 931331eb8a0SShengchen Kan tail call void (...) @foo() 932331eb8a0SShengchen Kan br label %if.end 933331eb8a0SShengchen Kan 934331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 935331eb8a0SShengchen Kan ret void 936331eb8a0SShengchen Kan} 937331eb8a0SShengchen Kan 938331eb8a0SShengchen Kandefine void @ccmp64mr_sf(i64 noundef %a, i64 noundef %c, ptr %ptr) { 939331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64mr_sf: 940331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 941a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 942a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpleq {dfv=sf} %rsi, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x39,0x32] 943a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB22_1 # encoding: [0x7d,A] 944a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB22_1-1, kind: FK_PCRel_1 945331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 946a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 947331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 948a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 949a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 950331eb8a0SShengchen Kan; CHECK-NEXT: .LBB22_1: # %if.end 951a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 952331eb8a0SShengchen Kan; 953331eb8a0SShengchen Kan; NDD-LABEL: ccmp64mr_sf: 954331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 955a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 956a8a21bbeSShengchen Kan; NDD-NEXT: ccmpleq {dfv=sf} %rsi, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x39,0x32] 957a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB22_1 # encoding: [0x7d,A] 958a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB22_1-1, kind: FK_PCRel_1 959331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 960a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 961331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 962a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 963a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 964331eb8a0SShengchen Kan; NDD-NEXT: .LBB22_1: # %if.end 965a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 966331eb8a0SShengchen Kanentry: 967331eb8a0SShengchen Kan %b = load i64, ptr %ptr 968331eb8a0SShengchen Kan %cmp = icmp sgt i64 %a, %c 969331eb8a0SShengchen Kan %cmp1 = icmp slt i64 %b, %c 970331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 971331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 972331eb8a0SShengchen Kan 973331eb8a0SShengchen Kanif.then: ; preds = %entry 974331eb8a0SShengchen Kan tail call void (...) @foo() 975331eb8a0SShengchen Kan br label %if.end 976331eb8a0SShengchen Kan 977331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 978331eb8a0SShengchen Kan ret void 979331eb8a0SShengchen Kan} 980331eb8a0SShengchen Kan 981331eb8a0SShengchen Kandefine void @ccmp8mi_zf(i8 noundef %a, i8 noundef %c, ptr %ptr) { 982331eb8a0SShengchen Kan; CHECK-LABEL: ccmp8mi_zf: 983331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 984a8a21bbeSShengchen Kan; CHECK-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7] 985a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpneb {dfv=zf} $123, (%rdx) # encoding: [0x62,0xf4,0x14,0x05,0x80,0x3a,0x7b] 986a8a21bbeSShengchen Kan; CHECK-NEXT: jne .LBB23_1 # encoding: [0x75,A] 987a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB23_1-1, kind: FK_PCRel_1 988331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 989a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 990331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 991a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 992a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 993331eb8a0SShengchen Kan; CHECK-NEXT: .LBB23_1: # %if.end 994a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 995331eb8a0SShengchen Kan; 996331eb8a0SShengchen Kan; NDD-LABEL: ccmp8mi_zf: 997331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 998a8a21bbeSShengchen Kan; NDD-NEXT: cmpb %sil, %dil # encoding: [0x40,0x38,0xf7] 999a8a21bbeSShengchen Kan; NDD-NEXT: ccmpneb {dfv=zf} $123, (%rdx) # encoding: [0x62,0xf4,0x14,0x05,0x80,0x3a,0x7b] 1000a8a21bbeSShengchen Kan; NDD-NEXT: jne .LBB23_1 # encoding: [0x75,A] 1001a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB23_1-1, kind: FK_PCRel_1 1002331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 1003a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1004331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 1005a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 1006a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1007331eb8a0SShengchen Kan; NDD-NEXT: .LBB23_1: # %if.end 1008a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1009331eb8a0SShengchen Kanentry: 1010331eb8a0SShengchen Kan %b = load i8, ptr %ptr 1011331eb8a0SShengchen Kan %cmp = icmp eq i8 %a, %c 1012331eb8a0SShengchen Kan %cmp1 = icmp eq i8 %b, 123 1013331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 1014331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 1015331eb8a0SShengchen Kan 1016331eb8a0SShengchen Kanif.then: ; preds = %entry 1017331eb8a0SShengchen Kan tail call void (...) @foo() 1018331eb8a0SShengchen Kan br label %if.end 1019331eb8a0SShengchen Kan 1020331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 1021331eb8a0SShengchen Kan ret void 1022331eb8a0SShengchen Kan} 1023331eb8a0SShengchen Kan 1024331eb8a0SShengchen Kandefine void @ccmp16mi_zf(i16 noundef %a, i16 noundef %c, ptr %ptr) { 1025331eb8a0SShengchen Kan; CHECK-LABEL: ccmp16mi_zf: 1026331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1027a8a21bbeSShengchen Kan; CHECK-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7] 1028a9183b88SShengchen Kan; CHECK-NEXT: ccmplew {dfv=sf} $1234, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x81,0x3a,0xd2,0x04] 1029a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x4D2 1030a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB24_1 # encoding: [0x7d,A] 1031a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1 1032331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 1033a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1034331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 1035a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 1036a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1037331eb8a0SShengchen Kan; CHECK-NEXT: .LBB24_1: # %if.end 1038a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1039331eb8a0SShengchen Kan; 1040331eb8a0SShengchen Kan; NDD-LABEL: ccmp16mi_zf: 1041331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1042a8a21bbeSShengchen Kan; NDD-NEXT: cmpw %si, %di # encoding: [0x66,0x39,0xf7] 1043a9183b88SShengchen Kan; NDD-NEXT: ccmplew {dfv=sf} $1234, (%rdx) # encoding: [0x62,0xf4,0x25,0x0e,0x81,0x3a,0xd2,0x04] 1044a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x4D2 1045a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB24_1 # encoding: [0x7d,A] 1046a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1 1047331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 1048a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1049331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 1050a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 1051a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1052331eb8a0SShengchen Kan; NDD-NEXT: .LBB24_1: # %if.end 1053a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1054331eb8a0SShengchen Kanentry: 1055331eb8a0SShengchen Kan %b = load i16, ptr %ptr 1056331eb8a0SShengchen Kan %cmp = icmp sgt i16 %a, %c 1057331eb8a0SShengchen Kan %cmp1 = icmp slt i16 %b, 1234 1058331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 1059331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 1060331eb8a0SShengchen Kan 1061331eb8a0SShengchen Kanif.then: ; preds = %entry 1062331eb8a0SShengchen Kan tail call void (...) @foo() 1063331eb8a0SShengchen Kan br label %if.end 1064331eb8a0SShengchen Kan 1065331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 1066331eb8a0SShengchen Kan ret void 1067331eb8a0SShengchen Kan} 1068331eb8a0SShengchen Kan 1069331eb8a0SShengchen Kandefine void @ccmp32mi_cf(i32 noundef %a, i32 noundef %c, ptr %ptr) { 1070331eb8a0SShengchen Kan; CHECK-LABEL: ccmp32mi_cf: 1071331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1072a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7] 1073a9183b88SShengchen Kan; CHECK-NEXT: ccmpnel {dfv=cf} $123457, (%rdx) # encoding: [0x62,0xf4,0x0c,0x05,0x81,0x3a,0x41,0xe2,0x01,0x00] 1074a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x1E241 1075a8a21bbeSShengchen Kan; CHECK-NEXT: jae .LBB25_1 # encoding: [0x73,A] 1076a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1 1077331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 1078a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1079331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 1080a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 1081a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1082331eb8a0SShengchen Kan; CHECK-NEXT: .LBB25_1: # %if.end 1083a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1084331eb8a0SShengchen Kan; 1085331eb8a0SShengchen Kan; NDD-LABEL: ccmp32mi_cf: 1086331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1087a8a21bbeSShengchen Kan; NDD-NEXT: cmpl %esi, %edi # encoding: [0x39,0xf7] 1088a9183b88SShengchen Kan; NDD-NEXT: ccmpnel {dfv=cf} $123457, (%rdx) # encoding: [0x62,0xf4,0x0c,0x05,0x81,0x3a,0x41,0xe2,0x01,0x00] 1089a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x1E241 1090a8a21bbeSShengchen Kan; NDD-NEXT: jae .LBB25_1 # encoding: [0x73,A] 1091a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1 1092331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 1093a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1094331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 1095a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 1096a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1097331eb8a0SShengchen Kan; NDD-NEXT: .LBB25_1: # %if.end 1098a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1099331eb8a0SShengchen Kanentry: 1100331eb8a0SShengchen Kan %b = load i32, ptr %ptr 1101331eb8a0SShengchen Kan %cmp = icmp eq i32 %a, %c 1102331eb8a0SShengchen Kan %cmp1 = icmp ule i32 %b, 123456 1103331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 1104331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 1105331eb8a0SShengchen Kan 1106331eb8a0SShengchen Kanif.then: ; preds = %entry 1107331eb8a0SShengchen Kan tail call void (...) @foo() 1108331eb8a0SShengchen Kan br label %if.end 1109331eb8a0SShengchen Kan 1110331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 1111331eb8a0SShengchen Kan ret void 1112331eb8a0SShengchen Kan} 1113331eb8a0SShengchen Kan 1114331eb8a0SShengchen Kandefine void @ccmp64mi32_zf(i64 noundef %a, i64 noundef %c, ptr %ptr) { 1115331eb8a0SShengchen Kan; CHECK-LABEL: ccmp64mi32_zf: 1116331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1117a8a21bbeSShengchen Kan; CHECK-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 1118a9183b88SShengchen Kan; CHECK-NEXT: ccmpleq {dfv=sf} $123456, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x81,0x3a,0x40,0xe2,0x01,0x00] 1119a8a21bbeSShengchen Kan; CHECK-NEXT: # imm = 0x1E240 1120a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB26_1 # encoding: [0x7d,A] 1121a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1 1122331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 1123a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1124331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 1125a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 1126a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1127331eb8a0SShengchen Kan; CHECK-NEXT: .LBB26_1: # %if.end 1128a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1129331eb8a0SShengchen Kan; 1130331eb8a0SShengchen Kan; NDD-LABEL: ccmp64mi32_zf: 1131331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1132a8a21bbeSShengchen Kan; NDD-NEXT: cmpq %rsi, %rdi # encoding: [0x48,0x39,0xf7] 1133a9183b88SShengchen Kan; NDD-NEXT: ccmpleq {dfv=sf} $123456, (%rdx) # encoding: [0x62,0xf4,0xa4,0x0e,0x81,0x3a,0x40,0xe2,0x01,0x00] 1134a8a21bbeSShengchen Kan; NDD-NEXT: # imm = 0x1E240 1135a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB26_1 # encoding: [0x7d,A] 1136a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1 1137331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 1138a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1139331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 1140a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 1141a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1142331eb8a0SShengchen Kan; NDD-NEXT: .LBB26_1: # %if.end 1143a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1144331eb8a0SShengchen Kanentry: 1145331eb8a0SShengchen Kan %b = load i64, ptr %ptr 1146331eb8a0SShengchen Kan %cmp = icmp sgt i64 %a, %c 1147331eb8a0SShengchen Kan %cmp1 = icmp slt i64 %b, 123456 1148331eb8a0SShengchen Kan %or.cond = or i1 %cmp, %cmp1 1149331eb8a0SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 1150331eb8a0SShengchen Kan 1151331eb8a0SShengchen Kanif.then: ; preds = %entry 1152331eb8a0SShengchen Kan tail call void (...) @foo() 1153331eb8a0SShengchen Kan br label %if.end 1154331eb8a0SShengchen Kan 1155331eb8a0SShengchen Kanif.end: ; preds = %entry, %if.then 1156331eb8a0SShengchen Kan ret void 1157331eb8a0SShengchen Kan} 1158331eb8a0SShengchen Kan 1159331eb8a0SShengchen Kandefine void @ccmp_continous(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 1160331eb8a0SShengchen Kan; CHECK-LABEL: ccmp_continous: 1161331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1162a8a21bbeSShengchen Kan; CHECK-NEXT: testl %edi, %edi # encoding: [0x85,0xff] 1163a8a21bbeSShengchen Kan; CHECK-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02] 1164a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpll {dfv=} $3, %edx # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfa,0x03] 1165a8a21bbeSShengchen Kan; CHECK-NEXT: jge .LBB27_1 # encoding: [0x7d,A] 1166a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB27_1-1, kind: FK_PCRel_1 1167331eb8a0SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 1168a8a21bbeSShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1169331eb8a0SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 1170a8a21bbeSShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 1171a8a21bbeSShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1172331eb8a0SShengchen Kan; CHECK-NEXT: .LBB27_1: # %if.end 1173a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1174331eb8a0SShengchen Kan; 1175331eb8a0SShengchen Kan; NDD-LABEL: ccmp_continous: 1176331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1177a8a21bbeSShengchen Kan; NDD-NEXT: testl %edi, %edi # encoding: [0x85,0xff] 1178a8a21bbeSShengchen Kan; NDD-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02] 1179a8a21bbeSShengchen Kan; NDD-NEXT: ccmpll {dfv=} $3, %edx # encoding: [0x62,0xf4,0x04,0x0c,0x83,0xfa,0x03] 1180a8a21bbeSShengchen Kan; NDD-NEXT: jge .LBB27_1 # encoding: [0x7d,A] 1181a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB27_1-1, kind: FK_PCRel_1 1182331eb8a0SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 1183a8a21bbeSShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 1184331eb8a0SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 1185a8a21bbeSShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 1186a8a21bbeSShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 1187331eb8a0SShengchen Kan; NDD-NEXT: .LBB27_1: # %if.end 1188a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1189331eb8a0SShengchen Kanentry: 1190331eb8a0SShengchen Kan %cmp = icmp slt i32 %a, 1 1191331eb8a0SShengchen Kan %cmp1 = icmp slt i32 %b, 2 1192331eb8a0SShengchen Kan %or.cond = and i1 %cmp, %cmp1 1193331eb8a0SShengchen Kan %cmp3 = icmp slt i32 %c, 3 1194331eb8a0SShengchen Kan %or.cond4 = and i1 %or.cond, %cmp3 1195331eb8a0SShengchen Kan br i1 %or.cond4, label %if.then, label %if.end 1196331eb8a0SShengchen Kan 1197331eb8a0SShengchen Kanif.then: ; preds = %entry 1198331eb8a0SShengchen Kan tail call void (...) @foo() 1199331eb8a0SShengchen Kan br label %if.end 1200331eb8a0SShengchen Kan 1201331eb8a0SShengchen Kanif.end: ; preds = %if.then, %entry 1202331eb8a0SShengchen Kan ret void 1203331eb8a0SShengchen Kan} 1204331eb8a0SShengchen Kan 1205331eb8a0SShengchen Kandefine i32 @ccmp_nobranch(i32 noundef %a, i32 noundef %b) { 1206331eb8a0SShengchen Kan; CHECK-LABEL: ccmp_nobranch: 1207331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1208a8a21bbeSShengchen Kan; CHECK-NEXT: testl %edi, %edi # encoding: [0x85,0xff] 1209a8a21bbeSShengchen Kan; CHECK-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02] 1210a8a21bbeSShengchen Kan; CHECK-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0] 1211a8a21bbeSShengchen Kan; CHECK-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0] 1212a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1213331eb8a0SShengchen Kan; 1214331eb8a0SShengchen Kan; NDD-LABEL: ccmp_nobranch: 1215331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1216a8a21bbeSShengchen Kan; NDD-NEXT: testl %edi, %edi # encoding: [0x85,0xff] 1217a8a21bbeSShengchen Kan; NDD-NEXT: ccmplel {dfv=} $2, %esi # encoding: [0x62,0xf4,0x04,0x0e,0x83,0xfe,0x02] 1218a8a21bbeSShengchen Kan; NDD-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0] 1219a8a21bbeSShengchen Kan; NDD-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0] 1220a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1221331eb8a0SShengchen Kanentry: 1222331eb8a0SShengchen Kan %cmp = icmp sgt i32 %a, 0 1223331eb8a0SShengchen Kan %cmp1 = icmp sgt i32 %b, 1 1224331eb8a0SShengchen Kan %or.cond.not = or i1 %cmp, %cmp1 1225331eb8a0SShengchen Kan %. = zext i1 %or.cond.not to i32 1226331eb8a0SShengchen Kan ret i32 %. 1227331eb8a0SShengchen Kan} 1228331eb8a0SShengchen Kan 1229331eb8a0SShengchen Kandefine i32 @ccmp_continous_nobranch(i32 noundef %a, i32 noundef %b, i32 noundef %c) { 1230331eb8a0SShengchen Kan; CHECK-LABEL: ccmp_continous_nobranch: 1231331eb8a0SShengchen Kan; CHECK: # %bb.0: # %entry 1232a8a21bbeSShengchen Kan; CHECK-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02] 1233a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpll {dfv=sf} $2, %esi # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfe,0x02] 1234a8a21bbeSShengchen Kan; CHECK-NEXT: ccmpll {dfv=sf} $4, %edx # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfa,0x04] 1235a8a21bbeSShengchen Kan; CHECK-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0] 1236a8a21bbeSShengchen Kan; CHECK-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0] 1237a8a21bbeSShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 1238331eb8a0SShengchen Kan; 1239331eb8a0SShengchen Kan; NDD-LABEL: ccmp_continous_nobranch: 1240331eb8a0SShengchen Kan; NDD: # %bb.0: # %entry 1241a8a21bbeSShengchen Kan; NDD-NEXT: cmpl $2, %edi # encoding: [0x83,0xff,0x02] 1242a8a21bbeSShengchen Kan; NDD-NEXT: ccmpll {dfv=sf} $2, %esi # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfe,0x02] 1243a8a21bbeSShengchen Kan; NDD-NEXT: ccmpll {dfv=sf} $4, %edx # encoding: [0x62,0xf4,0x24,0x0c,0x83,0xfa,0x04] 1244a8a21bbeSShengchen Kan; NDD-NEXT: setge %al # encoding: [0x0f,0x9d,0xc0] 1245a8a21bbeSShengchen Kan; NDD-NEXT: movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0] 1246a8a21bbeSShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 1247331eb8a0SShengchen Kanentry: 1248331eb8a0SShengchen Kan %cmp = icmp sgt i32 %a, 1 1249331eb8a0SShengchen Kan %cmp1 = icmp slt i32 %b, 2 1250331eb8a0SShengchen Kan %cmp2 = icmp sgt i32 %c, 3 1251331eb8a0SShengchen Kan %or1 = or i1 %cmp, %cmp1 1252331eb8a0SShengchen Kan %or2 = and i1 %or1, %cmp2 1253331eb8a0SShengchen Kan %. = zext i1 %or2 to i32 1254331eb8a0SShengchen Kan ret i32 %. 1255331eb8a0SShengchen Kan} 1256331eb8a0SShengchen Kan 125736d52811SShengchen Kandefine void @ccmp64ri64(i64 noundef %a, i64 noundef %b, i64 noundef %c) { 125836d52811SShengchen Kan; CHECK-LABEL: ccmp64ri64: 125936d52811SShengchen Kan; CHECK: # %bb.0: # %entry 126036d52811SShengchen Kan; CHECK-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 1261*e8e2cff1SShengchen Kan; CHECK-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00] 126236d52811SShengchen Kan; CHECK-NEXT: # imm = 0x9167A66BBFE 1263*e8e2cff1SShengchen Kan; CHECK-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6] 126436d52811SShengchen Kan; CHECK-NEXT: jg .LBB30_1 # encoding: [0x7f,A] 126536d52811SShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1 126636d52811SShengchen Kan; CHECK-NEXT: # %bb.2: # %if.then 126736d52811SShengchen Kan; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 126836d52811SShengchen Kan; CHECK-NEXT: jmp foo # TAILCALL 126936d52811SShengchen Kan; CHECK-NEXT: # encoding: [0xeb,A] 127036d52811SShengchen Kan; CHECK-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 127136d52811SShengchen Kan; CHECK-NEXT: .LBB30_1: # %if.end 127236d52811SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 127336d52811SShengchen Kan; 127436d52811SShengchen Kan; NDD-LABEL: ccmp64ri64: 127536d52811SShengchen Kan; NDD: # %bb.0: # %entry 127636d52811SShengchen Kan; NDD-NEXT: cmpq %rdx, %rdi # encoding: [0x48,0x39,0xd7] 1277*e8e2cff1SShengchen Kan; NDD-NEXT: movabsq $9992147483646, %rax # encoding: [0x48,0xb8,0xfe,0xbb,0x66,0x7a,0x16,0x09,0x00,0x00] 127836d52811SShengchen Kan; NDD-NEXT: # imm = 0x9167A66BBFE 1279*e8e2cff1SShengchen Kan; NDD-NEXT: ccmpbeq {dfv=zf} %rax, %rsi # encoding: [0x62,0xf4,0x94,0x06,0x39,0xc6] 128036d52811SShengchen Kan; NDD-NEXT: jg .LBB30_1 # encoding: [0x7f,A] 128136d52811SShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1 128236d52811SShengchen Kan; NDD-NEXT: # %bb.2: # %if.then 128336d52811SShengchen Kan; NDD-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] 128436d52811SShengchen Kan; NDD-NEXT: jmp foo # TAILCALL 128536d52811SShengchen Kan; NDD-NEXT: # encoding: [0xeb,A] 128636d52811SShengchen Kan; NDD-NEXT: # fixup A - offset: 1, value: foo-1, kind: FK_PCRel_1 128736d52811SShengchen Kan; NDD-NEXT: .LBB30_1: # %if.end 128836d52811SShengchen Kan; NDD-NEXT: retq # encoding: [0xc3] 128936d52811SShengchen Kanentry: 129036d52811SShengchen Kan %cmp = icmp ugt i64 %a, %c 129136d52811SShengchen Kan %cmp1 = icmp slt i64 %b, 9992147483647 129236d52811SShengchen Kan %or.cond = or i1 %cmp, %cmp1 129336d52811SShengchen Kan br i1 %or.cond, label %if.then, label %if.end 129436d52811SShengchen Kan 129536d52811SShengchen Kanif.then: ; preds = %entry 129636d52811SShengchen Kan tail call void (...) @foo() 129736d52811SShengchen Kan br label %if.end 129836d52811SShengchen Kan 129936d52811SShengchen Kanif.end: ; preds = %entry, %if.then 130036d52811SShengchen Kan ret void 130136d52811SShengchen Kan} 130236d52811SShengchen Kan 1303331eb8a0SShengchen Kandeclare dso_local void @foo(...) 1304331eb8a0SShengchen Kandeclare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone 1305