From 7f635b90e7bdf1378fd9a65fc62b99e8e07d4aaf Mon Sep 17 00:00:00 2001 From: Marco Elver Date: Mon, 27 Feb 2023 12:05:02 +0100 Subject: [PATCH] [SelectionDAG] Transitively copy NodeExtraInfo on RAUW During legalization of the SelectionDAG, some nodes are replaced with arch-specific nodes. These may be complex nodes, where the root node no longer corresponds to the node that should carry the extra info. Fix the issue by copying extra info to the new node and all its new transitive operands during RAUW. See code comments for more details. This fixes the remaining pcsections-atomics.ll tests on X86. Reviewed By: dvyukov Differential Revision: https://reviews.llvm.org/D144677 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 29 +- .../CodeGen/SelectionDAG/SelectionDAGDumper.cpp | 6 + llvm/test/CodeGen/X86/pcsections-atomics.ll | 2201 ++++++++++++-------- 3 files changed, 1359 insertions(+), 877 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 0ada814..1a57069 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -12199,10 +12199,37 @@ void SelectionDAG::copyExtraInfo(SDNode *From, SDNode *To) { if (I == SDEI.end()) return; + // We need to copy NodeExtraInfo to all _new_ nodes that are being introduced + // through the replacement of From with To. Otherwise, replacements of a node + // (From) with more complex nodes (To and its operands) may result in lost + // extra info where the root node (To) is insignificant in further propagating + // and using extra info when further lowering to MIR. + // + // In the first step pre-populate the visited set with the nodes reachable + // from the old From node. This avoids copying NodeExtraInfo to parts of the + // DAG that is not new and should be left untouched. + SmallPtrSet Visited; + auto VisitFrom = [&Visited](auto &&Self, SDNode *N) { + if (!Visited.insert(N).second) + return; + for (const SDValue &Op : N->op_values()) + Self(Self, Op.getNode()); + }; + VisitFrom(VisitFrom, From); + // Use of operator[] on the DenseMap may cause an insertion, which invalidates // the iterator, hence the need to make a copy to prevent a use-after-free. NodeExtraInfo Copy = I->second; - SDEI[To] = std::move(Copy); + + // Copy extra info to To and all its transitive operands (that are new). + auto DeepCopyTo = [this, &Copy, &Visited](auto &&Self, SDNode *To) { + if (!Visited.insert(To).second) + return; + SDEI[To] = Copy; + for (const SDValue &Op : To->op_values()) + Self(Self, Op.getNode()); + }; + DeepCopyTo(DeepCopyTo, To); } #ifndef NDEBUG diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp index bf4422b..f6d4ad1 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp @@ -851,6 +851,12 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const { Dbg->print(OS); } else if (getHasDebugValue()) OS << " [NoOfDbgValues>0]"; + + if (const auto *MD = G ? G->getPCSections(this) : nullptr) { + OS << " [pcsections "; + MD->printAsOperand(OS, G->getMachineFunction().getFunction().getParent()); + OS << ']'; + } } } diff --git a/llvm/test/CodeGen/X86/pcsections-atomics.ll b/llvm/test/CodeGen/X86/pcsections-atomics.ll index a2ee8e0..6881cb3 100644 --- a/llvm/test/CodeGen/X86/pcsections-atomics.ll +++ b/llvm/test/CodeGen/X86/pcsections-atomics.ll @@ -683,16 +683,18 @@ define void @atomic8_nand_monotonic(ptr %a) { ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movb %al, %dl -; O0-NEXT: notb %dl ; O0-NEXT: .Lpcsection17: +; O0-NEXT: notb %dl +; O0-NEXT: .Lpcsection18: ; O0-NEXT: orb $-43, %dl +; O0-NEXT: .Lpcsection19: ; O0-NEXT: lock cmpxchgb %dl, (%rcx) -; O0-NEXT: .Lpcsection18: +; O0-NEXT: .Lpcsection20: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection19: +; O0-NEXT: .Lpcsection21: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill -; O0-NEXT: .Lpcsection20: +; O0-NEXT: .Lpcsection22: ; O0-NEXT: jne .LBB16_2 ; O0-NEXT: jmp .LBB16_1 ; O0-NEXT: .LBB16_2: # %atomicrmw.end @@ -708,11 +710,13 @@ define void @atomic8_nand_monotonic(ptr %a) { ; O1-NEXT: .LBB16_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx -; O1-NEXT: notb %cl ; O1-NEXT: .Lpcsection17: +; O1-NEXT: notb %cl +; O1-NEXT: .Lpcsection18: ; O1-NEXT: orb $-43, %cl +; O1-NEXT: .Lpcsection19: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) -; O1-NEXT: .Lpcsection18: +; O1-NEXT: .Lpcsection20: ; O1-NEXT: jne .LBB16_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -727,11 +731,13 @@ define void @atomic8_nand_monotonic(ptr %a) { ; O2-NEXT: .LBB16_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx -; O2-NEXT: notb %cl ; O2-NEXT: .Lpcsection17: +; O2-NEXT: notb %cl +; O2-NEXT: .Lpcsection18: ; O2-NEXT: orb $-43, %cl +; O2-NEXT: .Lpcsection19: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) -; O2-NEXT: .Lpcsection18: +; O2-NEXT: .Lpcsection20: ; O2-NEXT: jne .LBB16_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -746,11 +752,13 @@ define void @atomic8_nand_monotonic(ptr %a) { ; O3-NEXT: .LBB16_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx -; O3-NEXT: notb %cl ; O3-NEXT: .Lpcsection17: +; O3-NEXT: notb %cl +; O3-NEXT: .Lpcsection18: ; O3-NEXT: orb $-43, %cl +; O3-NEXT: .Lpcsection19: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) -; O3-NEXT: .Lpcsection18: +; O3-NEXT: .Lpcsection20: ; O3-NEXT: jne .LBB16_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -767,7 +775,7 @@ define void @atomic8_xchg_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movb $42, %al -; O0-NEXT: .Lpcsection21: +; O0-NEXT: .Lpcsection23: ; O0-NEXT: xchgb %al, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -776,7 +784,7 @@ define void @atomic8_xchg_acquire(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $42, %al -; O1-NEXT: .Lpcsection19: +; O1-NEXT: .Lpcsection21: ; O1-NEXT: xchgb %al, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -785,7 +793,7 @@ define void @atomic8_xchg_acquire(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $42, %al -; O2-NEXT: .Lpcsection19: +; O2-NEXT: .Lpcsection21: ; O2-NEXT: xchgb %al, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -794,7 +802,7 @@ define void @atomic8_xchg_acquire(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $42, %al -; O3-NEXT: .Lpcsection19: +; O3-NEXT: .Lpcsection21: ; O3-NEXT: xchgb %al, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -809,7 +817,7 @@ define void @atomic8_add_acquire(ptr %a) { ; O0-LABEL: atomic8_add_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection22: +; O0-NEXT: .Lpcsection24: ; O0-NEXT: lock addb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -817,7 +825,7 @@ define void @atomic8_add_acquire(ptr %a) { ; O1-LABEL: atomic8_add_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection20: +; O1-NEXT: .Lpcsection22: ; O1-NEXT: lock addb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -825,7 +833,7 @@ define void @atomic8_add_acquire(ptr %a) { ; O2-LABEL: atomic8_add_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection20: +; O2-NEXT: .Lpcsection22: ; O2-NEXT: lock addb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -833,7 +841,7 @@ define void @atomic8_add_acquire(ptr %a) { ; O3-LABEL: atomic8_add_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection20: +; O3-NEXT: .Lpcsection22: ; O3-NEXT: lock addb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -848,7 +856,7 @@ define void @atomic8_sub_acquire(ptr %a) { ; O0-LABEL: atomic8_sub_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection23: +; O0-NEXT: .Lpcsection25: ; O0-NEXT: lock subb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -856,7 +864,7 @@ define void @atomic8_sub_acquire(ptr %a) { ; O1-LABEL: atomic8_sub_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection21: +; O1-NEXT: .Lpcsection23: ; O1-NEXT: lock subb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -864,7 +872,7 @@ define void @atomic8_sub_acquire(ptr %a) { ; O2-LABEL: atomic8_sub_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection21: +; O2-NEXT: .Lpcsection23: ; O2-NEXT: lock subb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -872,7 +880,7 @@ define void @atomic8_sub_acquire(ptr %a) { ; O3-LABEL: atomic8_sub_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection21: +; O3-NEXT: .Lpcsection23: ; O3-NEXT: lock subb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -887,7 +895,7 @@ define void @atomic8_and_acquire(ptr %a) { ; O0-LABEL: atomic8_and_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection24: +; O0-NEXT: .Lpcsection26: ; O0-NEXT: lock andb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -895,7 +903,7 @@ define void @atomic8_and_acquire(ptr %a) { ; O1-LABEL: atomic8_and_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection22: +; O1-NEXT: .Lpcsection24: ; O1-NEXT: lock andb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -903,7 +911,7 @@ define void @atomic8_and_acquire(ptr %a) { ; O2-LABEL: atomic8_and_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection22: +; O2-NEXT: .Lpcsection24: ; O2-NEXT: lock andb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -911,7 +919,7 @@ define void @atomic8_and_acquire(ptr %a) { ; O3-LABEL: atomic8_and_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection22: +; O3-NEXT: .Lpcsection24: ; O3-NEXT: lock andb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -926,7 +934,7 @@ define void @atomic8_or_acquire(ptr %a) { ; O0-LABEL: atomic8_or_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection25: +; O0-NEXT: .Lpcsection27: ; O0-NEXT: lock orb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -934,7 +942,7 @@ define void @atomic8_or_acquire(ptr %a) { ; O1-LABEL: atomic8_or_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection23: +; O1-NEXT: .Lpcsection25: ; O1-NEXT: lock orb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -942,7 +950,7 @@ define void @atomic8_or_acquire(ptr %a) { ; O2-LABEL: atomic8_or_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection23: +; O2-NEXT: .Lpcsection25: ; O2-NEXT: lock orb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -950,7 +958,7 @@ define void @atomic8_or_acquire(ptr %a) { ; O3-LABEL: atomic8_or_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection23: +; O3-NEXT: .Lpcsection25: ; O3-NEXT: lock orb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -965,7 +973,7 @@ define void @atomic8_xor_acquire(ptr %a) { ; O0-LABEL: atomic8_xor_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection26: +; O0-NEXT: .Lpcsection28: ; O0-NEXT: lock xorb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -973,7 +981,7 @@ define void @atomic8_xor_acquire(ptr %a) { ; O1-LABEL: atomic8_xor_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection24: +; O1-NEXT: .Lpcsection26: ; O1-NEXT: lock xorb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -981,7 +989,7 @@ define void @atomic8_xor_acquire(ptr %a) { ; O2-LABEL: atomic8_xor_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection24: +; O2-NEXT: .Lpcsection26: ; O2-NEXT: lock xorb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -989,7 +997,7 @@ define void @atomic8_xor_acquire(ptr %a) { ; O3-LABEL: atomic8_xor_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection24: +; O3-NEXT: .Lpcsection26: ; O3-NEXT: lock xorb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1005,7 +1013,7 @@ define void @atomic8_nand_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection27: +; O0-NEXT: .Lpcsection29: ; O0-NEXT: movb (%rdi), %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: .LBB23_1: # %atomicrmw.start @@ -1013,16 +1021,18 @@ define void @atomic8_nand_acquire(ptr %a) { ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movb %al, %dl +; O0-NEXT: .Lpcsection30: ; O0-NEXT: notb %dl -; O0-NEXT: .Lpcsection28: +; O0-NEXT: .Lpcsection31: ; O0-NEXT: orb $-43, %dl +; O0-NEXT: .Lpcsection32: ; O0-NEXT: lock cmpxchgb %dl, (%rcx) -; O0-NEXT: .Lpcsection29: +; O0-NEXT: .Lpcsection33: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection30: +; O0-NEXT: .Lpcsection34: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill -; O0-NEXT: .Lpcsection31: +; O0-NEXT: .Lpcsection35: ; O0-NEXT: jne .LBB23_2 ; O0-NEXT: jmp .LBB23_1 ; O0-NEXT: .LBB23_2: # %atomicrmw.end @@ -1032,17 +1042,19 @@ define void @atomic8_nand_acquire(ptr %a) { ; O1-LABEL: atomic8_nand_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection25: +; O1-NEXT: .Lpcsection27: ; O1-NEXT: movzbl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB23_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection28: ; O1-NEXT: notb %cl -; O1-NEXT: .Lpcsection26: +; O1-NEXT: .Lpcsection29: ; O1-NEXT: orb $-43, %cl +; O1-NEXT: .Lpcsection30: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) -; O1-NEXT: .Lpcsection27: +; O1-NEXT: .Lpcsection31: ; O1-NEXT: jne .LBB23_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -1051,17 +1063,19 @@ define void @atomic8_nand_acquire(ptr %a) { ; O2-LABEL: atomic8_nand_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection25: +; O2-NEXT: .Lpcsection27: ; O2-NEXT: movzbl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB23_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection28: ; O2-NEXT: notb %cl -; O2-NEXT: .Lpcsection26: +; O2-NEXT: .Lpcsection29: ; O2-NEXT: orb $-43, %cl +; O2-NEXT: .Lpcsection30: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) -; O2-NEXT: .Lpcsection27: +; O2-NEXT: .Lpcsection31: ; O2-NEXT: jne .LBB23_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -1070,17 +1084,19 @@ define void @atomic8_nand_acquire(ptr %a) { ; O3-LABEL: atomic8_nand_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection25: +; O3-NEXT: .Lpcsection27: ; O3-NEXT: movzbl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB23_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection28: ; O3-NEXT: notb %cl -; O3-NEXT: .Lpcsection26: +; O3-NEXT: .Lpcsection29: ; O3-NEXT: orb $-43, %cl +; O3-NEXT: .Lpcsection30: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) -; O3-NEXT: .Lpcsection27: +; O3-NEXT: .Lpcsection31: ; O3-NEXT: jne .LBB23_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -1097,7 +1113,7 @@ define void @atomic8_xchg_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movb $42, %al -; O0-NEXT: .Lpcsection32: +; O0-NEXT: .Lpcsection36: ; O0-NEXT: xchgb %al, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1106,7 +1122,7 @@ define void @atomic8_xchg_release(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $42, %al -; O1-NEXT: .Lpcsection28: +; O1-NEXT: .Lpcsection32: ; O1-NEXT: xchgb %al, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1115,7 +1131,7 @@ define void @atomic8_xchg_release(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $42, %al -; O2-NEXT: .Lpcsection28: +; O2-NEXT: .Lpcsection32: ; O2-NEXT: xchgb %al, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1124,7 +1140,7 @@ define void @atomic8_xchg_release(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $42, %al -; O3-NEXT: .Lpcsection28: +; O3-NEXT: .Lpcsection32: ; O3-NEXT: xchgb %al, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1139,7 +1155,7 @@ define void @atomic8_add_release(ptr %a) { ; O0-LABEL: atomic8_add_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection33: +; O0-NEXT: .Lpcsection37: ; O0-NEXT: lock addb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1147,7 +1163,7 @@ define void @atomic8_add_release(ptr %a) { ; O1-LABEL: atomic8_add_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection29: +; O1-NEXT: .Lpcsection33: ; O1-NEXT: lock addb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1155,7 +1171,7 @@ define void @atomic8_add_release(ptr %a) { ; O2-LABEL: atomic8_add_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection29: +; O2-NEXT: .Lpcsection33: ; O2-NEXT: lock addb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1163,7 +1179,7 @@ define void @atomic8_add_release(ptr %a) { ; O3-LABEL: atomic8_add_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection29: +; O3-NEXT: .Lpcsection33: ; O3-NEXT: lock addb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1178,7 +1194,7 @@ define void @atomic8_sub_release(ptr %a) { ; O0-LABEL: atomic8_sub_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection34: +; O0-NEXT: .Lpcsection38: ; O0-NEXT: lock subb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1186,7 +1202,7 @@ define void @atomic8_sub_release(ptr %a) { ; O1-LABEL: atomic8_sub_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection30: +; O1-NEXT: .Lpcsection34: ; O1-NEXT: lock subb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1194,7 +1210,7 @@ define void @atomic8_sub_release(ptr %a) { ; O2-LABEL: atomic8_sub_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection30: +; O2-NEXT: .Lpcsection34: ; O2-NEXT: lock subb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1202,7 +1218,7 @@ define void @atomic8_sub_release(ptr %a) { ; O3-LABEL: atomic8_sub_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection30: +; O3-NEXT: .Lpcsection34: ; O3-NEXT: lock subb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1217,7 +1233,7 @@ define void @atomic8_and_release(ptr %a) { ; O0-LABEL: atomic8_and_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection35: +; O0-NEXT: .Lpcsection39: ; O0-NEXT: lock andb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1225,7 +1241,7 @@ define void @atomic8_and_release(ptr %a) { ; O1-LABEL: atomic8_and_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection31: +; O1-NEXT: .Lpcsection35: ; O1-NEXT: lock andb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1233,7 +1249,7 @@ define void @atomic8_and_release(ptr %a) { ; O2-LABEL: atomic8_and_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection31: +; O2-NEXT: .Lpcsection35: ; O2-NEXT: lock andb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1241,7 +1257,7 @@ define void @atomic8_and_release(ptr %a) { ; O3-LABEL: atomic8_and_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection31: +; O3-NEXT: .Lpcsection35: ; O3-NEXT: lock andb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1256,7 +1272,7 @@ define void @atomic8_or_release(ptr %a) { ; O0-LABEL: atomic8_or_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection36: +; O0-NEXT: .Lpcsection40: ; O0-NEXT: lock orb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1264,7 +1280,7 @@ define void @atomic8_or_release(ptr %a) { ; O1-LABEL: atomic8_or_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection32: +; O1-NEXT: .Lpcsection36: ; O1-NEXT: lock orb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1272,7 +1288,7 @@ define void @atomic8_or_release(ptr %a) { ; O2-LABEL: atomic8_or_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection32: +; O2-NEXT: .Lpcsection36: ; O2-NEXT: lock orb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1280,7 +1296,7 @@ define void @atomic8_or_release(ptr %a) { ; O3-LABEL: atomic8_or_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection32: +; O3-NEXT: .Lpcsection36: ; O3-NEXT: lock orb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1295,7 +1311,7 @@ define void @atomic8_xor_release(ptr %a) { ; O0-LABEL: atomic8_xor_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection37: +; O0-NEXT: .Lpcsection41: ; O0-NEXT: lock xorb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1303,7 +1319,7 @@ define void @atomic8_xor_release(ptr %a) { ; O1-LABEL: atomic8_xor_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection33: +; O1-NEXT: .Lpcsection37: ; O1-NEXT: lock xorb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1311,7 +1327,7 @@ define void @atomic8_xor_release(ptr %a) { ; O2-LABEL: atomic8_xor_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection33: +; O2-NEXT: .Lpcsection37: ; O2-NEXT: lock xorb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1319,7 +1335,7 @@ define void @atomic8_xor_release(ptr %a) { ; O3-LABEL: atomic8_xor_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection33: +; O3-NEXT: .Lpcsection37: ; O3-NEXT: lock xorb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1335,7 +1351,7 @@ define void @atomic8_nand_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection38: +; O0-NEXT: .Lpcsection42: ; O0-NEXT: movb (%rdi), %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: .LBB30_1: # %atomicrmw.start @@ -1343,16 +1359,18 @@ define void @atomic8_nand_release(ptr %a) { ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movb %al, %dl +; O0-NEXT: .Lpcsection43: ; O0-NEXT: notb %dl -; O0-NEXT: .Lpcsection39: +; O0-NEXT: .Lpcsection44: ; O0-NEXT: orb $-43, %dl +; O0-NEXT: .Lpcsection45: ; O0-NEXT: lock cmpxchgb %dl, (%rcx) -; O0-NEXT: .Lpcsection40: +; O0-NEXT: .Lpcsection46: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection41: +; O0-NEXT: .Lpcsection47: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill -; O0-NEXT: .Lpcsection42: +; O0-NEXT: .Lpcsection48: ; O0-NEXT: jne .LBB30_2 ; O0-NEXT: jmp .LBB30_1 ; O0-NEXT: .LBB30_2: # %atomicrmw.end @@ -1362,17 +1380,19 @@ define void @atomic8_nand_release(ptr %a) { ; O1-LABEL: atomic8_nand_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection34: +; O1-NEXT: .Lpcsection38: ; O1-NEXT: movzbl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB30_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection39: ; O1-NEXT: notb %cl -; O1-NEXT: .Lpcsection35: +; O1-NEXT: .Lpcsection40: ; O1-NEXT: orb $-43, %cl +; O1-NEXT: .Lpcsection41: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) -; O1-NEXT: .Lpcsection36: +; O1-NEXT: .Lpcsection42: ; O1-NEXT: jne .LBB30_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -1381,17 +1401,19 @@ define void @atomic8_nand_release(ptr %a) { ; O2-LABEL: atomic8_nand_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection34: +; O2-NEXT: .Lpcsection38: ; O2-NEXT: movzbl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB30_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection39: ; O2-NEXT: notb %cl -; O2-NEXT: .Lpcsection35: +; O2-NEXT: .Lpcsection40: ; O2-NEXT: orb $-43, %cl +; O2-NEXT: .Lpcsection41: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) -; O2-NEXT: .Lpcsection36: +; O2-NEXT: .Lpcsection42: ; O2-NEXT: jne .LBB30_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -1400,17 +1422,19 @@ define void @atomic8_nand_release(ptr %a) { ; O3-LABEL: atomic8_nand_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection34: +; O3-NEXT: .Lpcsection38: ; O3-NEXT: movzbl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB30_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection39: ; O3-NEXT: notb %cl -; O3-NEXT: .Lpcsection35: +; O3-NEXT: .Lpcsection40: ; O3-NEXT: orb $-43, %cl +; O3-NEXT: .Lpcsection41: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) -; O3-NEXT: .Lpcsection36: +; O3-NEXT: .Lpcsection42: ; O3-NEXT: jne .LBB30_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -1427,7 +1451,7 @@ define void @atomic8_xchg_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movb $42, %al -; O0-NEXT: .Lpcsection43: +; O0-NEXT: .Lpcsection49: ; O0-NEXT: xchgb %al, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1436,7 +1460,7 @@ define void @atomic8_xchg_acq_rel(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $42, %al -; O1-NEXT: .Lpcsection37: +; O1-NEXT: .Lpcsection43: ; O1-NEXT: xchgb %al, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1445,7 +1469,7 @@ define void @atomic8_xchg_acq_rel(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $42, %al -; O2-NEXT: .Lpcsection37: +; O2-NEXT: .Lpcsection43: ; O2-NEXT: xchgb %al, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1454,7 +1478,7 @@ define void @atomic8_xchg_acq_rel(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $42, %al -; O3-NEXT: .Lpcsection37: +; O3-NEXT: .Lpcsection43: ; O3-NEXT: xchgb %al, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1469,7 +1493,7 @@ define void @atomic8_add_acq_rel(ptr %a) { ; O0-LABEL: atomic8_add_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection44: +; O0-NEXT: .Lpcsection50: ; O0-NEXT: lock addb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1477,7 +1501,7 @@ define void @atomic8_add_acq_rel(ptr %a) { ; O1-LABEL: atomic8_add_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection38: +; O1-NEXT: .Lpcsection44: ; O1-NEXT: lock addb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1485,7 +1509,7 @@ define void @atomic8_add_acq_rel(ptr %a) { ; O2-LABEL: atomic8_add_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection38: +; O2-NEXT: .Lpcsection44: ; O2-NEXT: lock addb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1493,7 +1517,7 @@ define void @atomic8_add_acq_rel(ptr %a) { ; O3-LABEL: atomic8_add_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection38: +; O3-NEXT: .Lpcsection44: ; O3-NEXT: lock addb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1508,7 +1532,7 @@ define void @atomic8_sub_acq_rel(ptr %a) { ; O0-LABEL: atomic8_sub_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection45: +; O0-NEXT: .Lpcsection51: ; O0-NEXT: lock subb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1516,7 +1540,7 @@ define void @atomic8_sub_acq_rel(ptr %a) { ; O1-LABEL: atomic8_sub_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection39: +; O1-NEXT: .Lpcsection45: ; O1-NEXT: lock subb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1524,7 +1548,7 @@ define void @atomic8_sub_acq_rel(ptr %a) { ; O2-LABEL: atomic8_sub_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection39: +; O2-NEXT: .Lpcsection45: ; O2-NEXT: lock subb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1532,7 +1556,7 @@ define void @atomic8_sub_acq_rel(ptr %a) { ; O3-LABEL: atomic8_sub_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection39: +; O3-NEXT: .Lpcsection45: ; O3-NEXT: lock subb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1547,7 +1571,7 @@ define void @atomic8_and_acq_rel(ptr %a) { ; O0-LABEL: atomic8_and_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection46: +; O0-NEXT: .Lpcsection52: ; O0-NEXT: lock andb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1555,7 +1579,7 @@ define void @atomic8_and_acq_rel(ptr %a) { ; O1-LABEL: atomic8_and_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection40: +; O1-NEXT: .Lpcsection46: ; O1-NEXT: lock andb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1563,7 +1587,7 @@ define void @atomic8_and_acq_rel(ptr %a) { ; O2-LABEL: atomic8_and_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection40: +; O2-NEXT: .Lpcsection46: ; O2-NEXT: lock andb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1571,7 +1595,7 @@ define void @atomic8_and_acq_rel(ptr %a) { ; O3-LABEL: atomic8_and_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection40: +; O3-NEXT: .Lpcsection46: ; O3-NEXT: lock andb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1586,7 +1610,7 @@ define void @atomic8_or_acq_rel(ptr %a) { ; O0-LABEL: atomic8_or_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection47: +; O0-NEXT: .Lpcsection53: ; O0-NEXT: lock orb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1594,7 +1618,7 @@ define void @atomic8_or_acq_rel(ptr %a) { ; O1-LABEL: atomic8_or_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection41: +; O1-NEXT: .Lpcsection47: ; O1-NEXT: lock orb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1602,7 +1626,7 @@ define void @atomic8_or_acq_rel(ptr %a) { ; O2-LABEL: atomic8_or_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection41: +; O2-NEXT: .Lpcsection47: ; O2-NEXT: lock orb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1610,7 +1634,7 @@ define void @atomic8_or_acq_rel(ptr %a) { ; O3-LABEL: atomic8_or_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection41: +; O3-NEXT: .Lpcsection47: ; O3-NEXT: lock orb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1625,7 +1649,7 @@ define void @atomic8_xor_acq_rel(ptr %a) { ; O0-LABEL: atomic8_xor_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection48: +; O0-NEXT: .Lpcsection54: ; O0-NEXT: lock xorb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1633,7 +1657,7 @@ define void @atomic8_xor_acq_rel(ptr %a) { ; O1-LABEL: atomic8_xor_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection42: +; O1-NEXT: .Lpcsection48: ; O1-NEXT: lock xorb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1641,7 +1665,7 @@ define void @atomic8_xor_acq_rel(ptr %a) { ; O2-LABEL: atomic8_xor_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection42: +; O2-NEXT: .Lpcsection48: ; O2-NEXT: lock xorb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1649,7 +1673,7 @@ define void @atomic8_xor_acq_rel(ptr %a) { ; O3-LABEL: atomic8_xor_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection42: +; O3-NEXT: .Lpcsection48: ; O3-NEXT: lock xorb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1665,7 +1689,7 @@ define void @atomic8_nand_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection49: +; O0-NEXT: .Lpcsection55: ; O0-NEXT: movb (%rdi), %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: .LBB37_1: # %atomicrmw.start @@ -1673,16 +1697,18 @@ define void @atomic8_nand_acq_rel(ptr %a) { ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movb %al, %dl +; O0-NEXT: .Lpcsection56: ; O0-NEXT: notb %dl -; O0-NEXT: .Lpcsection50: +; O0-NEXT: .Lpcsection57: ; O0-NEXT: orb $-43, %dl +; O0-NEXT: .Lpcsection58: ; O0-NEXT: lock cmpxchgb %dl, (%rcx) -; O0-NEXT: .Lpcsection51: +; O0-NEXT: .Lpcsection59: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection52: +; O0-NEXT: .Lpcsection60: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill -; O0-NEXT: .Lpcsection53: +; O0-NEXT: .Lpcsection61: ; O0-NEXT: jne .LBB37_2 ; O0-NEXT: jmp .LBB37_1 ; O0-NEXT: .LBB37_2: # %atomicrmw.end @@ -1692,17 +1718,19 @@ define void @atomic8_nand_acq_rel(ptr %a) { ; O1-LABEL: atomic8_nand_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection43: +; O1-NEXT: .Lpcsection49: ; O1-NEXT: movzbl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB37_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection50: ; O1-NEXT: notb %cl -; O1-NEXT: .Lpcsection44: +; O1-NEXT: .Lpcsection51: ; O1-NEXT: orb $-43, %cl +; O1-NEXT: .Lpcsection52: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) -; O1-NEXT: .Lpcsection45: +; O1-NEXT: .Lpcsection53: ; O1-NEXT: jne .LBB37_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -1711,17 +1739,19 @@ define void @atomic8_nand_acq_rel(ptr %a) { ; O2-LABEL: atomic8_nand_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection43: +; O2-NEXT: .Lpcsection49: ; O2-NEXT: movzbl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB37_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection50: ; O2-NEXT: notb %cl -; O2-NEXT: .Lpcsection44: +; O2-NEXT: .Lpcsection51: ; O2-NEXT: orb $-43, %cl +; O2-NEXT: .Lpcsection52: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) -; O2-NEXT: .Lpcsection45: +; O2-NEXT: .Lpcsection53: ; O2-NEXT: jne .LBB37_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -1730,17 +1760,19 @@ define void @atomic8_nand_acq_rel(ptr %a) { ; O3-LABEL: atomic8_nand_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection43: +; O3-NEXT: .Lpcsection49: ; O3-NEXT: movzbl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB37_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection50: ; O3-NEXT: notb %cl -; O3-NEXT: .Lpcsection44: +; O3-NEXT: .Lpcsection51: ; O3-NEXT: orb $-43, %cl +; O3-NEXT: .Lpcsection52: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) -; O3-NEXT: .Lpcsection45: +; O3-NEXT: .Lpcsection53: ; O3-NEXT: jne .LBB37_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -1757,7 +1789,7 @@ define void @atomic8_xchg_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movb $42, %al -; O0-NEXT: .Lpcsection54: +; O0-NEXT: .Lpcsection62: ; O0-NEXT: xchgb %al, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1766,7 +1798,7 @@ define void @atomic8_xchg_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $42, %al -; O1-NEXT: .Lpcsection46: +; O1-NEXT: .Lpcsection54: ; O1-NEXT: xchgb %al, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1775,7 +1807,7 @@ define void @atomic8_xchg_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $42, %al -; O2-NEXT: .Lpcsection46: +; O2-NEXT: .Lpcsection54: ; O2-NEXT: xchgb %al, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1784,7 +1816,7 @@ define void @atomic8_xchg_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $42, %al -; O3-NEXT: .Lpcsection46: +; O3-NEXT: .Lpcsection54: ; O3-NEXT: xchgb %al, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1799,7 +1831,7 @@ define void @atomic8_add_seq_cst(ptr %a) { ; O0-LABEL: atomic8_add_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection55: +; O0-NEXT: .Lpcsection63: ; O0-NEXT: lock addb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1807,7 +1839,7 @@ define void @atomic8_add_seq_cst(ptr %a) { ; O1-LABEL: atomic8_add_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection47: +; O1-NEXT: .Lpcsection55: ; O1-NEXT: lock addb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1815,7 +1847,7 @@ define void @atomic8_add_seq_cst(ptr %a) { ; O2-LABEL: atomic8_add_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection47: +; O2-NEXT: .Lpcsection55: ; O2-NEXT: lock addb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1823,7 +1855,7 @@ define void @atomic8_add_seq_cst(ptr %a) { ; O3-LABEL: atomic8_add_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection47: +; O3-NEXT: .Lpcsection55: ; O3-NEXT: lock addb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1838,7 +1870,7 @@ define void @atomic8_sub_seq_cst(ptr %a) { ; O0-LABEL: atomic8_sub_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection56: +; O0-NEXT: .Lpcsection64: ; O0-NEXT: lock subb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1846,7 +1878,7 @@ define void @atomic8_sub_seq_cst(ptr %a) { ; O1-LABEL: atomic8_sub_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection48: +; O1-NEXT: .Lpcsection56: ; O1-NEXT: lock subb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1854,7 +1886,7 @@ define void @atomic8_sub_seq_cst(ptr %a) { ; O2-LABEL: atomic8_sub_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection48: +; O2-NEXT: .Lpcsection56: ; O2-NEXT: lock subb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1862,7 +1894,7 @@ define void @atomic8_sub_seq_cst(ptr %a) { ; O3-LABEL: atomic8_sub_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection48: +; O3-NEXT: .Lpcsection56: ; O3-NEXT: lock subb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1877,7 +1909,7 @@ define void @atomic8_and_seq_cst(ptr %a) { ; O0-LABEL: atomic8_and_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection57: +; O0-NEXT: .Lpcsection65: ; O0-NEXT: lock andb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1885,7 +1917,7 @@ define void @atomic8_and_seq_cst(ptr %a) { ; O1-LABEL: atomic8_and_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection49: +; O1-NEXT: .Lpcsection57: ; O1-NEXT: lock andb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1893,7 +1925,7 @@ define void @atomic8_and_seq_cst(ptr %a) { ; O2-LABEL: atomic8_and_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection49: +; O2-NEXT: .Lpcsection57: ; O2-NEXT: lock andb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1901,7 +1933,7 @@ define void @atomic8_and_seq_cst(ptr %a) { ; O3-LABEL: atomic8_and_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection49: +; O3-NEXT: .Lpcsection57: ; O3-NEXT: lock andb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1916,7 +1948,7 @@ define void @atomic8_or_seq_cst(ptr %a) { ; O0-LABEL: atomic8_or_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection58: +; O0-NEXT: .Lpcsection66: ; O0-NEXT: lock orb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1924,7 +1956,7 @@ define void @atomic8_or_seq_cst(ptr %a) { ; O1-LABEL: atomic8_or_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection50: +; O1-NEXT: .Lpcsection58: ; O1-NEXT: lock orb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1932,7 +1964,7 @@ define void @atomic8_or_seq_cst(ptr %a) { ; O2-LABEL: atomic8_or_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection50: +; O2-NEXT: .Lpcsection58: ; O2-NEXT: lock orb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1940,7 +1972,7 @@ define void @atomic8_or_seq_cst(ptr %a) { ; O3-LABEL: atomic8_or_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection50: +; O3-NEXT: .Lpcsection58: ; O3-NEXT: lock orb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1955,7 +1987,7 @@ define void @atomic8_xor_seq_cst(ptr %a) { ; O0-LABEL: atomic8_xor_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection59: +; O0-NEXT: .Lpcsection67: ; O0-NEXT: lock xorb $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -1963,7 +1995,7 @@ define void @atomic8_xor_seq_cst(ptr %a) { ; O1-LABEL: atomic8_xor_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection51: +; O1-NEXT: .Lpcsection59: ; O1-NEXT: lock xorb $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -1971,7 +2003,7 @@ define void @atomic8_xor_seq_cst(ptr %a) { ; O2-LABEL: atomic8_xor_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection51: +; O2-NEXT: .Lpcsection59: ; O2-NEXT: lock xorb $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -1979,7 +2011,7 @@ define void @atomic8_xor_seq_cst(ptr %a) { ; O3-LABEL: atomic8_xor_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection51: +; O3-NEXT: .Lpcsection59: ; O3-NEXT: lock xorb $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -1995,7 +2027,7 @@ define void @atomic8_nand_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection60: +; O0-NEXT: .Lpcsection68: ; O0-NEXT: movb (%rdi), %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: .LBB44_1: # %atomicrmw.start @@ -2003,16 +2035,18 @@ define void @atomic8_nand_seq_cst(ptr %a) { ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movb %al, %dl +; O0-NEXT: .Lpcsection69: ; O0-NEXT: notb %dl -; O0-NEXT: .Lpcsection61: +; O0-NEXT: .Lpcsection70: ; O0-NEXT: orb $-43, %dl +; O0-NEXT: .Lpcsection71: ; O0-NEXT: lock cmpxchgb %dl, (%rcx) -; O0-NEXT: .Lpcsection62: +; O0-NEXT: .Lpcsection72: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection63: +; O0-NEXT: .Lpcsection73: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill -; O0-NEXT: .Lpcsection64: +; O0-NEXT: .Lpcsection74: ; O0-NEXT: jne .LBB44_2 ; O0-NEXT: jmp .LBB44_1 ; O0-NEXT: .LBB44_2: # %atomicrmw.end @@ -2022,17 +2056,19 @@ define void @atomic8_nand_seq_cst(ptr %a) { ; O1-LABEL: atomic8_nand_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection52: +; O1-NEXT: .Lpcsection60: ; O1-NEXT: movzbl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB44_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection61: ; O1-NEXT: notb %cl -; O1-NEXT: .Lpcsection53: +; O1-NEXT: .Lpcsection62: ; O1-NEXT: orb $-43, %cl +; O1-NEXT: .Lpcsection63: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) -; O1-NEXT: .Lpcsection54: +; O1-NEXT: .Lpcsection64: ; O1-NEXT: jne .LBB44_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -2041,17 +2077,19 @@ define void @atomic8_nand_seq_cst(ptr %a) { ; O2-LABEL: atomic8_nand_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection52: +; O2-NEXT: .Lpcsection60: ; O2-NEXT: movzbl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB44_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection61: ; O2-NEXT: notb %cl -; O2-NEXT: .Lpcsection53: +; O2-NEXT: .Lpcsection62: ; O2-NEXT: orb $-43, %cl +; O2-NEXT: .Lpcsection63: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) -; O2-NEXT: .Lpcsection54: +; O2-NEXT: .Lpcsection64: ; O2-NEXT: jne .LBB44_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -2060,17 +2098,19 @@ define void @atomic8_nand_seq_cst(ptr %a) { ; O3-LABEL: atomic8_nand_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection52: +; O3-NEXT: .Lpcsection60: ; O3-NEXT: movzbl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB44_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection61: ; O3-NEXT: notb %cl -; O3-NEXT: .Lpcsection53: +; O3-NEXT: .Lpcsection62: ; O3-NEXT: orb $-43, %cl +; O3-NEXT: .Lpcsection63: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) -; O3-NEXT: .Lpcsection54: +; O3-NEXT: .Lpcsection64: ; O3-NEXT: jne .LBB44_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -2089,14 +2129,17 @@ define void @atomic8_cas_monotonic(ptr %a) { ; O0-NEXT: movb $42, %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: movb $1, %cl +; O0-NEXT: .Lpcsection75: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection65: +; O0-NEXT: .Lpcsection76: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection77: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection66: +; O0-NEXT: .Lpcsection78: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection79: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2106,10 +2149,13 @@ define void @atomic8_cas_monotonic(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $1, %cl ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection65: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection66: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection67: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2119,10 +2165,13 @@ define void @atomic8_cas_monotonic(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $1, %cl ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection65: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection66: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection67: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2132,10 +2181,13 @@ define void @atomic8_cas_monotonic(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $1, %cl ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection65: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection66: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection67: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2155,14 +2207,17 @@ define void @atomic8_cas_acquire(ptr %a) { ; O0-NEXT: movb $42, %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: movb $1, %cl +; O0-NEXT: .Lpcsection80: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection67: +; O0-NEXT: .Lpcsection81: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection82: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection68: +; O0-NEXT: .Lpcsection83: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection84: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2172,10 +2227,13 @@ define void @atomic8_cas_acquire(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $1, %cl ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection68: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection69: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection70: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2185,10 +2243,13 @@ define void @atomic8_cas_acquire(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $1, %cl ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection68: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection69: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection70: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2198,10 +2259,13 @@ define void @atomic8_cas_acquire(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $1, %cl ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection68: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection69: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection70: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2221,14 +2285,17 @@ define void @atomic8_cas_release(ptr %a) { ; O0-NEXT: movb $42, %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: movb $1, %cl +; O0-NEXT: .Lpcsection85: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection69: +; O0-NEXT: .Lpcsection86: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection87: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection70: +; O0-NEXT: .Lpcsection88: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection89: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2238,10 +2305,13 @@ define void @atomic8_cas_release(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $1, %cl ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection71: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection72: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection73: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2251,10 +2321,13 @@ define void @atomic8_cas_release(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $1, %cl ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection71: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection72: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection73: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2264,10 +2337,13 @@ define void @atomic8_cas_release(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $1, %cl ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection71: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection72: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection73: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2287,14 +2363,17 @@ define void @atomic8_cas_acq_rel(ptr %a) { ; O0-NEXT: movb $42, %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: movb $1, %cl +; O0-NEXT: .Lpcsection90: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection71: +; O0-NEXT: .Lpcsection91: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection92: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection72: +; O0-NEXT: .Lpcsection93: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection94: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2304,10 +2383,13 @@ define void @atomic8_cas_acq_rel(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $1, %cl ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection74: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection75: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection76: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2317,10 +2399,13 @@ define void @atomic8_cas_acq_rel(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $1, %cl ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection74: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection75: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection76: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2330,10 +2415,13 @@ define void @atomic8_cas_acq_rel(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $1, %cl ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection74: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection75: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection76: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2353,14 +2441,17 @@ define void @atomic8_cas_seq_cst(ptr %a) { ; O0-NEXT: movb $42, %al ; O0-NEXT: movb %al, {{[-0-9]+}}(%r{{[sb]}}p) # 1-byte Spill ; O0-NEXT: movb $1, %cl +; O0-NEXT: .Lpcsection95: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection73: +; O0-NEXT: .Lpcsection96: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection97: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) -; O0-NEXT: .Lpcsection74: +; O0-NEXT: .Lpcsection98: ; O0-NEXT: # kill: def $dl killed $al ; O0-NEXT: movb {{[-0-9]+}}(%r{{[sb]}}p), %al # 1-byte Reload +; O0-NEXT: .Lpcsection99: ; O0-NEXT: lock cmpxchgb %cl, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2370,10 +2461,13 @@ define void @atomic8_cas_seq_cst(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movb $1, %cl ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection77: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection78: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movb $42, %al +; O1-NEXT: .Lpcsection79: ; O1-NEXT: lock cmpxchgb %cl, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2383,10 +2477,13 @@ define void @atomic8_cas_seq_cst(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movb $1, %cl ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection77: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection78: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movb $42, %al +; O2-NEXT: .Lpcsection79: ; O2-NEXT: lock cmpxchgb %cl, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2396,10 +2493,13 @@ define void @atomic8_cas_seq_cst(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movb $1, %cl ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection77: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection78: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movb $42, %al +; O3-NEXT: .Lpcsection79: ; O3-NEXT: lock cmpxchgb %cl, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2416,7 +2516,7 @@ define i16 @atomic16_load_unordered(ptr %a) { ; O0-LABEL: atomic16_load_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection75: +; O0-NEXT: .Lpcsection100: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2424,7 +2524,7 @@ define i16 @atomic16_load_unordered(ptr %a) { ; O1-LABEL: atomic16_load_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection55: +; O1-NEXT: .Lpcsection80: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2432,7 +2532,7 @@ define i16 @atomic16_load_unordered(ptr %a) { ; O2-LABEL: atomic16_load_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection55: +; O2-NEXT: .Lpcsection80: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2440,7 +2540,7 @@ define i16 @atomic16_load_unordered(ptr %a) { ; O3-LABEL: atomic16_load_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection55: +; O3-NEXT: .Lpcsection80: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2455,7 +2555,7 @@ define i16 @atomic16_load_monotonic(ptr %a) { ; O0-LABEL: atomic16_load_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection76: +; O0-NEXT: .Lpcsection101: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2463,7 +2563,7 @@ define i16 @atomic16_load_monotonic(ptr %a) { ; O1-LABEL: atomic16_load_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection56: +; O1-NEXT: .Lpcsection81: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2471,7 +2571,7 @@ define i16 @atomic16_load_monotonic(ptr %a) { ; O2-LABEL: atomic16_load_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection56: +; O2-NEXT: .Lpcsection81: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2479,7 +2579,7 @@ define i16 @atomic16_load_monotonic(ptr %a) { ; O3-LABEL: atomic16_load_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection56: +; O3-NEXT: .Lpcsection81: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2494,7 +2594,7 @@ define i16 @atomic16_load_acquire(ptr %a) { ; O0-LABEL: atomic16_load_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection77: +; O0-NEXT: .Lpcsection102: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2502,7 +2602,7 @@ define i16 @atomic16_load_acquire(ptr %a) { ; O1-LABEL: atomic16_load_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection57: +; O1-NEXT: .Lpcsection82: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2510,7 +2610,7 @@ define i16 @atomic16_load_acquire(ptr %a) { ; O2-LABEL: atomic16_load_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection57: +; O2-NEXT: .Lpcsection82: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2518,7 +2618,7 @@ define i16 @atomic16_load_acquire(ptr %a) { ; O3-LABEL: atomic16_load_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection57: +; O3-NEXT: .Lpcsection82: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2533,7 +2633,7 @@ define i16 @atomic16_load_seq_cst(ptr %a) { ; O0-LABEL: atomic16_load_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection78: +; O0-NEXT: .Lpcsection103: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2541,7 +2641,7 @@ define i16 @atomic16_load_seq_cst(ptr %a) { ; O1-LABEL: atomic16_load_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection58: +; O1-NEXT: .Lpcsection83: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2549,7 +2649,7 @@ define i16 @atomic16_load_seq_cst(ptr %a) { ; O2-LABEL: atomic16_load_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection58: +; O2-NEXT: .Lpcsection83: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2557,7 +2657,7 @@ define i16 @atomic16_load_seq_cst(ptr %a) { ; O3-LABEL: atomic16_load_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection58: +; O3-NEXT: .Lpcsection83: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2572,7 +2672,7 @@ define void @atomic16_store_unordered(ptr %a) { ; O0-LABEL: atomic16_store_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection79: +; O0-NEXT: .Lpcsection104: ; O0-NEXT: movw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2580,7 +2680,7 @@ define void @atomic16_store_unordered(ptr %a) { ; O1-LABEL: atomic16_store_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection59: +; O1-NEXT: .Lpcsection84: ; O1-NEXT: movw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2588,7 +2688,7 @@ define void @atomic16_store_unordered(ptr %a) { ; O2-LABEL: atomic16_store_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection59: +; O2-NEXT: .Lpcsection84: ; O2-NEXT: movw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2596,7 +2696,7 @@ define void @atomic16_store_unordered(ptr %a) { ; O3-LABEL: atomic16_store_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection59: +; O3-NEXT: .Lpcsection84: ; O3-NEXT: movw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2611,7 +2711,7 @@ define void @atomic16_store_monotonic(ptr %a) { ; O0-LABEL: atomic16_store_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection80: +; O0-NEXT: .Lpcsection105: ; O0-NEXT: movw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2619,7 +2719,7 @@ define void @atomic16_store_monotonic(ptr %a) { ; O1-LABEL: atomic16_store_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection60: +; O1-NEXT: .Lpcsection85: ; O1-NEXT: movw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2627,7 +2727,7 @@ define void @atomic16_store_monotonic(ptr %a) { ; O2-LABEL: atomic16_store_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection60: +; O2-NEXT: .Lpcsection85: ; O2-NEXT: movw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2635,7 +2735,7 @@ define void @atomic16_store_monotonic(ptr %a) { ; O3-LABEL: atomic16_store_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection60: +; O3-NEXT: .Lpcsection85: ; O3-NEXT: movw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2650,7 +2750,7 @@ define void @atomic16_store_release(ptr %a) { ; O0-LABEL: atomic16_store_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection81: +; O0-NEXT: .Lpcsection106: ; O0-NEXT: movw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2658,7 +2758,7 @@ define void @atomic16_store_release(ptr %a) { ; O1-LABEL: atomic16_store_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection61: +; O1-NEXT: .Lpcsection86: ; O1-NEXT: movw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2666,7 +2766,7 @@ define void @atomic16_store_release(ptr %a) { ; O2-LABEL: atomic16_store_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection61: +; O2-NEXT: .Lpcsection86: ; O2-NEXT: movw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2674,7 +2774,7 @@ define void @atomic16_store_release(ptr %a) { ; O3-LABEL: atomic16_store_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection61: +; O3-NEXT: .Lpcsection86: ; O3-NEXT: movw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2690,7 +2790,7 @@ define void @atomic16_store_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection82: +; O0-NEXT: .Lpcsection107: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2699,7 +2799,7 @@ define void @atomic16_store_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection62: +; O1-NEXT: .Lpcsection87: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2708,7 +2808,7 @@ define void @atomic16_store_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection62: +; O2-NEXT: .Lpcsection87: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2717,7 +2817,7 @@ define void @atomic16_store_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection62: +; O3-NEXT: .Lpcsection87: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2733,7 +2833,7 @@ define void @atomic16_xchg_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection83: +; O0-NEXT: .Lpcsection108: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2742,7 +2842,7 @@ define void @atomic16_xchg_monotonic(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection63: +; O1-NEXT: .Lpcsection88: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2751,7 +2851,7 @@ define void @atomic16_xchg_monotonic(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection63: +; O2-NEXT: .Lpcsection88: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2760,7 +2860,7 @@ define void @atomic16_xchg_monotonic(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection63: +; O3-NEXT: .Lpcsection88: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2775,7 +2875,7 @@ define void @atomic16_add_monotonic(ptr %a) { ; O0-LABEL: atomic16_add_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection84: +; O0-NEXT: .Lpcsection109: ; O0-NEXT: lock addw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2783,7 +2883,7 @@ define void @atomic16_add_monotonic(ptr %a) { ; O1-LABEL: atomic16_add_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection64: +; O1-NEXT: .Lpcsection89: ; O1-NEXT: lock addw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2791,7 +2891,7 @@ define void @atomic16_add_monotonic(ptr %a) { ; O2-LABEL: atomic16_add_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection64: +; O2-NEXT: .Lpcsection89: ; O2-NEXT: lock addw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2799,7 +2899,7 @@ define void @atomic16_add_monotonic(ptr %a) { ; O3-LABEL: atomic16_add_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection64: +; O3-NEXT: .Lpcsection89: ; O3-NEXT: lock addw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2814,7 +2914,7 @@ define void @atomic16_sub_monotonic(ptr %a) { ; O0-LABEL: atomic16_sub_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection85: +; O0-NEXT: .Lpcsection110: ; O0-NEXT: lock subw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2822,7 +2922,7 @@ define void @atomic16_sub_monotonic(ptr %a) { ; O1-LABEL: atomic16_sub_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection65: +; O1-NEXT: .Lpcsection90: ; O1-NEXT: lock subw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2830,7 +2930,7 @@ define void @atomic16_sub_monotonic(ptr %a) { ; O2-LABEL: atomic16_sub_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection65: +; O2-NEXT: .Lpcsection90: ; O2-NEXT: lock subw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2838,7 +2938,7 @@ define void @atomic16_sub_monotonic(ptr %a) { ; O3-LABEL: atomic16_sub_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection65: +; O3-NEXT: .Lpcsection90: ; O3-NEXT: lock subw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2853,7 +2953,7 @@ define void @atomic16_and_monotonic(ptr %a) { ; O0-LABEL: atomic16_and_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection86: +; O0-NEXT: .Lpcsection111: ; O0-NEXT: lock andw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2861,7 +2961,7 @@ define void @atomic16_and_monotonic(ptr %a) { ; O1-LABEL: atomic16_and_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection66: +; O1-NEXT: .Lpcsection91: ; O1-NEXT: lock andw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2869,7 +2969,7 @@ define void @atomic16_and_monotonic(ptr %a) { ; O2-LABEL: atomic16_and_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection66: +; O2-NEXT: .Lpcsection91: ; O2-NEXT: lock andw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2877,7 +2977,7 @@ define void @atomic16_and_monotonic(ptr %a) { ; O3-LABEL: atomic16_and_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection66: +; O3-NEXT: .Lpcsection91: ; O3-NEXT: lock andw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2892,7 +2992,7 @@ define void @atomic16_or_monotonic(ptr %a) { ; O0-LABEL: atomic16_or_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection87: +; O0-NEXT: .Lpcsection112: ; O0-NEXT: lock orw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2900,7 +3000,7 @@ define void @atomic16_or_monotonic(ptr %a) { ; O1-LABEL: atomic16_or_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection67: +; O1-NEXT: .Lpcsection92: ; O1-NEXT: lock orw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2908,7 +3008,7 @@ define void @atomic16_or_monotonic(ptr %a) { ; O2-LABEL: atomic16_or_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection67: +; O2-NEXT: .Lpcsection92: ; O2-NEXT: lock orw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2916,7 +3016,7 @@ define void @atomic16_or_monotonic(ptr %a) { ; O3-LABEL: atomic16_or_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection67: +; O3-NEXT: .Lpcsection92: ; O3-NEXT: lock orw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2931,7 +3031,7 @@ define void @atomic16_xor_monotonic(ptr %a) { ; O0-LABEL: atomic16_xor_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection88: +; O0-NEXT: .Lpcsection113: ; O0-NEXT: lock xorw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -2939,7 +3039,7 @@ define void @atomic16_xor_monotonic(ptr %a) { ; O1-LABEL: atomic16_xor_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection68: +; O1-NEXT: .Lpcsection93: ; O1-NEXT: lock xorw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -2947,7 +3047,7 @@ define void @atomic16_xor_monotonic(ptr %a) { ; O2-LABEL: atomic16_xor_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection68: +; O2-NEXT: .Lpcsection93: ; O2-NEXT: lock xorw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -2955,7 +3055,7 @@ define void @atomic16_xor_monotonic(ptr %a) { ; O3-LABEL: atomic16_xor_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection68: +; O3-NEXT: .Lpcsection93: ; O3-NEXT: lock xorw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -2971,26 +3071,30 @@ define void @atomic16_nand_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection89: +; O0-NEXT: .Lpcsection114: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: .LBB64_1: # %atomicrmw.start ; O0-NEXT: # =>This Inner Loop Header: Depth=1 ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload +; O0-NEXT: .Lpcsection115: ; O0-NEXT: # implicit-def: $edx ; O0-NEXT: movw %ax, %dx +; O0-NEXT: .Lpcsection116: ; O0-NEXT: notl %edx +; O0-NEXT: .Lpcsection117: ; O0-NEXT: orl $65493, %edx # imm = 0xFFD5 -; O0-NEXT: .Lpcsection90: +; O0-NEXT: .Lpcsection118: ; O0-NEXT: # kill: def $dx killed $dx killed $edx +; O0-NEXT: .Lpcsection119: ; O0-NEXT: lock cmpxchgw %dx, (%rcx) -; O0-NEXT: .Lpcsection91: +; O0-NEXT: .Lpcsection120: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection92: +; O0-NEXT: .Lpcsection121: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill -; O0-NEXT: .Lpcsection93: +; O0-NEXT: .Lpcsection122: ; O0-NEXT: jne .LBB64_2 ; O0-NEXT: jmp .LBB64_1 ; O0-NEXT: .LBB64_2: # %atomicrmw.end @@ -3000,19 +3104,23 @@ define void @atomic16_nand_monotonic(ptr %a) { ; O1-LABEL: atomic16_nand_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection69: +; O1-NEXT: .Lpcsection94: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB64_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection95: ; O1-NEXT: notl %ecx +; O1-NEXT: .Lpcsection96: ; O1-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O1-NEXT: .Lpcsection97: ; O1-NEXT: # kill: def $ax killed $ax killed $eax +; O1-NEXT: .Lpcsection98: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) -; O1-NEXT: .Lpcsection70: +; O1-NEXT: .Lpcsection99: ; O1-NEXT: # kill: def $ax killed $ax def $eax -; O1-NEXT: .Lpcsection71: +; O1-NEXT: .Lpcsection100: ; O1-NEXT: jne .LBB64_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -3021,19 +3129,23 @@ define void @atomic16_nand_monotonic(ptr %a) { ; O2-LABEL: atomic16_nand_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection69: +; O2-NEXT: .Lpcsection94: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB64_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection95: ; O2-NEXT: notl %ecx +; O2-NEXT: .Lpcsection96: ; O2-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O2-NEXT: .Lpcsection97: ; O2-NEXT: # kill: def $ax killed $ax killed $eax +; O2-NEXT: .Lpcsection98: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) -; O2-NEXT: .Lpcsection70: +; O2-NEXT: .Lpcsection99: ; O2-NEXT: # kill: def $ax killed $ax def $eax -; O2-NEXT: .Lpcsection71: +; O2-NEXT: .Lpcsection100: ; O2-NEXT: jne .LBB64_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -3042,19 +3154,23 @@ define void @atomic16_nand_monotonic(ptr %a) { ; O3-LABEL: atomic16_nand_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection69: +; O3-NEXT: .Lpcsection94: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB64_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection95: ; O3-NEXT: notl %ecx +; O3-NEXT: .Lpcsection96: ; O3-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O3-NEXT: .Lpcsection97: ; O3-NEXT: # kill: def $ax killed $ax killed $eax +; O3-NEXT: .Lpcsection98: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) -; O3-NEXT: .Lpcsection70: +; O3-NEXT: .Lpcsection99: ; O3-NEXT: # kill: def $ax killed $ax def $eax -; O3-NEXT: .Lpcsection71: +; O3-NEXT: .Lpcsection100: ; O3-NEXT: jne .LBB64_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -3071,7 +3187,7 @@ define void @atomic16_xchg_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection94: +; O0-NEXT: .Lpcsection123: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3080,7 +3196,7 @@ define void @atomic16_xchg_acquire(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection72: +; O1-NEXT: .Lpcsection101: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3089,7 +3205,7 @@ define void @atomic16_xchg_acquire(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection72: +; O2-NEXT: .Lpcsection101: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3098,7 +3214,7 @@ define void @atomic16_xchg_acquire(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection72: +; O3-NEXT: .Lpcsection101: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3113,7 +3229,7 @@ define void @atomic16_add_acquire(ptr %a) { ; O0-LABEL: atomic16_add_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection95: +; O0-NEXT: .Lpcsection124: ; O0-NEXT: lock addw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3121,7 +3237,7 @@ define void @atomic16_add_acquire(ptr %a) { ; O1-LABEL: atomic16_add_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection73: +; O1-NEXT: .Lpcsection102: ; O1-NEXT: lock addw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3129,7 +3245,7 @@ define void @atomic16_add_acquire(ptr %a) { ; O2-LABEL: atomic16_add_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection73: +; O2-NEXT: .Lpcsection102: ; O2-NEXT: lock addw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3137,7 +3253,7 @@ define void @atomic16_add_acquire(ptr %a) { ; O3-LABEL: atomic16_add_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection73: +; O3-NEXT: .Lpcsection102: ; O3-NEXT: lock addw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3152,7 +3268,7 @@ define void @atomic16_sub_acquire(ptr %a) { ; O0-LABEL: atomic16_sub_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection96: +; O0-NEXT: .Lpcsection125: ; O0-NEXT: lock subw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3160,7 +3276,7 @@ define void @atomic16_sub_acquire(ptr %a) { ; O1-LABEL: atomic16_sub_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection74: +; O1-NEXT: .Lpcsection103: ; O1-NEXT: lock subw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3168,7 +3284,7 @@ define void @atomic16_sub_acquire(ptr %a) { ; O2-LABEL: atomic16_sub_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection74: +; O2-NEXT: .Lpcsection103: ; O2-NEXT: lock subw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3176,7 +3292,7 @@ define void @atomic16_sub_acquire(ptr %a) { ; O3-LABEL: atomic16_sub_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection74: +; O3-NEXT: .Lpcsection103: ; O3-NEXT: lock subw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3191,7 +3307,7 @@ define void @atomic16_and_acquire(ptr %a) { ; O0-LABEL: atomic16_and_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection97: +; O0-NEXT: .Lpcsection126: ; O0-NEXT: lock andw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3199,7 +3315,7 @@ define void @atomic16_and_acquire(ptr %a) { ; O1-LABEL: atomic16_and_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection75: +; O1-NEXT: .Lpcsection104: ; O1-NEXT: lock andw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3207,7 +3323,7 @@ define void @atomic16_and_acquire(ptr %a) { ; O2-LABEL: atomic16_and_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection75: +; O2-NEXT: .Lpcsection104: ; O2-NEXT: lock andw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3215,7 +3331,7 @@ define void @atomic16_and_acquire(ptr %a) { ; O3-LABEL: atomic16_and_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection75: +; O3-NEXT: .Lpcsection104: ; O3-NEXT: lock andw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3230,7 +3346,7 @@ define void @atomic16_or_acquire(ptr %a) { ; O0-LABEL: atomic16_or_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection98: +; O0-NEXT: .Lpcsection127: ; O0-NEXT: lock orw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3238,7 +3354,7 @@ define void @atomic16_or_acquire(ptr %a) { ; O1-LABEL: atomic16_or_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection76: +; O1-NEXT: .Lpcsection105: ; O1-NEXT: lock orw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3246,7 +3362,7 @@ define void @atomic16_or_acquire(ptr %a) { ; O2-LABEL: atomic16_or_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection76: +; O2-NEXT: .Lpcsection105: ; O2-NEXT: lock orw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3254,7 +3370,7 @@ define void @atomic16_or_acquire(ptr %a) { ; O3-LABEL: atomic16_or_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection76: +; O3-NEXT: .Lpcsection105: ; O3-NEXT: lock orw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3269,7 +3385,7 @@ define void @atomic16_xor_acquire(ptr %a) { ; O0-LABEL: atomic16_xor_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection99: +; O0-NEXT: .Lpcsection128: ; O0-NEXT: lock xorw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3277,7 +3393,7 @@ define void @atomic16_xor_acquire(ptr %a) { ; O1-LABEL: atomic16_xor_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection77: +; O1-NEXT: .Lpcsection106: ; O1-NEXT: lock xorw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3285,7 +3401,7 @@ define void @atomic16_xor_acquire(ptr %a) { ; O2-LABEL: atomic16_xor_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection77: +; O2-NEXT: .Lpcsection106: ; O2-NEXT: lock xorw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3293,7 +3409,7 @@ define void @atomic16_xor_acquire(ptr %a) { ; O3-LABEL: atomic16_xor_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection77: +; O3-NEXT: .Lpcsection106: ; O3-NEXT: lock xorw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3309,26 +3425,30 @@ define void @atomic16_nand_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection100: +; O0-NEXT: .Lpcsection129: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: .LBB71_1: # %atomicrmw.start ; O0-NEXT: # =>This Inner Loop Header: Depth=1 ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload +; O0-NEXT: .Lpcsection130: ; O0-NEXT: # implicit-def: $edx ; O0-NEXT: movw %ax, %dx +; O0-NEXT: .Lpcsection131: ; O0-NEXT: notl %edx +; O0-NEXT: .Lpcsection132: ; O0-NEXT: orl $65493, %edx # imm = 0xFFD5 -; O0-NEXT: .Lpcsection101: +; O0-NEXT: .Lpcsection133: ; O0-NEXT: # kill: def $dx killed $dx killed $edx +; O0-NEXT: .Lpcsection134: ; O0-NEXT: lock cmpxchgw %dx, (%rcx) -; O0-NEXT: .Lpcsection102: +; O0-NEXT: .Lpcsection135: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection103: +; O0-NEXT: .Lpcsection136: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill -; O0-NEXT: .Lpcsection104: +; O0-NEXT: .Lpcsection137: ; O0-NEXT: jne .LBB71_2 ; O0-NEXT: jmp .LBB71_1 ; O0-NEXT: .LBB71_2: # %atomicrmw.end @@ -3338,19 +3458,23 @@ define void @atomic16_nand_acquire(ptr %a) { ; O1-LABEL: atomic16_nand_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection78: +; O1-NEXT: .Lpcsection107: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB71_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection108: ; O1-NEXT: notl %ecx +; O1-NEXT: .Lpcsection109: ; O1-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O1-NEXT: .Lpcsection110: ; O1-NEXT: # kill: def $ax killed $ax killed $eax +; O1-NEXT: .Lpcsection111: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) -; O1-NEXT: .Lpcsection79: +; O1-NEXT: .Lpcsection112: ; O1-NEXT: # kill: def $ax killed $ax def $eax -; O1-NEXT: .Lpcsection80: +; O1-NEXT: .Lpcsection113: ; O1-NEXT: jne .LBB71_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -3359,19 +3483,23 @@ define void @atomic16_nand_acquire(ptr %a) { ; O2-LABEL: atomic16_nand_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection78: +; O2-NEXT: .Lpcsection107: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB71_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection108: ; O2-NEXT: notl %ecx +; O2-NEXT: .Lpcsection109: ; O2-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O2-NEXT: .Lpcsection110: ; O2-NEXT: # kill: def $ax killed $ax killed $eax +; O2-NEXT: .Lpcsection111: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) -; O2-NEXT: .Lpcsection79: +; O2-NEXT: .Lpcsection112: ; O2-NEXT: # kill: def $ax killed $ax def $eax -; O2-NEXT: .Lpcsection80: +; O2-NEXT: .Lpcsection113: ; O2-NEXT: jne .LBB71_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -3380,19 +3508,23 @@ define void @atomic16_nand_acquire(ptr %a) { ; O3-LABEL: atomic16_nand_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection78: +; O3-NEXT: .Lpcsection107: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB71_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection108: ; O3-NEXT: notl %ecx +; O3-NEXT: .Lpcsection109: ; O3-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O3-NEXT: .Lpcsection110: ; O3-NEXT: # kill: def $ax killed $ax killed $eax +; O3-NEXT: .Lpcsection111: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) -; O3-NEXT: .Lpcsection79: +; O3-NEXT: .Lpcsection112: ; O3-NEXT: # kill: def $ax killed $ax def $eax -; O3-NEXT: .Lpcsection80: +; O3-NEXT: .Lpcsection113: ; O3-NEXT: jne .LBB71_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -3409,7 +3541,7 @@ define void @atomic16_xchg_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection105: +; O0-NEXT: .Lpcsection138: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3418,7 +3550,7 @@ define void @atomic16_xchg_release(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection81: +; O1-NEXT: .Lpcsection114: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3427,7 +3559,7 @@ define void @atomic16_xchg_release(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection81: +; O2-NEXT: .Lpcsection114: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3436,7 +3568,7 @@ define void @atomic16_xchg_release(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection81: +; O3-NEXT: .Lpcsection114: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3451,7 +3583,7 @@ define void @atomic16_add_release(ptr %a) { ; O0-LABEL: atomic16_add_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection106: +; O0-NEXT: .Lpcsection139: ; O0-NEXT: lock addw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3459,7 +3591,7 @@ define void @atomic16_add_release(ptr %a) { ; O1-LABEL: atomic16_add_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection82: +; O1-NEXT: .Lpcsection115: ; O1-NEXT: lock addw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3467,7 +3599,7 @@ define void @atomic16_add_release(ptr %a) { ; O2-LABEL: atomic16_add_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection82: +; O2-NEXT: .Lpcsection115: ; O2-NEXT: lock addw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3475,7 +3607,7 @@ define void @atomic16_add_release(ptr %a) { ; O3-LABEL: atomic16_add_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection82: +; O3-NEXT: .Lpcsection115: ; O3-NEXT: lock addw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3490,7 +3622,7 @@ define void @atomic16_sub_release(ptr %a) { ; O0-LABEL: atomic16_sub_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection107: +; O0-NEXT: .Lpcsection140: ; O0-NEXT: lock subw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3498,7 +3630,7 @@ define void @atomic16_sub_release(ptr %a) { ; O1-LABEL: atomic16_sub_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection83: +; O1-NEXT: .Lpcsection116: ; O1-NEXT: lock subw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3506,7 +3638,7 @@ define void @atomic16_sub_release(ptr %a) { ; O2-LABEL: atomic16_sub_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection83: +; O2-NEXT: .Lpcsection116: ; O2-NEXT: lock subw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3514,7 +3646,7 @@ define void @atomic16_sub_release(ptr %a) { ; O3-LABEL: atomic16_sub_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection83: +; O3-NEXT: .Lpcsection116: ; O3-NEXT: lock subw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3529,7 +3661,7 @@ define void @atomic16_and_release(ptr %a) { ; O0-LABEL: atomic16_and_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection108: +; O0-NEXT: .Lpcsection141: ; O0-NEXT: lock andw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3537,7 +3669,7 @@ define void @atomic16_and_release(ptr %a) { ; O1-LABEL: atomic16_and_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection84: +; O1-NEXT: .Lpcsection117: ; O1-NEXT: lock andw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3545,7 +3677,7 @@ define void @atomic16_and_release(ptr %a) { ; O2-LABEL: atomic16_and_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection84: +; O2-NEXT: .Lpcsection117: ; O2-NEXT: lock andw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3553,7 +3685,7 @@ define void @atomic16_and_release(ptr %a) { ; O3-LABEL: atomic16_and_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection84: +; O3-NEXT: .Lpcsection117: ; O3-NEXT: lock andw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3568,7 +3700,7 @@ define void @atomic16_or_release(ptr %a) { ; O0-LABEL: atomic16_or_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection109: +; O0-NEXT: .Lpcsection142: ; O0-NEXT: lock orw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3576,7 +3708,7 @@ define void @atomic16_or_release(ptr %a) { ; O1-LABEL: atomic16_or_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection85: +; O1-NEXT: .Lpcsection118: ; O1-NEXT: lock orw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3584,7 +3716,7 @@ define void @atomic16_or_release(ptr %a) { ; O2-LABEL: atomic16_or_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection85: +; O2-NEXT: .Lpcsection118: ; O2-NEXT: lock orw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3592,7 +3724,7 @@ define void @atomic16_or_release(ptr %a) { ; O3-LABEL: atomic16_or_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection85: +; O3-NEXT: .Lpcsection118: ; O3-NEXT: lock orw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3607,7 +3739,7 @@ define void @atomic16_xor_release(ptr %a) { ; O0-LABEL: atomic16_xor_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection110: +; O0-NEXT: .Lpcsection143: ; O0-NEXT: lock xorw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3615,7 +3747,7 @@ define void @atomic16_xor_release(ptr %a) { ; O1-LABEL: atomic16_xor_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection86: +; O1-NEXT: .Lpcsection119: ; O1-NEXT: lock xorw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3623,7 +3755,7 @@ define void @atomic16_xor_release(ptr %a) { ; O2-LABEL: atomic16_xor_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection86: +; O2-NEXT: .Lpcsection119: ; O2-NEXT: lock xorw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3631,7 +3763,7 @@ define void @atomic16_xor_release(ptr %a) { ; O3-LABEL: atomic16_xor_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection86: +; O3-NEXT: .Lpcsection119: ; O3-NEXT: lock xorw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3647,26 +3779,30 @@ define void @atomic16_nand_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection111: +; O0-NEXT: .Lpcsection144: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: .LBB78_1: # %atomicrmw.start ; O0-NEXT: # =>This Inner Loop Header: Depth=1 ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload +; O0-NEXT: .Lpcsection145: ; O0-NEXT: # implicit-def: $edx ; O0-NEXT: movw %ax, %dx +; O0-NEXT: .Lpcsection146: ; O0-NEXT: notl %edx +; O0-NEXT: .Lpcsection147: ; O0-NEXT: orl $65493, %edx # imm = 0xFFD5 -; O0-NEXT: .Lpcsection112: +; O0-NEXT: .Lpcsection148: ; O0-NEXT: # kill: def $dx killed $dx killed $edx +; O0-NEXT: .Lpcsection149: ; O0-NEXT: lock cmpxchgw %dx, (%rcx) -; O0-NEXT: .Lpcsection113: +; O0-NEXT: .Lpcsection150: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection114: +; O0-NEXT: .Lpcsection151: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill -; O0-NEXT: .Lpcsection115: +; O0-NEXT: .Lpcsection152: ; O0-NEXT: jne .LBB78_2 ; O0-NEXT: jmp .LBB78_1 ; O0-NEXT: .LBB78_2: # %atomicrmw.end @@ -3676,19 +3812,23 @@ define void @atomic16_nand_release(ptr %a) { ; O1-LABEL: atomic16_nand_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection87: +; O1-NEXT: .Lpcsection120: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB78_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection121: ; O1-NEXT: notl %ecx +; O1-NEXT: .Lpcsection122: ; O1-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O1-NEXT: .Lpcsection123: ; O1-NEXT: # kill: def $ax killed $ax killed $eax +; O1-NEXT: .Lpcsection124: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) -; O1-NEXT: .Lpcsection88: +; O1-NEXT: .Lpcsection125: ; O1-NEXT: # kill: def $ax killed $ax def $eax -; O1-NEXT: .Lpcsection89: +; O1-NEXT: .Lpcsection126: ; O1-NEXT: jne .LBB78_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -3697,19 +3837,23 @@ define void @atomic16_nand_release(ptr %a) { ; O2-LABEL: atomic16_nand_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection87: +; O2-NEXT: .Lpcsection120: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB78_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection121: ; O2-NEXT: notl %ecx +; O2-NEXT: .Lpcsection122: ; O2-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O2-NEXT: .Lpcsection123: ; O2-NEXT: # kill: def $ax killed $ax killed $eax +; O2-NEXT: .Lpcsection124: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) -; O2-NEXT: .Lpcsection88: +; O2-NEXT: .Lpcsection125: ; O2-NEXT: # kill: def $ax killed $ax def $eax -; O2-NEXT: .Lpcsection89: +; O2-NEXT: .Lpcsection126: ; O2-NEXT: jne .LBB78_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -3718,19 +3862,23 @@ define void @atomic16_nand_release(ptr %a) { ; O3-LABEL: atomic16_nand_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection87: +; O3-NEXT: .Lpcsection120: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB78_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection121: ; O3-NEXT: notl %ecx +; O3-NEXT: .Lpcsection122: ; O3-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O3-NEXT: .Lpcsection123: ; O3-NEXT: # kill: def $ax killed $ax killed $eax +; O3-NEXT: .Lpcsection124: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) -; O3-NEXT: .Lpcsection88: +; O3-NEXT: .Lpcsection125: ; O3-NEXT: # kill: def $ax killed $ax def $eax -; O3-NEXT: .Lpcsection89: +; O3-NEXT: .Lpcsection126: ; O3-NEXT: jne .LBB78_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -3747,7 +3895,7 @@ define void @atomic16_xchg_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection116: +; O0-NEXT: .Lpcsection153: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3756,7 +3904,7 @@ define void @atomic16_xchg_acq_rel(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection90: +; O1-NEXT: .Lpcsection127: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3765,7 +3913,7 @@ define void @atomic16_xchg_acq_rel(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection90: +; O2-NEXT: .Lpcsection127: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3774,7 +3922,7 @@ define void @atomic16_xchg_acq_rel(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection90: +; O3-NEXT: .Lpcsection127: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3789,7 +3937,7 @@ define void @atomic16_add_acq_rel(ptr %a) { ; O0-LABEL: atomic16_add_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection117: +; O0-NEXT: .Lpcsection154: ; O0-NEXT: lock addw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3797,7 +3945,7 @@ define void @atomic16_add_acq_rel(ptr %a) { ; O1-LABEL: atomic16_add_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection91: +; O1-NEXT: .Lpcsection128: ; O1-NEXT: lock addw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3805,7 +3953,7 @@ define void @atomic16_add_acq_rel(ptr %a) { ; O2-LABEL: atomic16_add_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection91: +; O2-NEXT: .Lpcsection128: ; O2-NEXT: lock addw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3813,7 +3961,7 @@ define void @atomic16_add_acq_rel(ptr %a) { ; O3-LABEL: atomic16_add_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection91: +; O3-NEXT: .Lpcsection128: ; O3-NEXT: lock addw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3828,7 +3976,7 @@ define void @atomic16_sub_acq_rel(ptr %a) { ; O0-LABEL: atomic16_sub_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection118: +; O0-NEXT: .Lpcsection155: ; O0-NEXT: lock subw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3836,7 +3984,7 @@ define void @atomic16_sub_acq_rel(ptr %a) { ; O1-LABEL: atomic16_sub_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection92: +; O1-NEXT: .Lpcsection129: ; O1-NEXT: lock subw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3844,7 +3992,7 @@ define void @atomic16_sub_acq_rel(ptr %a) { ; O2-LABEL: atomic16_sub_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection92: +; O2-NEXT: .Lpcsection129: ; O2-NEXT: lock subw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3852,7 +4000,7 @@ define void @atomic16_sub_acq_rel(ptr %a) { ; O3-LABEL: atomic16_sub_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection92: +; O3-NEXT: .Lpcsection129: ; O3-NEXT: lock subw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3867,7 +4015,7 @@ define void @atomic16_and_acq_rel(ptr %a) { ; O0-LABEL: atomic16_and_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection119: +; O0-NEXT: .Lpcsection156: ; O0-NEXT: lock andw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3875,7 +4023,7 @@ define void @atomic16_and_acq_rel(ptr %a) { ; O1-LABEL: atomic16_and_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection93: +; O1-NEXT: .Lpcsection130: ; O1-NEXT: lock andw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3883,7 +4031,7 @@ define void @atomic16_and_acq_rel(ptr %a) { ; O2-LABEL: atomic16_and_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection93: +; O2-NEXT: .Lpcsection130: ; O2-NEXT: lock andw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3891,7 +4039,7 @@ define void @atomic16_and_acq_rel(ptr %a) { ; O3-LABEL: atomic16_and_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection93: +; O3-NEXT: .Lpcsection130: ; O3-NEXT: lock andw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3906,7 +4054,7 @@ define void @atomic16_or_acq_rel(ptr %a) { ; O0-LABEL: atomic16_or_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection120: +; O0-NEXT: .Lpcsection157: ; O0-NEXT: lock orw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3914,7 +4062,7 @@ define void @atomic16_or_acq_rel(ptr %a) { ; O1-LABEL: atomic16_or_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection94: +; O1-NEXT: .Lpcsection131: ; O1-NEXT: lock orw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3922,7 +4070,7 @@ define void @atomic16_or_acq_rel(ptr %a) { ; O2-LABEL: atomic16_or_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection94: +; O2-NEXT: .Lpcsection131: ; O2-NEXT: lock orw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3930,7 +4078,7 @@ define void @atomic16_or_acq_rel(ptr %a) { ; O3-LABEL: atomic16_or_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection94: +; O3-NEXT: .Lpcsection131: ; O3-NEXT: lock orw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3945,7 +4093,7 @@ define void @atomic16_xor_acq_rel(ptr %a) { ; O0-LABEL: atomic16_xor_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection121: +; O0-NEXT: .Lpcsection158: ; O0-NEXT: lock xorw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -3953,7 +4101,7 @@ define void @atomic16_xor_acq_rel(ptr %a) { ; O1-LABEL: atomic16_xor_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection95: +; O1-NEXT: .Lpcsection132: ; O1-NEXT: lock xorw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -3961,7 +4109,7 @@ define void @atomic16_xor_acq_rel(ptr %a) { ; O2-LABEL: atomic16_xor_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection95: +; O2-NEXT: .Lpcsection132: ; O2-NEXT: lock xorw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -3969,7 +4117,7 @@ define void @atomic16_xor_acq_rel(ptr %a) { ; O3-LABEL: atomic16_xor_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection95: +; O3-NEXT: .Lpcsection132: ; O3-NEXT: lock xorw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -3985,26 +4133,30 @@ define void @atomic16_nand_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection122: +; O0-NEXT: .Lpcsection159: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: .LBB85_1: # %atomicrmw.start ; O0-NEXT: # =>This Inner Loop Header: Depth=1 ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload +; O0-NEXT: .Lpcsection160: ; O0-NEXT: # implicit-def: $edx ; O0-NEXT: movw %ax, %dx +; O0-NEXT: .Lpcsection161: ; O0-NEXT: notl %edx +; O0-NEXT: .Lpcsection162: ; O0-NEXT: orl $65493, %edx # imm = 0xFFD5 -; O0-NEXT: .Lpcsection123: +; O0-NEXT: .Lpcsection163: ; O0-NEXT: # kill: def $dx killed $dx killed $edx +; O0-NEXT: .Lpcsection164: ; O0-NEXT: lock cmpxchgw %dx, (%rcx) -; O0-NEXT: .Lpcsection124: +; O0-NEXT: .Lpcsection165: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection125: +; O0-NEXT: .Lpcsection166: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill -; O0-NEXT: .Lpcsection126: +; O0-NEXT: .Lpcsection167: ; O0-NEXT: jne .LBB85_2 ; O0-NEXT: jmp .LBB85_1 ; O0-NEXT: .LBB85_2: # %atomicrmw.end @@ -4014,19 +4166,23 @@ define void @atomic16_nand_acq_rel(ptr %a) { ; O1-LABEL: atomic16_nand_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection96: +; O1-NEXT: .Lpcsection133: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB85_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection134: ; O1-NEXT: notl %ecx +; O1-NEXT: .Lpcsection135: ; O1-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O1-NEXT: .Lpcsection136: ; O1-NEXT: # kill: def $ax killed $ax killed $eax +; O1-NEXT: .Lpcsection137: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) -; O1-NEXT: .Lpcsection97: +; O1-NEXT: .Lpcsection138: ; O1-NEXT: # kill: def $ax killed $ax def $eax -; O1-NEXT: .Lpcsection98: +; O1-NEXT: .Lpcsection139: ; O1-NEXT: jne .LBB85_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -4035,19 +4191,23 @@ define void @atomic16_nand_acq_rel(ptr %a) { ; O2-LABEL: atomic16_nand_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection96: +; O2-NEXT: .Lpcsection133: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB85_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection134: ; O2-NEXT: notl %ecx +; O2-NEXT: .Lpcsection135: ; O2-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O2-NEXT: .Lpcsection136: ; O2-NEXT: # kill: def $ax killed $ax killed $eax +; O2-NEXT: .Lpcsection137: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) -; O2-NEXT: .Lpcsection97: +; O2-NEXT: .Lpcsection138: ; O2-NEXT: # kill: def $ax killed $ax def $eax -; O2-NEXT: .Lpcsection98: +; O2-NEXT: .Lpcsection139: ; O2-NEXT: jne .LBB85_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -4056,19 +4216,23 @@ define void @atomic16_nand_acq_rel(ptr %a) { ; O3-LABEL: atomic16_nand_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection96: +; O3-NEXT: .Lpcsection133: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB85_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection134: ; O3-NEXT: notl %ecx +; O3-NEXT: .Lpcsection135: ; O3-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O3-NEXT: .Lpcsection136: ; O3-NEXT: # kill: def $ax killed $ax killed $eax +; O3-NEXT: .Lpcsection137: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) -; O3-NEXT: .Lpcsection97: +; O3-NEXT: .Lpcsection138: ; O3-NEXT: # kill: def $ax killed $ax def $eax -; O3-NEXT: .Lpcsection98: +; O3-NEXT: .Lpcsection139: ; O3-NEXT: jne .LBB85_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -4085,7 +4249,7 @@ define void @atomic16_xchg_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movw $42, %ax -; O0-NEXT: .Lpcsection127: +; O0-NEXT: .Lpcsection168: ; O0-NEXT: xchgw %ax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4094,7 +4258,7 @@ define void @atomic16_xchg_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $42, %ax -; O1-NEXT: .Lpcsection99: +; O1-NEXT: .Lpcsection140: ; O1-NEXT: xchgw %ax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4103,7 +4267,7 @@ define void @atomic16_xchg_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $42, %ax -; O2-NEXT: .Lpcsection99: +; O2-NEXT: .Lpcsection140: ; O2-NEXT: xchgw %ax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4112,7 +4276,7 @@ define void @atomic16_xchg_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $42, %ax -; O3-NEXT: .Lpcsection99: +; O3-NEXT: .Lpcsection140: ; O3-NEXT: xchgw %ax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4127,7 +4291,7 @@ define void @atomic16_add_seq_cst(ptr %a) { ; O0-LABEL: atomic16_add_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection128: +; O0-NEXT: .Lpcsection169: ; O0-NEXT: lock addw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4135,7 +4299,7 @@ define void @atomic16_add_seq_cst(ptr %a) { ; O1-LABEL: atomic16_add_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection100: +; O1-NEXT: .Lpcsection141: ; O1-NEXT: lock addw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4143,7 +4307,7 @@ define void @atomic16_add_seq_cst(ptr %a) { ; O2-LABEL: atomic16_add_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection100: +; O2-NEXT: .Lpcsection141: ; O2-NEXT: lock addw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4151,7 +4315,7 @@ define void @atomic16_add_seq_cst(ptr %a) { ; O3-LABEL: atomic16_add_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection100: +; O3-NEXT: .Lpcsection141: ; O3-NEXT: lock addw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4166,7 +4330,7 @@ define void @atomic16_sub_seq_cst(ptr %a) { ; O0-LABEL: atomic16_sub_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection129: +; O0-NEXT: .Lpcsection170: ; O0-NEXT: lock subw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4174,7 +4338,7 @@ define void @atomic16_sub_seq_cst(ptr %a) { ; O1-LABEL: atomic16_sub_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection101: +; O1-NEXT: .Lpcsection142: ; O1-NEXT: lock subw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4182,7 +4346,7 @@ define void @atomic16_sub_seq_cst(ptr %a) { ; O2-LABEL: atomic16_sub_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection101: +; O2-NEXT: .Lpcsection142: ; O2-NEXT: lock subw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4190,7 +4354,7 @@ define void @atomic16_sub_seq_cst(ptr %a) { ; O3-LABEL: atomic16_sub_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection101: +; O3-NEXT: .Lpcsection142: ; O3-NEXT: lock subw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4205,7 +4369,7 @@ define void @atomic16_and_seq_cst(ptr %a) { ; O0-LABEL: atomic16_and_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection130: +; O0-NEXT: .Lpcsection171: ; O0-NEXT: lock andw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4213,7 +4377,7 @@ define void @atomic16_and_seq_cst(ptr %a) { ; O1-LABEL: atomic16_and_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection102: +; O1-NEXT: .Lpcsection143: ; O1-NEXT: lock andw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4221,7 +4385,7 @@ define void @atomic16_and_seq_cst(ptr %a) { ; O2-LABEL: atomic16_and_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection102: +; O2-NEXT: .Lpcsection143: ; O2-NEXT: lock andw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4229,7 +4393,7 @@ define void @atomic16_and_seq_cst(ptr %a) { ; O3-LABEL: atomic16_and_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection102: +; O3-NEXT: .Lpcsection143: ; O3-NEXT: lock andw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4244,7 +4408,7 @@ define void @atomic16_or_seq_cst(ptr %a) { ; O0-LABEL: atomic16_or_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection131: +; O0-NEXT: .Lpcsection172: ; O0-NEXT: lock orw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4252,7 +4416,7 @@ define void @atomic16_or_seq_cst(ptr %a) { ; O1-LABEL: atomic16_or_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection103: +; O1-NEXT: .Lpcsection144: ; O1-NEXT: lock orw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4260,7 +4424,7 @@ define void @atomic16_or_seq_cst(ptr %a) { ; O2-LABEL: atomic16_or_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection103: +; O2-NEXT: .Lpcsection144: ; O2-NEXT: lock orw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4268,7 +4432,7 @@ define void @atomic16_or_seq_cst(ptr %a) { ; O3-LABEL: atomic16_or_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection103: +; O3-NEXT: .Lpcsection144: ; O3-NEXT: lock orw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4283,7 +4447,7 @@ define void @atomic16_xor_seq_cst(ptr %a) { ; O0-LABEL: atomic16_xor_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection132: +; O0-NEXT: .Lpcsection173: ; O0-NEXT: lock xorw $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4291,7 +4455,7 @@ define void @atomic16_xor_seq_cst(ptr %a) { ; O1-LABEL: atomic16_xor_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection104: +; O1-NEXT: .Lpcsection145: ; O1-NEXT: lock xorw $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4299,7 +4463,7 @@ define void @atomic16_xor_seq_cst(ptr %a) { ; O2-LABEL: atomic16_xor_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection104: +; O2-NEXT: .Lpcsection145: ; O2-NEXT: lock xorw $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4307,7 +4471,7 @@ define void @atomic16_xor_seq_cst(ptr %a) { ; O3-LABEL: atomic16_xor_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection104: +; O3-NEXT: .Lpcsection145: ; O3-NEXT: lock xorw $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4323,26 +4487,30 @@ define void @atomic16_nand_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection133: +; O0-NEXT: .Lpcsection174: ; O0-NEXT: movw (%rdi), %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: .LBB92_1: # %atomicrmw.start ; O0-NEXT: # =>This Inner Loop Header: Depth=1 ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload +; O0-NEXT: .Lpcsection175: ; O0-NEXT: # implicit-def: $edx ; O0-NEXT: movw %ax, %dx +; O0-NEXT: .Lpcsection176: ; O0-NEXT: notl %edx +; O0-NEXT: .Lpcsection177: ; O0-NEXT: orl $65493, %edx # imm = 0xFFD5 -; O0-NEXT: .Lpcsection134: +; O0-NEXT: .Lpcsection178: ; O0-NEXT: # kill: def $dx killed $dx killed $edx +; O0-NEXT: .Lpcsection179: ; O0-NEXT: lock cmpxchgw %dx, (%rcx) -; O0-NEXT: .Lpcsection135: +; O0-NEXT: .Lpcsection180: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection136: +; O0-NEXT: .Lpcsection181: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill -; O0-NEXT: .Lpcsection137: +; O0-NEXT: .Lpcsection182: ; O0-NEXT: jne .LBB92_2 ; O0-NEXT: jmp .LBB92_1 ; O0-NEXT: .LBB92_2: # %atomicrmw.end @@ -4352,19 +4520,23 @@ define void @atomic16_nand_seq_cst(ptr %a) { ; O1-LABEL: atomic16_nand_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection105: +; O1-NEXT: .Lpcsection146: ; O1-NEXT: movzwl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB92_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection147: ; O1-NEXT: notl %ecx +; O1-NEXT: .Lpcsection148: ; O1-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O1-NEXT: .Lpcsection149: ; O1-NEXT: # kill: def $ax killed $ax killed $eax +; O1-NEXT: .Lpcsection150: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) -; O1-NEXT: .Lpcsection106: +; O1-NEXT: .Lpcsection151: ; O1-NEXT: # kill: def $ax killed $ax def $eax -; O1-NEXT: .Lpcsection107: +; O1-NEXT: .Lpcsection152: ; O1-NEXT: jne .LBB92_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -4373,19 +4545,23 @@ define void @atomic16_nand_seq_cst(ptr %a) { ; O2-LABEL: atomic16_nand_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection105: +; O2-NEXT: .Lpcsection146: ; O2-NEXT: movzwl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB92_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection147: ; O2-NEXT: notl %ecx +; O2-NEXT: .Lpcsection148: ; O2-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O2-NEXT: .Lpcsection149: ; O2-NEXT: # kill: def $ax killed $ax killed $eax +; O2-NEXT: .Lpcsection150: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) -; O2-NEXT: .Lpcsection106: +; O2-NEXT: .Lpcsection151: ; O2-NEXT: # kill: def $ax killed $ax def $eax -; O2-NEXT: .Lpcsection107: +; O2-NEXT: .Lpcsection152: ; O2-NEXT: jne .LBB92_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -4394,19 +4570,23 @@ define void @atomic16_nand_seq_cst(ptr %a) { ; O3-LABEL: atomic16_nand_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection105: +; O3-NEXT: .Lpcsection146: ; O3-NEXT: movzwl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB92_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection147: ; O3-NEXT: notl %ecx +; O3-NEXT: .Lpcsection148: ; O3-NEXT: orl $65493, %ecx # imm = 0xFFD5 +; O3-NEXT: .Lpcsection149: ; O3-NEXT: # kill: def $ax killed $ax killed $eax +; O3-NEXT: .Lpcsection150: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) -; O3-NEXT: .Lpcsection106: +; O3-NEXT: .Lpcsection151: ; O3-NEXT: # kill: def $ax killed $ax def $eax -; O3-NEXT: .Lpcsection107: +; O3-NEXT: .Lpcsection152: ; O3-NEXT: jne .LBB92_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -4425,14 +4605,17 @@ define void @atomic16_cas_monotonic(ptr %a) { ; O0-NEXT: movw $42, %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: movw $1, %cx +; O0-NEXT: .Lpcsection183: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection138: +; O0-NEXT: .Lpcsection184: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection185: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection139: +; O0-NEXT: .Lpcsection186: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection187: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4442,10 +4625,13 @@ define void @atomic16_cas_monotonic(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $1, %cx ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection153: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection154: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection155: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4455,10 +4641,13 @@ define void @atomic16_cas_monotonic(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $1, %cx ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection153: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection154: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection155: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4468,10 +4657,13 @@ define void @atomic16_cas_monotonic(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $1, %cx ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection153: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection154: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection155: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4491,14 +4683,17 @@ define void @atomic16_cas_acquire(ptr %a) { ; O0-NEXT: movw $42, %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: movw $1, %cx +; O0-NEXT: .Lpcsection188: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection140: +; O0-NEXT: .Lpcsection189: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection190: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection141: +; O0-NEXT: .Lpcsection191: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection192: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4508,10 +4703,13 @@ define void @atomic16_cas_acquire(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $1, %cx ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection156: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection157: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection158: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4521,10 +4719,13 @@ define void @atomic16_cas_acquire(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $1, %cx ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection156: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection157: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection158: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4534,10 +4735,13 @@ define void @atomic16_cas_acquire(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $1, %cx ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection156: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection157: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection158: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4557,14 +4761,17 @@ define void @atomic16_cas_release(ptr %a) { ; O0-NEXT: movw $42, %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: movw $1, %cx +; O0-NEXT: .Lpcsection193: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection142: +; O0-NEXT: .Lpcsection194: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection195: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection143: +; O0-NEXT: .Lpcsection196: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection197: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4574,10 +4781,13 @@ define void @atomic16_cas_release(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $1, %cx ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection159: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection160: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection161: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4587,10 +4797,13 @@ define void @atomic16_cas_release(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $1, %cx ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection159: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection160: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection161: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4600,10 +4813,13 @@ define void @atomic16_cas_release(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $1, %cx ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection159: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection160: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection161: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4623,14 +4839,17 @@ define void @atomic16_cas_acq_rel(ptr %a) { ; O0-NEXT: movw $42, %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: movw $1, %cx +; O0-NEXT: .Lpcsection198: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection144: +; O0-NEXT: .Lpcsection199: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection200: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection145: +; O0-NEXT: .Lpcsection201: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection202: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4640,10 +4859,13 @@ define void @atomic16_cas_acq_rel(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $1, %cx ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection162: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection163: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection164: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4653,10 +4875,13 @@ define void @atomic16_cas_acq_rel(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $1, %cx ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection162: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection163: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection164: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4666,10 +4891,13 @@ define void @atomic16_cas_acq_rel(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $1, %cx ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection162: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection163: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection164: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4689,14 +4917,17 @@ define void @atomic16_cas_seq_cst(ptr %a) { ; O0-NEXT: movw $42, %ax ; O0-NEXT: movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill ; O0-NEXT: movw $1, %cx +; O0-NEXT: .Lpcsection203: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection146: +; O0-NEXT: .Lpcsection204: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection205: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) -; O0-NEXT: .Lpcsection147: +; O0-NEXT: .Lpcsection206: ; O0-NEXT: # kill: def $dx killed $ax ; O0-NEXT: movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload +; O0-NEXT: .Lpcsection207: ; O0-NEXT: lock cmpxchgw %cx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4706,10 +4937,13 @@ define void @atomic16_cas_seq_cst(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movw $1, %cx ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection165: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection166: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movw $42, %ax +; O1-NEXT: .Lpcsection167: ; O1-NEXT: lock cmpxchgw %cx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4719,10 +4953,13 @@ define void @atomic16_cas_seq_cst(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movw $1, %cx ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection165: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection166: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movw $42, %ax +; O2-NEXT: .Lpcsection167: ; O2-NEXT: lock cmpxchgw %cx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4732,10 +4969,13 @@ define void @atomic16_cas_seq_cst(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movw $1, %cx ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection165: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection166: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movw $42, %ax +; O3-NEXT: .Lpcsection167: ; O3-NEXT: lock cmpxchgw %cx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4752,7 +4992,7 @@ define i32 @atomic32_load_unordered(ptr %a) { ; O0-LABEL: atomic32_load_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection148: +; O0-NEXT: .Lpcsection208: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4760,7 +5000,7 @@ define i32 @atomic32_load_unordered(ptr %a) { ; O1-LABEL: atomic32_load_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection108: +; O1-NEXT: .Lpcsection168: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4768,7 +5008,7 @@ define i32 @atomic32_load_unordered(ptr %a) { ; O2-LABEL: atomic32_load_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection108: +; O2-NEXT: .Lpcsection168: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4776,7 +5016,7 @@ define i32 @atomic32_load_unordered(ptr %a) { ; O3-LABEL: atomic32_load_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection108: +; O3-NEXT: .Lpcsection168: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4791,7 +5031,7 @@ define i32 @atomic32_load_monotonic(ptr %a) { ; O0-LABEL: atomic32_load_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection149: +; O0-NEXT: .Lpcsection209: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4799,7 +5039,7 @@ define i32 @atomic32_load_monotonic(ptr %a) { ; O1-LABEL: atomic32_load_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection109: +; O1-NEXT: .Lpcsection169: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4807,7 +5047,7 @@ define i32 @atomic32_load_monotonic(ptr %a) { ; O2-LABEL: atomic32_load_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection109: +; O2-NEXT: .Lpcsection169: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4815,7 +5055,7 @@ define i32 @atomic32_load_monotonic(ptr %a) { ; O3-LABEL: atomic32_load_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection109: +; O3-NEXT: .Lpcsection169: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4830,7 +5070,7 @@ define i32 @atomic32_load_acquire(ptr %a) { ; O0-LABEL: atomic32_load_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection150: +; O0-NEXT: .Lpcsection210: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4838,7 +5078,7 @@ define i32 @atomic32_load_acquire(ptr %a) { ; O1-LABEL: atomic32_load_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection110: +; O1-NEXT: .Lpcsection170: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4846,7 +5086,7 @@ define i32 @atomic32_load_acquire(ptr %a) { ; O2-LABEL: atomic32_load_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection110: +; O2-NEXT: .Lpcsection170: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4854,7 +5094,7 @@ define i32 @atomic32_load_acquire(ptr %a) { ; O3-LABEL: atomic32_load_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection110: +; O3-NEXT: .Lpcsection170: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4869,7 +5109,7 @@ define i32 @atomic32_load_seq_cst(ptr %a) { ; O0-LABEL: atomic32_load_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection151: +; O0-NEXT: .Lpcsection211: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4877,7 +5117,7 @@ define i32 @atomic32_load_seq_cst(ptr %a) { ; O1-LABEL: atomic32_load_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection111: +; O1-NEXT: .Lpcsection171: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4885,7 +5125,7 @@ define i32 @atomic32_load_seq_cst(ptr %a) { ; O2-LABEL: atomic32_load_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection111: +; O2-NEXT: .Lpcsection171: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4893,7 +5133,7 @@ define i32 @atomic32_load_seq_cst(ptr %a) { ; O3-LABEL: atomic32_load_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection111: +; O3-NEXT: .Lpcsection171: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4908,7 +5148,7 @@ define void @atomic32_store_unordered(ptr %a) { ; O0-LABEL: atomic32_store_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection152: +; O0-NEXT: .Lpcsection212: ; O0-NEXT: movl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4916,7 +5156,7 @@ define void @atomic32_store_unordered(ptr %a) { ; O1-LABEL: atomic32_store_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection112: +; O1-NEXT: .Lpcsection172: ; O1-NEXT: movl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4924,7 +5164,7 @@ define void @atomic32_store_unordered(ptr %a) { ; O2-LABEL: atomic32_store_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection112: +; O2-NEXT: .Lpcsection172: ; O2-NEXT: movl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4932,7 +5172,7 @@ define void @atomic32_store_unordered(ptr %a) { ; O3-LABEL: atomic32_store_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection112: +; O3-NEXT: .Lpcsection172: ; O3-NEXT: movl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4947,7 +5187,7 @@ define void @atomic32_store_monotonic(ptr %a) { ; O0-LABEL: atomic32_store_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection153: +; O0-NEXT: .Lpcsection213: ; O0-NEXT: movl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4955,7 +5195,7 @@ define void @atomic32_store_monotonic(ptr %a) { ; O1-LABEL: atomic32_store_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection113: +; O1-NEXT: .Lpcsection173: ; O1-NEXT: movl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -4963,7 +5203,7 @@ define void @atomic32_store_monotonic(ptr %a) { ; O2-LABEL: atomic32_store_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection113: +; O2-NEXT: .Lpcsection173: ; O2-NEXT: movl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -4971,7 +5211,7 @@ define void @atomic32_store_monotonic(ptr %a) { ; O3-LABEL: atomic32_store_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection113: +; O3-NEXT: .Lpcsection173: ; O3-NEXT: movl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -4986,7 +5226,7 @@ define void @atomic32_store_release(ptr %a) { ; O0-LABEL: atomic32_store_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection154: +; O0-NEXT: .Lpcsection214: ; O0-NEXT: movl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -4994,7 +5234,7 @@ define void @atomic32_store_release(ptr %a) { ; O1-LABEL: atomic32_store_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection114: +; O1-NEXT: .Lpcsection174: ; O1-NEXT: movl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5002,7 +5242,7 @@ define void @atomic32_store_release(ptr %a) { ; O2-LABEL: atomic32_store_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection114: +; O2-NEXT: .Lpcsection174: ; O2-NEXT: movl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5010,7 +5250,7 @@ define void @atomic32_store_release(ptr %a) { ; O3-LABEL: atomic32_store_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection114: +; O3-NEXT: .Lpcsection174: ; O3-NEXT: movl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5026,7 +5266,7 @@ define void @atomic32_store_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection155: +; O0-NEXT: .Lpcsection215: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5035,7 +5275,7 @@ define void @atomic32_store_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection115: +; O1-NEXT: .Lpcsection175: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5044,7 +5284,7 @@ define void @atomic32_store_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection115: +; O2-NEXT: .Lpcsection175: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5053,7 +5293,7 @@ define void @atomic32_store_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection115: +; O3-NEXT: .Lpcsection175: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5069,7 +5309,7 @@ define void @atomic32_xchg_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection156: +; O0-NEXT: .Lpcsection216: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5078,7 +5318,7 @@ define void @atomic32_xchg_monotonic(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection116: +; O1-NEXT: .Lpcsection176: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5087,7 +5327,7 @@ define void @atomic32_xchg_monotonic(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection116: +; O2-NEXT: .Lpcsection176: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5096,7 +5336,7 @@ define void @atomic32_xchg_monotonic(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection116: +; O3-NEXT: .Lpcsection176: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5111,7 +5351,7 @@ define void @atomic32_add_monotonic(ptr %a) { ; O0-LABEL: atomic32_add_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection157: +; O0-NEXT: .Lpcsection217: ; O0-NEXT: lock addl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5119,7 +5359,7 @@ define void @atomic32_add_monotonic(ptr %a) { ; O1-LABEL: atomic32_add_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection117: +; O1-NEXT: .Lpcsection177: ; O1-NEXT: lock addl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5127,7 +5367,7 @@ define void @atomic32_add_monotonic(ptr %a) { ; O2-LABEL: atomic32_add_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection117: +; O2-NEXT: .Lpcsection177: ; O2-NEXT: lock addl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5135,7 +5375,7 @@ define void @atomic32_add_monotonic(ptr %a) { ; O3-LABEL: atomic32_add_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection117: +; O3-NEXT: .Lpcsection177: ; O3-NEXT: lock addl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5150,7 +5390,7 @@ define void @atomic32_sub_monotonic(ptr %a) { ; O0-LABEL: atomic32_sub_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection158: +; O0-NEXT: .Lpcsection218: ; O0-NEXT: lock subl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5158,7 +5398,7 @@ define void @atomic32_sub_monotonic(ptr %a) { ; O1-LABEL: atomic32_sub_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection118: +; O1-NEXT: .Lpcsection178: ; O1-NEXT: lock subl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5166,7 +5406,7 @@ define void @atomic32_sub_monotonic(ptr %a) { ; O2-LABEL: atomic32_sub_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection118: +; O2-NEXT: .Lpcsection178: ; O2-NEXT: lock subl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5174,7 +5414,7 @@ define void @atomic32_sub_monotonic(ptr %a) { ; O3-LABEL: atomic32_sub_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection118: +; O3-NEXT: .Lpcsection178: ; O3-NEXT: lock subl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5189,7 +5429,7 @@ define void @atomic32_and_monotonic(ptr %a) { ; O0-LABEL: atomic32_and_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection159: +; O0-NEXT: .Lpcsection219: ; O0-NEXT: lock andl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5197,7 +5437,7 @@ define void @atomic32_and_monotonic(ptr %a) { ; O1-LABEL: atomic32_and_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection119: +; O1-NEXT: .Lpcsection179: ; O1-NEXT: lock andl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5205,7 +5445,7 @@ define void @atomic32_and_monotonic(ptr %a) { ; O2-LABEL: atomic32_and_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection119: +; O2-NEXT: .Lpcsection179: ; O2-NEXT: lock andl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5213,7 +5453,7 @@ define void @atomic32_and_monotonic(ptr %a) { ; O3-LABEL: atomic32_and_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection119: +; O3-NEXT: .Lpcsection179: ; O3-NEXT: lock andl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5228,7 +5468,7 @@ define void @atomic32_or_monotonic(ptr %a) { ; O0-LABEL: atomic32_or_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection160: +; O0-NEXT: .Lpcsection220: ; O0-NEXT: lock orl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5236,7 +5476,7 @@ define void @atomic32_or_monotonic(ptr %a) { ; O1-LABEL: atomic32_or_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection120: +; O1-NEXT: .Lpcsection180: ; O1-NEXT: lock orl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5244,7 +5484,7 @@ define void @atomic32_or_monotonic(ptr %a) { ; O2-LABEL: atomic32_or_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection120: +; O2-NEXT: .Lpcsection180: ; O2-NEXT: lock orl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5252,7 +5492,7 @@ define void @atomic32_or_monotonic(ptr %a) { ; O3-LABEL: atomic32_or_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection120: +; O3-NEXT: .Lpcsection180: ; O3-NEXT: lock orl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5267,7 +5507,7 @@ define void @atomic32_xor_monotonic(ptr %a) { ; O0-LABEL: atomic32_xor_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection161: +; O0-NEXT: .Lpcsection221: ; O0-NEXT: lock xorl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5275,7 +5515,7 @@ define void @atomic32_xor_monotonic(ptr %a) { ; O1-LABEL: atomic32_xor_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection121: +; O1-NEXT: .Lpcsection181: ; O1-NEXT: lock xorl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5283,7 +5523,7 @@ define void @atomic32_xor_monotonic(ptr %a) { ; O2-LABEL: atomic32_xor_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection121: +; O2-NEXT: .Lpcsection181: ; O2-NEXT: lock xorl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5291,7 +5531,7 @@ define void @atomic32_xor_monotonic(ptr %a) { ; O3-LABEL: atomic32_xor_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection121: +; O3-NEXT: .Lpcsection181: ; O3-NEXT: lock xorl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5307,7 +5547,7 @@ define void @atomic32_nand_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection162: +; O0-NEXT: .Lpcsection222: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: .LBB112_1: # %atomicrmw.start @@ -5315,16 +5555,18 @@ define void @atomic32_nand_monotonic(ptr %a) { ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %edx +; O0-NEXT: .Lpcsection223: ; O0-NEXT: notl %edx -; O0-NEXT: .Lpcsection163: +; O0-NEXT: .Lpcsection224: ; O0-NEXT: orl $-43, %edx +; O0-NEXT: .Lpcsection225: ; O0-NEXT: lock cmpxchgl %edx, (%rcx) -; O0-NEXT: .Lpcsection164: +; O0-NEXT: .Lpcsection226: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection165: +; O0-NEXT: .Lpcsection227: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill -; O0-NEXT: .Lpcsection166: +; O0-NEXT: .Lpcsection228: ; O0-NEXT: jne .LBB112_2 ; O0-NEXT: jmp .LBB112_1 ; O0-NEXT: .LBB112_2: # %atomicrmw.end @@ -5334,17 +5576,19 @@ define void @atomic32_nand_monotonic(ptr %a) { ; O1-LABEL: atomic32_nand_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection122: +; O1-NEXT: .Lpcsection182: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB112_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection183: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection123: +; O1-NEXT: .Lpcsection184: ; O1-NEXT: orl $-43, %ecx +; O1-NEXT: .Lpcsection185: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) -; O1-NEXT: .Lpcsection124: +; O1-NEXT: .Lpcsection186: ; O1-NEXT: jne .LBB112_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -5353,17 +5597,19 @@ define void @atomic32_nand_monotonic(ptr %a) { ; O2-LABEL: atomic32_nand_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection122: +; O2-NEXT: .Lpcsection182: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB112_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection183: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection123: +; O2-NEXT: .Lpcsection184: ; O2-NEXT: orl $-43, %ecx +; O2-NEXT: .Lpcsection185: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) -; O2-NEXT: .Lpcsection124: +; O2-NEXT: .Lpcsection186: ; O2-NEXT: jne .LBB112_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -5372,17 +5618,19 @@ define void @atomic32_nand_monotonic(ptr %a) { ; O3-LABEL: atomic32_nand_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection122: +; O3-NEXT: .Lpcsection182: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB112_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection183: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection123: +; O3-NEXT: .Lpcsection184: ; O3-NEXT: orl $-43, %ecx +; O3-NEXT: .Lpcsection185: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) -; O3-NEXT: .Lpcsection124: +; O3-NEXT: .Lpcsection186: ; O3-NEXT: jne .LBB112_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -5399,7 +5647,7 @@ define void @atomic32_xchg_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection167: +; O0-NEXT: .Lpcsection229: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5408,7 +5656,7 @@ define void @atomic32_xchg_acquire(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection125: +; O1-NEXT: .Lpcsection187: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5417,7 +5665,7 @@ define void @atomic32_xchg_acquire(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection125: +; O2-NEXT: .Lpcsection187: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5426,7 +5674,7 @@ define void @atomic32_xchg_acquire(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection125: +; O3-NEXT: .Lpcsection187: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5441,7 +5689,7 @@ define void @atomic32_add_acquire(ptr %a) { ; O0-LABEL: atomic32_add_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection168: +; O0-NEXT: .Lpcsection230: ; O0-NEXT: lock addl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5449,7 +5697,7 @@ define void @atomic32_add_acquire(ptr %a) { ; O1-LABEL: atomic32_add_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection126: +; O1-NEXT: .Lpcsection188: ; O1-NEXT: lock addl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5457,7 +5705,7 @@ define void @atomic32_add_acquire(ptr %a) { ; O2-LABEL: atomic32_add_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection126: +; O2-NEXT: .Lpcsection188: ; O2-NEXT: lock addl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5465,7 +5713,7 @@ define void @atomic32_add_acquire(ptr %a) { ; O3-LABEL: atomic32_add_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection126: +; O3-NEXT: .Lpcsection188: ; O3-NEXT: lock addl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5480,7 +5728,7 @@ define void @atomic32_sub_acquire(ptr %a) { ; O0-LABEL: atomic32_sub_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection169: +; O0-NEXT: .Lpcsection231: ; O0-NEXT: lock subl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5488,7 +5736,7 @@ define void @atomic32_sub_acquire(ptr %a) { ; O1-LABEL: atomic32_sub_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection127: +; O1-NEXT: .Lpcsection189: ; O1-NEXT: lock subl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5496,7 +5744,7 @@ define void @atomic32_sub_acquire(ptr %a) { ; O2-LABEL: atomic32_sub_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection127: +; O2-NEXT: .Lpcsection189: ; O2-NEXT: lock subl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5504,7 +5752,7 @@ define void @atomic32_sub_acquire(ptr %a) { ; O3-LABEL: atomic32_sub_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection127: +; O3-NEXT: .Lpcsection189: ; O3-NEXT: lock subl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5519,7 +5767,7 @@ define void @atomic32_and_acquire(ptr %a) { ; O0-LABEL: atomic32_and_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection170: +; O0-NEXT: .Lpcsection232: ; O0-NEXT: lock andl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5527,7 +5775,7 @@ define void @atomic32_and_acquire(ptr %a) { ; O1-LABEL: atomic32_and_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection128: +; O1-NEXT: .Lpcsection190: ; O1-NEXT: lock andl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5535,7 +5783,7 @@ define void @atomic32_and_acquire(ptr %a) { ; O2-LABEL: atomic32_and_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection128: +; O2-NEXT: .Lpcsection190: ; O2-NEXT: lock andl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5543,7 +5791,7 @@ define void @atomic32_and_acquire(ptr %a) { ; O3-LABEL: atomic32_and_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection128: +; O3-NEXT: .Lpcsection190: ; O3-NEXT: lock andl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5558,7 +5806,7 @@ define void @atomic32_or_acquire(ptr %a) { ; O0-LABEL: atomic32_or_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection171: +; O0-NEXT: .Lpcsection233: ; O0-NEXT: lock orl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5566,7 +5814,7 @@ define void @atomic32_or_acquire(ptr %a) { ; O1-LABEL: atomic32_or_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection129: +; O1-NEXT: .Lpcsection191: ; O1-NEXT: lock orl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5574,7 +5822,7 @@ define void @atomic32_or_acquire(ptr %a) { ; O2-LABEL: atomic32_or_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection129: +; O2-NEXT: .Lpcsection191: ; O2-NEXT: lock orl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5582,7 +5830,7 @@ define void @atomic32_or_acquire(ptr %a) { ; O3-LABEL: atomic32_or_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection129: +; O3-NEXT: .Lpcsection191: ; O3-NEXT: lock orl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5597,7 +5845,7 @@ define void @atomic32_xor_acquire(ptr %a) { ; O0-LABEL: atomic32_xor_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection172: +; O0-NEXT: .Lpcsection234: ; O0-NEXT: lock xorl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5605,7 +5853,7 @@ define void @atomic32_xor_acquire(ptr %a) { ; O1-LABEL: atomic32_xor_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection130: +; O1-NEXT: .Lpcsection192: ; O1-NEXT: lock xorl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5613,7 +5861,7 @@ define void @atomic32_xor_acquire(ptr %a) { ; O2-LABEL: atomic32_xor_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection130: +; O2-NEXT: .Lpcsection192: ; O2-NEXT: lock xorl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5621,7 +5869,7 @@ define void @atomic32_xor_acquire(ptr %a) { ; O3-LABEL: atomic32_xor_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection130: +; O3-NEXT: .Lpcsection192: ; O3-NEXT: lock xorl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5637,7 +5885,7 @@ define void @atomic32_nand_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection173: +; O0-NEXT: .Lpcsection235: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: .LBB119_1: # %atomicrmw.start @@ -5645,16 +5893,18 @@ define void @atomic32_nand_acquire(ptr %a) { ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %edx +; O0-NEXT: .Lpcsection236: ; O0-NEXT: notl %edx -; O0-NEXT: .Lpcsection174: +; O0-NEXT: .Lpcsection237: ; O0-NEXT: orl $-43, %edx +; O0-NEXT: .Lpcsection238: ; O0-NEXT: lock cmpxchgl %edx, (%rcx) -; O0-NEXT: .Lpcsection175: +; O0-NEXT: .Lpcsection239: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection176: +; O0-NEXT: .Lpcsection240: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill -; O0-NEXT: .Lpcsection177: +; O0-NEXT: .Lpcsection241: ; O0-NEXT: jne .LBB119_2 ; O0-NEXT: jmp .LBB119_1 ; O0-NEXT: .LBB119_2: # %atomicrmw.end @@ -5664,17 +5914,19 @@ define void @atomic32_nand_acquire(ptr %a) { ; O1-LABEL: atomic32_nand_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection131: +; O1-NEXT: .Lpcsection193: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB119_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection194: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection132: +; O1-NEXT: .Lpcsection195: ; O1-NEXT: orl $-43, %ecx +; O1-NEXT: .Lpcsection196: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) -; O1-NEXT: .Lpcsection133: +; O1-NEXT: .Lpcsection197: ; O1-NEXT: jne .LBB119_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -5683,17 +5935,19 @@ define void @atomic32_nand_acquire(ptr %a) { ; O2-LABEL: atomic32_nand_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection131: +; O2-NEXT: .Lpcsection193: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB119_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection194: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection132: +; O2-NEXT: .Lpcsection195: ; O2-NEXT: orl $-43, %ecx +; O2-NEXT: .Lpcsection196: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) -; O2-NEXT: .Lpcsection133: +; O2-NEXT: .Lpcsection197: ; O2-NEXT: jne .LBB119_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -5702,17 +5956,19 @@ define void @atomic32_nand_acquire(ptr %a) { ; O3-LABEL: atomic32_nand_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection131: +; O3-NEXT: .Lpcsection193: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB119_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection194: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection132: +; O3-NEXT: .Lpcsection195: ; O3-NEXT: orl $-43, %ecx +; O3-NEXT: .Lpcsection196: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) -; O3-NEXT: .Lpcsection133: +; O3-NEXT: .Lpcsection197: ; O3-NEXT: jne .LBB119_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -5729,7 +5985,7 @@ define void @atomic32_xchg_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection178: +; O0-NEXT: .Lpcsection242: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5738,7 +5994,7 @@ define void @atomic32_xchg_release(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection134: +; O1-NEXT: .Lpcsection198: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5747,7 +6003,7 @@ define void @atomic32_xchg_release(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection134: +; O2-NEXT: .Lpcsection198: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5756,7 +6012,7 @@ define void @atomic32_xchg_release(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection134: +; O3-NEXT: .Lpcsection198: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5771,7 +6027,7 @@ define void @atomic32_add_release(ptr %a) { ; O0-LABEL: atomic32_add_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection179: +; O0-NEXT: .Lpcsection243: ; O0-NEXT: lock addl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5779,7 +6035,7 @@ define void @atomic32_add_release(ptr %a) { ; O1-LABEL: atomic32_add_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection135: +; O1-NEXT: .Lpcsection199: ; O1-NEXT: lock addl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5787,7 +6043,7 @@ define void @atomic32_add_release(ptr %a) { ; O2-LABEL: atomic32_add_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection135: +; O2-NEXT: .Lpcsection199: ; O2-NEXT: lock addl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5795,7 +6051,7 @@ define void @atomic32_add_release(ptr %a) { ; O3-LABEL: atomic32_add_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection135: +; O3-NEXT: .Lpcsection199: ; O3-NEXT: lock addl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5810,7 +6066,7 @@ define void @atomic32_sub_release(ptr %a) { ; O0-LABEL: atomic32_sub_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection180: +; O0-NEXT: .Lpcsection244: ; O0-NEXT: lock subl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5818,7 +6074,7 @@ define void @atomic32_sub_release(ptr %a) { ; O1-LABEL: atomic32_sub_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection136: +; O1-NEXT: .Lpcsection200: ; O1-NEXT: lock subl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5826,7 +6082,7 @@ define void @atomic32_sub_release(ptr %a) { ; O2-LABEL: atomic32_sub_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection136: +; O2-NEXT: .Lpcsection200: ; O2-NEXT: lock subl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5834,7 +6090,7 @@ define void @atomic32_sub_release(ptr %a) { ; O3-LABEL: atomic32_sub_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection136: +; O3-NEXT: .Lpcsection200: ; O3-NEXT: lock subl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5849,7 +6105,7 @@ define void @atomic32_and_release(ptr %a) { ; O0-LABEL: atomic32_and_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection181: +; O0-NEXT: .Lpcsection245: ; O0-NEXT: lock andl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5857,7 +6113,7 @@ define void @atomic32_and_release(ptr %a) { ; O1-LABEL: atomic32_and_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection137: +; O1-NEXT: .Lpcsection201: ; O1-NEXT: lock andl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5865,7 +6121,7 @@ define void @atomic32_and_release(ptr %a) { ; O2-LABEL: atomic32_and_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection137: +; O2-NEXT: .Lpcsection201: ; O2-NEXT: lock andl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5873,7 +6129,7 @@ define void @atomic32_and_release(ptr %a) { ; O3-LABEL: atomic32_and_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection137: +; O3-NEXT: .Lpcsection201: ; O3-NEXT: lock andl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5888,7 +6144,7 @@ define void @atomic32_or_release(ptr %a) { ; O0-LABEL: atomic32_or_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection182: +; O0-NEXT: .Lpcsection246: ; O0-NEXT: lock orl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5896,7 +6152,7 @@ define void @atomic32_or_release(ptr %a) { ; O1-LABEL: atomic32_or_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection138: +; O1-NEXT: .Lpcsection202: ; O1-NEXT: lock orl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5904,7 +6160,7 @@ define void @atomic32_or_release(ptr %a) { ; O2-LABEL: atomic32_or_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection138: +; O2-NEXT: .Lpcsection202: ; O2-NEXT: lock orl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5912,7 +6168,7 @@ define void @atomic32_or_release(ptr %a) { ; O3-LABEL: atomic32_or_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection138: +; O3-NEXT: .Lpcsection202: ; O3-NEXT: lock orl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5927,7 +6183,7 @@ define void @atomic32_xor_release(ptr %a) { ; O0-LABEL: atomic32_xor_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection183: +; O0-NEXT: .Lpcsection247: ; O0-NEXT: lock xorl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -5935,7 +6191,7 @@ define void @atomic32_xor_release(ptr %a) { ; O1-LABEL: atomic32_xor_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection139: +; O1-NEXT: .Lpcsection203: ; O1-NEXT: lock xorl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -5943,7 +6199,7 @@ define void @atomic32_xor_release(ptr %a) { ; O2-LABEL: atomic32_xor_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection139: +; O2-NEXT: .Lpcsection203: ; O2-NEXT: lock xorl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -5951,7 +6207,7 @@ define void @atomic32_xor_release(ptr %a) { ; O3-LABEL: atomic32_xor_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection139: +; O3-NEXT: .Lpcsection203: ; O3-NEXT: lock xorl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -5967,7 +6223,7 @@ define void @atomic32_nand_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection184: +; O0-NEXT: .Lpcsection248: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: .LBB126_1: # %atomicrmw.start @@ -5975,16 +6231,18 @@ define void @atomic32_nand_release(ptr %a) { ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %edx +; O0-NEXT: .Lpcsection249: ; O0-NEXT: notl %edx -; O0-NEXT: .Lpcsection185: +; O0-NEXT: .Lpcsection250: ; O0-NEXT: orl $-43, %edx +; O0-NEXT: .Lpcsection251: ; O0-NEXT: lock cmpxchgl %edx, (%rcx) -; O0-NEXT: .Lpcsection186: +; O0-NEXT: .Lpcsection252: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection187: +; O0-NEXT: .Lpcsection253: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill -; O0-NEXT: .Lpcsection188: +; O0-NEXT: .Lpcsection254: ; O0-NEXT: jne .LBB126_2 ; O0-NEXT: jmp .LBB126_1 ; O0-NEXT: .LBB126_2: # %atomicrmw.end @@ -5994,17 +6252,19 @@ define void @atomic32_nand_release(ptr %a) { ; O1-LABEL: atomic32_nand_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection140: +; O1-NEXT: .Lpcsection204: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB126_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection205: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection141: +; O1-NEXT: .Lpcsection206: ; O1-NEXT: orl $-43, %ecx +; O1-NEXT: .Lpcsection207: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) -; O1-NEXT: .Lpcsection142: +; O1-NEXT: .Lpcsection208: ; O1-NEXT: jne .LBB126_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -6013,17 +6273,19 @@ define void @atomic32_nand_release(ptr %a) { ; O2-LABEL: atomic32_nand_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection140: +; O2-NEXT: .Lpcsection204: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB126_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection205: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection141: +; O2-NEXT: .Lpcsection206: ; O2-NEXT: orl $-43, %ecx +; O2-NEXT: .Lpcsection207: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) -; O2-NEXT: .Lpcsection142: +; O2-NEXT: .Lpcsection208: ; O2-NEXT: jne .LBB126_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -6032,17 +6294,19 @@ define void @atomic32_nand_release(ptr %a) { ; O3-LABEL: atomic32_nand_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection140: +; O3-NEXT: .Lpcsection204: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB126_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection205: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection141: +; O3-NEXT: .Lpcsection206: ; O3-NEXT: orl $-43, %ecx +; O3-NEXT: .Lpcsection207: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) -; O3-NEXT: .Lpcsection142: +; O3-NEXT: .Lpcsection208: ; O3-NEXT: jne .LBB126_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -6059,7 +6323,7 @@ define void @atomic32_xchg_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection189: +; O0-NEXT: .Lpcsection255: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6068,7 +6332,7 @@ define void @atomic32_xchg_acq_rel(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection143: +; O1-NEXT: .Lpcsection209: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6077,7 +6341,7 @@ define void @atomic32_xchg_acq_rel(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection143: +; O2-NEXT: .Lpcsection209: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6086,7 +6350,7 @@ define void @atomic32_xchg_acq_rel(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection143: +; O3-NEXT: .Lpcsection209: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6101,7 +6365,7 @@ define void @atomic32_add_acq_rel(ptr %a) { ; O0-LABEL: atomic32_add_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection190: +; O0-NEXT: .Lpcsection256: ; O0-NEXT: lock addl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6109,7 +6373,7 @@ define void @atomic32_add_acq_rel(ptr %a) { ; O1-LABEL: atomic32_add_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection144: +; O1-NEXT: .Lpcsection210: ; O1-NEXT: lock addl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6117,7 +6381,7 @@ define void @atomic32_add_acq_rel(ptr %a) { ; O2-LABEL: atomic32_add_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection144: +; O2-NEXT: .Lpcsection210: ; O2-NEXT: lock addl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6125,7 +6389,7 @@ define void @atomic32_add_acq_rel(ptr %a) { ; O3-LABEL: atomic32_add_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection144: +; O3-NEXT: .Lpcsection210: ; O3-NEXT: lock addl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6140,7 +6404,7 @@ define void @atomic32_sub_acq_rel(ptr %a) { ; O0-LABEL: atomic32_sub_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection191: +; O0-NEXT: .Lpcsection257: ; O0-NEXT: lock subl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6148,7 +6412,7 @@ define void @atomic32_sub_acq_rel(ptr %a) { ; O1-LABEL: atomic32_sub_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection145: +; O1-NEXT: .Lpcsection211: ; O1-NEXT: lock subl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6156,7 +6420,7 @@ define void @atomic32_sub_acq_rel(ptr %a) { ; O2-LABEL: atomic32_sub_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection145: +; O2-NEXT: .Lpcsection211: ; O2-NEXT: lock subl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6164,7 +6428,7 @@ define void @atomic32_sub_acq_rel(ptr %a) { ; O3-LABEL: atomic32_sub_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection145: +; O3-NEXT: .Lpcsection211: ; O3-NEXT: lock subl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6179,7 +6443,7 @@ define void @atomic32_and_acq_rel(ptr %a) { ; O0-LABEL: atomic32_and_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection192: +; O0-NEXT: .Lpcsection258: ; O0-NEXT: lock andl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6187,7 +6451,7 @@ define void @atomic32_and_acq_rel(ptr %a) { ; O1-LABEL: atomic32_and_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection146: +; O1-NEXT: .Lpcsection212: ; O1-NEXT: lock andl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6195,7 +6459,7 @@ define void @atomic32_and_acq_rel(ptr %a) { ; O2-LABEL: atomic32_and_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection146: +; O2-NEXT: .Lpcsection212: ; O2-NEXT: lock andl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6203,7 +6467,7 @@ define void @atomic32_and_acq_rel(ptr %a) { ; O3-LABEL: atomic32_and_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection146: +; O3-NEXT: .Lpcsection212: ; O3-NEXT: lock andl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6218,7 +6482,7 @@ define void @atomic32_or_acq_rel(ptr %a) { ; O0-LABEL: atomic32_or_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection193: +; O0-NEXT: .Lpcsection259: ; O0-NEXT: lock orl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6226,7 +6490,7 @@ define void @atomic32_or_acq_rel(ptr %a) { ; O1-LABEL: atomic32_or_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection147: +; O1-NEXT: .Lpcsection213: ; O1-NEXT: lock orl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6234,7 +6498,7 @@ define void @atomic32_or_acq_rel(ptr %a) { ; O2-LABEL: atomic32_or_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection147: +; O2-NEXT: .Lpcsection213: ; O2-NEXT: lock orl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6242,7 +6506,7 @@ define void @atomic32_or_acq_rel(ptr %a) { ; O3-LABEL: atomic32_or_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection147: +; O3-NEXT: .Lpcsection213: ; O3-NEXT: lock orl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6257,7 +6521,7 @@ define void @atomic32_xor_acq_rel(ptr %a) { ; O0-LABEL: atomic32_xor_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection194: +; O0-NEXT: .Lpcsection260: ; O0-NEXT: lock xorl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6265,7 +6529,7 @@ define void @atomic32_xor_acq_rel(ptr %a) { ; O1-LABEL: atomic32_xor_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection148: +; O1-NEXT: .Lpcsection214: ; O1-NEXT: lock xorl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6273,7 +6537,7 @@ define void @atomic32_xor_acq_rel(ptr %a) { ; O2-LABEL: atomic32_xor_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection148: +; O2-NEXT: .Lpcsection214: ; O2-NEXT: lock xorl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6281,7 +6545,7 @@ define void @atomic32_xor_acq_rel(ptr %a) { ; O3-LABEL: atomic32_xor_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection148: +; O3-NEXT: .Lpcsection214: ; O3-NEXT: lock xorl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6297,7 +6561,7 @@ define void @atomic32_nand_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection195: +; O0-NEXT: .Lpcsection261: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: .LBB133_1: # %atomicrmw.start @@ -6305,16 +6569,18 @@ define void @atomic32_nand_acq_rel(ptr %a) { ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %edx +; O0-NEXT: .Lpcsection262: ; O0-NEXT: notl %edx -; O0-NEXT: .Lpcsection196: +; O0-NEXT: .Lpcsection263: ; O0-NEXT: orl $-43, %edx +; O0-NEXT: .Lpcsection264: ; O0-NEXT: lock cmpxchgl %edx, (%rcx) -; O0-NEXT: .Lpcsection197: +; O0-NEXT: .Lpcsection265: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection198: +; O0-NEXT: .Lpcsection266: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill -; O0-NEXT: .Lpcsection199: +; O0-NEXT: .Lpcsection267: ; O0-NEXT: jne .LBB133_2 ; O0-NEXT: jmp .LBB133_1 ; O0-NEXT: .LBB133_2: # %atomicrmw.end @@ -6324,17 +6590,19 @@ define void @atomic32_nand_acq_rel(ptr %a) { ; O1-LABEL: atomic32_nand_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection149: +; O1-NEXT: .Lpcsection215: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB133_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection216: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection150: +; O1-NEXT: .Lpcsection217: ; O1-NEXT: orl $-43, %ecx +; O1-NEXT: .Lpcsection218: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) -; O1-NEXT: .Lpcsection151: +; O1-NEXT: .Lpcsection219: ; O1-NEXT: jne .LBB133_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -6343,17 +6611,19 @@ define void @atomic32_nand_acq_rel(ptr %a) { ; O2-LABEL: atomic32_nand_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection149: +; O2-NEXT: .Lpcsection215: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB133_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection216: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection150: +; O2-NEXT: .Lpcsection217: ; O2-NEXT: orl $-43, %ecx +; O2-NEXT: .Lpcsection218: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) -; O2-NEXT: .Lpcsection151: +; O2-NEXT: .Lpcsection219: ; O2-NEXT: jne .LBB133_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -6362,17 +6632,19 @@ define void @atomic32_nand_acq_rel(ptr %a) { ; O3-LABEL: atomic32_nand_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection149: +; O3-NEXT: .Lpcsection215: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB133_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection216: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection150: +; O3-NEXT: .Lpcsection217: ; O3-NEXT: orl $-43, %ecx +; O3-NEXT: .Lpcsection218: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) -; O3-NEXT: .Lpcsection151: +; O3-NEXT: .Lpcsection219: ; O3-NEXT: jne .LBB133_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -6389,7 +6661,7 @@ define void @atomic32_xchg_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection200: +; O0-NEXT: .Lpcsection268: ; O0-NEXT: xchgl %eax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6398,7 +6670,7 @@ define void @atomic32_xchg_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection152: +; O1-NEXT: .Lpcsection220: ; O1-NEXT: xchgl %eax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6407,7 +6679,7 @@ define void @atomic32_xchg_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection152: +; O2-NEXT: .Lpcsection220: ; O2-NEXT: xchgl %eax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6416,7 +6688,7 @@ define void @atomic32_xchg_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection152: +; O3-NEXT: .Lpcsection220: ; O3-NEXT: xchgl %eax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6431,7 +6703,7 @@ define void @atomic32_add_seq_cst(ptr %a) { ; O0-LABEL: atomic32_add_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection201: +; O0-NEXT: .Lpcsection269: ; O0-NEXT: lock addl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6439,7 +6711,7 @@ define void @atomic32_add_seq_cst(ptr %a) { ; O1-LABEL: atomic32_add_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection153: +; O1-NEXT: .Lpcsection221: ; O1-NEXT: lock addl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6447,7 +6719,7 @@ define void @atomic32_add_seq_cst(ptr %a) { ; O2-LABEL: atomic32_add_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection153: +; O2-NEXT: .Lpcsection221: ; O2-NEXT: lock addl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6455,7 +6727,7 @@ define void @atomic32_add_seq_cst(ptr %a) { ; O3-LABEL: atomic32_add_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection153: +; O3-NEXT: .Lpcsection221: ; O3-NEXT: lock addl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6470,7 +6742,7 @@ define void @atomic32_sub_seq_cst(ptr %a) { ; O0-LABEL: atomic32_sub_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection202: +; O0-NEXT: .Lpcsection270: ; O0-NEXT: lock subl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6478,7 +6750,7 @@ define void @atomic32_sub_seq_cst(ptr %a) { ; O1-LABEL: atomic32_sub_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection154: +; O1-NEXT: .Lpcsection222: ; O1-NEXT: lock subl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6486,7 +6758,7 @@ define void @atomic32_sub_seq_cst(ptr %a) { ; O2-LABEL: atomic32_sub_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection154: +; O2-NEXT: .Lpcsection222: ; O2-NEXT: lock subl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6494,7 +6766,7 @@ define void @atomic32_sub_seq_cst(ptr %a) { ; O3-LABEL: atomic32_sub_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection154: +; O3-NEXT: .Lpcsection222: ; O3-NEXT: lock subl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6509,7 +6781,7 @@ define void @atomic32_and_seq_cst(ptr %a) { ; O0-LABEL: atomic32_and_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection203: +; O0-NEXT: .Lpcsection271: ; O0-NEXT: lock andl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6517,7 +6789,7 @@ define void @atomic32_and_seq_cst(ptr %a) { ; O1-LABEL: atomic32_and_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection155: +; O1-NEXT: .Lpcsection223: ; O1-NEXT: lock andl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6525,7 +6797,7 @@ define void @atomic32_and_seq_cst(ptr %a) { ; O2-LABEL: atomic32_and_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection155: +; O2-NEXT: .Lpcsection223: ; O2-NEXT: lock andl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6533,7 +6805,7 @@ define void @atomic32_and_seq_cst(ptr %a) { ; O3-LABEL: atomic32_and_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection155: +; O3-NEXT: .Lpcsection223: ; O3-NEXT: lock andl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6548,7 +6820,7 @@ define void @atomic32_or_seq_cst(ptr %a) { ; O0-LABEL: atomic32_or_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection204: +; O0-NEXT: .Lpcsection272: ; O0-NEXT: lock orl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6556,7 +6828,7 @@ define void @atomic32_or_seq_cst(ptr %a) { ; O1-LABEL: atomic32_or_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection156: +; O1-NEXT: .Lpcsection224: ; O1-NEXT: lock orl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6564,7 +6836,7 @@ define void @atomic32_or_seq_cst(ptr %a) { ; O2-LABEL: atomic32_or_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection156: +; O2-NEXT: .Lpcsection224: ; O2-NEXT: lock orl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6572,7 +6844,7 @@ define void @atomic32_or_seq_cst(ptr %a) { ; O3-LABEL: atomic32_or_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection156: +; O3-NEXT: .Lpcsection224: ; O3-NEXT: lock orl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6587,7 +6859,7 @@ define void @atomic32_xor_seq_cst(ptr %a) { ; O0-LABEL: atomic32_xor_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection205: +; O0-NEXT: .Lpcsection273: ; O0-NEXT: lock xorl $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6595,7 +6867,7 @@ define void @atomic32_xor_seq_cst(ptr %a) { ; O1-LABEL: atomic32_xor_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection157: +; O1-NEXT: .Lpcsection225: ; O1-NEXT: lock xorl $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6603,7 +6875,7 @@ define void @atomic32_xor_seq_cst(ptr %a) { ; O2-LABEL: atomic32_xor_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection157: +; O2-NEXT: .Lpcsection225: ; O2-NEXT: lock xorl $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6611,7 +6883,7 @@ define void @atomic32_xor_seq_cst(ptr %a) { ; O3-LABEL: atomic32_xor_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection157: +; O3-NEXT: .Lpcsection225: ; O3-NEXT: lock xorl $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6627,7 +6899,7 @@ define void @atomic32_nand_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection206: +; O0-NEXT: .Lpcsection274: ; O0-NEXT: movl (%rdi), %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: .LBB140_1: # %atomicrmw.start @@ -6635,16 +6907,18 @@ define void @atomic32_nand_seq_cst(ptr %a) { ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %edx +; O0-NEXT: .Lpcsection275: ; O0-NEXT: notl %edx -; O0-NEXT: .Lpcsection207: +; O0-NEXT: .Lpcsection276: ; O0-NEXT: orl $-43, %edx +; O0-NEXT: .Lpcsection277: ; O0-NEXT: lock cmpxchgl %edx, (%rcx) -; O0-NEXT: .Lpcsection208: +; O0-NEXT: .Lpcsection278: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection209: +; O0-NEXT: .Lpcsection279: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill -; O0-NEXT: .Lpcsection210: +; O0-NEXT: .Lpcsection280: ; O0-NEXT: jne .LBB140_2 ; O0-NEXT: jmp .LBB140_1 ; O0-NEXT: .LBB140_2: # %atomicrmw.end @@ -6654,17 +6928,19 @@ define void @atomic32_nand_seq_cst(ptr %a) { ; O1-LABEL: atomic32_nand_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection158: +; O1-NEXT: .Lpcsection226: ; O1-NEXT: movl (%rdi), %eax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB140_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection227: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection159: +; O1-NEXT: .Lpcsection228: ; O1-NEXT: orl $-43, %ecx +; O1-NEXT: .Lpcsection229: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) -; O1-NEXT: .Lpcsection160: +; O1-NEXT: .Lpcsection230: ; O1-NEXT: jne .LBB140_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -6673,17 +6949,19 @@ define void @atomic32_nand_seq_cst(ptr %a) { ; O2-LABEL: atomic32_nand_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection158: +; O2-NEXT: .Lpcsection226: ; O2-NEXT: movl (%rdi), %eax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB140_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection227: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection159: +; O2-NEXT: .Lpcsection228: ; O2-NEXT: orl $-43, %ecx +; O2-NEXT: .Lpcsection229: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) -; O2-NEXT: .Lpcsection160: +; O2-NEXT: .Lpcsection230: ; O2-NEXT: jne .LBB140_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -6692,17 +6970,19 @@ define void @atomic32_nand_seq_cst(ptr %a) { ; O3-LABEL: atomic32_nand_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection158: +; O3-NEXT: .Lpcsection226: ; O3-NEXT: movl (%rdi), %eax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB140_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection227: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection159: +; O3-NEXT: .Lpcsection228: ; O3-NEXT: orl $-43, %ecx +; O3-NEXT: .Lpcsection229: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) -; O3-NEXT: .Lpcsection160: +; O3-NEXT: .Lpcsection230: ; O3-NEXT: jne .LBB140_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -6721,14 +7001,17 @@ define void @atomic32_cas_monotonic(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection281: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection211: +; O0-NEXT: .Lpcsection282: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection283: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection212: +; O0-NEXT: .Lpcsection284: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection285: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6738,10 +7021,13 @@ define void @atomic32_cas_monotonic(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection231: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection232: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection233: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6751,10 +7037,13 @@ define void @atomic32_cas_monotonic(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection231: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection232: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection233: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6764,10 +7053,13 @@ define void @atomic32_cas_monotonic(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection231: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection232: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection233: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6787,14 +7079,17 @@ define void @atomic32_cas_acquire(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection286: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection213: +; O0-NEXT: .Lpcsection287: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection288: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection214: +; O0-NEXT: .Lpcsection289: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection290: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6804,10 +7099,13 @@ define void @atomic32_cas_acquire(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection234: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection235: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection236: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6817,10 +7115,13 @@ define void @atomic32_cas_acquire(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection234: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection235: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection236: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6830,10 +7131,13 @@ define void @atomic32_cas_acquire(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection234: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection235: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection236: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6853,14 +7157,17 @@ define void @atomic32_cas_release(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection291: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection215: +; O0-NEXT: .Lpcsection292: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection293: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection216: +; O0-NEXT: .Lpcsection294: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection295: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6870,10 +7177,13 @@ define void @atomic32_cas_release(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection237: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection238: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection239: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6883,10 +7193,13 @@ define void @atomic32_cas_release(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection237: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection238: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection239: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6896,10 +7209,13 @@ define void @atomic32_cas_release(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection237: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection238: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection239: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6919,14 +7235,17 @@ define void @atomic32_cas_acq_rel(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection296: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection217: +; O0-NEXT: .Lpcsection297: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection298: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection218: +; O0-NEXT: .Lpcsection299: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection300: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -6936,10 +7255,13 @@ define void @atomic32_cas_acq_rel(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection240: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection241: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection242: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -6949,10 +7271,13 @@ define void @atomic32_cas_acq_rel(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection240: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection241: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection242: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -6962,10 +7287,13 @@ define void @atomic32_cas_acq_rel(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection240: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection241: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection242: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -6985,14 +7313,17 @@ define void @atomic32_cas_seq_cst(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection301: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection219: +; O0-NEXT: .Lpcsection302: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection303: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) -; O0-NEXT: .Lpcsection220: +; O0-NEXT: .Lpcsection304: ; O0-NEXT: # kill: def $edx killed $eax ; O0-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload +; O0-NEXT: .Lpcsection305: ; O0-NEXT: lock cmpxchgl %ecx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7002,10 +7333,13 @@ define void @atomic32_cas_seq_cst(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection243: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection244: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection245: ; O1-NEXT: lock cmpxchgl %ecx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7015,10 +7349,13 @@ define void @atomic32_cas_seq_cst(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection243: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection244: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection245: ; O2-NEXT: lock cmpxchgl %ecx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7028,10 +7365,13 @@ define void @atomic32_cas_seq_cst(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection243: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection244: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection245: ; O3-NEXT: lock cmpxchgl %ecx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7048,7 +7388,7 @@ define i64 @atomic64_load_unordered(ptr %a) { ; O0-LABEL: atomic64_load_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection221: +; O0-NEXT: .Lpcsection306: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7056,7 +7396,7 @@ define i64 @atomic64_load_unordered(ptr %a) { ; O1-LABEL: atomic64_load_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection161: +; O1-NEXT: .Lpcsection246: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7064,7 +7404,7 @@ define i64 @atomic64_load_unordered(ptr %a) { ; O2-LABEL: atomic64_load_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection161: +; O2-NEXT: .Lpcsection246: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7072,7 +7412,7 @@ define i64 @atomic64_load_unordered(ptr %a) { ; O3-LABEL: atomic64_load_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection161: +; O3-NEXT: .Lpcsection246: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7087,7 +7427,7 @@ define i64 @atomic64_load_monotonic(ptr %a) { ; O0-LABEL: atomic64_load_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection222: +; O0-NEXT: .Lpcsection307: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7095,7 +7435,7 @@ define i64 @atomic64_load_monotonic(ptr %a) { ; O1-LABEL: atomic64_load_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection162: +; O1-NEXT: .Lpcsection247: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7103,7 +7443,7 @@ define i64 @atomic64_load_monotonic(ptr %a) { ; O2-LABEL: atomic64_load_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection162: +; O2-NEXT: .Lpcsection247: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7111,7 +7451,7 @@ define i64 @atomic64_load_monotonic(ptr %a) { ; O3-LABEL: atomic64_load_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection162: +; O3-NEXT: .Lpcsection247: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7126,7 +7466,7 @@ define i64 @atomic64_load_acquire(ptr %a) { ; O0-LABEL: atomic64_load_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection223: +; O0-NEXT: .Lpcsection308: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7134,7 +7474,7 @@ define i64 @atomic64_load_acquire(ptr %a) { ; O1-LABEL: atomic64_load_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection163: +; O1-NEXT: .Lpcsection248: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7142,7 +7482,7 @@ define i64 @atomic64_load_acquire(ptr %a) { ; O2-LABEL: atomic64_load_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection163: +; O2-NEXT: .Lpcsection248: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7150,7 +7490,7 @@ define i64 @atomic64_load_acquire(ptr %a) { ; O3-LABEL: atomic64_load_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection163: +; O3-NEXT: .Lpcsection248: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7165,7 +7505,7 @@ define i64 @atomic64_load_seq_cst(ptr %a) { ; O0-LABEL: atomic64_load_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection224: +; O0-NEXT: .Lpcsection309: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7173,7 +7513,7 @@ define i64 @atomic64_load_seq_cst(ptr %a) { ; O1-LABEL: atomic64_load_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection164: +; O1-NEXT: .Lpcsection249: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7181,7 +7521,7 @@ define i64 @atomic64_load_seq_cst(ptr %a) { ; O2-LABEL: atomic64_load_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection164: +; O2-NEXT: .Lpcsection249: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7189,7 +7529,7 @@ define i64 @atomic64_load_seq_cst(ptr %a) { ; O3-LABEL: atomic64_load_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection164: +; O3-NEXT: .Lpcsection249: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7204,7 +7544,7 @@ define ptr @atomic64_load_seq_cst_ptr_ty(ptr %a) { ; O0-LABEL: atomic64_load_seq_cst_ptr_ty: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection225: +; O0-NEXT: .Lpcsection310: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7212,7 +7552,7 @@ define ptr @atomic64_load_seq_cst_ptr_ty(ptr %a) { ; O1-LABEL: atomic64_load_seq_cst_ptr_ty: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection165: +; O1-NEXT: .Lpcsection250: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7220,7 +7560,7 @@ define ptr @atomic64_load_seq_cst_ptr_ty(ptr %a) { ; O2-LABEL: atomic64_load_seq_cst_ptr_ty: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection165: +; O2-NEXT: .Lpcsection250: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7228,7 +7568,7 @@ define ptr @atomic64_load_seq_cst_ptr_ty(ptr %a) { ; O3-LABEL: atomic64_load_seq_cst_ptr_ty: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection165: +; O3-NEXT: .Lpcsection250: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7243,7 +7583,7 @@ define void @atomic64_store_unordered(ptr %a) { ; O0-LABEL: atomic64_store_unordered: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection226: +; O0-NEXT: .Lpcsection311: ; O0-NEXT: movq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7251,7 +7591,7 @@ define void @atomic64_store_unordered(ptr %a) { ; O1-LABEL: atomic64_store_unordered: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection166: +; O1-NEXT: .Lpcsection251: ; O1-NEXT: movq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7259,7 +7599,7 @@ define void @atomic64_store_unordered(ptr %a) { ; O2-LABEL: atomic64_store_unordered: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection166: +; O2-NEXT: .Lpcsection251: ; O2-NEXT: movq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7267,7 +7607,7 @@ define void @atomic64_store_unordered(ptr %a) { ; O3-LABEL: atomic64_store_unordered: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection166: +; O3-NEXT: .Lpcsection251: ; O3-NEXT: movq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7282,7 +7622,7 @@ define void @atomic64_store_monotonic(ptr %a) { ; O0-LABEL: atomic64_store_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection227: +; O0-NEXT: .Lpcsection312: ; O0-NEXT: movq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7290,7 +7630,7 @@ define void @atomic64_store_monotonic(ptr %a) { ; O1-LABEL: atomic64_store_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection167: +; O1-NEXT: .Lpcsection252: ; O1-NEXT: movq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7298,7 +7638,7 @@ define void @atomic64_store_monotonic(ptr %a) { ; O2-LABEL: atomic64_store_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection167: +; O2-NEXT: .Lpcsection252: ; O2-NEXT: movq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7306,7 +7646,7 @@ define void @atomic64_store_monotonic(ptr %a) { ; O3-LABEL: atomic64_store_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection167: +; O3-NEXT: .Lpcsection252: ; O3-NEXT: movq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7321,7 +7661,7 @@ define void @atomic64_store_release(ptr %a) { ; O0-LABEL: atomic64_store_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection228: +; O0-NEXT: .Lpcsection313: ; O0-NEXT: movq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7329,7 +7669,7 @@ define void @atomic64_store_release(ptr %a) { ; O1-LABEL: atomic64_store_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection168: +; O1-NEXT: .Lpcsection253: ; O1-NEXT: movq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7337,7 +7677,7 @@ define void @atomic64_store_release(ptr %a) { ; O2-LABEL: atomic64_store_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection168: +; O2-NEXT: .Lpcsection253: ; O2-NEXT: movq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7345,7 +7685,7 @@ define void @atomic64_store_release(ptr %a) { ; O3-LABEL: atomic64_store_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection168: +; O3-NEXT: .Lpcsection253: ; O3-NEXT: movq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7361,7 +7701,7 @@ define void @atomic64_store_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection229: +; O0-NEXT: .Lpcsection314: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7370,7 +7710,7 @@ define void @atomic64_store_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection169: +; O1-NEXT: .Lpcsection254: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7379,7 +7719,7 @@ define void @atomic64_store_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection169: +; O2-NEXT: .Lpcsection254: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7388,7 +7728,7 @@ define void @atomic64_store_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection169: +; O3-NEXT: .Lpcsection254: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7403,7 +7743,7 @@ define void @atomic64_store_seq_cst_ptr_ty(ptr %a, ptr %v) { ; O0-LABEL: atomic64_store_seq_cst_ptr_ty: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection230: +; O0-NEXT: .Lpcsection315: ; O0-NEXT: xchgq %rsi, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7411,7 +7751,7 @@ define void @atomic64_store_seq_cst_ptr_ty(ptr %a, ptr %v) { ; O1-LABEL: atomic64_store_seq_cst_ptr_ty: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection170: +; O1-NEXT: .Lpcsection255: ; O1-NEXT: xchgq %rsi, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7419,7 +7759,7 @@ define void @atomic64_store_seq_cst_ptr_ty(ptr %a, ptr %v) { ; O2-LABEL: atomic64_store_seq_cst_ptr_ty: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection170: +; O2-NEXT: .Lpcsection255: ; O2-NEXT: xchgq %rsi, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7427,7 +7767,7 @@ define void @atomic64_store_seq_cst_ptr_ty(ptr %a, ptr %v) { ; O3-LABEL: atomic64_store_seq_cst_ptr_ty: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection170: +; O3-NEXT: .Lpcsection255: ; O3-NEXT: xchgq %rsi, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7443,7 +7783,7 @@ define void @atomic64_xchg_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection231: +; O0-NEXT: .Lpcsection316: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7452,7 +7792,7 @@ define void @atomic64_xchg_monotonic(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection171: +; O1-NEXT: .Lpcsection256: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7461,7 +7801,7 @@ define void @atomic64_xchg_monotonic(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection171: +; O2-NEXT: .Lpcsection256: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7470,7 +7810,7 @@ define void @atomic64_xchg_monotonic(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection171: +; O3-NEXT: .Lpcsection256: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7485,7 +7825,7 @@ define void @atomic64_add_monotonic(ptr %a) { ; O0-LABEL: atomic64_add_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection232: +; O0-NEXT: .Lpcsection317: ; O0-NEXT: lock addq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7493,7 +7833,7 @@ define void @atomic64_add_monotonic(ptr %a) { ; O1-LABEL: atomic64_add_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection172: +; O1-NEXT: .Lpcsection257: ; O1-NEXT: lock addq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7501,7 +7841,7 @@ define void @atomic64_add_monotonic(ptr %a) { ; O2-LABEL: atomic64_add_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection172: +; O2-NEXT: .Lpcsection257: ; O2-NEXT: lock addq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7509,7 +7849,7 @@ define void @atomic64_add_monotonic(ptr %a) { ; O3-LABEL: atomic64_add_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection172: +; O3-NEXT: .Lpcsection257: ; O3-NEXT: lock addq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7524,7 +7864,7 @@ define void @atomic64_sub_monotonic(ptr %a) { ; O0-LABEL: atomic64_sub_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection233: +; O0-NEXT: .Lpcsection318: ; O0-NEXT: lock subq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7532,7 +7872,7 @@ define void @atomic64_sub_monotonic(ptr %a) { ; O1-LABEL: atomic64_sub_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection173: +; O1-NEXT: .Lpcsection258: ; O1-NEXT: lock subq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7540,7 +7880,7 @@ define void @atomic64_sub_monotonic(ptr %a) { ; O2-LABEL: atomic64_sub_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection173: +; O2-NEXT: .Lpcsection258: ; O2-NEXT: lock subq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7548,7 +7888,7 @@ define void @atomic64_sub_monotonic(ptr %a) { ; O3-LABEL: atomic64_sub_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection173: +; O3-NEXT: .Lpcsection258: ; O3-NEXT: lock subq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7563,7 +7903,7 @@ define void @atomic64_and_monotonic(ptr %a) { ; O0-LABEL: atomic64_and_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection234: +; O0-NEXT: .Lpcsection319: ; O0-NEXT: lock andq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7571,7 +7911,7 @@ define void @atomic64_and_monotonic(ptr %a) { ; O1-LABEL: atomic64_and_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection174: +; O1-NEXT: .Lpcsection259: ; O1-NEXT: lock andq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7579,7 +7919,7 @@ define void @atomic64_and_monotonic(ptr %a) { ; O2-LABEL: atomic64_and_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection174: +; O2-NEXT: .Lpcsection259: ; O2-NEXT: lock andq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7587,7 +7927,7 @@ define void @atomic64_and_monotonic(ptr %a) { ; O3-LABEL: atomic64_and_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection174: +; O3-NEXT: .Lpcsection259: ; O3-NEXT: lock andq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7602,7 +7942,7 @@ define void @atomic64_or_monotonic(ptr %a) { ; O0-LABEL: atomic64_or_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection235: +; O0-NEXT: .Lpcsection320: ; O0-NEXT: lock orq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7610,7 +7950,7 @@ define void @atomic64_or_monotonic(ptr %a) { ; O1-LABEL: atomic64_or_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection175: +; O1-NEXT: .Lpcsection260: ; O1-NEXT: lock orq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7618,7 +7958,7 @@ define void @atomic64_or_monotonic(ptr %a) { ; O2-LABEL: atomic64_or_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection175: +; O2-NEXT: .Lpcsection260: ; O2-NEXT: lock orq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7626,7 +7966,7 @@ define void @atomic64_or_monotonic(ptr %a) { ; O3-LABEL: atomic64_or_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection175: +; O3-NEXT: .Lpcsection260: ; O3-NEXT: lock orq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7641,7 +7981,7 @@ define void @atomic64_xor_monotonic(ptr %a) { ; O0-LABEL: atomic64_xor_monotonic: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection236: +; O0-NEXT: .Lpcsection321: ; O0-NEXT: lock xorq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7649,7 +7989,7 @@ define void @atomic64_xor_monotonic(ptr %a) { ; O1-LABEL: atomic64_xor_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection176: +; O1-NEXT: .Lpcsection261: ; O1-NEXT: lock xorq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7657,7 +7997,7 @@ define void @atomic64_xor_monotonic(ptr %a) { ; O2-LABEL: atomic64_xor_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection176: +; O2-NEXT: .Lpcsection261: ; O2-NEXT: lock xorq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7665,7 +8005,7 @@ define void @atomic64_xor_monotonic(ptr %a) { ; O3-LABEL: atomic64_xor_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection176: +; O3-NEXT: .Lpcsection261: ; O3-NEXT: lock xorq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7681,7 +8021,7 @@ define void @atomic64_nand_monotonic(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection237: +; O0-NEXT: .Lpcsection322: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: .LBB162_1: # %atomicrmw.start @@ -7689,18 +8029,21 @@ define void @atomic64_nand_monotonic(ptr %a) { ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %esi +; O0-NEXT: .Lpcsection323: ; O0-NEXT: notl %esi +; O0-NEXT: .Lpcsection324: ; O0-NEXT: # implicit-def: $rdx ; O0-NEXT: movl %esi, %edx -; O0-NEXT: .Lpcsection238: +; O0-NEXT: .Lpcsection325: ; O0-NEXT: orq $-43, %rdx +; O0-NEXT: .Lpcsection326: ; O0-NEXT: lock cmpxchgq %rdx, (%rcx) -; O0-NEXT: .Lpcsection239: +; O0-NEXT: .Lpcsection327: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection240: +; O0-NEXT: .Lpcsection328: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill -; O0-NEXT: .Lpcsection241: +; O0-NEXT: .Lpcsection329: ; O0-NEXT: jne .LBB162_2 ; O0-NEXT: jmp .LBB162_1 ; O0-NEXT: .LBB162_2: # %atomicrmw.end @@ -7710,17 +8053,19 @@ define void @atomic64_nand_monotonic(ptr %a) { ; O1-LABEL: atomic64_nand_monotonic: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection177: +; O1-NEXT: .Lpcsection262: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB162_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection263: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection178: +; O1-NEXT: .Lpcsection264: ; O1-NEXT: orq $-43, %rcx +; O1-NEXT: .Lpcsection265: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) -; O1-NEXT: .Lpcsection179: +; O1-NEXT: .Lpcsection266: ; O1-NEXT: jne .LBB162_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -7729,17 +8074,19 @@ define void @atomic64_nand_monotonic(ptr %a) { ; O2-LABEL: atomic64_nand_monotonic: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection177: +; O2-NEXT: .Lpcsection262: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB162_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection263: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection178: +; O2-NEXT: .Lpcsection264: ; O2-NEXT: orq $-43, %rcx +; O2-NEXT: .Lpcsection265: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) -; O2-NEXT: .Lpcsection179: +; O2-NEXT: .Lpcsection266: ; O2-NEXT: jne .LBB162_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -7748,17 +8095,19 @@ define void @atomic64_nand_monotonic(ptr %a) { ; O3-LABEL: atomic64_nand_monotonic: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection177: +; O3-NEXT: .Lpcsection262: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB162_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection263: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection178: +; O3-NEXT: .Lpcsection264: ; O3-NEXT: orq $-43, %rcx +; O3-NEXT: .Lpcsection265: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) -; O3-NEXT: .Lpcsection179: +; O3-NEXT: .Lpcsection266: ; O3-NEXT: jne .LBB162_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -7775,7 +8124,7 @@ define void @atomic64_xchg_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection242: +; O0-NEXT: .Lpcsection330: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7784,7 +8133,7 @@ define void @atomic64_xchg_acquire(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection180: +; O1-NEXT: .Lpcsection267: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7793,7 +8142,7 @@ define void @atomic64_xchg_acquire(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection180: +; O2-NEXT: .Lpcsection267: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7802,7 +8151,7 @@ define void @atomic64_xchg_acquire(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection180: +; O3-NEXT: .Lpcsection267: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7817,7 +8166,7 @@ define void @atomic64_add_acquire(ptr %a) { ; O0-LABEL: atomic64_add_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection243: +; O0-NEXT: .Lpcsection331: ; O0-NEXT: lock addq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7825,7 +8174,7 @@ define void @atomic64_add_acquire(ptr %a) { ; O1-LABEL: atomic64_add_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection181: +; O1-NEXT: .Lpcsection268: ; O1-NEXT: lock addq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7833,7 +8182,7 @@ define void @atomic64_add_acquire(ptr %a) { ; O2-LABEL: atomic64_add_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection181: +; O2-NEXT: .Lpcsection268: ; O2-NEXT: lock addq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7841,7 +8190,7 @@ define void @atomic64_add_acquire(ptr %a) { ; O3-LABEL: atomic64_add_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection181: +; O3-NEXT: .Lpcsection268: ; O3-NEXT: lock addq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7856,7 +8205,7 @@ define void @atomic64_sub_acquire(ptr %a) { ; O0-LABEL: atomic64_sub_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection244: +; O0-NEXT: .Lpcsection332: ; O0-NEXT: lock subq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7864,7 +8213,7 @@ define void @atomic64_sub_acquire(ptr %a) { ; O1-LABEL: atomic64_sub_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection182: +; O1-NEXT: .Lpcsection269: ; O1-NEXT: lock subq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7872,7 +8221,7 @@ define void @atomic64_sub_acquire(ptr %a) { ; O2-LABEL: atomic64_sub_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection182: +; O2-NEXT: .Lpcsection269: ; O2-NEXT: lock subq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7880,7 +8229,7 @@ define void @atomic64_sub_acquire(ptr %a) { ; O3-LABEL: atomic64_sub_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection182: +; O3-NEXT: .Lpcsection269: ; O3-NEXT: lock subq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7895,7 +8244,7 @@ define void @atomic64_and_acquire(ptr %a) { ; O0-LABEL: atomic64_and_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection245: +; O0-NEXT: .Lpcsection333: ; O0-NEXT: lock andq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7903,7 +8252,7 @@ define void @atomic64_and_acquire(ptr %a) { ; O1-LABEL: atomic64_and_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection183: +; O1-NEXT: .Lpcsection270: ; O1-NEXT: lock andq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7911,7 +8260,7 @@ define void @atomic64_and_acquire(ptr %a) { ; O2-LABEL: atomic64_and_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection183: +; O2-NEXT: .Lpcsection270: ; O2-NEXT: lock andq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7919,7 +8268,7 @@ define void @atomic64_and_acquire(ptr %a) { ; O3-LABEL: atomic64_and_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection183: +; O3-NEXT: .Lpcsection270: ; O3-NEXT: lock andq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7934,7 +8283,7 @@ define void @atomic64_or_acquire(ptr %a) { ; O0-LABEL: atomic64_or_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection246: +; O0-NEXT: .Lpcsection334: ; O0-NEXT: lock orq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7942,7 +8291,7 @@ define void @atomic64_or_acquire(ptr %a) { ; O1-LABEL: atomic64_or_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection184: +; O1-NEXT: .Lpcsection271: ; O1-NEXT: lock orq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7950,7 +8299,7 @@ define void @atomic64_or_acquire(ptr %a) { ; O2-LABEL: atomic64_or_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection184: +; O2-NEXT: .Lpcsection271: ; O2-NEXT: lock orq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7958,7 +8307,7 @@ define void @atomic64_or_acquire(ptr %a) { ; O3-LABEL: atomic64_or_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection184: +; O3-NEXT: .Lpcsection271: ; O3-NEXT: lock orq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -7973,7 +8322,7 @@ define void @atomic64_xor_acquire(ptr %a) { ; O0-LABEL: atomic64_xor_acquire: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection247: +; O0-NEXT: .Lpcsection335: ; O0-NEXT: lock xorq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -7981,7 +8330,7 @@ define void @atomic64_xor_acquire(ptr %a) { ; O1-LABEL: atomic64_xor_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection185: +; O1-NEXT: .Lpcsection272: ; O1-NEXT: lock xorq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -7989,7 +8338,7 @@ define void @atomic64_xor_acquire(ptr %a) { ; O2-LABEL: atomic64_xor_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection185: +; O2-NEXT: .Lpcsection272: ; O2-NEXT: lock xorq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -7997,7 +8346,7 @@ define void @atomic64_xor_acquire(ptr %a) { ; O3-LABEL: atomic64_xor_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection185: +; O3-NEXT: .Lpcsection272: ; O3-NEXT: lock xorq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8013,7 +8362,7 @@ define void @atomic64_nand_acquire(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection248: +; O0-NEXT: .Lpcsection336: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: .LBB169_1: # %atomicrmw.start @@ -8021,18 +8370,21 @@ define void @atomic64_nand_acquire(ptr %a) { ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %esi +; O0-NEXT: .Lpcsection337: ; O0-NEXT: notl %esi +; O0-NEXT: .Lpcsection338: ; O0-NEXT: # implicit-def: $rdx ; O0-NEXT: movl %esi, %edx -; O0-NEXT: .Lpcsection249: +; O0-NEXT: .Lpcsection339: ; O0-NEXT: orq $-43, %rdx +; O0-NEXT: .Lpcsection340: ; O0-NEXT: lock cmpxchgq %rdx, (%rcx) -; O0-NEXT: .Lpcsection250: +; O0-NEXT: .Lpcsection341: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection251: +; O0-NEXT: .Lpcsection342: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill -; O0-NEXT: .Lpcsection252: +; O0-NEXT: .Lpcsection343: ; O0-NEXT: jne .LBB169_2 ; O0-NEXT: jmp .LBB169_1 ; O0-NEXT: .LBB169_2: # %atomicrmw.end @@ -8042,17 +8394,19 @@ define void @atomic64_nand_acquire(ptr %a) { ; O1-LABEL: atomic64_nand_acquire: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection186: +; O1-NEXT: .Lpcsection273: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB169_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection274: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection187: +; O1-NEXT: .Lpcsection275: ; O1-NEXT: orq $-43, %rcx +; O1-NEXT: .Lpcsection276: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) -; O1-NEXT: .Lpcsection188: +; O1-NEXT: .Lpcsection277: ; O1-NEXT: jne .LBB169_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -8061,17 +8415,19 @@ define void @atomic64_nand_acquire(ptr %a) { ; O2-LABEL: atomic64_nand_acquire: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection186: +; O2-NEXT: .Lpcsection273: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB169_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection274: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection187: +; O2-NEXT: .Lpcsection275: ; O2-NEXT: orq $-43, %rcx +; O2-NEXT: .Lpcsection276: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) -; O2-NEXT: .Lpcsection188: +; O2-NEXT: .Lpcsection277: ; O2-NEXT: jne .LBB169_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -8080,17 +8436,19 @@ define void @atomic64_nand_acquire(ptr %a) { ; O3-LABEL: atomic64_nand_acquire: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection186: +; O3-NEXT: .Lpcsection273: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB169_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection274: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection187: +; O3-NEXT: .Lpcsection275: ; O3-NEXT: orq $-43, %rcx +; O3-NEXT: .Lpcsection276: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) -; O3-NEXT: .Lpcsection188: +; O3-NEXT: .Lpcsection277: ; O3-NEXT: jne .LBB169_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -8107,7 +8465,7 @@ define void @atomic64_xchg_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection253: +; O0-NEXT: .Lpcsection344: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8116,7 +8474,7 @@ define void @atomic64_xchg_release(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection189: +; O1-NEXT: .Lpcsection278: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8125,7 +8483,7 @@ define void @atomic64_xchg_release(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection189: +; O2-NEXT: .Lpcsection278: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8134,7 +8492,7 @@ define void @atomic64_xchg_release(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection189: +; O3-NEXT: .Lpcsection278: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8149,7 +8507,7 @@ define void @atomic64_add_release(ptr %a) { ; O0-LABEL: atomic64_add_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection254: +; O0-NEXT: .Lpcsection345: ; O0-NEXT: lock addq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8157,7 +8515,7 @@ define void @atomic64_add_release(ptr %a) { ; O1-LABEL: atomic64_add_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection190: +; O1-NEXT: .Lpcsection279: ; O1-NEXT: lock addq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8165,7 +8523,7 @@ define void @atomic64_add_release(ptr %a) { ; O2-LABEL: atomic64_add_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection190: +; O2-NEXT: .Lpcsection279: ; O2-NEXT: lock addq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8173,7 +8531,7 @@ define void @atomic64_add_release(ptr %a) { ; O3-LABEL: atomic64_add_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection190: +; O3-NEXT: .Lpcsection279: ; O3-NEXT: lock addq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8188,7 +8546,7 @@ define void @atomic64_sub_release(ptr %a) { ; O0-LABEL: atomic64_sub_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection255: +; O0-NEXT: .Lpcsection346: ; O0-NEXT: lock subq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8196,7 +8554,7 @@ define void @atomic64_sub_release(ptr %a) { ; O1-LABEL: atomic64_sub_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection191: +; O1-NEXT: .Lpcsection280: ; O1-NEXT: lock subq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8204,7 +8562,7 @@ define void @atomic64_sub_release(ptr %a) { ; O2-LABEL: atomic64_sub_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection191: +; O2-NEXT: .Lpcsection280: ; O2-NEXT: lock subq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8212,7 +8570,7 @@ define void @atomic64_sub_release(ptr %a) { ; O3-LABEL: atomic64_sub_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection191: +; O3-NEXT: .Lpcsection280: ; O3-NEXT: lock subq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8227,7 +8585,7 @@ define void @atomic64_and_release(ptr %a) { ; O0-LABEL: atomic64_and_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection256: +; O0-NEXT: .Lpcsection347: ; O0-NEXT: lock andq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8235,7 +8593,7 @@ define void @atomic64_and_release(ptr %a) { ; O1-LABEL: atomic64_and_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection192: +; O1-NEXT: .Lpcsection281: ; O1-NEXT: lock andq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8243,7 +8601,7 @@ define void @atomic64_and_release(ptr %a) { ; O2-LABEL: atomic64_and_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection192: +; O2-NEXT: .Lpcsection281: ; O2-NEXT: lock andq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8251,7 +8609,7 @@ define void @atomic64_and_release(ptr %a) { ; O3-LABEL: atomic64_and_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection192: +; O3-NEXT: .Lpcsection281: ; O3-NEXT: lock andq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8266,7 +8624,7 @@ define void @atomic64_or_release(ptr %a) { ; O0-LABEL: atomic64_or_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection257: +; O0-NEXT: .Lpcsection348: ; O0-NEXT: lock orq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8274,7 +8632,7 @@ define void @atomic64_or_release(ptr %a) { ; O1-LABEL: atomic64_or_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection193: +; O1-NEXT: .Lpcsection282: ; O1-NEXT: lock orq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8282,7 +8640,7 @@ define void @atomic64_or_release(ptr %a) { ; O2-LABEL: atomic64_or_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection193: +; O2-NEXT: .Lpcsection282: ; O2-NEXT: lock orq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8290,7 +8648,7 @@ define void @atomic64_or_release(ptr %a) { ; O3-LABEL: atomic64_or_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection193: +; O3-NEXT: .Lpcsection282: ; O3-NEXT: lock orq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8305,7 +8663,7 @@ define void @atomic64_xor_release(ptr %a) { ; O0-LABEL: atomic64_xor_release: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection258: +; O0-NEXT: .Lpcsection349: ; O0-NEXT: lock xorq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8313,7 +8671,7 @@ define void @atomic64_xor_release(ptr %a) { ; O1-LABEL: atomic64_xor_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection194: +; O1-NEXT: .Lpcsection283: ; O1-NEXT: lock xorq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8321,7 +8679,7 @@ define void @atomic64_xor_release(ptr %a) { ; O2-LABEL: atomic64_xor_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection194: +; O2-NEXT: .Lpcsection283: ; O2-NEXT: lock xorq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8329,7 +8687,7 @@ define void @atomic64_xor_release(ptr %a) { ; O3-LABEL: atomic64_xor_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection194: +; O3-NEXT: .Lpcsection283: ; O3-NEXT: lock xorq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8345,7 +8703,7 @@ define void @atomic64_nand_release(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection259: +; O0-NEXT: .Lpcsection350: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: .LBB176_1: # %atomicrmw.start @@ -8353,18 +8711,21 @@ define void @atomic64_nand_release(ptr %a) { ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %esi +; O0-NEXT: .Lpcsection351: ; O0-NEXT: notl %esi +; O0-NEXT: .Lpcsection352: ; O0-NEXT: # implicit-def: $rdx ; O0-NEXT: movl %esi, %edx -; O0-NEXT: .Lpcsection260: +; O0-NEXT: .Lpcsection353: ; O0-NEXT: orq $-43, %rdx +; O0-NEXT: .Lpcsection354: ; O0-NEXT: lock cmpxchgq %rdx, (%rcx) -; O0-NEXT: .Lpcsection261: +; O0-NEXT: .Lpcsection355: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection262: +; O0-NEXT: .Lpcsection356: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill -; O0-NEXT: .Lpcsection263: +; O0-NEXT: .Lpcsection357: ; O0-NEXT: jne .LBB176_2 ; O0-NEXT: jmp .LBB176_1 ; O0-NEXT: .LBB176_2: # %atomicrmw.end @@ -8374,17 +8735,19 @@ define void @atomic64_nand_release(ptr %a) { ; O1-LABEL: atomic64_nand_release: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection195: +; O1-NEXT: .Lpcsection284: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB176_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection285: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection196: +; O1-NEXT: .Lpcsection286: ; O1-NEXT: orq $-43, %rcx +; O1-NEXT: .Lpcsection287: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) -; O1-NEXT: .Lpcsection197: +; O1-NEXT: .Lpcsection288: ; O1-NEXT: jne .LBB176_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -8393,17 +8756,19 @@ define void @atomic64_nand_release(ptr %a) { ; O2-LABEL: atomic64_nand_release: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection195: +; O2-NEXT: .Lpcsection284: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB176_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection285: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection196: +; O2-NEXT: .Lpcsection286: ; O2-NEXT: orq $-43, %rcx +; O2-NEXT: .Lpcsection287: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) -; O2-NEXT: .Lpcsection197: +; O2-NEXT: .Lpcsection288: ; O2-NEXT: jne .LBB176_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -8412,17 +8777,19 @@ define void @atomic64_nand_release(ptr %a) { ; O3-LABEL: atomic64_nand_release: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection195: +; O3-NEXT: .Lpcsection284: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB176_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection285: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection196: +; O3-NEXT: .Lpcsection286: ; O3-NEXT: orq $-43, %rcx +; O3-NEXT: .Lpcsection287: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) -; O3-NEXT: .Lpcsection197: +; O3-NEXT: .Lpcsection288: ; O3-NEXT: jne .LBB176_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -8439,7 +8806,7 @@ define void @atomic64_xchg_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection264: +; O0-NEXT: .Lpcsection358: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8448,7 +8815,7 @@ define void @atomic64_xchg_acq_rel(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection198: +; O1-NEXT: .Lpcsection289: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8457,7 +8824,7 @@ define void @atomic64_xchg_acq_rel(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection198: +; O2-NEXT: .Lpcsection289: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8466,7 +8833,7 @@ define void @atomic64_xchg_acq_rel(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection198: +; O3-NEXT: .Lpcsection289: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8481,7 +8848,7 @@ define void @atomic64_add_acq_rel(ptr %a) { ; O0-LABEL: atomic64_add_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection265: +; O0-NEXT: .Lpcsection359: ; O0-NEXT: lock addq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8489,7 +8856,7 @@ define void @atomic64_add_acq_rel(ptr %a) { ; O1-LABEL: atomic64_add_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection199: +; O1-NEXT: .Lpcsection290: ; O1-NEXT: lock addq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8497,7 +8864,7 @@ define void @atomic64_add_acq_rel(ptr %a) { ; O2-LABEL: atomic64_add_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection199: +; O2-NEXT: .Lpcsection290: ; O2-NEXT: lock addq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8505,7 +8872,7 @@ define void @atomic64_add_acq_rel(ptr %a) { ; O3-LABEL: atomic64_add_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection199: +; O3-NEXT: .Lpcsection290: ; O3-NEXT: lock addq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8520,7 +8887,7 @@ define void @atomic64_sub_acq_rel(ptr %a) { ; O0-LABEL: atomic64_sub_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection266: +; O0-NEXT: .Lpcsection360: ; O0-NEXT: lock subq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8528,7 +8895,7 @@ define void @atomic64_sub_acq_rel(ptr %a) { ; O1-LABEL: atomic64_sub_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection200: +; O1-NEXT: .Lpcsection291: ; O1-NEXT: lock subq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8536,7 +8903,7 @@ define void @atomic64_sub_acq_rel(ptr %a) { ; O2-LABEL: atomic64_sub_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection200: +; O2-NEXT: .Lpcsection291: ; O2-NEXT: lock subq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8544,7 +8911,7 @@ define void @atomic64_sub_acq_rel(ptr %a) { ; O3-LABEL: atomic64_sub_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection200: +; O3-NEXT: .Lpcsection291: ; O3-NEXT: lock subq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8559,7 +8926,7 @@ define void @atomic64_and_acq_rel(ptr %a) { ; O0-LABEL: atomic64_and_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection267: +; O0-NEXT: .Lpcsection361: ; O0-NEXT: lock andq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8567,7 +8934,7 @@ define void @atomic64_and_acq_rel(ptr %a) { ; O1-LABEL: atomic64_and_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection201: +; O1-NEXT: .Lpcsection292: ; O1-NEXT: lock andq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8575,7 +8942,7 @@ define void @atomic64_and_acq_rel(ptr %a) { ; O2-LABEL: atomic64_and_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection201: +; O2-NEXT: .Lpcsection292: ; O2-NEXT: lock andq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8583,7 +8950,7 @@ define void @atomic64_and_acq_rel(ptr %a) { ; O3-LABEL: atomic64_and_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection201: +; O3-NEXT: .Lpcsection292: ; O3-NEXT: lock andq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8598,7 +8965,7 @@ define void @atomic64_or_acq_rel(ptr %a) { ; O0-LABEL: atomic64_or_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection268: +; O0-NEXT: .Lpcsection362: ; O0-NEXT: lock orq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8606,7 +8973,7 @@ define void @atomic64_or_acq_rel(ptr %a) { ; O1-LABEL: atomic64_or_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection202: +; O1-NEXT: .Lpcsection293: ; O1-NEXT: lock orq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8614,7 +8981,7 @@ define void @atomic64_or_acq_rel(ptr %a) { ; O2-LABEL: atomic64_or_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection202: +; O2-NEXT: .Lpcsection293: ; O2-NEXT: lock orq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8622,7 +8989,7 @@ define void @atomic64_or_acq_rel(ptr %a) { ; O3-LABEL: atomic64_or_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection202: +; O3-NEXT: .Lpcsection293: ; O3-NEXT: lock orq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8637,7 +9004,7 @@ define void @atomic64_xor_acq_rel(ptr %a) { ; O0-LABEL: atomic64_xor_acq_rel: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection269: +; O0-NEXT: .Lpcsection363: ; O0-NEXT: lock xorq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8645,7 +9012,7 @@ define void @atomic64_xor_acq_rel(ptr %a) { ; O1-LABEL: atomic64_xor_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection203: +; O1-NEXT: .Lpcsection294: ; O1-NEXT: lock xorq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8653,7 +9020,7 @@ define void @atomic64_xor_acq_rel(ptr %a) { ; O2-LABEL: atomic64_xor_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection203: +; O2-NEXT: .Lpcsection294: ; O2-NEXT: lock xorq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8661,7 +9028,7 @@ define void @atomic64_xor_acq_rel(ptr %a) { ; O3-LABEL: atomic64_xor_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection203: +; O3-NEXT: .Lpcsection294: ; O3-NEXT: lock xorq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8677,7 +9044,7 @@ define void @atomic64_nand_acq_rel(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection270: +; O0-NEXT: .Lpcsection364: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: .LBB183_1: # %atomicrmw.start @@ -8685,18 +9052,21 @@ define void @atomic64_nand_acq_rel(ptr %a) { ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %esi +; O0-NEXT: .Lpcsection365: ; O0-NEXT: notl %esi +; O0-NEXT: .Lpcsection366: ; O0-NEXT: # implicit-def: $rdx ; O0-NEXT: movl %esi, %edx -; O0-NEXT: .Lpcsection271: +; O0-NEXT: .Lpcsection367: ; O0-NEXT: orq $-43, %rdx +; O0-NEXT: .Lpcsection368: ; O0-NEXT: lock cmpxchgq %rdx, (%rcx) -; O0-NEXT: .Lpcsection272: +; O0-NEXT: .Lpcsection369: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection273: +; O0-NEXT: .Lpcsection370: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill -; O0-NEXT: .Lpcsection274: +; O0-NEXT: .Lpcsection371: ; O0-NEXT: jne .LBB183_2 ; O0-NEXT: jmp .LBB183_1 ; O0-NEXT: .LBB183_2: # %atomicrmw.end @@ -8706,17 +9076,19 @@ define void @atomic64_nand_acq_rel(ptr %a) { ; O1-LABEL: atomic64_nand_acq_rel: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection204: +; O1-NEXT: .Lpcsection295: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB183_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection296: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection205: +; O1-NEXT: .Lpcsection297: ; O1-NEXT: orq $-43, %rcx +; O1-NEXT: .Lpcsection298: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) -; O1-NEXT: .Lpcsection206: +; O1-NEXT: .Lpcsection299: ; O1-NEXT: jne .LBB183_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -8725,17 +9097,19 @@ define void @atomic64_nand_acq_rel(ptr %a) { ; O2-LABEL: atomic64_nand_acq_rel: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection204: +; O2-NEXT: .Lpcsection295: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB183_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection296: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection205: +; O2-NEXT: .Lpcsection297: ; O2-NEXT: orq $-43, %rcx +; O2-NEXT: .Lpcsection298: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) -; O2-NEXT: .Lpcsection206: +; O2-NEXT: .Lpcsection299: ; O2-NEXT: jne .LBB183_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -8744,17 +9118,19 @@ define void @atomic64_nand_acq_rel(ptr %a) { ; O3-LABEL: atomic64_nand_acq_rel: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection204: +; O3-NEXT: .Lpcsection295: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB183_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection296: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection205: +; O3-NEXT: .Lpcsection297: ; O3-NEXT: orq $-43, %rcx +; O3-NEXT: .Lpcsection298: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) -; O3-NEXT: .Lpcsection206: +; O3-NEXT: .Lpcsection299: ; O3-NEXT: jne .LBB183_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -8771,7 +9147,7 @@ define void @atomic64_xchg_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax ; O0-NEXT: movl $42, %eax -; O0-NEXT: .Lpcsection275: +; O0-NEXT: .Lpcsection372: ; O0-NEXT: xchgq %rax, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8780,7 +9156,7 @@ define void @atomic64_xchg_seq_cst(ptr %a) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $42, %eax -; O1-NEXT: .Lpcsection207: +; O1-NEXT: .Lpcsection300: ; O1-NEXT: xchgq %rax, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8789,7 +9165,7 @@ define void @atomic64_xchg_seq_cst(ptr %a) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $42, %eax -; O2-NEXT: .Lpcsection207: +; O2-NEXT: .Lpcsection300: ; O2-NEXT: xchgq %rax, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8798,7 +9174,7 @@ define void @atomic64_xchg_seq_cst(ptr %a) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $42, %eax -; O3-NEXT: .Lpcsection207: +; O3-NEXT: .Lpcsection300: ; O3-NEXT: xchgq %rax, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8813,7 +9189,7 @@ define void @atomic64_add_seq_cst(ptr %a) { ; O0-LABEL: atomic64_add_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection276: +; O0-NEXT: .Lpcsection373: ; O0-NEXT: lock addq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8821,7 +9197,7 @@ define void @atomic64_add_seq_cst(ptr %a) { ; O1-LABEL: atomic64_add_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection208: +; O1-NEXT: .Lpcsection301: ; O1-NEXT: lock addq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8829,7 +9205,7 @@ define void @atomic64_add_seq_cst(ptr %a) { ; O2-LABEL: atomic64_add_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection208: +; O2-NEXT: .Lpcsection301: ; O2-NEXT: lock addq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8837,7 +9213,7 @@ define void @atomic64_add_seq_cst(ptr %a) { ; O3-LABEL: atomic64_add_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection208: +; O3-NEXT: .Lpcsection301: ; O3-NEXT: lock addq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8852,7 +9228,7 @@ define void @atomic64_sub_seq_cst(ptr %a) { ; O0-LABEL: atomic64_sub_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection277: +; O0-NEXT: .Lpcsection374: ; O0-NEXT: lock subq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8860,7 +9236,7 @@ define void @atomic64_sub_seq_cst(ptr %a) { ; O1-LABEL: atomic64_sub_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection209: +; O1-NEXT: .Lpcsection302: ; O1-NEXT: lock subq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8868,7 +9244,7 @@ define void @atomic64_sub_seq_cst(ptr %a) { ; O2-LABEL: atomic64_sub_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection209: +; O2-NEXT: .Lpcsection302: ; O2-NEXT: lock subq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8876,7 +9252,7 @@ define void @atomic64_sub_seq_cst(ptr %a) { ; O3-LABEL: atomic64_sub_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection209: +; O3-NEXT: .Lpcsection302: ; O3-NEXT: lock subq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8891,7 +9267,7 @@ define void @atomic64_and_seq_cst(ptr %a) { ; O0-LABEL: atomic64_and_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection278: +; O0-NEXT: .Lpcsection375: ; O0-NEXT: lock andq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8899,7 +9275,7 @@ define void @atomic64_and_seq_cst(ptr %a) { ; O1-LABEL: atomic64_and_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection210: +; O1-NEXT: .Lpcsection303: ; O1-NEXT: lock andq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8907,7 +9283,7 @@ define void @atomic64_and_seq_cst(ptr %a) { ; O2-LABEL: atomic64_and_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection210: +; O2-NEXT: .Lpcsection303: ; O2-NEXT: lock andq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8915,7 +9291,7 @@ define void @atomic64_and_seq_cst(ptr %a) { ; O3-LABEL: atomic64_and_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection210: +; O3-NEXT: .Lpcsection303: ; O3-NEXT: lock andq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8930,7 +9306,7 @@ define void @atomic64_or_seq_cst(ptr %a) { ; O0-LABEL: atomic64_or_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection279: +; O0-NEXT: .Lpcsection376: ; O0-NEXT: lock orq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8938,7 +9314,7 @@ define void @atomic64_or_seq_cst(ptr %a) { ; O1-LABEL: atomic64_or_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection211: +; O1-NEXT: .Lpcsection304: ; O1-NEXT: lock orq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8946,7 +9322,7 @@ define void @atomic64_or_seq_cst(ptr %a) { ; O2-LABEL: atomic64_or_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection211: +; O2-NEXT: .Lpcsection304: ; O2-NEXT: lock orq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8954,7 +9330,7 @@ define void @atomic64_or_seq_cst(ptr %a) { ; O3-LABEL: atomic64_or_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection211: +; O3-NEXT: .Lpcsection304: ; O3-NEXT: lock orq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -8969,7 +9345,7 @@ define void @atomic64_xor_seq_cst(ptr %a) { ; O0-LABEL: atomic64_xor_seq_cst: ; O0: # %bb.0: # %entry ; O0-NEXT: movq foo(%rip), %rax -; O0-NEXT: .Lpcsection280: +; O0-NEXT: .Lpcsection377: ; O0-NEXT: lock xorq $42, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -8977,7 +9353,7 @@ define void @atomic64_xor_seq_cst(ptr %a) { ; O1-LABEL: atomic64_xor_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection212: +; O1-NEXT: .Lpcsection305: ; O1-NEXT: lock xorq $42, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -8985,7 +9361,7 @@ define void @atomic64_xor_seq_cst(ptr %a) { ; O2-LABEL: atomic64_xor_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection212: +; O2-NEXT: .Lpcsection305: ; O2-NEXT: lock xorq $42, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -8993,7 +9369,7 @@ define void @atomic64_xor_seq_cst(ptr %a) { ; O3-LABEL: atomic64_xor_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection212: +; O3-NEXT: .Lpcsection305: ; O3-NEXT: lock xorq $42, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -9009,7 +9385,7 @@ define void @atomic64_nand_seq_cst(ptr %a) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movq foo, %rax -; O0-NEXT: .Lpcsection281: +; O0-NEXT: .Lpcsection378: ; O0-NEXT: movq (%rdi), %rax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: .LBB190_1: # %atomicrmw.start @@ -9017,18 +9393,21 @@ define void @atomic64_nand_seq_cst(ptr %a) { ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rcx # 8-byte Reload ; O0-NEXT: movl %eax, %esi +; O0-NEXT: .Lpcsection379: ; O0-NEXT: notl %esi +; O0-NEXT: .Lpcsection380: ; O0-NEXT: # implicit-def: $rdx ; O0-NEXT: movl %esi, %edx -; O0-NEXT: .Lpcsection282: +; O0-NEXT: .Lpcsection381: ; O0-NEXT: orq $-43, %rdx +; O0-NEXT: .Lpcsection382: ; O0-NEXT: lock cmpxchgq %rdx, (%rcx) -; O0-NEXT: .Lpcsection283: +; O0-NEXT: .Lpcsection383: ; O0-NEXT: sete %cl -; O0-NEXT: .Lpcsection284: +; O0-NEXT: .Lpcsection384: ; O0-NEXT: testb $1, %cl ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill -; O0-NEXT: .Lpcsection285: +; O0-NEXT: .Lpcsection385: ; O0-NEXT: jne .LBB190_2 ; O0-NEXT: jmp .LBB190_1 ; O0-NEXT: .LBB190_2: # %atomicrmw.end @@ -9038,17 +9417,19 @@ define void @atomic64_nand_seq_cst(ptr %a) { ; O1-LABEL: atomic64_nand_seq_cst: ; O1: # %bb.0: # %entry ; O1-NEXT: movq foo(%rip), %rax -; O1-NEXT: .Lpcsection213: +; O1-NEXT: .Lpcsection306: ; O1-NEXT: movq (%rdi), %rax ; O1-NEXT: .p2align 4, 0x90 ; O1-NEXT: .LBB190_1: # %atomicrmw.start ; O1-NEXT: # =>This Inner Loop Header: Depth=1 ; O1-NEXT: movl %eax, %ecx +; O1-NEXT: .Lpcsection307: ; O1-NEXT: notl %ecx -; O1-NEXT: .Lpcsection214: +; O1-NEXT: .Lpcsection308: ; O1-NEXT: orq $-43, %rcx +; O1-NEXT: .Lpcsection309: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) -; O1-NEXT: .Lpcsection215: +; O1-NEXT: .Lpcsection310: ; O1-NEXT: jne .LBB190_1 ; O1-NEXT: # %bb.2: # %atomicrmw.end ; O1-NEXT: movq $1, foo(%rip) @@ -9057,17 +9438,19 @@ define void @atomic64_nand_seq_cst(ptr %a) { ; O2-LABEL: atomic64_nand_seq_cst: ; O2: # %bb.0: # %entry ; O2-NEXT: movq foo(%rip), %rax -; O2-NEXT: .Lpcsection213: +; O2-NEXT: .Lpcsection306: ; O2-NEXT: movq (%rdi), %rax ; O2-NEXT: .p2align 4, 0x90 ; O2-NEXT: .LBB190_1: # %atomicrmw.start ; O2-NEXT: # =>This Inner Loop Header: Depth=1 ; O2-NEXT: movl %eax, %ecx +; O2-NEXT: .Lpcsection307: ; O2-NEXT: notl %ecx -; O2-NEXT: .Lpcsection214: +; O2-NEXT: .Lpcsection308: ; O2-NEXT: orq $-43, %rcx +; O2-NEXT: .Lpcsection309: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) -; O2-NEXT: .Lpcsection215: +; O2-NEXT: .Lpcsection310: ; O2-NEXT: jne .LBB190_1 ; O2-NEXT: # %bb.2: # %atomicrmw.end ; O2-NEXT: movq $1, foo(%rip) @@ -9076,17 +9459,19 @@ define void @atomic64_nand_seq_cst(ptr %a) { ; O3-LABEL: atomic64_nand_seq_cst: ; O3: # %bb.0: # %entry ; O3-NEXT: movq foo(%rip), %rax -; O3-NEXT: .Lpcsection213: +; O3-NEXT: .Lpcsection306: ; O3-NEXT: movq (%rdi), %rax ; O3-NEXT: .p2align 4, 0x90 ; O3-NEXT: .LBB190_1: # %atomicrmw.start ; O3-NEXT: # =>This Inner Loop Header: Depth=1 ; O3-NEXT: movl %eax, %ecx +; O3-NEXT: .Lpcsection307: ; O3-NEXT: notl %ecx -; O3-NEXT: .Lpcsection214: +; O3-NEXT: .Lpcsection308: ; O3-NEXT: orq $-43, %rcx +; O3-NEXT: .Lpcsection309: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) -; O3-NEXT: .Lpcsection215: +; O3-NEXT: .Lpcsection310: ; O3-NEXT: jne .LBB190_1 ; O3-NEXT: # %bb.2: # %atomicrmw.end ; O3-NEXT: movq $1, foo(%rip) @@ -9105,14 +9490,17 @@ define void @atomic64_cas_monotonic(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection386: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection286: +; O0-NEXT: .Lpcsection387: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection388: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection287: +; O0-NEXT: .Lpcsection389: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection390: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -9122,10 +9510,13 @@ define void @atomic64_cas_monotonic(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection311: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection312: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection313: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -9135,10 +9526,13 @@ define void @atomic64_cas_monotonic(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection311: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection312: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection313: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -9148,10 +9542,13 @@ define void @atomic64_cas_monotonic(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection311: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection312: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection313: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -9171,14 +9568,17 @@ define void @atomic64_cas_acquire(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection391: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection288: +; O0-NEXT: .Lpcsection392: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection393: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection289: +; O0-NEXT: .Lpcsection394: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection395: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -9188,10 +9588,13 @@ define void @atomic64_cas_acquire(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection314: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection315: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection316: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -9201,10 +9604,13 @@ define void @atomic64_cas_acquire(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection314: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection315: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection316: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -9214,10 +9620,13 @@ define void @atomic64_cas_acquire(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection314: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection315: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection316: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -9237,14 +9646,17 @@ define void @atomic64_cas_release(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection396: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection290: +; O0-NEXT: .Lpcsection397: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection398: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection291: +; O0-NEXT: .Lpcsection399: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection400: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -9254,10 +9666,13 @@ define void @atomic64_cas_release(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection317: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection318: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection319: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -9267,10 +9682,13 @@ define void @atomic64_cas_release(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection317: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection318: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection319: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -9280,10 +9698,13 @@ define void @atomic64_cas_release(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection317: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection318: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection319: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -9303,14 +9724,17 @@ define void @atomic64_cas_acq_rel(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection401: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection292: +; O0-NEXT: .Lpcsection402: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection403: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection293: +; O0-NEXT: .Lpcsection404: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection405: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -9320,10 +9744,13 @@ define void @atomic64_cas_acq_rel(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection320: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection321: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection322: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -9333,10 +9760,13 @@ define void @atomic64_cas_acq_rel(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection320: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection321: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection322: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -9346,10 +9776,13 @@ define void @atomic64_cas_acq_rel(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection320: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection321: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection322: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq @@ -9369,14 +9802,17 @@ define void @atomic64_cas_seq_cst(ptr %a) { ; O0-NEXT: movl $42, %eax ; O0-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill ; O0-NEXT: movl $1, %ecx +; O0-NEXT: .Lpcsection406: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection294: +; O0-NEXT: .Lpcsection407: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection408: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) -; O0-NEXT: .Lpcsection295: +; O0-NEXT: .Lpcsection409: ; O0-NEXT: # kill: def $rdx killed $rax ; O0-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload +; O0-NEXT: .Lpcsection410: ; O0-NEXT: lock cmpxchgq %rcx, (%rdi) ; O0-NEXT: movq $3, foo ; O0-NEXT: retq @@ -9386,10 +9822,13 @@ define void @atomic64_cas_seq_cst(ptr %a) { ; O1-NEXT: movq foo(%rip), %rax ; O1-NEXT: movl $1, %ecx ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection323: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection324: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movl $42, %eax +; O1-NEXT: .Lpcsection325: ; O1-NEXT: lock cmpxchgq %rcx, (%rdi) ; O1-NEXT: movq $3, foo(%rip) ; O1-NEXT: retq @@ -9399,10 +9838,13 @@ define void @atomic64_cas_seq_cst(ptr %a) { ; O2-NEXT: movq foo(%rip), %rax ; O2-NEXT: movl $1, %ecx ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection323: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection324: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movl $42, %eax +; O2-NEXT: .Lpcsection325: ; O2-NEXT: lock cmpxchgq %rcx, (%rdi) ; O2-NEXT: movq $3, foo(%rip) ; O2-NEXT: retq @@ -9412,10 +9854,13 @@ define void @atomic64_cas_seq_cst(ptr %a) { ; O3-NEXT: movq foo(%rip), %rax ; O3-NEXT: movl $1, %ecx ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection323: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection324: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movl $42, %eax +; O3-NEXT: .Lpcsection325: ; O3-NEXT: lock cmpxchgq %rcx, (%rdi) ; O3-NEXT: movq $3, foo(%rip) ; O3-NEXT: retq @@ -9433,6 +9878,7 @@ define void @atomic64_cas_seq_cst_ptr_ty(ptr %a, ptr %v1, ptr %v2) { ; O0: # %bb.0: # %entry ; O0-NEXT: movq %rsi, %rax ; O0-NEXT: movq foo(%rip), %rcx +; O0-NEXT: .Lpcsection411: ; O0-NEXT: lock cmpxchgq %rdx, (%rdi) ; O0-NEXT: movq $1, foo ; O0-NEXT: retq @@ -9441,6 +9887,7 @@ define void @atomic64_cas_seq_cst_ptr_ty(ptr %a, ptr %v1, ptr %v2) { ; O1: # %bb.0: # %entry ; O1-NEXT: movq %rsi, %rax ; O1-NEXT: movq foo(%rip), %rcx +; O1-NEXT: .Lpcsection326: ; O1-NEXT: lock cmpxchgq %rdx, (%rdi) ; O1-NEXT: movq $1, foo(%rip) ; O1-NEXT: retq @@ -9449,6 +9896,7 @@ define void @atomic64_cas_seq_cst_ptr_ty(ptr %a, ptr %v1, ptr %v2) { ; O2: # %bb.0: # %entry ; O2-NEXT: movq %rsi, %rax ; O2-NEXT: movq foo(%rip), %rcx +; O2-NEXT: .Lpcsection326: ; O2-NEXT: lock cmpxchgq %rdx, (%rdi) ; O2-NEXT: movq $1, foo(%rip) ; O2-NEXT: retq @@ -9457,6 +9905,7 @@ define void @atomic64_cas_seq_cst_ptr_ty(ptr %a, ptr %v1, ptr %v2) { ; O3: # %bb.0: # %entry ; O3-NEXT: movq %rsi, %rax ; O3-NEXT: movq foo(%rip), %rcx +; O3-NEXT: .Lpcsection326: ; O3-NEXT: lock cmpxchgq %rdx, (%rdi) ; O3-NEXT: movq $1, foo(%rip) ; O3-NEXT: retq -- 2.7.4