[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / fold-rmw-ops.ll
blob87008b1f43a0714b1dc9a73dd3beee6af7494338
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -show-mc-encoding | FileCheck %s
4 target triple = "x86_64-unknown-unknown"
6 @g64 = external global i64, align 8
7 @g32 = external global i32, align 4
8 @g16 = external global i16, align 2
9 @g8 = external global i8, align 1
11 declare void @a()
12 declare void @b()
14 define void @add64_imm32_br() nounwind {
15 ; CHECK-LABEL: add64_imm32_br:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    addq $16777214, {{.*}}(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0xfe,0xff,0xff,0x00]
18 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
19 ; CHECK-NEXT:    # imm = 0xFFFFFE
20 ; CHECK-NEXT:    js .LBB0_1 # encoding: [0x78,A]
21 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB0_1-1, kind: FK_PCRel_1
22 ; CHECK-NEXT:  # %bb.2: # %b
23 ; CHECK-NEXT:    jmp b # TAILCALL
24 ; CHECK-NEXT:    # encoding: [0xeb,A]
25 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
26 ; CHECK-NEXT:  .LBB0_1: # %a
27 ; CHECK-NEXT:    jmp a # TAILCALL
28 ; CHECK-NEXT:    # encoding: [0xeb,A]
29 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
30 entry:
31   %load1 = load i64, i64* @g64
32   ; Add 0x00FFFFFE, a positive immediate requiring 24-bits.
33   %add = add i64 %load1, 16777214
34   store i64 %add, i64* @g64
35   %cond = icmp slt i64 %add, 0
36   br i1 %cond, label %a, label %b
39   tail call void @a()
40   ret void
43   tail call void @b()
44   ret void
47 define void @add64_sext_imm32_br() nounwind {
48 ; CHECK-LABEL: add64_sext_imm32_br:
49 ; CHECK:       # %bb.0: # %entry
50 ; CHECK-NEXT:    addq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
51 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
52 ; CHECK-NEXT:    # imm = 0x80000000
53 ; CHECK-NEXT:    js .LBB1_1 # encoding: [0x78,A]
54 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB1_1-1, kind: FK_PCRel_1
55 ; CHECK-NEXT:  # %bb.2: # %b
56 ; CHECK-NEXT:    jmp b # TAILCALL
57 ; CHECK-NEXT:    # encoding: [0xeb,A]
58 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
59 ; CHECK-NEXT:  .LBB1_1: # %a
60 ; CHECK-NEXT:    jmp a # TAILCALL
61 ; CHECK-NEXT:    # encoding: [0xeb,A]
62 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
63 entry:
64   %load1 = load i64, i64* @g64
65   ; Add -0x80000000, which requires sign-extended 32 bits.
66   %add = add i64 %load1, -2147483648
67   store i64 %add, i64* @g64
68   %cond = icmp slt i64 %add, 0
69   br i1 %cond, label %a, label %b
72   tail call void @a()
73   ret void
76   tail call void @b()
77   ret void
80 define void @add64_imm32_via_sub_br() nounwind {
81 ; CHECK-LABEL: add64_imm32_via_sub_br:
82 ; CHECK:       # %bb.0: # %entry
83 ; CHECK-NEXT:    subq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]
84 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
85 ; CHECK-NEXT:    # imm = 0x80000000
86 ; CHECK-NEXT:    js .LBB2_1 # encoding: [0x78,A]
87 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB2_1-1, kind: FK_PCRel_1
88 ; CHECK-NEXT:  # %bb.2: # %b
89 ; CHECK-NEXT:    jmp b # TAILCALL
90 ; CHECK-NEXT:    # encoding: [0xeb,A]
91 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
92 ; CHECK-NEXT:  .LBB2_1: # %a
93 ; CHECK-NEXT:    jmp a # TAILCALL
94 ; CHECK-NEXT:    # encoding: [0xeb,A]
95 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
96 entry:
97   %load1 = load i64, i64* @g64
98   ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate. This
99   ; get's folded because we can instead subtract -0x80000000.
100   %add = add i64 %load1, 2147483648
101   store i64 %add, i64* @g64
102   %cond = icmp slt i64 %add, 0
103   br i1 %cond, label %a, label %b
106   tail call void @a()
107   ret void
110   tail call void @b()
111   ret void
114 define void @add64_no_imm32_via_sub_due_to_cf_br() nounwind {
115 ; CHECK-LABEL: add64_no_imm32_via_sub_due_to_cf_br:
116 ; CHECK:       # %bb.0: # %entry
117 ; CHECK-NEXT:    movl $2147483648, %eax # encoding: [0xb8,0x00,0x00,0x00,0x80]
118 ; CHECK-NEXT:    # imm = 0x80000000
119 ; CHECK-NEXT:    addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
120 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
121 ; CHECK-NEXT:    jae .LBB3_2 # encoding: [0x73,A]
122 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB3_2-1, kind: FK_PCRel_1
123 ; CHECK-NEXT:  # %bb.1: # %a
124 ; CHECK-NEXT:    jmp a # TAILCALL
125 ; CHECK-NEXT:    # encoding: [0xeb,A]
126 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
127 ; CHECK-NEXT:  .LBB3_2: # %b
128 ; CHECK-NEXT:    jmp b # TAILCALL
129 ; CHECK-NEXT:    # encoding: [0xeb,A]
130 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
131 entry:
132   %load1 = load i64, i64* @g64
133   ; Add 0x80000000, which cannot fit in a sign extended 32-bit immediate, but
134   ; could in theory be folded into an immediate operand of a sub. However, we
135   ; use the CF flag here and so shouldn't make that transformation.
136   %add = add i64 %load1, 2147483648
137   store i64 %add, i64* @g64
138   %cond = icmp ult i64 %add, 2147483648
139   br i1 %cond, label %a, label %b
142   tail call void @a()
143   ret void
146   tail call void @b()
147   ret void
150 define void @add64_too_large_imm32_br() nounwind {
151 ; CHECK-LABEL: add64_too_large_imm32_br:
152 ; CHECK:       # %bb.0: # %entry
153 ; CHECK-NEXT:    movl $2147483649, %eax # encoding: [0xb8,0x01,0x00,0x00,0x80]
154 ; CHECK-NEXT:    # imm = 0x80000001
155 ; CHECK-NEXT:    addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
156 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
157 ; CHECK-NEXT:    js .LBB4_1 # encoding: [0x78,A]
158 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB4_1-1, kind: FK_PCRel_1
159 ; CHECK-NEXT:  # %bb.2: # %b
160 ; CHECK-NEXT:    jmp b # TAILCALL
161 ; CHECK-NEXT:    # encoding: [0xeb,A]
162 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
163 ; CHECK-NEXT:  .LBB4_1: # %a
164 ; CHECK-NEXT:    jmp a # TAILCALL
165 ; CHECK-NEXT:    # encoding: [0xeb,A]
166 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
167 entry:
168   %load1 = load i64, i64* @g64
169   ; Add 0x80000001, which cannot fit in a sign extended 32-bit immediate. This
170   ; should not get folded into an immediate.
171   %add = add i64 %load1, 2147483649
172   store i64 %add, i64* @g64
173   %cond = icmp slt i64 %add, 0
174   br i1 %cond, label %a, label %b
177   tail call void @a()
178   ret void
181   tail call void @b()
182   ret void
185 define void @add64_imm8_via_sub_br() nounwind {
186 ; CHECK-LABEL: add64_imm8_via_sub_br:
187 ; CHECK:       # %bb.0: # %entry
188 ; CHECK-NEXT:    subq $-128, {{.*}}(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]
189 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
190 ; CHECK-NEXT:    js .LBB5_1 # encoding: [0x78,A]
191 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB5_1-1, kind: FK_PCRel_1
192 ; CHECK-NEXT:  # %bb.2: # %b
193 ; CHECK-NEXT:    jmp b # TAILCALL
194 ; CHECK-NEXT:    # encoding: [0xeb,A]
195 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
196 ; CHECK-NEXT:  .LBB5_1: # %a
197 ; CHECK-NEXT:    jmp a # TAILCALL
198 ; CHECK-NEXT:    # encoding: [0xeb,A]
199 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
200 entry:
201   %load1 = load i64, i64* @g64
202   ; Add 0x80 which can't quite fit into an imm8 because it would be sign
203   ; extended, but which can fit if we convert to a sub and negate the value.
204   %add = add i64 %load1, 128
205   store i64 %add, i64* @g64
206   %cond = icmp slt i64 %add, 0
207   br i1 %cond, label %a, label %b
210   tail call void @a()
211   ret void
214   tail call void @b()
215   ret void
218 define void @add64_imm8_br() nounwind {
219 ; CHECK-LABEL: add64_imm8_br:
220 ; CHECK:       # %bb.0: # %entry
221 ; CHECK-NEXT:    addq $42, {{.*}}(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0x2a]
222 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
223 ; CHECK-NEXT:    js .LBB6_1 # encoding: [0x78,A]
224 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB6_1-1, kind: FK_PCRel_1
225 ; CHECK-NEXT:  # %bb.2: # %b
226 ; CHECK-NEXT:    jmp b # TAILCALL
227 ; CHECK-NEXT:    # encoding: [0xeb,A]
228 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
229 ; CHECK-NEXT:  .LBB6_1: # %a
230 ; CHECK-NEXT:    jmp a # TAILCALL
231 ; CHECK-NEXT:    # encoding: [0xeb,A]
232 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
233 entry:
234   %load1 = load i64, i64* @g64
235   %add = add i64 %load1, 42
236   store i64 %add, i64* @g64
237   %cond = icmp slt i64 %add, 0
238   br i1 %cond, label %a, label %b
241   tail call void @a()
242   ret void
245   tail call void @b()
246   ret void
249 define void @add64_imm8_neg_br() nounwind {
250 ; CHECK-LABEL: add64_imm8_neg_br:
251 ; CHECK:       # %bb.0: # %entry
252 ; CHECK-NEXT:    addq $-42, {{.*}}(%rip) # encoding: [0x48,0x83,0x05,A,A,A,A,0xd6]
253 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
254 ; CHECK-NEXT:    js .LBB7_1 # encoding: [0x78,A]
255 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB7_1-1, kind: FK_PCRel_1
256 ; CHECK-NEXT:  # %bb.2: # %b
257 ; CHECK-NEXT:    jmp b # TAILCALL
258 ; CHECK-NEXT:    # encoding: [0xeb,A]
259 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
260 ; CHECK-NEXT:  .LBB7_1: # %a
261 ; CHECK-NEXT:    jmp a # TAILCALL
262 ; CHECK-NEXT:    # encoding: [0xeb,A]
263 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
264 entry:
265   %load1 = load i64, i64* @g64
266   %add = add i64 %load1, -42
267   store i64 %add, i64* @g64
268   %cond = icmp slt i64 %add, 0
269   br i1 %cond, label %a, label %b
272   tail call void @a()
273   ret void
276   tail call void @b()
277   ret void
280 define void @add32_imm_br() nounwind {
281 ; CHECK-LABEL: add32_imm_br:
282 ; CHECK:       # %bb.0: # %entry
283 ; CHECK-NEXT:    addl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
284 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
285 ; CHECK-NEXT:    # imm = 0x80000000
286 ; CHECK-NEXT:    js .LBB8_1 # encoding: [0x78,A]
287 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB8_1-1, kind: FK_PCRel_1
288 ; CHECK-NEXT:  # %bb.2: # %b
289 ; CHECK-NEXT:    jmp b # TAILCALL
290 ; CHECK-NEXT:    # encoding: [0xeb,A]
291 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
292 ; CHECK-NEXT:  .LBB8_1: # %a
293 ; CHECK-NEXT:    jmp a # TAILCALL
294 ; CHECK-NEXT:    # encoding: [0xeb,A]
295 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
296 entry:
297   %load1 = load i32, i32* @g32
298   ; Add 0x80000000, a positive number requiring 32 bits of immediate.
299   %add = add i32 %load1, 2147483648
300   store i32 %add, i32* @g32
301   %cond = icmp slt i32 %add, 0
302   br i1 %cond, label %a, label %b
305   tail call void @a()
306   ret void
309   tail call void @b()
310   ret void
313 define void @add32_imm8_br() nounwind {
314 ; CHECK-LABEL: add32_imm8_br:
315 ; CHECK:       # %bb.0: # %entry
316 ; CHECK-NEXT:    addl $42, {{.*}}(%rip) # encoding: [0x83,0x05,A,A,A,A,0x2a]
317 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
318 ; CHECK-NEXT:    js .LBB9_1 # encoding: [0x78,A]
319 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB9_1-1, kind: FK_PCRel_1
320 ; CHECK-NEXT:  # %bb.2: # %b
321 ; CHECK-NEXT:    jmp b # TAILCALL
322 ; CHECK-NEXT:    # encoding: [0xeb,A]
323 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
324 ; CHECK-NEXT:  .LBB9_1: # %a
325 ; CHECK-NEXT:    jmp a # TAILCALL
326 ; CHECK-NEXT:    # encoding: [0xeb,A]
327 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
328 entry:
329   %load1 = load i32, i32* @g32
330   %add = add i32 %load1, 42
331   store i32 %add, i32* @g32
332   %cond = icmp slt i32 %add, 0
333   br i1 %cond, label %a, label %b
336   tail call void @a()
337   ret void
340   tail call void @b()
341   ret void
344 define void @add32_imm8_neg_br() nounwind {
345 ; CHECK-LABEL: add32_imm8_neg_br:
346 ; CHECK:       # %bb.0: # %entry
347 ; CHECK-NEXT:    addl $-42, {{.*}}(%rip) # encoding: [0x83,0x05,A,A,A,A,0xd6]
348 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
349 ; CHECK-NEXT:    js .LBB10_1 # encoding: [0x78,A]
350 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB10_1-1, kind: FK_PCRel_1
351 ; CHECK-NEXT:  # %bb.2: # %b
352 ; CHECK-NEXT:    jmp b # TAILCALL
353 ; CHECK-NEXT:    # encoding: [0xeb,A]
354 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
355 ; CHECK-NEXT:  .LBB10_1: # %a
356 ; CHECK-NEXT:    jmp a # TAILCALL
357 ; CHECK-NEXT:    # encoding: [0xeb,A]
358 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
359 entry:
360   %load1 = load i32, i32* @g32
361   %add = add i32 %load1, -42
362   store i32 %add, i32* @g32
363   %cond = icmp slt i32 %add, 0
364   br i1 %cond, label %a, label %b
367   tail call void @a()
368   ret void
371   tail call void @b()
372   ret void
375 define void @add16_imm_br() nounwind {
376 ; CHECK-LABEL: add16_imm_br:
377 ; CHECK:       # %bb.0: # %entry
378 ; CHECK-NEXT:    addw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]
379 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
380 ; CHECK-NEXT:    # imm = 0x8000
381 ; CHECK-NEXT:    js .LBB11_1 # encoding: [0x78,A]
382 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB11_1-1, kind: FK_PCRel_1
383 ; CHECK-NEXT:  # %bb.2: # %b
384 ; CHECK-NEXT:    jmp b # TAILCALL
385 ; CHECK-NEXT:    # encoding: [0xeb,A]
386 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
387 ; CHECK-NEXT:  .LBB11_1: # %a
388 ; CHECK-NEXT:    jmp a # TAILCALL
389 ; CHECK-NEXT:    # encoding: [0xeb,A]
390 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
391 entry:
392   %load1 = load i16, i16* @g16
393   ; Add 0x8000, a positive number requiring 16 bits of immediate.
394   %add = add i16 %load1, 32768
395   store i16 %add, i16* @g16
396   %cond = icmp slt i16 %add, 0
397   br i1 %cond, label %a, label %b
400   tail call void @a()
401   ret void
404   tail call void @b()
405   ret void
408 define void @add16_imm8_br() nounwind {
409 ; CHECK-LABEL: add16_imm8_br:
410 ; CHECK:       # %bb.0: # %entry
411 ; CHECK-NEXT:    addw $42, {{.*}}(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0x2a]
412 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
413 ; CHECK-NEXT:    js .LBB12_1 # encoding: [0x78,A]
414 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB12_1-1, kind: FK_PCRel_1
415 ; CHECK-NEXT:  # %bb.2: # %b
416 ; CHECK-NEXT:    jmp b # TAILCALL
417 ; CHECK-NEXT:    # encoding: [0xeb,A]
418 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
419 ; CHECK-NEXT:  .LBB12_1: # %a
420 ; CHECK-NEXT:    jmp a # TAILCALL
421 ; CHECK-NEXT:    # encoding: [0xeb,A]
422 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
423 entry:
424   %load1 = load i16, i16* @g16
425   %add = add i16 %load1, 42
426   store i16 %add, i16* @g16
427   %cond = icmp slt i16 %add, 0
428   br i1 %cond, label %a, label %b
431   tail call void @a()
432   ret void
435   tail call void @b()
436   ret void
439 define void @add16_imm8_neg_br() nounwind {
440 ; CHECK-LABEL: add16_imm8_neg_br:
441 ; CHECK:       # %bb.0: # %entry
442 ; CHECK-NEXT:    addw $-42, {{.*}}(%rip) # encoding: [0x66,0x83,0x05,A,A,A,A,0xd6]
443 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
444 ; CHECK-NEXT:    js .LBB13_1 # encoding: [0x78,A]
445 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB13_1-1, kind: FK_PCRel_1
446 ; CHECK-NEXT:  # %bb.2: # %b
447 ; CHECK-NEXT:    jmp b # TAILCALL
448 ; CHECK-NEXT:    # encoding: [0xeb,A]
449 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
450 ; CHECK-NEXT:  .LBB13_1: # %a
451 ; CHECK-NEXT:    jmp a # TAILCALL
452 ; CHECK-NEXT:    # encoding: [0xeb,A]
453 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
454 entry:
455   %load1 = load i16, i16* @g16
456   %add = add i16 %load1, -42
457   store i16 %add, i16* @g16
458   %cond = icmp slt i16 %add, 0
459   br i1 %cond, label %a, label %b
462   tail call void @a()
463   ret void
466   tail call void @b()
467   ret void
470 define void @add8_imm_br() nounwind {
471 ; CHECK-LABEL: add8_imm_br:
472 ; CHECK:       # %bb.0: # %entry
473 ; CHECK-NEXT:    addb $-2, {{.*}}(%rip) # encoding: [0x80,0x05,A,A,A,A,0xfe]
474 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
475 ; CHECK-NEXT:    js .LBB14_1 # encoding: [0x78,A]
476 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB14_1-1, kind: FK_PCRel_1
477 ; CHECK-NEXT:  # %bb.2: # %b
478 ; CHECK-NEXT:    jmp b # TAILCALL
479 ; CHECK-NEXT:    # encoding: [0xeb,A]
480 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
481 ; CHECK-NEXT:  .LBB14_1: # %a
482 ; CHECK-NEXT:    jmp a # TAILCALL
483 ; CHECK-NEXT:    # encoding: [0xeb,A]
484 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
485 entry:
486   %load1 = load i8, i8* @g8
487   %add = add i8 %load1, -2
488   store i8 %add, i8* @g8
489   %cond = icmp slt i8 %add, 0
490   br i1 %cond, label %a, label %b
493   tail call void @a()
494   ret void
497   tail call void @b()
498   ret void
501 define void @add64_reg_br(i64 %arg) nounwind {
502 ; CHECK-LABEL: add64_reg_br:
503 ; CHECK:       # %bb.0: # %entry
504 ; CHECK-NEXT:    addq %rdi, {{.*}}(%rip) # encoding: [0x48,0x01,0x3d,A,A,A,A]
505 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
506 ; CHECK-NEXT:    js .LBB15_1 # encoding: [0x78,A]
507 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB15_1-1, kind: FK_PCRel_1
508 ; CHECK-NEXT:  # %bb.2: # %b
509 ; CHECK-NEXT:    jmp b # TAILCALL
510 ; CHECK-NEXT:    # encoding: [0xeb,A]
511 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
512 ; CHECK-NEXT:  .LBB15_1: # %a
513 ; CHECK-NEXT:    jmp a # TAILCALL
514 ; CHECK-NEXT:    # encoding: [0xeb,A]
515 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
516 entry:
517   %load1 = load i64, i64* @g64
518   %add = add i64 %load1, %arg
519   store i64 %add, i64* @g64
520   %cond = icmp slt i64 %add, 0
521   br i1 %cond, label %a, label %b
524   tail call void @a()
525   ret void
528   tail call void @b()
529   ret void
532 define void @add32_reg_br(i32 %arg) nounwind {
533 ; CHECK-LABEL: add32_reg_br:
534 ; CHECK:       # %bb.0: # %entry
535 ; CHECK-NEXT:    addl %edi, {{.*}}(%rip) # encoding: [0x01,0x3d,A,A,A,A]
536 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
537 ; CHECK-NEXT:    js .LBB16_1 # encoding: [0x78,A]
538 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB16_1-1, kind: FK_PCRel_1
539 ; CHECK-NEXT:  # %bb.2: # %b
540 ; CHECK-NEXT:    jmp b # TAILCALL
541 ; CHECK-NEXT:    # encoding: [0xeb,A]
542 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
543 ; CHECK-NEXT:  .LBB16_1: # %a
544 ; CHECK-NEXT:    jmp a # TAILCALL
545 ; CHECK-NEXT:    # encoding: [0xeb,A]
546 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
547 entry:
548   %load1 = load i32, i32* @g32
549   %add = add i32 %load1, %arg
550   store i32 %add, i32* @g32
551   %cond = icmp slt i32 %add, 0
552   br i1 %cond, label %a, label %b
555   tail call void @a()
556   ret void
559   tail call void @b()
560   ret void
563 define void @add16_reg_br(i16 %arg) nounwind {
564 ; CHECK-LABEL: add16_reg_br:
565 ; CHECK:       # %bb.0: # %entry
566 ; CHECK-NEXT:    addw %di, {{.*}}(%rip) # encoding: [0x66,0x01,0x3d,A,A,A,A]
567 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
568 ; CHECK-NEXT:    js .LBB17_1 # encoding: [0x78,A]
569 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB17_1-1, kind: FK_PCRel_1
570 ; CHECK-NEXT:  # %bb.2: # %b
571 ; CHECK-NEXT:    jmp b # TAILCALL
572 ; CHECK-NEXT:    # encoding: [0xeb,A]
573 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
574 ; CHECK-NEXT:  .LBB17_1: # %a
575 ; CHECK-NEXT:    jmp a # TAILCALL
576 ; CHECK-NEXT:    # encoding: [0xeb,A]
577 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
578 entry:
579   %load1 = load i16, i16* @g16
580   %add = add i16 %load1, %arg
581   store i16 %add, i16* @g16
582   %cond = icmp slt i16 %add, 0
583   br i1 %cond, label %a, label %b
586   tail call void @a()
587   ret void
590   tail call void @b()
591   ret void
594 define void @add8_reg_br(i8 %arg) nounwind {
595 ; CHECK-LABEL: add8_reg_br:
596 ; CHECK:       # %bb.0: # %entry
597 ; CHECK-NEXT:    addb %dil, {{.*}}(%rip) # encoding: [0x40,0x00,0x3d,A,A,A,A]
598 ; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
599 ; CHECK-NEXT:    js .LBB18_1 # encoding: [0x78,A]
600 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB18_1-1, kind: FK_PCRel_1
601 ; CHECK-NEXT:  # %bb.2: # %b
602 ; CHECK-NEXT:    jmp b # TAILCALL
603 ; CHECK-NEXT:    # encoding: [0xeb,A]
604 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
605 ; CHECK-NEXT:  .LBB18_1: # %a
606 ; CHECK-NEXT:    jmp a # TAILCALL
607 ; CHECK-NEXT:    # encoding: [0xeb,A]
608 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
609 entry:
610   %load1 = load i8, i8* @g8
611   %add = add i8 %load1, %arg
612   store i8 %add, i8* @g8
613   %cond = icmp slt i8 %add, 0
614   br i1 %cond, label %a, label %b
617   tail call void @a()
618   ret void
621   tail call void @b()
622   ret void
625 define void @sub64_imm32_br() nounwind {
626 ; CHECK-LABEL: sub64_imm32_br:
627 ; CHECK:       # %bb.0: # %entry
628 ; CHECK-NEXT:    subq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x2d,A,A,A,A,0x00,0x00,0x00,0x80]
629 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
630 ; CHECK-NEXT:    # imm = 0x80000000
631 ; CHECK-NEXT:    js .LBB19_1 # encoding: [0x78,A]
632 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB19_1-1, kind: FK_PCRel_1
633 ; CHECK-NEXT:  # %bb.2: # %b
634 ; CHECK-NEXT:    jmp b # TAILCALL
635 ; CHECK-NEXT:    # encoding: [0xeb,A]
636 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
637 ; CHECK-NEXT:  .LBB19_1: # %a
638 ; CHECK-NEXT:    jmp a # TAILCALL
639 ; CHECK-NEXT:    # encoding: [0xeb,A]
640 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
641 entry:
642   %load1 = load i64, i64* @g64
643   ; Subtract -0x80000000, which can't be negated into a sign-extended 32-bit
644   ; immediate, so that we have to select sub here.
645   %sub = sub i64 %load1, -2147483648
646   store i64 %sub, i64* @g64
647   %cond = icmp slt i64 %sub, 0
648   br i1 %cond, label %a, label %b
651   tail call void @a()
652   ret void
655   tail call void @b()
656   ret void
659 define void @sub64_too_large_imm32_br() nounwind {
660 ; CHECK-LABEL: sub64_too_large_imm32_br:
661 ; CHECK:       # %bb.0: # %entry
662 ; CHECK-NEXT:    movabsq $-4294967295, %rax # encoding: [0x48,0xb8,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff]
663 ; CHECK-NEXT:    # imm = 0xFFFFFFFF00000001
664 ; CHECK-NEXT:    addq %rax, {{.*}}(%rip) # encoding: [0x48,0x01,0x05,A,A,A,A]
665 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
666 ; CHECK-NEXT:    js .LBB20_1 # encoding: [0x78,A]
667 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB20_1-1, kind: FK_PCRel_1
668 ; CHECK-NEXT:  # %bb.2: # %b
669 ; CHECK-NEXT:    jmp b # TAILCALL
670 ; CHECK-NEXT:    # encoding: [0xeb,A]
671 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
672 ; CHECK-NEXT:  .LBB20_1: # %a
673 ; CHECK-NEXT:    jmp a # TAILCALL
674 ; CHECK-NEXT:    # encoding: [0xeb,A]
675 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
676 entry:
677   %load1 = load i64, i64* @g64
678   ; Subtract 0xFFFFFFFF, which cannot fit in a sign extended 32-bit immediate,
679   ; even if negated and sign extended as an add.
680   %sub = sub i64 %load1, 4294967295
681   store i64 %sub, i64* @g64
682   %cond = icmp slt i64 %sub, 0
683   br i1 %cond, label %a, label %b
686   tail call void @a()
687   ret void
690   tail call void @b()
691   ret void
694 define void @sub64_imm8_br() nounwind {
695 ; CHECK-LABEL: sub64_imm8_br:
696 ; CHECK:       # %bb.0: # %entry
697 ; CHECK-NEXT:    subq $-128, {{.*}}(%rip) # encoding: [0x48,0x83,0x2d,A,A,A,A,0x80]
698 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
699 ; CHECK-NEXT:    js .LBB21_1 # encoding: [0x78,A]
700 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB21_1-1, kind: FK_PCRel_1
701 ; CHECK-NEXT:  # %bb.2: # %b
702 ; CHECK-NEXT:    jmp b # TAILCALL
703 ; CHECK-NEXT:    # encoding: [0xeb,A]
704 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
705 ; CHECK-NEXT:  .LBB21_1: # %a
706 ; CHECK-NEXT:    jmp a # TAILCALL
707 ; CHECK-NEXT:    # encoding: [0xeb,A]
708 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
709 entry:
710   %load1 = load i64, i64* @g64
711   ; Subtract -0x80, which can be done with an 8-bit immediate but only as
712   ; a subtract where that immediate can be negative.
713   %sub = sub i64 %load1, -128
714   store i64 %sub, i64* @g64
715   %cond = icmp slt i64 %sub, 0
716   br i1 %cond, label %a, label %b
719   tail call void @a()
720   ret void
723   tail call void @b()
724   ret void
727 define void @sub32_imm_br() nounwind {
728 ; CHECK-LABEL: sub32_imm_br:
729 ; CHECK:       # %bb.0: # %entry
730 ; CHECK-NEXT:    addl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x05,A,A,A,A,0x00,0x00,0x00,0x80]
731 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
732 ; CHECK-NEXT:    # imm = 0x80000000
733 ; CHECK-NEXT:    js .LBB22_1 # encoding: [0x78,A]
734 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB22_1-1, kind: FK_PCRel_1
735 ; CHECK-NEXT:  # %bb.2: # %b
736 ; CHECK-NEXT:    jmp b # TAILCALL
737 ; CHECK-NEXT:    # encoding: [0xeb,A]
738 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
739 ; CHECK-NEXT:  .LBB22_1: # %a
740 ; CHECK-NEXT:    jmp a # TAILCALL
741 ; CHECK-NEXT:    # encoding: [0xeb,A]
742 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
743 entry:
744   %load1 = load i32, i32* @g32
745   ; Subtract -0x80000000, which requires 32 bits of immediate but still gets
746   ; lowered as an add.
747   %sub = sub i32 %load1, -2147483648
748   store i32 %sub, i32* @g32
749   %cond = icmp slt i32 %sub, 0
750   br i1 %cond, label %a, label %b
753   tail call void @a()
754   ret void
757   tail call void @b()
758   ret void
761 define void @sub32_imm8_br() nounwind {
762 ; CHECK-LABEL: sub32_imm8_br:
763 ; CHECK:       # %bb.0: # %entry
764 ; CHECK-NEXT:    subl $-128, {{.*}}(%rip) # encoding: [0x83,0x2d,A,A,A,A,0x80]
765 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
766 ; CHECK-NEXT:    js .LBB23_1 # encoding: [0x78,A]
767 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB23_1-1, kind: FK_PCRel_1
768 ; CHECK-NEXT:  # %bb.2: # %b
769 ; CHECK-NEXT:    jmp b # TAILCALL
770 ; CHECK-NEXT:    # encoding: [0xeb,A]
771 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
772 ; CHECK-NEXT:  .LBB23_1: # %a
773 ; CHECK-NEXT:    jmp a # TAILCALL
774 ; CHECK-NEXT:    # encoding: [0xeb,A]
775 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
776 entry:
777   %load1 = load i32, i32* @g32
778   ; Subtract -0x80, which can be done with an 8-bit immediate but only as
779   ; a subtract where that immediate can be negative.
780   %sub = sub i32 %load1, -128
781   store i32 %sub, i32* @g32
782   %cond = icmp slt i32 %sub, 0
783   br i1 %cond, label %a, label %b
786   tail call void @a()
787   ret void
790   tail call void @b()
791   ret void
794 define void @sub16_imm_br() nounwind {
795 ; CHECK-LABEL: sub16_imm_br:
796 ; CHECK:       # %bb.0: # %entry
797 ; CHECK-NEXT:    addw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x05,A,A,A,A,0x00,0x80]
798 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
799 ; CHECK-NEXT:    # imm = 0x8000
800 ; CHECK-NEXT:    js .LBB24_1 # encoding: [0x78,A]
801 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB24_1-1, kind: FK_PCRel_1
802 ; CHECK-NEXT:  # %bb.2: # %b
803 ; CHECK-NEXT:    jmp b # TAILCALL
804 ; CHECK-NEXT:    # encoding: [0xeb,A]
805 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
806 ; CHECK-NEXT:  .LBB24_1: # %a
807 ; CHECK-NEXT:    jmp a # TAILCALL
808 ; CHECK-NEXT:    # encoding: [0xeb,A]
809 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
810 entry:
811   %load1 = load i16, i16* @g16
812   ; Subtract -0x8000, which requires a 16 bits of immediate but still gets
813   ; lowered as an add.
814   %sub = sub i16 %load1, -32768
815   store i16 %sub, i16* @g16
816   %cond = icmp slt i16 %sub, 0
817   br i1 %cond, label %a, label %b
820   tail call void @a()
821   ret void
824   tail call void @b()
825   ret void
828 define void @sub16_imm8_br() nounwind {
829 ; CHECK-LABEL: sub16_imm8_br:
830 ; CHECK:       # %bb.0: # %entry
831 ; CHECK-NEXT:    subw $-128, {{.*}}(%rip) # encoding: [0x66,0x83,0x2d,A,A,A,A,0x80]
832 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
833 ; CHECK-NEXT:    js .LBB25_1 # encoding: [0x78,A]
834 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB25_1-1, kind: FK_PCRel_1
835 ; CHECK-NEXT:  # %bb.2: # %b
836 ; CHECK-NEXT:    jmp b # TAILCALL
837 ; CHECK-NEXT:    # encoding: [0xeb,A]
838 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
839 ; CHECK-NEXT:  .LBB25_1: # %a
840 ; CHECK-NEXT:    jmp a # TAILCALL
841 ; CHECK-NEXT:    # encoding: [0xeb,A]
842 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
843 entry:
844   %load1 = load i16, i16* @g16
845   ; Subtract -0x80, which can be done with an 8-bit immediate but only as
846   ; a subtract where that immediate can be negative.
847   %sub = sub i16 %load1, -128
848   store i16 %sub, i16* @g16
849   %cond = icmp slt i16 %sub, 0
850   br i1 %cond, label %a, label %b
853   tail call void @a()
854   ret void
857   tail call void @b()
858   ret void
861 define void @sub8_imm_br() nounwind {
862 ; CHECK-LABEL: sub8_imm_br:
863 ; CHECK:       # %bb.0: # %entry
864 ; CHECK-NEXT:    addb $-128, {{.*}}(%rip) # encoding: [0x80,0x05,A,A,A,A,0x80]
865 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
866 ; CHECK-NEXT:    js .LBB26_1 # encoding: [0x78,A]
867 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB26_1-1, kind: FK_PCRel_1
868 ; CHECK-NEXT:  # %bb.2: # %b
869 ; CHECK-NEXT:    jmp b # TAILCALL
870 ; CHECK-NEXT:    # encoding: [0xeb,A]
871 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
872 ; CHECK-NEXT:  .LBB26_1: # %a
873 ; CHECK-NEXT:    jmp a # TAILCALL
874 ; CHECK-NEXT:    # encoding: [0xeb,A]
875 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
876 entry:
877   %load1 = load i8, i8* @g8
878   ; Subtract -0x80, which requires an 8-bit immediate but still gets lowered as
879   ; an add.
880   %sub = sub i8 %load1, -128
881   store i8 %sub, i8* @g8
882   %cond = icmp slt i8 %sub, 0
883   br i1 %cond, label %a, label %b
886   tail call void @a()
887   ret void
890   tail call void @b()
891   ret void
894 define void @sub64_reg_br(i64 %arg) nounwind {
895 ; CHECK-LABEL: sub64_reg_br:
896 ; CHECK:       # %bb.0: # %entry
897 ; CHECK-NEXT:    subq %rdi, {{.*}}(%rip) # encoding: [0x48,0x29,0x3d,A,A,A,A]
898 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
899 ; CHECK-NEXT:    js .LBB27_1 # encoding: [0x78,A]
900 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB27_1-1, kind: FK_PCRel_1
901 ; CHECK-NEXT:  # %bb.2: # %b
902 ; CHECK-NEXT:    jmp b # TAILCALL
903 ; CHECK-NEXT:    # encoding: [0xeb,A]
904 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
905 ; CHECK-NEXT:  .LBB27_1: # %a
906 ; CHECK-NEXT:    jmp a # TAILCALL
907 ; CHECK-NEXT:    # encoding: [0xeb,A]
908 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
909 entry:
910   %load1 = load i64, i64* @g64
911   %sub = sub i64 %load1, %arg
912   store i64 %sub, i64* @g64
913   %cond = icmp slt i64 %sub, 0
914   br i1 %cond, label %a, label %b
917   tail call void @a()
918   ret void
921   tail call void @b()
922   ret void
925 define void @sub32_reg_br(i32 %arg) nounwind {
926 ; CHECK-LABEL: sub32_reg_br:
927 ; CHECK:       # %bb.0: # %entry
928 ; CHECK-NEXT:    subl %edi, {{.*}}(%rip) # encoding: [0x29,0x3d,A,A,A,A]
929 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
930 ; CHECK-NEXT:    js .LBB28_1 # encoding: [0x78,A]
931 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB28_1-1, kind: FK_PCRel_1
932 ; CHECK-NEXT:  # %bb.2: # %b
933 ; CHECK-NEXT:    jmp b # TAILCALL
934 ; CHECK-NEXT:    # encoding: [0xeb,A]
935 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
936 ; CHECK-NEXT:  .LBB28_1: # %a
937 ; CHECK-NEXT:    jmp a # TAILCALL
938 ; CHECK-NEXT:    # encoding: [0xeb,A]
939 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
940 entry:
941   %load1 = load i32, i32* @g32
942   %sub = sub i32 %load1, %arg
943   store i32 %sub, i32* @g32
944   %cond = icmp slt i32 %sub, 0
945   br i1 %cond, label %a, label %b
948   tail call void @a()
949   ret void
952   tail call void @b()
953   ret void
956 define void @sub16_reg_br(i16 %arg) nounwind {
957 ; CHECK-LABEL: sub16_reg_br:
958 ; CHECK:       # %bb.0: # %entry
959 ; CHECK-NEXT:    subw %di, {{.*}}(%rip) # encoding: [0x66,0x29,0x3d,A,A,A,A]
960 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
961 ; CHECK-NEXT:    js .LBB29_1 # encoding: [0x78,A]
962 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB29_1-1, kind: FK_PCRel_1
963 ; CHECK-NEXT:  # %bb.2: # %b
964 ; CHECK-NEXT:    jmp b # TAILCALL
965 ; CHECK-NEXT:    # encoding: [0xeb,A]
966 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
967 ; CHECK-NEXT:  .LBB29_1: # %a
968 ; CHECK-NEXT:    jmp a # TAILCALL
969 ; CHECK-NEXT:    # encoding: [0xeb,A]
970 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
971 entry:
972   %load1 = load i16, i16* @g16
973   %sub = sub i16 %load1, %arg
974   store i16 %sub, i16* @g16
975   %cond = icmp slt i16 %sub, 0
976   br i1 %cond, label %a, label %b
979   tail call void @a()
980   ret void
983   tail call void @b()
984   ret void
987 define void @sub8_reg_br(i8 %arg) nounwind {
988 ; CHECK-LABEL: sub8_reg_br:
989 ; CHECK:       # %bb.0: # %entry
990 ; CHECK-NEXT:    subb %dil, {{.*}}(%rip) # encoding: [0x40,0x28,0x3d,A,A,A,A]
991 ; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
992 ; CHECK-NEXT:    js .LBB30_1 # encoding: [0x78,A]
993 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB30_1-1, kind: FK_PCRel_1
994 ; CHECK-NEXT:  # %bb.2: # %b
995 ; CHECK-NEXT:    jmp b # TAILCALL
996 ; CHECK-NEXT:    # encoding: [0xeb,A]
997 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
998 ; CHECK-NEXT:  .LBB30_1: # %a
999 ; CHECK-NEXT:    jmp a # TAILCALL
1000 ; CHECK-NEXT:    # encoding: [0xeb,A]
1001 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1002 entry:
1003   %load1 = load i8, i8* @g8
1004   %sub = sub i8 %load1, %arg
1005   store i8 %sub, i8* @g8
1006   %cond = icmp slt i8 %sub, 0
1007   br i1 %cond, label %a, label %b
1010   tail call void @a()
1011   ret void
1014   tail call void @b()
1015   ret void
1018 define void @and64_imm32_br() nounwind {
1019 ; CHECK-LABEL: and64_imm32_br:
1020 ; CHECK:       # %bb.0: # %entry
1021 ; CHECK-NEXT:    andq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0xff,0xff,0xff,0x00]
1022 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1023 ; CHECK-NEXT:    # imm = 0xFFFFFF
1024 ; CHECK-NEXT:    je .LBB31_1 # encoding: [0x74,A]
1025 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB31_1-1, kind: FK_PCRel_1
1026 ; CHECK-NEXT:  # %bb.2: # %b
1027 ; CHECK-NEXT:    jmp b # TAILCALL
1028 ; CHECK-NEXT:    # encoding: [0xeb,A]
1029 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1030 ; CHECK-NEXT:  .LBB31_1: # %a
1031 ; CHECK-NEXT:    jmp a # TAILCALL
1032 ; CHECK-NEXT:    # encoding: [0xeb,A]
1033 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1034 entry:
1035   %load1 = load i64, i64* @g64
1036   ; And 0x00FFFFFF, a positive immediate requiring 24-bits.
1037   %and = and i64 %load1, 16777215
1038   store i64 %and, i64* @g64
1039   %cond = icmp eq i64 %and, 0
1040   br i1 %cond, label %a, label %b
1043   tail call void @a()
1044   ret void
1047   tail call void @b()
1048   ret void
1051 define void @and64_sext_imm32_br() nounwind {
1052 ; CHECK-LABEL: and64_sext_imm32_br:
1053 ; CHECK:       # %bb.0: # %entry
1054 ; CHECK-NEXT:    andq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]
1055 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1056 ; CHECK-NEXT:    # imm = 0x80000000
1057 ; CHECK-NEXT:    je .LBB32_1 # encoding: [0x74,A]
1058 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB32_1-1, kind: FK_PCRel_1
1059 ; CHECK-NEXT:  # %bb.2: # %b
1060 ; CHECK-NEXT:    jmp b # TAILCALL
1061 ; CHECK-NEXT:    # encoding: [0xeb,A]
1062 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1063 ; CHECK-NEXT:  .LBB32_1: # %a
1064 ; CHECK-NEXT:    jmp a # TAILCALL
1065 ; CHECK-NEXT:    # encoding: [0xeb,A]
1066 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1067 entry:
1068   %load1 = load i64, i64* @g64
1069   ; And -0x80000000, which requires sign-extended 32 bits.
1070   %and = and i64 %load1, -2147483648
1071   store i64 %and, i64* @g64
1072   %cond = icmp eq i64 %and, 0
1073   br i1 %cond, label %a, label %b
1076   tail call void @a()
1077   ret void
1080   tail call void @b()
1081   ret void
1084 define void @and64_imm8_br() nounwind {
1085 ; CHECK-LABEL: and64_imm8_br:
1086 ; CHECK:       # %bb.0: # %entry
1087 ; CHECK-NEXT:    andq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0x0f]
1088 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1089 ; CHECK-NEXT:    je .LBB33_1 # encoding: [0x74,A]
1090 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB33_1-1, kind: FK_PCRel_1
1091 ; CHECK-NEXT:  # %bb.2: # %b
1092 ; CHECK-NEXT:    jmp b # TAILCALL
1093 ; CHECK-NEXT:    # encoding: [0xeb,A]
1094 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1095 ; CHECK-NEXT:  .LBB33_1: # %a
1096 ; CHECK-NEXT:    jmp a # TAILCALL
1097 ; CHECK-NEXT:    # encoding: [0xeb,A]
1098 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1099 entry:
1100   %load1 = load i64, i64* @g64
1101   %and = and i64 %load1, 15
1102   store i64 %and, i64* @g64
1103   %cond = icmp eq i64 %and, 0
1104   br i1 %cond, label %a, label %b
1107   tail call void @a()
1108   ret void
1111   tail call void @b()
1112   ret void
1115 define void @and64_imm8_neg_br() nounwind {
1116 ; CHECK-LABEL: and64_imm8_neg_br:
1117 ; CHECK:       # %bb.0: # %entry
1118 ; CHECK-NEXT:    andq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0xfc]
1119 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1120 ; CHECK-NEXT:    je .LBB34_1 # encoding: [0x74,A]
1121 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB34_1-1, kind: FK_PCRel_1
1122 ; CHECK-NEXT:  # %bb.2: # %b
1123 ; CHECK-NEXT:    jmp b # TAILCALL
1124 ; CHECK-NEXT:    # encoding: [0xeb,A]
1125 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1126 ; CHECK-NEXT:  .LBB34_1: # %a
1127 ; CHECK-NEXT:    jmp a # TAILCALL
1128 ; CHECK-NEXT:    # encoding: [0xeb,A]
1129 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1130 entry:
1131   %load1 = load i64, i64* @g64
1132   %and = and i64 %load1, -4
1133   store i64 %and, i64* @g64
1134   %cond = icmp eq i64 %and, 0
1135   br i1 %cond, label %a, label %b
1138   tail call void @a()
1139   ret void
1142   tail call void @b()
1143   ret void
1146 define void @and32_imm_br() nounwind {
1147 ; CHECK-LABEL: and32_imm_br:
1148 ; CHECK:       # %bb.0: # %entry
1149 ; CHECK-NEXT:    andl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x25,A,A,A,A,0x00,0x00,0x00,0x80]
1150 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
1151 ; CHECK-NEXT:    # imm = 0x80000000
1152 ; CHECK-NEXT:    jne .LBB35_2 # encoding: [0x75,A]
1153 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB35_2-1, kind: FK_PCRel_1
1154 ; CHECK-NEXT:  # %bb.1: # %a
1155 ; CHECK-NEXT:    jmp a # TAILCALL
1156 ; CHECK-NEXT:    # encoding: [0xeb,A]
1157 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1158 ; CHECK-NEXT:  .LBB35_2: # %b
1159 ; CHECK-NEXT:    jmp b # TAILCALL
1160 ; CHECK-NEXT:    # encoding: [0xeb,A]
1161 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1162 entry:
1163   %load1 = load i32, i32* @g32
1164   ; And 0x80000000, a positive number requiring 32 bits of immediate.
1165   %and = and i32 %load1, 2147483648
1166   store i32 %and, i32* @g32
1167   %cond = icmp eq i32 %and, 0
1168   br i1 %cond, label %a, label %b
1171   tail call void @a()
1172   ret void
1175   tail call void @b()
1176   ret void
1179 define void @and32_imm8_br() nounwind {
1180 ; CHECK-LABEL: and32_imm8_br:
1181 ; CHECK:       # %bb.0: # %entry
1182 ; CHECK-NEXT:    andl $15, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0x0f]
1183 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1184 ; CHECK-NEXT:    je .LBB36_1 # encoding: [0x74,A]
1185 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB36_1-1, kind: FK_PCRel_1
1186 ; CHECK-NEXT:  # %bb.2: # %b
1187 ; CHECK-NEXT:    jmp b # TAILCALL
1188 ; CHECK-NEXT:    # encoding: [0xeb,A]
1189 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1190 ; CHECK-NEXT:  .LBB36_1: # %a
1191 ; CHECK-NEXT:    jmp a # TAILCALL
1192 ; CHECK-NEXT:    # encoding: [0xeb,A]
1193 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1194 entry:
1195   %load1 = load i32, i32* @g32
1196   %and = and i32 %load1, 15
1197   store i32 %and, i32* @g32
1198   %cond = icmp eq i32 %and, 0
1199   br i1 %cond, label %a, label %b
1202   tail call void @a()
1203   ret void
1206   tail call void @b()
1207   ret void
1210 define void @and32_imm8_neg_br() nounwind {
1211 ; CHECK-LABEL: and32_imm8_neg_br:
1212 ; CHECK:       # %bb.0: # %entry
1213 ; CHECK-NEXT:    andl $-4, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0xfc]
1214 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1215 ; CHECK-NEXT:    je .LBB37_1 # encoding: [0x74,A]
1216 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB37_1-1, kind: FK_PCRel_1
1217 ; CHECK-NEXT:  # %bb.2: # %b
1218 ; CHECK-NEXT:    jmp b # TAILCALL
1219 ; CHECK-NEXT:    # encoding: [0xeb,A]
1220 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1221 ; CHECK-NEXT:  .LBB37_1: # %a
1222 ; CHECK-NEXT:    jmp a # TAILCALL
1223 ; CHECK-NEXT:    # encoding: [0xeb,A]
1224 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1225 entry:
1226   %load1 = load i32, i32* @g32
1227   %and = and i32 %load1, -4
1228   store i32 %and, i32* @g32
1229   %cond = icmp eq i32 %and, 0
1230   br i1 %cond, label %a, label %b
1233   tail call void @a()
1234   ret void
1237   tail call void @b()
1238   ret void
1241 define void @and16_imm_br() nounwind {
1242 ; CHECK-LABEL: and16_imm_br:
1243 ; CHECK:       # %bb.0: # %entry
1244 ; CHECK-NEXT:    andw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x25,A,A,A,A,0x00,0x80]
1245 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
1246 ; CHECK-NEXT:    # imm = 0x8000
1247 ; CHECK-NEXT:    jne .LBB38_2 # encoding: [0x75,A]
1248 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB38_2-1, kind: FK_PCRel_1
1249 ; CHECK-NEXT:  # %bb.1: # %a
1250 ; CHECK-NEXT:    jmp a # TAILCALL
1251 ; CHECK-NEXT:    # encoding: [0xeb,A]
1252 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1253 ; CHECK-NEXT:  .LBB38_2: # %b
1254 ; CHECK-NEXT:    jmp b # TAILCALL
1255 ; CHECK-NEXT:    # encoding: [0xeb,A]
1256 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1257 entry:
1258   %load1 = load i16, i16* @g16
1259   %and = and i16 %load1, 32768
1260   store i16 %and, i16* @g16
1261   %cond = icmp eq i16 %and, 0
1262   br i1 %cond, label %a, label %b
1265   tail call void @a()
1266   ret void
1269   tail call void @b()
1270   ret void
1273 define void @and16_imm8_br() nounwind {
1274 ; CHECK-LABEL: and16_imm8_br:
1275 ; CHECK:       # %bb.0: # %entry
1276 ; CHECK-NEXT:    andw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0x0f]
1277 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1278 ; CHECK-NEXT:    je .LBB39_1 # encoding: [0x74,A]
1279 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB39_1-1, kind: FK_PCRel_1
1280 ; CHECK-NEXT:  # %bb.2: # %b
1281 ; CHECK-NEXT:    jmp b # TAILCALL
1282 ; CHECK-NEXT:    # encoding: [0xeb,A]
1283 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1284 ; CHECK-NEXT:  .LBB39_1: # %a
1285 ; CHECK-NEXT:    jmp a # TAILCALL
1286 ; CHECK-NEXT:    # encoding: [0xeb,A]
1287 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1288 entry:
1289   %load1 = load i16, i16* @g16
1290   %and = and i16 %load1, 15
1291   store i16 %and, i16* @g16
1292   %cond = icmp eq i16 %and, 0
1293   br i1 %cond, label %a, label %b
1296   tail call void @a()
1297   ret void
1300   tail call void @b()
1301   ret void
1304 define void @and16_imm8_neg_br() nounwind {
1305 ; CHECK-LABEL: and16_imm8_neg_br:
1306 ; CHECK:       # %bb.0: # %entry
1307 ; CHECK-NEXT:    andw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0xfc]
1308 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1309 ; CHECK-NEXT:    je .LBB40_1 # encoding: [0x74,A]
1310 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB40_1-1, kind: FK_PCRel_1
1311 ; CHECK-NEXT:  # %bb.2: # %b
1312 ; CHECK-NEXT:    jmp b # TAILCALL
1313 ; CHECK-NEXT:    # encoding: [0xeb,A]
1314 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1315 ; CHECK-NEXT:  .LBB40_1: # %a
1316 ; CHECK-NEXT:    jmp a # TAILCALL
1317 ; CHECK-NEXT:    # encoding: [0xeb,A]
1318 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1319 entry:
1320   %load1 = load i16, i16* @g16
1321   %and = and i16 %load1, -4
1322   store i16 %and, i16* @g16
1323   %cond = icmp eq i16 %and, 0
1324   br i1 %cond, label %a, label %b
1327   tail call void @a()
1328   ret void
1331   tail call void @b()
1332   ret void
1335 define void @and8_imm_br() nounwind {
1336 ; CHECK-LABEL: and8_imm_br:
1337 ; CHECK:       # %bb.0: # %entry
1338 ; CHECK-NEXT:    andb $-4, {{.*}}(%rip) # encoding: [0x80,0x25,A,A,A,A,0xfc]
1339 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1340 ; CHECK-NEXT:    je .LBB41_1 # encoding: [0x74,A]
1341 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB41_1-1, kind: FK_PCRel_1
1342 ; CHECK-NEXT:  # %bb.2: # %b
1343 ; CHECK-NEXT:    jmp b # TAILCALL
1344 ; CHECK-NEXT:    # encoding: [0xeb,A]
1345 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1346 ; CHECK-NEXT:  .LBB41_1: # %a
1347 ; CHECK-NEXT:    jmp a # TAILCALL
1348 ; CHECK-NEXT:    # encoding: [0xeb,A]
1349 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1350 entry:
1351   %load1 = load i8, i8* @g8
1352   %and = and i8 %load1, -4
1353   store i8 %and, i8* @g8
1354   %cond = icmp eq i8 %and, 0
1355   br i1 %cond, label %a, label %b
1358   tail call void @a()
1359   ret void
1362   tail call void @b()
1363   ret void
1366 define void @and64_reg_br(i64 %arg) nounwind {
1367 ; CHECK-LABEL: and64_reg_br:
1368 ; CHECK:       # %bb.0: # %entry
1369 ; CHECK-NEXT:    andq %rdi, {{.*}}(%rip) # encoding: [0x48,0x21,0x3d,A,A,A,A]
1370 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1371 ; CHECK-NEXT:    je .LBB42_1 # encoding: [0x74,A]
1372 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB42_1-1, kind: FK_PCRel_1
1373 ; CHECK-NEXT:  # %bb.2: # %b
1374 ; CHECK-NEXT:    jmp b # TAILCALL
1375 ; CHECK-NEXT:    # encoding: [0xeb,A]
1376 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1377 ; CHECK-NEXT:  .LBB42_1: # %a
1378 ; CHECK-NEXT:    jmp a # TAILCALL
1379 ; CHECK-NEXT:    # encoding: [0xeb,A]
1380 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1381 entry:
1382   %load1 = load i64, i64* @g64
1383   %and = and i64 %load1, %arg
1384   store i64 %and, i64* @g64
1385   %cond = icmp eq i64 %and, 0
1386   br i1 %cond, label %a, label %b
1389   tail call void @a()
1390   ret void
1393   tail call void @b()
1394   ret void
1397 define void @and32_reg_br(i32 %arg) nounwind {
1398 ; CHECK-LABEL: and32_reg_br:
1399 ; CHECK:       # %bb.0: # %entry
1400 ; CHECK-NEXT:    andl %edi, {{.*}}(%rip) # encoding: [0x21,0x3d,A,A,A,A]
1401 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1402 ; CHECK-NEXT:    je .LBB43_1 # encoding: [0x74,A]
1403 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB43_1-1, kind: FK_PCRel_1
1404 ; CHECK-NEXT:  # %bb.2: # %b
1405 ; CHECK-NEXT:    jmp b # TAILCALL
1406 ; CHECK-NEXT:    # encoding: [0xeb,A]
1407 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1408 ; CHECK-NEXT:  .LBB43_1: # %a
1409 ; CHECK-NEXT:    jmp a # TAILCALL
1410 ; CHECK-NEXT:    # encoding: [0xeb,A]
1411 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1412 entry:
1413   %load1 = load i32, i32* @g32
1414   %and = and i32 %load1, %arg
1415   store i32 %and, i32* @g32
1416   %cond = icmp eq i32 %and, 0
1417   br i1 %cond, label %a, label %b
1420   tail call void @a()
1421   ret void
1424   tail call void @b()
1425   ret void
1428 define void @and16_reg_br(i16 %arg) nounwind {
1429 ; CHECK-LABEL: and16_reg_br:
1430 ; CHECK:       # %bb.0: # %entry
1431 ; CHECK-NEXT:    andw %di, {{.*}}(%rip) # encoding: [0x66,0x21,0x3d,A,A,A,A]
1432 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1433 ; CHECK-NEXT:    je .LBB44_1 # encoding: [0x74,A]
1434 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB44_1-1, kind: FK_PCRel_1
1435 ; CHECK-NEXT:  # %bb.2: # %b
1436 ; CHECK-NEXT:    jmp b # TAILCALL
1437 ; CHECK-NEXT:    # encoding: [0xeb,A]
1438 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1439 ; CHECK-NEXT:  .LBB44_1: # %a
1440 ; CHECK-NEXT:    jmp a # TAILCALL
1441 ; CHECK-NEXT:    # encoding: [0xeb,A]
1442 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1443 entry:
1444   %load1 = load i16, i16* @g16
1445   %and = and i16 %load1, %arg
1446   store i16 %and, i16* @g16
1447   %cond = icmp eq i16 %and, 0
1448   br i1 %cond, label %a, label %b
1451   tail call void @a()
1452   ret void
1455   tail call void @b()
1456   ret void
1459 define void @and8_reg_br(i8 %arg) nounwind {
1460 ; CHECK-LABEL: and8_reg_br:
1461 ; CHECK:       # %bb.0: # %entry
1462 ; CHECK-NEXT:    andb %dil, {{.*}}(%rip) # encoding: [0x40,0x20,0x3d,A,A,A,A]
1463 ; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1464 ; CHECK-NEXT:    je .LBB45_1 # encoding: [0x74,A]
1465 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB45_1-1, kind: FK_PCRel_1
1466 ; CHECK-NEXT:  # %bb.2: # %b
1467 ; CHECK-NEXT:    jmp b # TAILCALL
1468 ; CHECK-NEXT:    # encoding: [0xeb,A]
1469 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1470 ; CHECK-NEXT:  .LBB45_1: # %a
1471 ; CHECK-NEXT:    jmp a # TAILCALL
1472 ; CHECK-NEXT:    # encoding: [0xeb,A]
1473 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1474 entry:
1475   %load1 = load i8, i8* @g8
1476   %and = and i8 %load1, %arg
1477   store i8 %and, i8* @g8
1478   %cond = icmp eq i8 %and, 0
1479   br i1 %cond, label %a, label %b
1482   tail call void @a()
1483   ret void
1486   tail call void @b()
1487   ret void
1490 define void @or64_imm32_br() nounwind {
1491 ; CHECK-LABEL: or64_imm32_br:
1492 ; CHECK:       # %bb.0: # %entry
1493 ; CHECK-NEXT:    orq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0xff,0xff,0xff,0x00]
1494 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1495 ; CHECK-NEXT:    # imm = 0xFFFFFF
1496 ; CHECK-NEXT:    je .LBB46_1 # encoding: [0x74,A]
1497 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB46_1-1, kind: FK_PCRel_1
1498 ; CHECK-NEXT:  # %bb.2: # %b
1499 ; CHECK-NEXT:    jmp b # TAILCALL
1500 ; CHECK-NEXT:    # encoding: [0xeb,A]
1501 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1502 ; CHECK-NEXT:  .LBB46_1: # %a
1503 ; CHECK-NEXT:    jmp a # TAILCALL
1504 ; CHECK-NEXT:    # encoding: [0xeb,A]
1505 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1506 entry:
1507   %load1 = load i64, i64* @g64
1508   ; Or 0x00FFFFFF, a positive immediate requiring 24-bits.
1509   %or = or i64 %load1, 16777215
1510   store i64 %or, i64* @g64
1511   %cond = icmp eq i64 %or, 0
1512   br i1 %cond, label %a, label %b
1515   tail call void @a()
1516   ret void
1519   tail call void @b()
1520   ret void
1523 define void @or64_sext_imm32_br() nounwind {
1524 ; CHECK-LABEL: or64_sext_imm32_br:
1525 ; CHECK:       # %bb.0: # %entry
1526 ; CHECK-NEXT:    orq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1527 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1528 ; CHECK-NEXT:    # imm = 0x80000000
1529 ; CHECK-NEXT:    je .LBB47_1 # encoding: [0x74,A]
1530 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB47_1-1, kind: FK_PCRel_1
1531 ; CHECK-NEXT:  # %bb.2: # %b
1532 ; CHECK-NEXT:    jmp b # TAILCALL
1533 ; CHECK-NEXT:    # encoding: [0xeb,A]
1534 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1535 ; CHECK-NEXT:  .LBB47_1: # %a
1536 ; CHECK-NEXT:    jmp a # TAILCALL
1537 ; CHECK-NEXT:    # encoding: [0xeb,A]
1538 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1539 entry:
1540   %load1 = load i64, i64* @g64
1541   ; Or -0x80000000, which requires sign-extended 32 bits.
1542   %or = or i64 %load1, -2147483648
1543   store i64 %or, i64* @g64
1544   %cond = icmp eq i64 %or, 0
1545   br i1 %cond, label %a, label %b
1548   tail call void @a()
1549   ret void
1552   tail call void @b()
1553   ret void
1556 define void @or64_imm8_br() nounwind {
1557 ; CHECK-LABEL: or64_imm8_br:
1558 ; CHECK:       # %bb.0: # %entry
1559 ; CHECK-NEXT:    orq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0x0f]
1560 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1561 ; CHECK-NEXT:    je .LBB48_1 # encoding: [0x74,A]
1562 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB48_1-1, kind: FK_PCRel_1
1563 ; CHECK-NEXT:  # %bb.2: # %b
1564 ; CHECK-NEXT:    jmp b # TAILCALL
1565 ; CHECK-NEXT:    # encoding: [0xeb,A]
1566 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1567 ; CHECK-NEXT:  .LBB48_1: # %a
1568 ; CHECK-NEXT:    jmp a # TAILCALL
1569 ; CHECK-NEXT:    # encoding: [0xeb,A]
1570 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1571 entry:
1572   %load1 = load i64, i64* @g64
1573   %or = or i64 %load1, 15
1574   store i64 %or, i64* @g64
1575   %cond = icmp eq i64 %or, 0
1576   br i1 %cond, label %a, label %b
1579   tail call void @a()
1580   ret void
1583   tail call void @b()
1584   ret void
1587 define void @or64_imm8_neg_br() nounwind {
1588 ; CHECK-LABEL: or64_imm8_neg_br:
1589 ; CHECK:       # %bb.0: # %entry
1590 ; CHECK-NEXT:    orq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0xfc]
1591 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
1592 ; CHECK-NEXT:    je .LBB49_1 # encoding: [0x74,A]
1593 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB49_1-1, kind: FK_PCRel_1
1594 ; CHECK-NEXT:  # %bb.2: # %b
1595 ; CHECK-NEXT:    jmp b # TAILCALL
1596 ; CHECK-NEXT:    # encoding: [0xeb,A]
1597 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1598 ; CHECK-NEXT:  .LBB49_1: # %a
1599 ; CHECK-NEXT:    jmp a # TAILCALL
1600 ; CHECK-NEXT:    # encoding: [0xeb,A]
1601 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1602 entry:
1603   %load1 = load i64, i64* @g64
1604   %or = or i64 %load1, -4
1605   store i64 %or, i64* @g64
1606   %cond = icmp eq i64 %or, 0
1607   br i1 %cond, label %a, label %b
1610   tail call void @a()
1611   ret void
1614   tail call void @b()
1615   ret void
1618 define void @or32_imm_br() nounwind {
1619 ; CHECK-LABEL: or32_imm_br:
1620 ; CHECK:       # %bb.0: # %entry
1621 ; CHECK-NEXT:    orl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x0d,A,A,A,A,0x00,0x00,0x00,0x80]
1622 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
1623 ; CHECK-NEXT:    # imm = 0x80000000
1624 ; CHECK-NEXT:    je .LBB50_1 # encoding: [0x74,A]
1625 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB50_1-1, kind: FK_PCRel_1
1626 ; CHECK-NEXT:  # %bb.2: # %b
1627 ; CHECK-NEXT:    jmp b # TAILCALL
1628 ; CHECK-NEXT:    # encoding: [0xeb,A]
1629 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1630 ; CHECK-NEXT:  .LBB50_1: # %a
1631 ; CHECK-NEXT:    jmp a # TAILCALL
1632 ; CHECK-NEXT:    # encoding: [0xeb,A]
1633 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1634 entry:
1635   %load1 = load i32, i32* @g32
1636   ; Or 0x80000000, a positive number requiring 32 bits of immediate.
1637   %or = or i32 %load1, 2147483648
1638   store i32 %or, i32* @g32
1639   %cond = icmp eq i32 %or, 0
1640   br i1 %cond, label %a, label %b
1643   tail call void @a()
1644   ret void
1647   tail call void @b()
1648   ret void
1651 define void @or32_imm8_br() nounwind {
1652 ; CHECK-LABEL: or32_imm8_br:
1653 ; CHECK:       # %bb.0: # %entry
1654 ; CHECK-NEXT:    orl $15, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0x0f]
1655 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1656 ; CHECK-NEXT:    je .LBB51_1 # encoding: [0x74,A]
1657 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB51_1-1, kind: FK_PCRel_1
1658 ; CHECK-NEXT:  # %bb.2: # %b
1659 ; CHECK-NEXT:    jmp b # TAILCALL
1660 ; CHECK-NEXT:    # encoding: [0xeb,A]
1661 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1662 ; CHECK-NEXT:  .LBB51_1: # %a
1663 ; CHECK-NEXT:    jmp a # TAILCALL
1664 ; CHECK-NEXT:    # encoding: [0xeb,A]
1665 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1666 entry:
1667   %load1 = load i32, i32* @g32
1668   %or = or i32 %load1, 15
1669   store i32 %or, i32* @g32
1670   %cond = icmp eq i32 %or, 0
1671   br i1 %cond, label %a, label %b
1674   tail call void @a()
1675   ret void
1678   tail call void @b()
1679   ret void
1682 define void @or32_imm8_neg_br() nounwind {
1683 ; CHECK-LABEL: or32_imm8_neg_br:
1684 ; CHECK:       # %bb.0: # %entry
1685 ; CHECK-NEXT:    orl $-4, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0xfc]
1686 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
1687 ; CHECK-NEXT:    je .LBB52_1 # encoding: [0x74,A]
1688 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB52_1-1, kind: FK_PCRel_1
1689 ; CHECK-NEXT:  # %bb.2: # %b
1690 ; CHECK-NEXT:    jmp b # TAILCALL
1691 ; CHECK-NEXT:    # encoding: [0xeb,A]
1692 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1693 ; CHECK-NEXT:  .LBB52_1: # %a
1694 ; CHECK-NEXT:    jmp a # TAILCALL
1695 ; CHECK-NEXT:    # encoding: [0xeb,A]
1696 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1697 entry:
1698   %load1 = load i32, i32* @g32
1699   %or = or i32 %load1, -4
1700   store i32 %or, i32* @g32
1701   %cond = icmp eq i32 %or, 0
1702   br i1 %cond, label %a, label %b
1705   tail call void @a()
1706   ret void
1709   tail call void @b()
1710   ret void
1713 define void @or16_imm_br() nounwind {
1714 ; CHECK-LABEL: or16_imm_br:
1715 ; CHECK:       # %bb.0: # %entry
1716 ; CHECK-NEXT:    orw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x0d,A,A,A,A,0x00,0x80]
1717 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
1718 ; CHECK-NEXT:    # imm = 0x8000
1719 ; CHECK-NEXT:    je .LBB53_1 # encoding: [0x74,A]
1720 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB53_1-1, kind: FK_PCRel_1
1721 ; CHECK-NEXT:  # %bb.2: # %b
1722 ; CHECK-NEXT:    jmp b # TAILCALL
1723 ; CHECK-NEXT:    # encoding: [0xeb,A]
1724 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1725 ; CHECK-NEXT:  .LBB53_1: # %a
1726 ; CHECK-NEXT:    jmp a # TAILCALL
1727 ; CHECK-NEXT:    # encoding: [0xeb,A]
1728 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1729 entry:
1730   %load1 = load i16, i16* @g16
1731   %or = or i16 %load1, 32768
1732   store i16 %or, i16* @g16
1733   %cond = icmp eq i16 %or, 0
1734   br i1 %cond, label %a, label %b
1737   tail call void @a()
1738   ret void
1741   tail call void @b()
1742   ret void
1745 define void @or16_imm8_br() nounwind {
1746 ; CHECK-LABEL: or16_imm8_br:
1747 ; CHECK:       # %bb.0: # %entry
1748 ; CHECK-NEXT:    orw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0x0f]
1749 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1750 ; CHECK-NEXT:    je .LBB54_1 # encoding: [0x74,A]
1751 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB54_1-1, kind: FK_PCRel_1
1752 ; CHECK-NEXT:  # %bb.2: # %b
1753 ; CHECK-NEXT:    jmp b # TAILCALL
1754 ; CHECK-NEXT:    # encoding: [0xeb,A]
1755 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1756 ; CHECK-NEXT:  .LBB54_1: # %a
1757 ; CHECK-NEXT:    jmp a # TAILCALL
1758 ; CHECK-NEXT:    # encoding: [0xeb,A]
1759 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1760 entry:
1761   %load1 = load i16, i16* @g16
1762   %or = or i16 %load1, 15
1763   store i16 %or, i16* @g16
1764   %cond = icmp eq i16 %or, 0
1765   br i1 %cond, label %a, label %b
1768   tail call void @a()
1769   ret void
1772   tail call void @b()
1773   ret void
1776 define void @or16_imm8_neg_br() nounwind {
1777 ; CHECK-LABEL: or16_imm8_neg_br:
1778 ; CHECK:       # %bb.0: # %entry
1779 ; CHECK-NEXT:    orw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0xfc]
1780 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
1781 ; CHECK-NEXT:    je .LBB55_1 # encoding: [0x74,A]
1782 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB55_1-1, kind: FK_PCRel_1
1783 ; CHECK-NEXT:  # %bb.2: # %b
1784 ; CHECK-NEXT:    jmp b # TAILCALL
1785 ; CHECK-NEXT:    # encoding: [0xeb,A]
1786 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1787 ; CHECK-NEXT:  .LBB55_1: # %a
1788 ; CHECK-NEXT:    jmp a # TAILCALL
1789 ; CHECK-NEXT:    # encoding: [0xeb,A]
1790 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1791 entry:
1792   %load1 = load i16, i16* @g16
1793   %or = or i16 %load1, -4
1794   store i16 %or, i16* @g16
1795   %cond = icmp eq i16 %or, 0
1796   br i1 %cond, label %a, label %b
1799   tail call void @a()
1800   ret void
1803   tail call void @b()
1804   ret void
1807 define void @or8_imm_br() nounwind {
1808 ; CHECK-LABEL: or8_imm_br:
1809 ; CHECK:       # %bb.0: # %entry
1810 ; CHECK-NEXT:    orb $-4, {{.*}}(%rip) # encoding: [0x80,0x0d,A,A,A,A,0xfc]
1811 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
1812 ; CHECK-NEXT:    je .LBB56_1 # encoding: [0x74,A]
1813 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB56_1-1, kind: FK_PCRel_1
1814 ; CHECK-NEXT:  # %bb.2: # %b
1815 ; CHECK-NEXT:    jmp b # TAILCALL
1816 ; CHECK-NEXT:    # encoding: [0xeb,A]
1817 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1818 ; CHECK-NEXT:  .LBB56_1: # %a
1819 ; CHECK-NEXT:    jmp a # TAILCALL
1820 ; CHECK-NEXT:    # encoding: [0xeb,A]
1821 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1822 entry:
1823   %load1 = load i8, i8* @g8
1824   %or = or i8 %load1, -4
1825   store i8 %or, i8* @g8
1826   %cond = icmp eq i8 %or, 0
1827   br i1 %cond, label %a, label %b
1830   tail call void @a()
1831   ret void
1834   tail call void @b()
1835   ret void
1838 define void @or64_reg_br(i64 %arg) nounwind {
1839 ; CHECK-LABEL: or64_reg_br:
1840 ; CHECK:       # %bb.0: # %entry
1841 ; CHECK-NEXT:    orq %rdi, {{.*}}(%rip) # encoding: [0x48,0x09,0x3d,A,A,A,A]
1842 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
1843 ; CHECK-NEXT:    je .LBB57_1 # encoding: [0x74,A]
1844 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB57_1-1, kind: FK_PCRel_1
1845 ; CHECK-NEXT:  # %bb.2: # %b
1846 ; CHECK-NEXT:    jmp b # TAILCALL
1847 ; CHECK-NEXT:    # encoding: [0xeb,A]
1848 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1849 ; CHECK-NEXT:  .LBB57_1: # %a
1850 ; CHECK-NEXT:    jmp a # TAILCALL
1851 ; CHECK-NEXT:    # encoding: [0xeb,A]
1852 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1853 entry:
1854   %load1 = load i64, i64* @g64
1855   %or = or i64 %load1, %arg
1856   store i64 %or, i64* @g64
1857   %cond = icmp eq i64 %or, 0
1858   br i1 %cond, label %a, label %b
1861   tail call void @a()
1862   ret void
1865   tail call void @b()
1866   ret void
1869 define void @or32_reg_br(i32 %arg) nounwind {
1870 ; CHECK-LABEL: or32_reg_br:
1871 ; CHECK:       # %bb.0: # %entry
1872 ; CHECK-NEXT:    orl %edi, {{.*}}(%rip) # encoding: [0x09,0x3d,A,A,A,A]
1873 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
1874 ; CHECK-NEXT:    je .LBB58_1 # encoding: [0x74,A]
1875 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB58_1-1, kind: FK_PCRel_1
1876 ; CHECK-NEXT:  # %bb.2: # %b
1877 ; CHECK-NEXT:    jmp b # TAILCALL
1878 ; CHECK-NEXT:    # encoding: [0xeb,A]
1879 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1880 ; CHECK-NEXT:  .LBB58_1: # %a
1881 ; CHECK-NEXT:    jmp a # TAILCALL
1882 ; CHECK-NEXT:    # encoding: [0xeb,A]
1883 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1884 entry:
1885   %load1 = load i32, i32* @g32
1886   %or = or i32 %load1, %arg
1887   store i32 %or, i32* @g32
1888   %cond = icmp eq i32 %or, 0
1889   br i1 %cond, label %a, label %b
1892   tail call void @a()
1893   ret void
1896   tail call void @b()
1897   ret void
1900 define void @or16_reg_br(i16 %arg) nounwind {
1901 ; CHECK-LABEL: or16_reg_br:
1902 ; CHECK:       # %bb.0: # %entry
1903 ; CHECK-NEXT:    orw %di, {{.*}}(%rip) # encoding: [0x66,0x09,0x3d,A,A,A,A]
1904 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
1905 ; CHECK-NEXT:    je .LBB59_1 # encoding: [0x74,A]
1906 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB59_1-1, kind: FK_PCRel_1
1907 ; CHECK-NEXT:  # %bb.2: # %b
1908 ; CHECK-NEXT:    jmp b # TAILCALL
1909 ; CHECK-NEXT:    # encoding: [0xeb,A]
1910 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1911 ; CHECK-NEXT:  .LBB59_1: # %a
1912 ; CHECK-NEXT:    jmp a # TAILCALL
1913 ; CHECK-NEXT:    # encoding: [0xeb,A]
1914 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1915 entry:
1916   %load1 = load i16, i16* @g16
1917   %or = or i16 %load1, %arg
1918   store i16 %or, i16* @g16
1919   %cond = icmp eq i16 %or, 0
1920   br i1 %cond, label %a, label %b
1923   tail call void @a()
1924   ret void
1927   tail call void @b()
1928   ret void
1931 define void @or8_reg_br(i8 %arg) nounwind {
1932 ; CHECK-LABEL: or8_reg_br:
1933 ; CHECK:       # %bb.0: # %entry
1934 ; CHECK-NEXT:    orb %dil, {{.*}}(%rip) # encoding: [0x40,0x08,0x3d,A,A,A,A]
1935 ; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
1936 ; CHECK-NEXT:    je .LBB60_1 # encoding: [0x74,A]
1937 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB60_1-1, kind: FK_PCRel_1
1938 ; CHECK-NEXT:  # %bb.2: # %b
1939 ; CHECK-NEXT:    jmp b # TAILCALL
1940 ; CHECK-NEXT:    # encoding: [0xeb,A]
1941 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1942 ; CHECK-NEXT:  .LBB60_1: # %a
1943 ; CHECK-NEXT:    jmp a # TAILCALL
1944 ; CHECK-NEXT:    # encoding: [0xeb,A]
1945 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1946 entry:
1947   %load1 = load i8, i8* @g8
1948   %or = or i8 %load1, %arg
1949   store i8 %or, i8* @g8
1950   %cond = icmp eq i8 %or, 0
1951   br i1 %cond, label %a, label %b
1954   tail call void @a()
1955   ret void
1958   tail call void @b()
1959   ret void
1962 define void @xor64_imm32_br() nounwind {
1963 ; CHECK-LABEL: xor64_imm32_br:
1964 ; CHECK:       # %bb.0: # %entry
1965 ; CHECK-NEXT:    xorq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0xff,0xff,0xff,0x00]
1966 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
1967 ; CHECK-NEXT:    # imm = 0xFFFFFF
1968 ; CHECK-NEXT:    je .LBB61_1 # encoding: [0x74,A]
1969 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB61_1-1, kind: FK_PCRel_1
1970 ; CHECK-NEXT:  # %bb.2: # %b
1971 ; CHECK-NEXT:    jmp b # TAILCALL
1972 ; CHECK-NEXT:    # encoding: [0xeb,A]
1973 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
1974 ; CHECK-NEXT:  .LBB61_1: # %a
1975 ; CHECK-NEXT:    jmp a # TAILCALL
1976 ; CHECK-NEXT:    # encoding: [0xeb,A]
1977 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
1978 entry:
1979   %load1 = load i64, i64* @g64
1980   ; Xor 0x00FFFFFF, a positive immediate requiring 24-bits.
1981   %xor = xor i64 %load1, 16777215
1982   store i64 %xor, i64* @g64
1983   %cond = icmp eq i64 %xor, 0
1984   br i1 %cond, label %a, label %b
1987   tail call void @a()
1988   ret void
1991   tail call void @b()
1992   ret void
1995 define void @xor64_sext_imm32_br() nounwind {
1996 ; CHECK-LABEL: xor64_sext_imm32_br:
1997 ; CHECK:       # %bb.0: # %entry
1998 ; CHECK-NEXT:    xorq $-2147483648, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
1999 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte
2000 ; CHECK-NEXT:    # imm = 0x80000000
2001 ; CHECK-NEXT:    je .LBB62_1 # encoding: [0x74,A]
2002 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB62_1-1, kind: FK_PCRel_1
2003 ; CHECK-NEXT:  # %bb.2: # %b
2004 ; CHECK-NEXT:    jmp b # TAILCALL
2005 ; CHECK-NEXT:    # encoding: [0xeb,A]
2006 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2007 ; CHECK-NEXT:  .LBB62_1: # %a
2008 ; CHECK-NEXT:    jmp a # TAILCALL
2009 ; CHECK-NEXT:    # encoding: [0xeb,A]
2010 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2011 entry:
2012   %load1 = load i64, i64* @g64
2013   ; Xor -0x80000000, which requires sign-extended 32 bits.
2014   %xor = xor i64 %load1, -2147483648
2015   store i64 %xor, i64* @g64
2016   %cond = icmp eq i64 %xor, 0
2017   br i1 %cond, label %a, label %b
2020   tail call void @a()
2021   ret void
2024   tail call void @b()
2025   ret void
2028 define void @xor64_imm8_br() nounwind {
2029 ; CHECK-LABEL: xor64_imm8_br:
2030 ; CHECK:       # %bb.0: # %entry
2031 ; CHECK-NEXT:    xorq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0x0f]
2032 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2033 ; CHECK-NEXT:    je .LBB63_1 # encoding: [0x74,A]
2034 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB63_1-1, kind: FK_PCRel_1
2035 ; CHECK-NEXT:  # %bb.2: # %b
2036 ; CHECK-NEXT:    jmp b # TAILCALL
2037 ; CHECK-NEXT:    # encoding: [0xeb,A]
2038 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2039 ; CHECK-NEXT:  .LBB63_1: # %a
2040 ; CHECK-NEXT:    jmp a # TAILCALL
2041 ; CHECK-NEXT:    # encoding: [0xeb,A]
2042 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2043 entry:
2044   %load1 = load i64, i64* @g64
2045   %xor = xor i64 %load1, 15
2046   store i64 %xor, i64* @g64
2047   %cond = icmp eq i64 %xor, 0
2048   br i1 %cond, label %a, label %b
2051   tail call void @a()
2052   ret void
2055   tail call void @b()
2056   ret void
2059 define void @xor64_imm8_neg_br() nounwind {
2060 ; CHECK-LABEL: xor64_imm8_neg_br:
2061 ; CHECK:       # %bb.0: # %entry
2062 ; CHECK-NEXT:    xorq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0xfc]
2063 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte
2064 ; CHECK-NEXT:    je .LBB64_1 # encoding: [0x74,A]
2065 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB64_1-1, kind: FK_PCRel_1
2066 ; CHECK-NEXT:  # %bb.2: # %b
2067 ; CHECK-NEXT:    jmp b # TAILCALL
2068 ; CHECK-NEXT:    # encoding: [0xeb,A]
2069 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2070 ; CHECK-NEXT:  .LBB64_1: # %a
2071 ; CHECK-NEXT:    jmp a # TAILCALL
2072 ; CHECK-NEXT:    # encoding: [0xeb,A]
2073 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2074 entry:
2075   %load1 = load i64, i64* @g64
2076   %xor = xor i64 %load1, -4
2077   store i64 %xor, i64* @g64
2078   %cond = icmp eq i64 %xor, 0
2079   br i1 %cond, label %a, label %b
2082   tail call void @a()
2083   ret void
2086   tail call void @b()
2087   ret void
2090 define void @xor32_imm_br() nounwind {
2091 ; CHECK-LABEL: xor32_imm_br:
2092 ; CHECK:       # %bb.0: # %entry
2093 ; CHECK-NEXT:    xorl $-2147483648, {{.*}}(%rip) # encoding: [0x81,0x35,A,A,A,A,0x00,0x00,0x00,0x80]
2094 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte
2095 ; CHECK-NEXT:    # imm = 0x80000000
2096 ; CHECK-NEXT:    je .LBB65_1 # encoding: [0x74,A]
2097 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB65_1-1, kind: FK_PCRel_1
2098 ; CHECK-NEXT:  # %bb.2: # %b
2099 ; CHECK-NEXT:    jmp b # TAILCALL
2100 ; CHECK-NEXT:    # encoding: [0xeb,A]
2101 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2102 ; CHECK-NEXT:  .LBB65_1: # %a
2103 ; CHECK-NEXT:    jmp a # TAILCALL
2104 ; CHECK-NEXT:    # encoding: [0xeb,A]
2105 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2106 entry:
2107   %load1 = load i32, i32* @g32
2108   ; Xor 0x80000000, a positive number requiring 32 bits of immediate.
2109   %xor = xor i32 %load1, 2147483648
2110   store i32 %xor, i32* @g32
2111   %cond = icmp eq i32 %xor, 0
2112   br i1 %cond, label %a, label %b
2115   tail call void @a()
2116   ret void
2119   tail call void @b()
2120   ret void
2123 define void @xor32_imm8_br() nounwind {
2124 ; CHECK-LABEL: xor32_imm8_br:
2125 ; CHECK:       # %bb.0: # %entry
2126 ; CHECK-NEXT:    xorl $15, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0x0f]
2127 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2128 ; CHECK-NEXT:    je .LBB66_1 # encoding: [0x74,A]
2129 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB66_1-1, kind: FK_PCRel_1
2130 ; CHECK-NEXT:  # %bb.2: # %b
2131 ; CHECK-NEXT:    jmp b # TAILCALL
2132 ; CHECK-NEXT:    # encoding: [0xeb,A]
2133 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2134 ; CHECK-NEXT:  .LBB66_1: # %a
2135 ; CHECK-NEXT:    jmp a # TAILCALL
2136 ; CHECK-NEXT:    # encoding: [0xeb,A]
2137 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2138 entry:
2139   %load1 = load i32, i32* @g32
2140   %xor = xor i32 %load1, 15
2141   store i32 %xor, i32* @g32
2142   %cond = icmp eq i32 %xor, 0
2143   br i1 %cond, label %a, label %b
2146   tail call void @a()
2147   ret void
2150   tail call void @b()
2151   ret void
2154 define void @xor32_imm8_neg_br() nounwind {
2155 ; CHECK-LABEL: xor32_imm8_neg_br:
2156 ; CHECK:       # %bb.0: # %entry
2157 ; CHECK-NEXT:    xorl $-4, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0xfc]
2158 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte
2159 ; CHECK-NEXT:    je .LBB67_1 # encoding: [0x74,A]
2160 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB67_1-1, kind: FK_PCRel_1
2161 ; CHECK-NEXT:  # %bb.2: # %b
2162 ; CHECK-NEXT:    jmp b # TAILCALL
2163 ; CHECK-NEXT:    # encoding: [0xeb,A]
2164 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2165 ; CHECK-NEXT:  .LBB67_1: # %a
2166 ; CHECK-NEXT:    jmp a # TAILCALL
2167 ; CHECK-NEXT:    # encoding: [0xeb,A]
2168 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2169 entry:
2170   %load1 = load i32, i32* @g32
2171   %xor = xor i32 %load1, -4
2172   store i32 %xor, i32* @g32
2173   %cond = icmp eq i32 %xor, 0
2174   br i1 %cond, label %a, label %b
2177   tail call void @a()
2178   ret void
2181   tail call void @b()
2182   ret void
2185 define void @xor16_imm_br() nounwind {
2186 ; CHECK-LABEL: xor16_imm_br:
2187 ; CHECK:       # %bb.0: # %entry
2188 ; CHECK-NEXT:    xorw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x35,A,A,A,A,0x00,0x80]
2189 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte
2190 ; CHECK-NEXT:    # imm = 0x8000
2191 ; CHECK-NEXT:    je .LBB68_1 # encoding: [0x74,A]
2192 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB68_1-1, kind: FK_PCRel_1
2193 ; CHECK-NEXT:  # %bb.2: # %b
2194 ; CHECK-NEXT:    jmp b # TAILCALL
2195 ; CHECK-NEXT:    # encoding: [0xeb,A]
2196 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2197 ; CHECK-NEXT:  .LBB68_1: # %a
2198 ; CHECK-NEXT:    jmp a # TAILCALL
2199 ; CHECK-NEXT:    # encoding: [0xeb,A]
2200 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2201 entry:
2202   %load1 = load i16, i16* @g16
2203   %xor = xor i16 %load1, 32768
2204   store i16 %xor, i16* @g16
2205   %cond = icmp eq i16 %xor, 0
2206   br i1 %cond, label %a, label %b
2209   tail call void @a()
2210   ret void
2213   tail call void @b()
2214   ret void
2217 define void @xor16_imm8_br() nounwind {
2218 ; CHECK-LABEL: xor16_imm8_br:
2219 ; CHECK:       # %bb.0: # %entry
2220 ; CHECK-NEXT:    xorw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0x0f]
2221 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2222 ; CHECK-NEXT:    je .LBB69_1 # encoding: [0x74,A]
2223 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB69_1-1, kind: FK_PCRel_1
2224 ; CHECK-NEXT:  # %bb.2: # %b
2225 ; CHECK-NEXT:    jmp b # TAILCALL
2226 ; CHECK-NEXT:    # encoding: [0xeb,A]
2227 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2228 ; CHECK-NEXT:  .LBB69_1: # %a
2229 ; CHECK-NEXT:    jmp a # TAILCALL
2230 ; CHECK-NEXT:    # encoding: [0xeb,A]
2231 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2232 entry:
2233   %load1 = load i16, i16* @g16
2234   %xor = xor i16 %load1, 15
2235   store i16 %xor, i16* @g16
2236   %cond = icmp eq i16 %xor, 0
2237   br i1 %cond, label %a, label %b
2240   tail call void @a()
2241   ret void
2244   tail call void @b()
2245   ret void
2248 define void @xor16_imm8_neg_br() nounwind {
2249 ; CHECK-LABEL: xor16_imm8_neg_br:
2250 ; CHECK:       # %bb.0: # %entry
2251 ; CHECK-NEXT:    xorw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0xfc]
2252 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte
2253 ; CHECK-NEXT:    je .LBB70_1 # encoding: [0x74,A]
2254 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB70_1-1, kind: FK_PCRel_1
2255 ; CHECK-NEXT:  # %bb.2: # %b
2256 ; CHECK-NEXT:    jmp b # TAILCALL
2257 ; CHECK-NEXT:    # encoding: [0xeb,A]
2258 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2259 ; CHECK-NEXT:  .LBB70_1: # %a
2260 ; CHECK-NEXT:    jmp a # TAILCALL
2261 ; CHECK-NEXT:    # encoding: [0xeb,A]
2262 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2263 entry:
2264   %load1 = load i16, i16* @g16
2265   %xor = xor i16 %load1, -4
2266   store i16 %xor, i16* @g16
2267   %cond = icmp eq i16 %xor, 0
2268   br i1 %cond, label %a, label %b
2271   tail call void @a()
2272   ret void
2275   tail call void @b()
2276   ret void
2279 define void @xor8_imm_br() nounwind {
2280 ; CHECK-LABEL: xor8_imm_br:
2281 ; CHECK:       # %bb.0: # %entry
2282 ; CHECK-NEXT:    xorb $-4, {{.*}}(%rip) # encoding: [0x80,0x35,A,A,A,A,0xfc]
2283 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte
2284 ; CHECK-NEXT:    je .LBB71_1 # encoding: [0x74,A]
2285 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB71_1-1, kind: FK_PCRel_1
2286 ; CHECK-NEXT:  # %bb.2: # %b
2287 ; CHECK-NEXT:    jmp b # TAILCALL
2288 ; CHECK-NEXT:    # encoding: [0xeb,A]
2289 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2290 ; CHECK-NEXT:  .LBB71_1: # %a
2291 ; CHECK-NEXT:    jmp a # TAILCALL
2292 ; CHECK-NEXT:    # encoding: [0xeb,A]
2293 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2294 entry:
2295   %load1 = load i8, i8* @g8
2296   %xor = xor i8 %load1, -4
2297   store i8 %xor, i8* @g8
2298   %cond = icmp eq i8 %xor, 0
2299   br i1 %cond, label %a, label %b
2302   tail call void @a()
2303   ret void
2306   tail call void @b()
2307   ret void
2310 define void @xor64_reg_br(i64 %arg) nounwind {
2311 ; CHECK-LABEL: xor64_reg_br:
2312 ; CHECK:       # %bb.0: # %entry
2313 ; CHECK-NEXT:    xorq %rdi, {{.*}}(%rip) # encoding: [0x48,0x31,0x3d,A,A,A,A]
2314 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
2315 ; CHECK-NEXT:    je .LBB72_1 # encoding: [0x74,A]
2316 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB72_1-1, kind: FK_PCRel_1
2317 ; CHECK-NEXT:  # %bb.2: # %b
2318 ; CHECK-NEXT:    jmp b # TAILCALL
2319 ; CHECK-NEXT:    # encoding: [0xeb,A]
2320 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2321 ; CHECK-NEXT:  .LBB72_1: # %a
2322 ; CHECK-NEXT:    jmp a # TAILCALL
2323 ; CHECK-NEXT:    # encoding: [0xeb,A]
2324 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2325 entry:
2326   %load1 = load i64, i64* @g64
2327   %xor = xor i64 %load1, %arg
2328   store i64 %xor, i64* @g64
2329   %cond = icmp eq i64 %xor, 0
2330   br i1 %cond, label %a, label %b
2333   tail call void @a()
2334   ret void
2337   tail call void @b()
2338   ret void
2341 define void @xor32_reg_br(i32 %arg) nounwind {
2342 ; CHECK-LABEL: xor32_reg_br:
2343 ; CHECK:       # %bb.0: # %entry
2344 ; CHECK-NEXT:    xorl %edi, {{.*}}(%rip) # encoding: [0x31,0x3d,A,A,A,A]
2345 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
2346 ; CHECK-NEXT:    je .LBB73_1 # encoding: [0x74,A]
2347 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB73_1-1, kind: FK_PCRel_1
2348 ; CHECK-NEXT:  # %bb.2: # %b
2349 ; CHECK-NEXT:    jmp b # TAILCALL
2350 ; CHECK-NEXT:    # encoding: [0xeb,A]
2351 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2352 ; CHECK-NEXT:  .LBB73_1: # %a
2353 ; CHECK-NEXT:    jmp a # TAILCALL
2354 ; CHECK-NEXT:    # encoding: [0xeb,A]
2355 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2356 entry:
2357   %load1 = load i32, i32* @g32
2358   %xor = xor i32 %load1, %arg
2359   store i32 %xor, i32* @g32
2360   %cond = icmp eq i32 %xor, 0
2361   br i1 %cond, label %a, label %b
2364   tail call void @a()
2365   ret void
2368   tail call void @b()
2369   ret void
2372 define void @xor16_reg_br(i16 %arg) nounwind {
2373 ; CHECK-LABEL: xor16_reg_br:
2374 ; CHECK:       # %bb.0: # %entry
2375 ; CHECK-NEXT:    xorw %di, {{.*}}(%rip) # encoding: [0x66,0x31,0x3d,A,A,A,A]
2376 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
2377 ; CHECK-NEXT:    je .LBB74_1 # encoding: [0x74,A]
2378 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB74_1-1, kind: FK_PCRel_1
2379 ; CHECK-NEXT:  # %bb.2: # %b
2380 ; CHECK-NEXT:    jmp b # TAILCALL
2381 ; CHECK-NEXT:    # encoding: [0xeb,A]
2382 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2383 ; CHECK-NEXT:  .LBB74_1: # %a
2384 ; CHECK-NEXT:    jmp a # TAILCALL
2385 ; CHECK-NEXT:    # encoding: [0xeb,A]
2386 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2387 entry:
2388   %load1 = load i16, i16* @g16
2389   %xor = xor i16 %load1, %arg
2390   store i16 %xor, i16* @g16
2391   %cond = icmp eq i16 %xor, 0
2392   br i1 %cond, label %a, label %b
2395   tail call void @a()
2396   ret void
2399   tail call void @b()
2400   ret void
2403 define void @xor8_reg_br(i8 %arg) nounwind {
2404 ; CHECK-LABEL: xor8_reg_br:
2405 ; CHECK:       # %bb.0: # %entry
2406 ; CHECK-NEXT:    xorb %dil, {{.*}}(%rip) # encoding: [0x40,0x30,0x3d,A,A,A,A]
2407 ; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte
2408 ; CHECK-NEXT:    je .LBB75_1 # encoding: [0x74,A]
2409 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB75_1-1, kind: FK_PCRel_1
2410 ; CHECK-NEXT:  # %bb.2: # %b
2411 ; CHECK-NEXT:    jmp b # TAILCALL
2412 ; CHECK-NEXT:    # encoding: [0xeb,A]
2413 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2414 ; CHECK-NEXT:  .LBB75_1: # %a
2415 ; CHECK-NEXT:    jmp a # TAILCALL
2416 ; CHECK-NEXT:    # encoding: [0xeb,A]
2417 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2418 entry:
2419   %load1 = load i8, i8* @g8
2420   %xor = xor i8 %load1, %arg
2421   store i8 %xor, i8* @g8
2422   %cond = icmp eq i8 %xor, 0
2423   br i1 %cond, label %a, label %b
2426   tail call void @a()
2427   ret void
2430   tail call void @b()
2431   ret void
2434 define void @neg64_br() nounwind {
2435 ; CHECK-LABEL: neg64_br:
2436 ; CHECK:       # %bb.0: # %entry
2437 ; CHECK-NEXT:    negq {{.*}}(%rip) # encoding: [0x48,0xf7,0x1d,A,A,A,A]
2438 ; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte
2439 ; CHECK-NEXT:    js .LBB76_1 # encoding: [0x78,A]
2440 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB76_1-1, kind: FK_PCRel_1
2441 ; CHECK-NEXT:  # %bb.2: # %b
2442 ; CHECK-NEXT:    jmp b # TAILCALL
2443 ; CHECK-NEXT:    # encoding: [0xeb,A]
2444 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2445 ; CHECK-NEXT:  .LBB76_1: # %a
2446 ; CHECK-NEXT:    jmp a # TAILCALL
2447 ; CHECK-NEXT:    # encoding: [0xeb,A]
2448 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2449 entry:
2450   %load1 = load i64, i64* @g64
2451   %sub = sub i64 0, %load1
2452   store i64 %sub, i64* @g64
2453   %cond = icmp slt i64 %sub, 0
2454   br i1 %cond, label %a, label %b
2457   tail call void @a()
2458   ret void
2461   tail call void @b()
2462   ret void
2465 define void @neg32_br() nounwind {
2466 ; CHECK-LABEL: neg32_br:
2467 ; CHECK:       # %bb.0: # %entry
2468 ; CHECK-NEXT:    negl {{.*}}(%rip) # encoding: [0xf7,0x1d,A,A,A,A]
2469 ; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte
2470 ; CHECK-NEXT:    js .LBB77_1 # encoding: [0x78,A]
2471 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB77_1-1, kind: FK_PCRel_1
2472 ; CHECK-NEXT:  # %bb.2: # %b
2473 ; CHECK-NEXT:    jmp b # TAILCALL
2474 ; CHECK-NEXT:    # encoding: [0xeb,A]
2475 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2476 ; CHECK-NEXT:  .LBB77_1: # %a
2477 ; CHECK-NEXT:    jmp a # TAILCALL
2478 ; CHECK-NEXT:    # encoding: [0xeb,A]
2479 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2480 entry:
2481   %load1 = load i32, i32* @g32
2482   %sub = sub i32 0, %load1
2483   store i32 %sub, i32* @g32
2484   %cond = icmp slt i32 %sub, 0
2485   br i1 %cond, label %a, label %b
2488   tail call void @a()
2489   ret void
2492   tail call void @b()
2493   ret void
2496 define void @neg16_br() nounwind {
2497 ; CHECK-LABEL: neg16_br:
2498 ; CHECK:       # %bb.0: # %entry
2499 ; CHECK-NEXT:    negw {{.*}}(%rip) # encoding: [0x66,0xf7,0x1d,A,A,A,A]
2500 ; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte
2501 ; CHECK-NEXT:    js .LBB78_1 # encoding: [0x78,A]
2502 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB78_1-1, kind: FK_PCRel_1
2503 ; CHECK-NEXT:  # %bb.2: # %b
2504 ; CHECK-NEXT:    jmp b # TAILCALL
2505 ; CHECK-NEXT:    # encoding: [0xeb,A]
2506 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2507 ; CHECK-NEXT:  .LBB78_1: # %a
2508 ; CHECK-NEXT:    jmp a # TAILCALL
2509 ; CHECK-NEXT:    # encoding: [0xeb,A]
2510 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2511 entry:
2512   %load1 = load i16, i16* @g16
2513   %sub = sub i16 0, %load1
2514   store i16 %sub, i16* @g16
2515   %cond = icmp slt i16 %sub, 0
2516   br i1 %cond, label %a, label %b
2519   tail call void @a()
2520   ret void
2523   tail call void @b()
2524   ret void
2527 define void @neg8_br() nounwind {
2528 ; CHECK-LABEL: neg8_br:
2529 ; CHECK:       # %bb.0: # %entry
2530 ; CHECK-NEXT:    negb {{.*}}(%rip) # encoding: [0xf6,0x1d,A,A,A,A]
2531 ; CHECK-NEXT:    # fixup A - offset: 2, value: g8-4, kind: reloc_riprel_4byte
2532 ; CHECK-NEXT:    js .LBB79_1 # encoding: [0x78,A]
2533 ; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB79_1-1, kind: FK_PCRel_1
2534 ; CHECK-NEXT:  # %bb.2: # %b
2535 ; CHECK-NEXT:    jmp b # TAILCALL
2536 ; CHECK-NEXT:    # encoding: [0xeb,A]
2537 ; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1
2538 ; CHECK-NEXT:  .LBB79_1: # %a
2539 ; CHECK-NEXT:    jmp a # TAILCALL
2540 ; CHECK-NEXT:    # encoding: [0xeb,A]
2541 ; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1
2542 entry:
2543   %load1 = load i8, i8* @g8
2544   %sub = sub i8 0, %load1
2545   store i8 %sub, i8* @g8
2546   %cond = icmp slt i8 %sub, 0
2547   br i1 %cond, label %a, label %b
2550   tail call void @a()
2551   ret void
2554   tail call void @b()
2555   ret void