xref: /llvm-project/llvm/test/CodeGen/X86/apx/ccmp.ll (revision e8e2cff1607627e52079741af368064cea3e28d4)
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