1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s 3 4define i1 @lock_add_sete(ptr %0, i32 %1) nounwind { 5; CHECK-LABEL: lock_add_sete: 6; CHECK: # %bb.0: 7; CHECK-NEXT: lock addl %esi, (%rdi) 8; CHECK-NEXT: sete %al 9; CHECK-NEXT: retq 10 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4 11 %4 = sub i32 0, %1 12 %5 = icmp eq i32 %3, %4 13 ret i1 %5 14} 15 16define i1 @lock_add_sets(ptr %0, i32 %1) nounwind { 17; CHECK-LABEL: lock_add_sets: 18; CHECK: # %bb.0: 19; CHECK-NEXT: lock addl %esi, (%rdi) 20; CHECK-NEXT: sets %al 21; CHECK-NEXT: retq 22 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4 23 %4 = add i32 %3, %1 24 %5 = icmp slt i32 %4, 0 25 ret i1 %5 26} 27 28define i1 @lock_sub_sete(ptr %0, i32 %1) nounwind { 29; CHECK-LABEL: lock_sub_sete: 30; CHECK: # %bb.0: 31; CHECK-NEXT: lock subl %esi, (%rdi) 32; CHECK-NEXT: sete %al 33; CHECK-NEXT: retq 34 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4 35 %4 = icmp eq i32 %3, %1 36 ret i1 %4 37} 38 39define i1 @lock_sub_sets(ptr %0, i32 %1) nounwind { 40; CHECK-LABEL: lock_sub_sets: 41; CHECK: # %bb.0: 42; CHECK-NEXT: lock subl %esi, (%rdi) 43; CHECK-NEXT: sets %al 44; CHECK-NEXT: retq 45 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4 46 %4 = sub i32 %3, %1 47 %5 = icmp slt i32 %4, 0 48 ret i1 %5 49} 50 51define i1 @lock_or_sete(ptr %0, i32 %1) nounwind { 52; CHECK-LABEL: lock_or_sete: 53; CHECK: # %bb.0: 54; CHECK-NEXT: lock orl %esi, (%rdi) 55; CHECK-NEXT: sete %al 56; CHECK-NEXT: retq 57 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4 58 %4 = or i32 %3, %1 59 %5 = icmp eq i32 %4, 0 60 ret i1 %5 61} 62 63define i1 @lock_or_sets(ptr %0, i32 %1) nounwind { 64; CHECK-LABEL: lock_or_sets: 65; CHECK: # %bb.0: 66; CHECK-NEXT: lock orl %esi, (%rdi) 67; CHECK-NEXT: sets %al 68; CHECK-NEXT: retq 69 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4 70 %4 = or i32 %3, %1 71 %5 = icmp slt i32 %4, 0 72 ret i1 %5 73} 74 75define i1 @lock_and_sete(ptr %0, i32 %1) nounwind { 76; CHECK-LABEL: lock_and_sete: 77; CHECK: # %bb.0: 78; CHECK-NEXT: lock andl %esi, (%rdi) 79; CHECK-NEXT: sete %al 80; CHECK-NEXT: retq 81 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4 82 %4 = and i32 %3, %1 83 %5 = icmp eq i32 %4, 0 84 ret i1 %5 85} 86 87define i1 @lock_and_sets(ptr %0, i32 %1) nounwind { 88; CHECK-LABEL: lock_and_sets: 89; CHECK: # %bb.0: 90; CHECK-NEXT: lock andl %esi, (%rdi) 91; CHECK-NEXT: sets %al 92; CHECK-NEXT: retq 93 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4 94 %4 = and i32 %3, %1 95 %5 = icmp slt i32 %4, 0 96 ret i1 %5 97} 98 99define i1 @lock_xor_sete(ptr %0, i32 %1) nounwind { 100; CHECK-LABEL: lock_xor_sete: 101; CHECK: # %bb.0: 102; CHECK-NEXT: lock xorl %esi, (%rdi) 103; CHECK-NEXT: sete %al 104; CHECK-NEXT: retq 105 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4 106 %4 = icmp eq i32 %3, %1 107 ret i1 %4 108} 109 110define i1 @lock_xor_sets(ptr %0, i32 %1) nounwind { 111; CHECK-LABEL: lock_xor_sets: 112; CHECK: # %bb.0: 113; CHECK-NEXT: lock xorl %esi, (%rdi) 114; CHECK-NEXT: sets %al 115; CHECK-NEXT: retq 116 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4 117 %4 = xor i32 %3, %1 118 %5 = icmp slt i32 %4, 0 119 ret i1 %5 120} 121 122define i1 @lock_add_setne(ptr %0, i32 %1) nounwind { 123; CHECK-LABEL: lock_add_setne: 124; CHECK: # %bb.0: 125; CHECK-NEXT: lock addl %esi, (%rdi) 126; CHECK-NEXT: setne %al 127; CHECK-NEXT: retq 128 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4 129 %4 = sub i32 0, %1 130 %5 = icmp ne i32 %3, %4 131 ret i1 %5 132} 133 134define i1 @lock_add_setns(ptr %0, i32 %1) nounwind { 135; CHECK-LABEL: lock_add_setns: 136; CHECK: # %bb.0: 137; CHECK-NEXT: lock addl %esi, (%rdi) 138; CHECK-NEXT: setns %al 139; CHECK-NEXT: retq 140 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4 141 %4 = add i32 %3, %1 142 %5 = icmp sgt i32 %4, -1 143 ret i1 %5 144} 145 146define i1 @lock_sub_setne(ptr %0, i32 %1) nounwind { 147; CHECK-LABEL: lock_sub_setne: 148; CHECK: # %bb.0: 149; CHECK-NEXT: lock subl %esi, (%rdi) 150; CHECK-NEXT: setne %al 151; CHECK-NEXT: retq 152 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4 153 %4 = icmp ne i32 %3, %1 154 ret i1 %4 155} 156 157define i1 @lock_sub_setns(ptr %0, i32 %1) nounwind { 158; CHECK-LABEL: lock_sub_setns: 159; CHECK: # %bb.0: 160; CHECK-NEXT: lock subl %esi, (%rdi) 161; CHECK-NEXT: setns %al 162; CHECK-NEXT: retq 163 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4 164 %4 = sub i32 %3, %1 165 %5 = icmp sgt i32 %4, -1 166 ret i1 %5 167} 168 169define i1 @lock_or_setne(ptr %0, i32 %1) nounwind { 170; CHECK-LABEL: lock_or_setne: 171; CHECK: # %bb.0: 172; CHECK-NEXT: lock orl %esi, (%rdi) 173; CHECK-NEXT: setne %al 174; CHECK-NEXT: retq 175 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4 176 %4 = or i32 %3, %1 177 %5 = icmp ne i32 %4, 0 178 ret i1 %5 179} 180 181define i1 @lock_or_setns(ptr %0, i32 %1) nounwind { 182; CHECK-LABEL: lock_or_setns: 183; CHECK: # %bb.0: 184; CHECK-NEXT: lock orl %esi, (%rdi) 185; CHECK-NEXT: setns %al 186; CHECK-NEXT: retq 187 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4 188 %4 = or i32 %3, %1 189 %5 = icmp sgt i32 %4, -1 190 ret i1 %5 191} 192 193define i1 @lock_and_setne(ptr %0, i32 %1) nounwind { 194; CHECK-LABEL: lock_and_setne: 195; CHECK: # %bb.0: 196; CHECK-NEXT: lock andl %esi, (%rdi) 197; CHECK-NEXT: setne %al 198; CHECK-NEXT: retq 199 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4 200 %4 = and i32 %3, %1 201 %5 = icmp ne i32 %4, 0 202 ret i1 %5 203} 204 205define i1 @lock_and_setns(ptr %0, i32 %1) nounwind { 206; CHECK-LABEL: lock_and_setns: 207; CHECK: # %bb.0: 208; CHECK-NEXT: lock andl %esi, (%rdi) 209; CHECK-NEXT: setns %al 210; CHECK-NEXT: retq 211 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4 212 %4 = and i32 %3, %1 213 %5 = icmp sgt i32 %4, -1 214 ret i1 %5 215} 216 217define i1 @lock_xor_setne(ptr %0, i32 %1) nounwind { 218; CHECK-LABEL: lock_xor_setne: 219; CHECK: # %bb.0: 220; CHECK-NEXT: lock xorl %esi, (%rdi) 221; CHECK-NEXT: setne %al 222; CHECK-NEXT: retq 223 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4 224 %4 = icmp ne i32 %3, %1 225 ret i1 %4 226} 227 228define i1 @lock_xor_setns(ptr %0, i32 %1) nounwind { 229; CHECK-LABEL: lock_xor_setns: 230; CHECK: # %bb.0: 231; CHECK-NEXT: lock xorl %esi, (%rdi) 232; CHECK-NEXT: setns %al 233; CHECK-NEXT: retq 234 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4 235 %4 = xor i32 %3, %1 236 %5 = icmp sgt i32 %4, -1 237 ret i1 %5 238} 239