1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s
3 @sc8 = external global i8
5 define void @atomic_maxmin_i8() {
6 ; CHECK-LABEL: atomic_maxmin_i8:
8 ; CHECK-NEXT: movb {{.*}}(%rip), %al
9 ; CHECK-NEXT: .p2align 4, 0x90
10 ; CHECK-NEXT: .LBB0_1: # %atomicrmw.start
11 ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
12 ; CHECK-NEXT: cmpb $4, %al
13 ; CHECK-NEXT: movl %eax, %ecx
14 ; CHECK-NEXT: jg .LBB0_3
15 ; CHECK-NEXT: # %bb.2: # %atomicrmw.start
16 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
17 ; CHECK-NEXT: movb $5, %cl
18 ; CHECK-NEXT: .LBB0_3: # %atomicrmw.start
19 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
20 ; CHECK-NEXT: lock cmpxchgb %cl, {{.*}}(%rip)
21 ; CHECK-NEXT: jne .LBB0_1
22 ; CHECK-NEXT: # %bb.4: # %atomicrmw.end
23 ; CHECK-NEXT: movb {{.*}}(%rip), %al
24 ; CHECK-NEXT: .p2align 4, 0x90
25 ; CHECK-NEXT: .LBB0_5: # %atomicrmw.start2
26 ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
27 ; CHECK-NEXT: cmpb $7, %al
28 ; CHECK-NEXT: movl %eax, %ecx
29 ; CHECK-NEXT: jl .LBB0_7
30 ; CHECK-NEXT: # %bb.6: # %atomicrmw.start2
31 ; CHECK-NEXT: # in Loop: Header=BB0_5 Depth=1
32 ; CHECK-NEXT: movb $6, %cl
33 ; CHECK-NEXT: .LBB0_7: # %atomicrmw.start2
34 ; CHECK-NEXT: # in Loop: Header=BB0_5 Depth=1
35 ; CHECK-NEXT: lock cmpxchgb %cl, {{.*}}(%rip)
36 ; CHECK-NEXT: jne .LBB0_5
37 ; CHECK-NEXT: # %bb.8: # %atomicrmw.end1
38 ; CHECK-NEXT: movb {{.*}}(%rip), %al
39 ; CHECK-NEXT: .p2align 4, 0x90
40 ; CHECK-NEXT: .LBB0_9: # %atomicrmw.start8
41 ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
42 ; CHECK-NEXT: cmpb $7, %al
43 ; CHECK-NEXT: movl %eax, %ecx
44 ; CHECK-NEXT: ja .LBB0_11
45 ; CHECK-NEXT: # %bb.10: # %atomicrmw.start8
46 ; CHECK-NEXT: # in Loop: Header=BB0_9 Depth=1
47 ; CHECK-NEXT: movb $7, %cl
48 ; CHECK-NEXT: .LBB0_11: # %atomicrmw.start8
49 ; CHECK-NEXT: # in Loop: Header=BB0_9 Depth=1
50 ; CHECK-NEXT: lock cmpxchgb %cl, {{.*}}(%rip)
51 ; CHECK-NEXT: jne .LBB0_9
52 ; CHECK-NEXT: # %bb.12: # %atomicrmw.end7
53 ; CHECK-NEXT: movb {{.*}}(%rip), %al
54 ; CHECK-NEXT: .p2align 4, 0x90
55 ; CHECK-NEXT: .LBB0_13: # %atomicrmw.start14
56 ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
57 ; CHECK-NEXT: cmpb $9, %al
58 ; CHECK-NEXT: movl %eax, %ecx
59 ; CHECK-NEXT: jb .LBB0_15
60 ; CHECK-NEXT: # %bb.14: # %atomicrmw.start14
61 ; CHECK-NEXT: # in Loop: Header=BB0_13 Depth=1
62 ; CHECK-NEXT: movb $8, %cl
63 ; CHECK-NEXT: .LBB0_15: # %atomicrmw.start14
64 ; CHECK-NEXT: # in Loop: Header=BB0_13 Depth=1
65 ; CHECK-NEXT: lock cmpxchgb %cl, {{.*}}(%rip)
66 ; CHECK-NEXT: jne .LBB0_13
67 ; CHECK-NEXT: # %bb.16: # %atomicrmw.end13
69 %1 = atomicrmw max i8* @sc8, i8 5 acquire
70 %2 = atomicrmw min i8* @sc8, i8 6 acquire
71 %3 = atomicrmw umax i8* @sc8, i8 7 acquire
72 %4 = atomicrmw umin i8* @sc8, i8 8 acquire