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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
744 %load1 = load i32, i32* @g32
745 ; Subtract -0x80000000, which requires 32 bits of immediate but still gets
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
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
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
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
811 %load1 = load i16, i16* @g16
812 ; Subtract -0x8000, which requires a 16 bits of immediate but still gets
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
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
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
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
877 %load1 = load i8, i8* @g8
878 ; Subtract -0x80, which requires an 8-bit immediate but still gets lowered as
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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