<div dir="ltr">I think Chandler fixed that in r312809</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote">On Fri, Sep 8, 2017 at 2:41 PM, Galina Kistanova via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Chandler,<br><br>It looks like this commit broke one of our builders:<br><a href="http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/1249" target="_blank">http://lab.llvm.org:8011/<wbr>builders/ubuntu-gcc7.1-werror/<wbr>builds/1249</a><br><br>...<br>2929.910 [485/8/923] Building CXX object lib/ExecutionEngine/<wbr>Interpreter/CMakeFiles/<wbr>LLVMInterpreter.dir/<wbr>ExternalFunctions.cpp.o<br>FAILED: /usr/local/gcc-7.1/bin/g++-7.<wbr>1   -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ilib/Target/X86 -I/home/buildslave/am1i-slv2/<wbr>ubuntu-gcc7.1-werror/llvm/lib/<wbr>Target/X86 -Iinclude -I/home/buildslave/am1i-slv2/<wbr>ubuntu-gcc7.1-werror/llvm/<wbr>include -Wno-noexcept-type -fPIC -fvisibility-inlines-hidden -Werror -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-<wbr>initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -O3  -fPIC   -UNDEBUG  -fno-exceptions -fno-rtti -MD -MT lib/Target/X86/CMakeFiles/<wbr>LLVMX86CodeGen.dir/<wbr>X86ISelDAGToDAG.cpp.o -MF lib/Target/X86/CMakeFiles/<wbr>LLVMX86CodeGen.dir/<wbr>X86ISelDAGToDAG.cpp.o.d -o lib/Target/X86/CMakeFiles/<wbr>LLVMX86CodeGen.dir/<wbr>X86ISelDAGToDAG.cpp.o -c /home/buildslave/am1i-slv2/<wbr>ubuntu-gcc7.1-werror/llvm/lib/<wbr>Target/X86/X86ISelDAGToDAG.cpp<br>/home/buildslave/am1i-slv2/<wbr>ubuntu-gcc7.1-werror/llvm/lib/<wbr>Target/X86/X86ISelDAGToDAG.<wbr>cpp: In member function ‘bool {anonymous}::X86DAGToDAGISel::<wbr>foldLoadStoreIntoMemOperand(<wbr>llvm::SDNode*)’:<br>/home/buildslave/am1i-slv2/<wbr>ubuntu-gcc7.1-werror/llvm/lib/<wbr>Target/X86/X86ISelDAGToDAG.<wbr>cpp:2138:43: error: default argument specified for lambda parameter [-Werror=pedantic]<br>                           unsigned Opc8 = 0) {<br>                              <wbr>             ^<br><br>Please have a look?<br><br>Thanks<br><br>Galina<div><div class="h5"><br><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 7, 2017 at 5:17 PM, Chandler Carruth via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: chandlerc<br>
Date: Thu Sep  7 17:17:12 2017<br>
New Revision: 312768<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=312768&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=312768&view=rev</a><br>
Log:<br>
[x86] Flesh out the custom ISel for RMW aritmetic ops with used flags to<br>
cover the bitwise operators.<br>
<br>
Nothing really exciting here, this just stamps out the rest of the core<br>
operations that can RMW memory and set flags.<br>
<br>
Still not implemented here: ADC, SBB. Those will require more<br>
interesting logic to channel the flags *in*, and I'm not currently<br>
planning to try to tackle that. It might be interesting for someone who<br>
wants to improve our code generation for bignum implementations.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D37141" rel="noreferrer" target="_blank">https://reviews.llvm.org/D3714<wbr>1</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/X86/X86I<wbr>SelDAGToDAG.cpp<br>
    llvm/trunk/test/CodeGen/X86/fo<wbr>ld-rmw-ops.ll<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86I<wbr>SelDAGToDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=312768&r1=312767&r2=312768&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/Target/X8<wbr>6/X86ISelDAGToDAG.cpp?rev=3127<wbr>68&r1=312767&r2=312768&view=<wbr>diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/X86/X86I<wbr>SelDAGToDAG.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86I<wbr>SelDAGToDAG.cpp Thu Sep  7 17:17:12 2017<br>
@@ -2117,6 +2117,9 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
   case X86ISD::DEC:<br>
   case X86ISD::ADD:<br>
   case X86ISD::SUB:<br>
+  case X86ISD::AND:<br>
+  case X86ISD::OR:<br>
+  case X86ISD::XOR:<br>
     break;<br>
   }<br>
<br>
@@ -2161,7 +2164,10 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
     break;<br>
   }<br>
   case X86ISD::ADD:<br>
-  case X86ISD::SUB: {<br>
+  case X86ISD::SUB:<br>
+  case X86ISD::AND:<br>
+  case X86ISD::OR:<br>
+  case X86ISD::XOR: {<br>
     auto SelectRegOpcode = [SelectOpcode](unsigned Opc) {<br>
       switch (Opc) {<br>
       case X86ISD::ADD:<br>
@@ -2170,6 +2176,14 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
       case X86ISD::SUB:<br>
         return SelectOpcode(X86::SUB64mr, X86::SUB32mr, X86::SUB16mr,<br>
                             X86::SUB8mr);<br>
+      case X86ISD::AND:<br>
+        return SelectOpcode(X86::AND64mr, X86::AND32mr, X86::AND16mr,<br>
+                            X86::AND8mr);<br>
+      case X86ISD::OR:<br>
+        return SelectOpcode(X86::OR64mr, X86::OR32mr, X86::OR16mr, X86::OR8mr);<br>
+      case X86ISD::XOR:<br>
+        return SelectOpcode(X86::XOR64mr, X86::XOR32mr, X86::XOR16mr,<br>
+                            X86::XOR8mr);<br>
       default:<br>
         llvm_unreachable("Invalid opcode!");<br>
       }<br>
@@ -2180,6 +2194,12 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
         return SelectOpcode(X86::ADD64mi8, X86::ADD32mi8, X86::ADD16mi8);<br>
       case X86ISD::SUB:<br>
         return SelectOpcode(X86::SUB64mi8, X86::SUB32mi8, X86::SUB16mi8);<br>
+      case X86ISD::AND:<br>
+        return SelectOpcode(X86::AND64mi8, X86::AND32mi8, X86::AND16mi8);<br>
+      case X86ISD::OR:<br>
+        return SelectOpcode(X86::OR64mi8, X86::OR32mi8, X86::OR16mi8);<br>
+      case X86ISD::XOR:<br>
+        return SelectOpcode(X86::XOR64mi8, X86::XOR32mi8, X86::XOR16mi8);<br>
       default:<br>
         llvm_unreachable("Invalid opcode!");<br>
       }<br>
@@ -2192,6 +2212,15 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
       case X86ISD::SUB:<br>
         return SelectOpcode(X86::SUB64mi32, X86::SUB32mi, X86::SUB16mi,<br>
                             X86::SUB8mi);<br>
+      case X86ISD::AND:<br>
+        return SelectOpcode(X86::AND64mi32, X86::AND32mi, X86::AND16mi,<br>
+                            X86::AND8mi);<br>
+      case X86ISD::OR:<br>
+        return SelectOpcode(X86::OR64mi32, X86::OR32mi, X86::OR16mi,<br>
+                            X86::OR8mi);<br>
+      case X86ISD::XOR:<br>
+        return SelectOpcode(X86::XOR64mi32, X86::XOR32mi, X86::XOR16mi,<br>
+                            X86::XOR8mi);<br>
       default:<br>
         llvm_unreachable("Invalid opcode!");<br>
       }<br>
@@ -2208,7 +2237,8 @@ bool X86DAGToDAGISel::foldLoadStore<wbr>IntoM<br>
       // Check if we can shrink the operand enough to fit in an immediate (or<br>
       // fit into a smaller immediate) by negating it and switching the<br>
       // operation.<br>
-      if (((MemVT != MVT::i8 && OperandV.getMinSignedBits() > 8 &&<br>
+      if ((Opc == X86ISD::ADD || Opc == X86ISD::SUB) &&<br>
+          ((MemVT != MVT::i8 && OperandV.getMinSignedBits() > 8 &&<br>
             (-OperandV).getMinSignedBits(<wbr>) <= 8) ||<br>
            (MemVT == MVT::i64 && OperandV.getMinSignedBits() > 32 &&<br>
             (-OperandV).getMinSignedBits(<wbr>) <= 32)) &&<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fo<wbr>ld-rmw-ops.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-rmw-ops.ll?rev=312768&r1=312767&r2=312768&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/test/CodeGen/<wbr>X86/fold-rmw-ops.ll?rev=<wbr>312768&r1=312767&r2=312768&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/X86/fo<wbr>ld-rmw-ops.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fo<wbr>ld-rmw-ops.ll Thu Sep  7 17:17:12 2017<br>
@@ -1014,3 +1014,1426 @@ b:<br>
   tail call void @b()<br>
   ret void<br>
 }<br>
+<br>
+define void @and64_imm32_br() nounwind {<br>
+; CHECK-LABEL: and64_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0xff,0<wbr>xff,0xff,0x00]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0xFFFFFF<br>
+; CHECK-NEXT:    je .LBB31_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB31_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB31_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; And 0x00FFFFFF, a positive immediate requiring 24-bits.<br>
+  %and = and i64 %load1, 16777215<br>
+  store i64 %and, i64* @g64<br>
+  %cond = icmp eq i64 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and64_sext_imm32_br() nounwind {<br>
+; CHECK-LABEL: and64_sext_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andq $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, {{.*}}(%rip) # encoding: [0x48,0x81,0x25,A,A,A,A,0x00,0<wbr>x00,0x00,0x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    je .LBB32_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB32_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB32_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; And -0x80000000, which requires sign-extended 32 bits.<br>
+  %and = and i64 %load1, -<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i64 %and, i64* @g64<br>
+  %cond = icmp eq i64 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and64_imm8_br() nounwind {<br>
+; CHECK-LABEL: and64_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB33_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB33_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB33_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %and = and i64 %load1, 15<br>
+  store i64 %and, i64* @g64<br>
+  %cond = icmp eq i64 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and64_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: and64_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x25,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB34_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB34_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB34_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %and = and i64 %load1, -4<br>
+  store i64 %and, i64* @g64<br>
+  %cond = icmp eq i64 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and32_imm_br() nounwind {<br>
+; CHECK-LABEL: and32_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    movl $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, %eax # encoding: [0xb8,0x00,0x00,0x00,0x80]<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    andl {{.*}}(%rip), %eax # encoding: [0x23,0x05,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    movl %eax, {{.*}}(%rip) # encoding: [0x89,0x05,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    jne .LBB35_2 # encoding: [0x75,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB35_2-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB35_2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  ; And 0x80000000, a positive number requiring 32 bits of immediate.<br>
+  %and = and i32 %load1, <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i32 %and, i32* @g32<br>
+  %cond = icmp eq i32 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and32_imm8_br() nounwind {<br>
+; CHECK-LABEL: and32_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andl $15, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB36_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB36_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB36_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %and = and i32 %load1, 15<br>
+  store i32 %and, i32* @g32<br>
+  %cond = icmp eq i32 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and32_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: and32_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andl $-4, {{.*}}(%rip) # encoding: [0x83,0x25,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB37_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB37_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB37_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %and = and i32 %load1, -4<br>
+  store i32 %and, i32* @g32<br>
+  %cond = icmp eq i32 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and16_imm_br() nounwind {<br>
+; CHECK-LABEL: and16_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    movzwl {{.*}}(%rip), %eax # encoding: [0x0f,0xb7,0x05,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    andl $32768, %eax # encoding: [0x25,0x00,0x80,0x00,0x00]<br>
+; CHECK-NEXT:    # imm = 0x8000<br>
+; CHECK-NEXT:    movw %ax, {{.*}}(%rip) # encoding: [0x66,0x89,0x05,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    testw %ax, %ax # encoding: [0x66,0x85,0xc0]<br>
+; CHECK-NEXT:    jne .LBB38_2 # encoding: [0x75,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB38_2-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB38_2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %and = and i16 %load1, 32768<br>
+  store i16 %and, i16* @g16<br>
+  %cond = icmp eq i16 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and16_imm8_br() nounwind {<br>
+; CHECK-LABEL: and16_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB39_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB39_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB39_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %and = and i16 %load1, 15<br>
+  store i16 %and, i16* @g16<br>
+  %cond = icmp eq i16 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and16_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: and16_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x25,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB40_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB40_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB40_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %and = and i16 %load1, -4<br>
+  store i16 %and, i16* @g16<br>
+  %cond = icmp eq i16 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and8_imm_br() nounwind {<br>
+; CHECK-LABEL: and8_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andb $-4, {{.*}}(%rip) # encoding: [0x80,0x25,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB41_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB41_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB41_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %and = and i8 %load1, -4<br>
+  store i8 %and, i8* @g8<br>
+  %cond = icmp eq i8 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and64_reg_br(i64 %arg) nounwind {<br>
+; CHECK-LABEL: and64_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andq %rdi, {{.*}}(%rip) # encoding: [0x48,0x21,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB42_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB42_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB42_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %and = and i64 %load1, %arg<br>
+  store i64 %and, i64* @g64<br>
+  %cond = icmp eq i64 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and32_reg_br(i32 %arg) nounwind {<br>
+; CHECK-LABEL: and32_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andl %edi, {{.*}}(%rip) # encoding: [0x21,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB43_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB43_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB43_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %and = and i32 %load1, %arg<br>
+  store i32 %and, i32* @g32<br>
+  %cond = icmp eq i32 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and16_reg_br(i16 %arg) nounwind {<br>
+; CHECK-LABEL: and16_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andw %di, {{.*}}(%rip) # encoding: [0x66,0x21,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB44_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB44_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB44_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %and = and i16 %load1, %arg<br>
+  store i16 %and, i16* @g16<br>
+  %cond = icmp eq i16 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @and8_reg_br(i8 %arg) nounwind {<br>
+; CHECK-LABEL: and8_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    andb %dil, {{.*}}(%rip) # encoding: [0x40,0x20,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB45_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB45_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB45_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %and = and i8 %load1, %arg<br>
+  store i8 %and, i8* @g8<br>
+  %cond = icmp eq i8 %and, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or64_imm32_br() nounwind {<br>
+; CHECK-LABEL: or64_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0xff,0<wbr>xff,0xff,0x00]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0xFFFFFF<br>
+; CHECK-NEXT:    je .LBB46_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB46_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB46_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; Or 0x00FFFFFF, a positive immediate requiring 24-bits.<br>
+  %or = or i64 %load1, 16777215<br>
+  store i64 %or, i64* @g64<br>
+  %cond = icmp eq i64 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or64_sext_imm32_br() nounwind {<br>
+; CHECK-LABEL: or64_sext_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orq $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, {{.*}}(%rip) # encoding: [0x48,0x81,0x0d,A,A,A,A,0x00,0<wbr>x00,0x00,0x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    je .LBB47_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB47_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB47_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; Or -0x80000000, which requires sign-extended 32 bits.<br>
+  %or = or i64 %load1, -<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i64 %or, i64* @g64<br>
+  %cond = icmp eq i64 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or64_imm8_br() nounwind {<br>
+; CHECK-LABEL: or64_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB48_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB48_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB48_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %or = or i64 %load1, 15<br>
+  store i64 %or, i64* @g64<br>
+  %cond = icmp eq i64 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or64_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: or64_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x0d,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB49_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB49_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB49_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %or = or i64 %load1, -4<br>
+  store i64 %or, i64* @g64<br>
+  %cond = icmp eq i64 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or32_imm_br() nounwind {<br>
+; CHECK-LABEL: or32_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orl $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, {{.*}}(%rip) # encoding: [0x81,0x0d,A,A,A,A,0x00,0x00,0<wbr>x00,0x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    je .LBB50_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB50_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB50_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  ; Or 0x80000000, a positive number requiring 32 bits of immediate.<br>
+  %or = or i32 %load1, <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i32 %or, i32* @g32<br>
+  %cond = icmp eq i32 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or32_imm8_br() nounwind {<br>
+; CHECK-LABEL: or32_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orl $15, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB51_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB51_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB51_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %or = or i32 %load1, 15<br>
+  store i32 %or, i32* @g32<br>
+  %cond = icmp eq i32 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or32_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: or32_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orl $-4, {{.*}}(%rip) # encoding: [0x83,0x0d,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB52_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB52_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB52_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %or = or i32 %load1, -4<br>
+  store i32 %or, i32* @g32<br>
+  %cond = icmp eq i32 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or16_imm_br() nounwind {<br>
+; CHECK-LABEL: or16_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x0d,A,A,A,A,0x00,0<wbr>x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x8000<br>
+; CHECK-NEXT:    je .LBB53_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB53_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB53_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %or = or i16 %load1, 32768<br>
+  store i16 %or, i16* @g16<br>
+  %cond = icmp eq i16 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or16_imm8_br() nounwind {<br>
+; CHECK-LABEL: or16_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB54_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB54_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB54_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %or = or i16 %load1, 15<br>
+  store i16 %or, i16* @g16<br>
+  %cond = icmp eq i16 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or16_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: or16_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x0d,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB55_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB55_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB55_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %or = or i16 %load1, -4<br>
+  store i16 %or, i16* @g16<br>
+  %cond = icmp eq i16 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or8_imm_br() nounwind {<br>
+; CHECK-LABEL: or8_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orb $-4, {{.*}}(%rip) # encoding: [0x80,0x0d,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB56_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB56_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB56_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %or = or i8 %load1, -4<br>
+  store i8 %or, i8* @g8<br>
+  %cond = icmp eq i8 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or64_reg_br(i64 %arg) nounwind {<br>
+; CHECK-LABEL: or64_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orq %rdi, {{.*}}(%rip) # encoding: [0x48,0x09,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB57_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB57_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB57_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %or = or i64 %load1, %arg<br>
+  store i64 %or, i64* @g64<br>
+  %cond = icmp eq i64 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or32_reg_br(i32 %arg) nounwind {<br>
+; CHECK-LABEL: or32_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orl %edi, {{.*}}(%rip) # encoding: [0x09,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB58_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB58_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB58_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %or = or i32 %load1, %arg<br>
+  store i32 %or, i32* @g32<br>
+  %cond = icmp eq i32 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or16_reg_br(i16 %arg) nounwind {<br>
+; CHECK-LABEL: or16_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orw %di, {{.*}}(%rip) # encoding: [0x66,0x09,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB59_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB59_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB59_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %or = or i16 %load1, %arg<br>
+  store i16 %or, i16* @g16<br>
+  %cond = icmp eq i16 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @or8_reg_br(i8 %arg) nounwind {<br>
+; CHECK-LABEL: or8_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    orb %dil, {{.*}}(%rip) # encoding: [0x40,0x08,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB60_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB60_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB60_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %or = or i8 %load1, %arg<br>
+  store i8 %or, i8* @g8<br>
+  %cond = icmp eq i8 %or, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor64_imm32_br() nounwind {<br>
+; CHECK-LABEL: xor64_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorq $16777215, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0xff,0<wbr>xff,0xff,0x00]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0xFFFFFF<br>
+; CHECK-NEXT:    je .LBB61_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB61_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB61_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; Xor 0x00FFFFFF, a positive immediate requiring 24-bits.<br>
+  %xor = xor i64 %load1, 16777215<br>
+  store i64 %xor, i64* @g64<br>
+  %cond = icmp eq i64 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor64_sext_imm32_br() nounwind {<br>
+; CHECK-LABEL: xor64_sext_imm32_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorq $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, {{.*}}(%rip) # encoding: [0x48,0x81,0x35,A,A,A,A,0x00,0<wbr>x00,0x00,0x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    je .LBB62_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB62_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB62_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  ; Xor -0x80000000, which requires sign-extended 32 bits.<br>
+  %xor = xor i64 %load1, -<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i64 %xor, i64* @g64<br>
+  %cond = icmp eq i64 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor64_imm8_br() nounwind {<br>
+; CHECK-LABEL: xor64_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorq $15, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB63_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB63_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB63_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %xor = xor i64 %load1, 15<br>
+  store i64 %xor, i64* @g64<br>
+  %cond = icmp eq i64 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor64_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: xor64_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorq $-4, {{.*}}(%rip) # encoding: [0x48,0x83,0x35,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB64_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB64_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB64_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %xor = xor i64 %load1, -4<br>
+  store i64 %xor, i64* @g64<br>
+  %cond = icmp eq i64 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor32_imm_br() nounwind {<br>
+; CHECK-LABEL: xor32_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorl $-<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a>, {{.*}}(%rip) # encoding: [0x81,0x35,A,A,A,A,0x00,0x00,0<wbr>x00,0x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-8, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x80000000<br>
+; CHECK-NEXT:    je .LBB65_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB65_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB65_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  ; Xor 0x80000000, a positive number requiring 32 bits of immediate.<br>
+  %xor = xor i32 %load1, <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">2147483648</a><br>
+  store i32 %xor, i32* @g32<br>
+  %cond = icmp eq i32 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor32_imm8_br() nounwind {<br>
+; CHECK-LABEL: xor32_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorl $15, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB66_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB66_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB66_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %xor = xor i32 %load1, 15<br>
+  store i32 %xor, i32* @g32<br>
+  %cond = icmp eq i32 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor32_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: xor32_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorl $-4, {{.*}}(%rip) # encoding: [0x83,0x35,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB67_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB67_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB67_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %xor = xor i32 %load1, -4<br>
+  store i32 %xor, i32* @g32<br>
+  %cond = icmp eq i32 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor16_imm_br() nounwind {<br>
+; CHECK-LABEL: xor16_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorw $-32768, {{.*}}(%rip) # encoding: [0x66,0x81,0x35,A,A,A,A,0x00,0<wbr>x80]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-6, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    # imm = 0x8000<br>
+; CHECK-NEXT:    je .LBB68_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB68_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB68_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %xor = xor i16 %load1, 32768<br>
+  store i16 %xor, i16* @g16<br>
+  %cond = icmp eq i16 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor16_imm8_br() nounwind {<br>
+; CHECK-LABEL: xor16_imm8_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorw $15, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0x0f]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB69_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB69_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB69_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %xor = xor i16 %load1, 15<br>
+  store i16 %xor, i16* @g16<br>
+  %cond = icmp eq i16 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor16_imm8_neg_br() nounwind {<br>
+; CHECK-LABEL: xor16_imm8_neg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorw $-4, {{.*}}(%rip) # encoding: [0x66,0x83,0x35,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB70_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB70_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB70_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %xor = xor i16 %load1, -4<br>
+  store i16 %xor, i16* @g16<br>
+  %cond = icmp eq i16 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor8_imm_br() nounwind {<br>
+; CHECK-LABEL: xor8_imm_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorb $-4, {{.*}}(%rip) # encoding: [0x80,0x35,A,A,A,A,0xfc]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g8-5, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB71_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB71_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB71_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %xor = xor i8 %load1, -4<br>
+  store i8 %xor, i8* @g8<br>
+  %cond = icmp eq i8 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor64_reg_br(i64 %arg) nounwind {<br>
+; CHECK-LABEL: xor64_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorq %rdi, {{.*}}(%rip) # encoding: [0x48,0x31,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g64-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB72_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB72_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB72_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i64, i64* @g64<br>
+  %xor = xor i64 %load1, %arg<br>
+  store i64 %xor, i64* @g64<br>
+  %cond = icmp eq i64 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor32_reg_br(i32 %arg) nounwind {<br>
+; CHECK-LABEL: xor32_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorl %edi, {{.*}}(%rip) # encoding: [0x31,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 2, value: g32-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB73_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB73_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB73_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i32, i32* @g32<br>
+  %xor = xor i32 %load1, %arg<br>
+  store i32 %xor, i32* @g32<br>
+  %cond = icmp eq i32 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor16_reg_br(i16 %arg) nounwind {<br>
+; CHECK-LABEL: xor16_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorw %di, {{.*}}(%rip) # encoding: [0x66,0x31,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g16-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB74_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB74_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB74_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i16, i16* @g16<br>
+  %xor = xor i16 %load1, %arg<br>
+  store i16 %xor, i16* @g16<br>
+  %cond = icmp eq i16 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
+<br>
+define void @xor8_reg_br(i8 %arg) nounwind {<br>
+; CHECK-LABEL: xor8_reg_br:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    xorb %dil, {{.*}}(%rip) # encoding: [0x40,0x30,0x3d,A,A,A,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 3, value: g8-4, kind: reloc_riprel_4byte<br>
+; CHECK-NEXT:    je .LBB75_1 # encoding: [0x74,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB75_1-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  # BB#2: # %b<br>
+; CHECK-NEXT:    jmp b # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: b-1, kind: FK_PCRel_1<br>
+; CHECK-NEXT:  .LBB75_1: # %a<br>
+; CHECK-NEXT:    jmp a # TAILCALL<br>
+; CHECK-NEXT:    # encoding: [0xeb,A]<br>
+; CHECK-NEXT:    # fixup A - offset: 1, value: a-1, kind: FK_PCRel_1<br>
+entry:<br>
+  %load1 = load i8, i8* @g8<br>
+  %xor = xor i8 %load1, %arg<br>
+  store i8 %xor, i8* @g8<br>
+  %cond = icmp eq i8 %xor, 0<br>
+  br i1 %cond, label %a, label %b<br>
+<br>
+a:<br>
+  tail call void @a()<br>
+  ret void<br>
+<br>
+b:<br>
+  tail call void @b()<br>
+  ret void<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div></div></div>
<br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>