Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -verify-machineinstrs -show-mc-encoding | FileCheck %s
      3 
      4 target triple = "x86_64-unknown-unknown"
      5 
      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
     10 
     11 declare void @a()
     12 declare void @b()
     13 
     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
     37 
     38 a:
     39   tail call void @a()
     40   ret void
     41 
     42 b:
     43   tail call void @b()
     44   ret void
     45 }
     46 
     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
     70 
     71 a:
     72   tail call void @a()
     73   ret void
     74 
     75 b:
     76   tail call void @b()
     77   ret void
     78 }
     79 
     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
    104 
    105 a:
    106   tail call void @a()
    107   ret void
    108 
    109 b:
    110   tail call void @b()
    111   ret void
    112 }
    113 
    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
    140 
    141 a:
    142   tail call void @a()
    143   ret void
    144 
    145 b:
    146   tail call void @b()
    147   ret void
    148 }
    149 
    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
    175 
    176 a:
    177   tail call void @a()
    178   ret void
    179 
    180 b:
    181   tail call void @b()
    182   ret void
    183 }
    184 
    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
    208 
    209 a:
    210   tail call void @a()
    211   ret void
    212 
    213 b:
    214   tail call void @b()
    215   ret void
    216 }
    217 
    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
    239 
    240 a:
    241   tail call void @a()
    242   ret void
    243 
    244 b:
    245   tail call void @b()
    246   ret void
    247 }
    248 
    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
    270 
    271 a:
    272   tail call void @a()
    273   ret void
    274 
    275 b:
    276   tail call void @b()
    277   ret void
    278 }
    279 
    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
    303 
    304 a:
    305   tail call void @a()
    306   ret void
    307 
    308 b:
    309   tail call void @b()
    310   ret void
    311 }
    312 
    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
    334 
    335 a:
    336   tail call void @a()
    337   ret void
    338 
    339 b:
    340   tail call void @b()
    341   ret void
    342 }
    343 
    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
    365 
    366 a:
    367   tail call void @a()
    368   ret void
    369 
    370 b:
    371   tail call void @b()
    372   ret void
    373 }
    374 
    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
    398 
    399 a:
    400   tail call void @a()
    401   ret void
    402 
    403 b:
    404   tail call void @b()
    405   ret void
    406 }
    407 
    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
    429 
    430 a:
    431   tail call void @a()
    432   ret void
    433 
    434 b:
    435   tail call void @b()
    436   ret void
    437 }
    438 
    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
    460 
    461 a:
    462   tail call void @a()
    463   ret void
    464 
    465 b:
    466   tail call void @b()
    467   ret void
    468 }
    469 
    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
    491 
    492 a:
    493   tail call void @a()
    494   ret void
    495 
    496 b:
    497   tail call void @b()
    498   ret void
    499 }
    500 
    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
    522 
    523 a:
    524   tail call void @a()
    525   ret void
    526 
    527 b:
    528   tail call void @b()
    529   ret void
    530 }
    531 
    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
    553 
    554 a:
    555   tail call void @a()
    556   ret void
    557 
    558 b:
    559   tail call void @b()
    560   ret void
    561 }
    562 
    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
    584 
    585 a:
    586   tail call void @a()
    587   ret void
    588 
    589 b:
    590   tail call void @b()
    591   ret void
    592 }
    593 
    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
    615 
    616 a:
    617   tail call void @a()
    618   ret void
    619 
    620 b:
    621   tail call void @b()
    622   ret void
    623 }
    624 
    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
    649 
    650 a:
    651   tail call void @a()
    652   ret void
    653 
    654 b:
    655   tail call void @b()
    656   ret void
    657 }
    658 
    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
    684 
    685 a:
    686   tail call void @a()
    687   ret void
    688 
    689 b:
    690   tail call void @b()
    691   ret void
    692 }
    693 
    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
    717 
    718 a:
    719   tail call void @a()
    720   ret void
    721 
    722 b:
    723   tail call void @b()
    724   ret void
    725 }
    726 
    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
    751 
    752 a:
    753   tail call void @a()
    754   ret void
    755 
    756 b:
    757   tail call void @b()
    758   ret void
    759 }
    760 
    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
    784 
    785 a:
    786   tail call void @a()
    787   ret void
    788 
    789 b:
    790   tail call void @b()
    791   ret void
    792 }
    793 
    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
    818 
    819 a:
    820   tail call void @a()
    821   ret void
    822 
    823 b:
    824   tail call void @b()
    825   ret void
    826 }
    827 
    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
    851 
    852 a:
    853   tail call void @a()
    854   ret void
    855 
    856 b:
    857   tail call void @b()
    858   ret void
    859 }
    860 
    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
    884 
    885 a:
    886   tail call void @a()
    887   ret void
    888 
    889 b:
    890   tail call void @b()
    891   ret void
    892 }
    893 
    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
    915 
    916 a:
    917   tail call void @a()
    918   ret void
    919 
    920 b:
    921   tail call void @b()
    922   ret void
    923 }
    924 
    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
    946 
    947 a:
    948   tail call void @a()
    949   ret void
    950 
    951 b:
    952   tail call void @b()
    953   ret void
    954 }
    955 
    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
    977 
    978 a:
    979   tail call void @a()
    980   ret void
    981 
    982 b:
    983   tail call void @b()
    984   ret void
    985 }
    986 
    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
   1008 
   1009 a:
   1010   tail call void @a()
   1011   ret void
   1012 
   1013 b:
   1014   tail call void @b()
   1015   ret void
   1016 }
   1017 
   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
   1041 
   1042 a:
   1043   tail call void @a()
   1044   ret void
   1045 
   1046 b:
   1047   tail call void @b()
   1048   ret void
   1049 }
   1050 
   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
   1074 
   1075 a:
   1076   tail call void @a()
   1077   ret void
   1078 
   1079 b:
   1080   tail call void @b()
   1081   ret void
   1082 }
   1083 
   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
   1105 
   1106 a:
   1107   tail call void @a()
   1108   ret void
   1109 
   1110 b:
   1111   tail call void @b()
   1112   ret void
   1113 }
   1114 
   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
   1136 
   1137 a:
   1138   tail call void @a()
   1139   ret void
   1140 
   1141 b:
   1142   tail call void @b()
   1143   ret void
   1144 }
   1145 
   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
   1169 
   1170 a:
   1171   tail call void @a()
   1172   ret void
   1173 
   1174 b:
   1175   tail call void @b()
   1176   ret void
   1177 }
   1178 
   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
   1200 
   1201 a:
   1202   tail call void @a()
   1203   ret void
   1204 
   1205 b:
   1206   tail call void @b()
   1207   ret void
   1208 }
   1209 
   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
   1231 
   1232 a:
   1233   tail call void @a()
   1234   ret void
   1235 
   1236 b:
   1237   tail call void @b()
   1238   ret void
   1239 }
   1240 
   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
   1263 
   1264 a:
   1265   tail call void @a()
   1266   ret void
   1267 
   1268 b:
   1269   tail call void @b()
   1270   ret void
   1271 }
   1272 
   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
   1294 
   1295 a:
   1296   tail call void @a()
   1297   ret void
   1298 
   1299 b:
   1300   tail call void @b()
   1301   ret void
   1302 }
   1303 
   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
   1325 
   1326 a:
   1327   tail call void @a()
   1328   ret void
   1329 
   1330 b:
   1331   tail call void @b()
   1332   ret void
   1333 }
   1334 
   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
   1356 
   1357 a:
   1358   tail call void @a()
   1359   ret void
   1360 
   1361 b:
   1362   tail call void @b()
   1363   ret void
   1364 }
   1365 
   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
   1387 
   1388 a:
   1389   tail call void @a()
   1390   ret void
   1391 
   1392 b:
   1393   tail call void @b()
   1394   ret void
   1395 }
   1396 
   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
   1418 
   1419 a:
   1420   tail call void @a()
   1421   ret void
   1422 
   1423 b:
   1424   tail call void @b()
   1425   ret void
   1426 }
   1427 
   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
   1449 
   1450 a:
   1451   tail call void @a()
   1452   ret void
   1453 
   1454 b:
   1455   tail call void @b()
   1456   ret void
   1457 }
   1458 
   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
   1480 
   1481 a:
   1482   tail call void @a()
   1483   ret void
   1484 
   1485 b:
   1486   tail call void @b()
   1487   ret void
   1488 }
   1489 
   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
   1513 
   1514 a:
   1515   tail call void @a()
   1516   ret void
   1517 
   1518 b:
   1519   tail call void @b()
   1520   ret void
   1521 }
   1522 
   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
   1546 
   1547 a:
   1548   tail call void @a()
   1549   ret void
   1550 
   1551 b:
   1552   tail call void @b()
   1553   ret void
   1554 }
   1555 
   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
   1577 
   1578 a:
   1579   tail call void @a()
   1580   ret void
   1581 
   1582 b:
   1583   tail call void @b()
   1584   ret void
   1585 }
   1586 
   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
   1608 
   1609 a:
   1610   tail call void @a()
   1611   ret void
   1612 
   1613 b:
   1614   tail call void @b()
   1615   ret void
   1616 }
   1617 
   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
   1641 
   1642 a:
   1643   tail call void @a()
   1644   ret void
   1645 
   1646 b:
   1647   tail call void @b()
   1648   ret void
   1649 }
   1650 
   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
   1672 
   1673 a:
   1674   tail call void @a()
   1675   ret void
   1676 
   1677 b:
   1678   tail call void @b()
   1679   ret void
   1680 }
   1681 
   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
   1703 
   1704 a:
   1705   tail call void @a()
   1706   ret void
   1707 
   1708 b:
   1709   tail call void @b()
   1710   ret void
   1711 }
   1712 
   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
   1735 
   1736 a:
   1737   tail call void @a()
   1738   ret void
   1739 
   1740 b:
   1741   tail call void @b()
   1742   ret void
   1743 }
   1744 
   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
   1766 
   1767 a:
   1768   tail call void @a()
   1769   ret void
   1770 
   1771 b:
   1772   tail call void @b()
   1773   ret void
   1774 }
   1775 
   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
   1797 
   1798 a:
   1799   tail call void @a()
   1800   ret void
   1801 
   1802 b:
   1803   tail call void @b()
   1804   ret void
   1805 }
   1806 
   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
   1828 
   1829 a:
   1830   tail call void @a()
   1831   ret void
   1832 
   1833 b:
   1834   tail call void @b()
   1835   ret void
   1836 }
   1837 
   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
   1859 
   1860 a:
   1861   tail call void @a()
   1862   ret void
   1863 
   1864 b:
   1865   tail call void @b()
   1866   ret void
   1867 }
   1868 
   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
   1890 
   1891 a:
   1892   tail call void @a()
   1893   ret void
   1894 
   1895 b:
   1896   tail call void @b()
   1897   ret void
   1898 }
   1899 
   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
   1921 
   1922 a:
   1923   tail call void @a()
   1924   ret void
   1925 
   1926 b:
   1927   tail call void @b()
   1928   ret void
   1929 }
   1930 
   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
   1952 
   1953 a:
   1954   tail call void @a()
   1955   ret void
   1956 
   1957 b:
   1958   tail call void @b()
   1959   ret void
   1960 }
   1961 
   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
   1985 
   1986 a:
   1987   tail call void @a()
   1988   ret void
   1989 
   1990 b:
   1991   tail call void @b()
   1992   ret void
   1993 }
   1994 
   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
   2018 
   2019 a:
   2020   tail call void @a()
   2021   ret void
   2022 
   2023 b:
   2024   tail call void @b()
   2025   ret void
   2026 }
   2027 
   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
   2049 
   2050 a:
   2051   tail call void @a()
   2052   ret void
   2053 
   2054 b:
   2055   tail call void @b()
   2056   ret void
   2057 }
   2058 
   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
   2080 
   2081 a:
   2082   tail call void @a()
   2083   ret void
   2084 
   2085 b:
   2086   tail call void @b()
   2087   ret void
   2088 }
   2089 
   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
   2113 
   2114 a:
   2115   tail call void @a()
   2116   ret void
   2117 
   2118 b:
   2119   tail call void @b()
   2120   ret void
   2121 }
   2122 
   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
   2144 
   2145 a:
   2146   tail call void @a()
   2147   ret void
   2148 
   2149 b:
   2150   tail call void @b()
   2151   ret void
   2152 }
   2153 
   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
   2175 
   2176 a:
   2177   tail call void @a()
   2178   ret void
   2179 
   2180 b:
   2181   tail call void @b()
   2182   ret void
   2183 }
   2184 
   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
   2207 
   2208 a:
   2209   tail call void @a()
   2210   ret void
   2211 
   2212 b:
   2213   tail call void @b()
   2214   ret void
   2215 }
   2216 
   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
   2238 
   2239 a:
   2240   tail call void @a()
   2241   ret void
   2242 
   2243 b:
   2244   tail call void @b()
   2245   ret void
   2246 }
   2247 
   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
   2269 
   2270 a:
   2271   tail call void @a()
   2272   ret void
   2273 
   2274 b:
   2275   tail call void @b()
   2276   ret void
   2277 }
   2278 
   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
   2300 
   2301 a:
   2302   tail call void @a()
   2303   ret void
   2304 
   2305 b:
   2306   tail call void @b()
   2307   ret void
   2308 }
   2309 
   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
   2331 
   2332 a:
   2333   tail call void @a()
   2334   ret void
   2335 
   2336 b:
   2337   tail call void @b()
   2338   ret void
   2339 }
   2340 
   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
   2362 
   2363 a:
   2364   tail call void @a()
   2365   ret void
   2366 
   2367 b:
   2368   tail call void @b()
   2369   ret void
   2370 }
   2371 
   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
   2393 
   2394 a:
   2395   tail call void @a()
   2396   ret void
   2397 
   2398 b:
   2399   tail call void @b()
   2400   ret void
   2401 }
   2402 
   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
   2424 
   2425 a:
   2426   tail call void @a()
   2427   ret void
   2428 
   2429 b:
   2430   tail call void @b()
   2431   ret void
   2432 }
   2433