+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-linux-gnu < %s | FileCheck %s
%"struct.std::atomic" = type { %"struct.std::atomic_bool" }
; CHECK-LABEL: _Z3fooRSt6atomicIbEb
define zeroext i1 @_Z3fooRSt6atomicIbEb(%"struct.std::atomic"* nocapture dereferenceable(1) %a, i1 returned zeroext %b) nounwind {
+; CHECK-LABEL: _Z3fooRSt6atomicIbEb:
+; CHECK: # BB#0: # %entry
+; CHECK-NEXT: movq %rdi, %rax
+; CHECK-NEXT: shrq $3, %rax
+; CHECK-NEXT: movb 2147450880(%rax), %al
+; CHECK-NEXT: testb %al, %al
+; CHECK-NEXT: je .LBB0_3
+; CHECK-NEXT: # BB#1:
+; CHECK-NEXT: movl %edi, %ecx
+; CHECK-NEXT: andl $7, %ecx
+; CHECK-NEXT: cmpb %al, %cl
+; CHECK-NEXT: jge .LBB0_2
+; CHECK-NEXT: .LBB0_3:
+; CHECK-NEXT: movl %esi, %eax
+; CHECK-NEXT: xchgb %al, (%rdi)
+; CHECK-NEXT: movl %esi, %eax
+; CHECK-NEXT: retq
+; CHECK-NEXT: .LBB0_2:
+; CHECK-NEXT: pushq %rax
+; CHECK-NEXT: callq __asan_report_store1
+; CHECK-NEXT: #APP
+; CHECK-NEXT: #NO_APP
entry:
%frombool.i.i = zext i1 %b to i8
%_M_i.i.i = getelementptr inbounds %"struct.std::atomic", %"struct.std::atomic"* %a, i64 0, i32 0, i32 0, i32 0
; <label>:11: ; preds = %6, %entry
store atomic i8 %frombool.i.i, i8* %_M_i.i.i seq_cst, align 1
-; CHECK: xchgb %{{.*}}, (%{{.*}})
ret i1 %b
}