239 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 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 %al9; CHECK-NEXT: retq10 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 411 %4 = sub i32 0, %112 %5 = icmp eq i32 %3, %413 ret i1 %514}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 %al21; CHECK-NEXT: retq22 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 423 %4 = add i32 %3, %124 %5 = icmp slt i32 %4, 025 ret i1 %526}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 %al33; CHECK-NEXT: retq34 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 435 %4 = icmp eq i32 %3, %136 ret i1 %437}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 %al44; CHECK-NEXT: retq45 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 446 %4 = sub i32 %3, %147 %5 = icmp slt i32 %4, 048 ret i1 %549}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 %al56; CHECK-NEXT: retq57 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 458 %4 = or i32 %3, %159 %5 = icmp eq i32 %4, 060 ret i1 %561}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 %al68; CHECK-NEXT: retq69 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 470 %4 = or i32 %3, %171 %5 = icmp slt i32 %4, 072 ret i1 %573}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 %al80; CHECK-NEXT: retq81 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 482 %4 = and i32 %3, %183 %5 = icmp eq i32 %4, 084 ret i1 %585}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 %al92; CHECK-NEXT: retq93 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 494 %4 = and i32 %3, %195 %5 = icmp slt i32 %4, 096 ret i1 %597}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 %al104; CHECK-NEXT: retq105 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4106 %4 = icmp eq i32 %3, %1107 ret i1 %4108}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 %al115; CHECK-NEXT: retq116 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4117 %4 = xor i32 %3, %1118 %5 = icmp slt i32 %4, 0119 ret i1 %5120}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 %al127; CHECK-NEXT: retq128 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4129 %4 = sub i32 0, %1130 %5 = icmp ne i32 %3, %4131 ret i1 %5132}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 %al139; CHECK-NEXT: retq140 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4141 %4 = add i32 %3, %1142 %5 = icmp sgt i32 %4, -1143 ret i1 %5144}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 %al151; CHECK-NEXT: retq152 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4153 %4 = icmp ne i32 %3, %1154 ret i1 %4155}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 %al162; CHECK-NEXT: retq163 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4164 %4 = sub i32 %3, %1165 %5 = icmp sgt i32 %4, -1166 ret i1 %5167}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 %al174; CHECK-NEXT: retq175 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4176 %4 = or i32 %3, %1177 %5 = icmp ne i32 %4, 0178 ret i1 %5179}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 %al186; CHECK-NEXT: retq187 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4188 %4 = or i32 %3, %1189 %5 = icmp sgt i32 %4, -1190 ret i1 %5191}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 %al198; CHECK-NEXT: retq199 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4200 %4 = and i32 %3, %1201 %5 = icmp ne i32 %4, 0202 ret i1 %5203}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 %al210; CHECK-NEXT: retq211 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4212 %4 = and i32 %3, %1213 %5 = icmp sgt i32 %4, -1214 ret i1 %5215}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 %al222; CHECK-NEXT: retq223 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4224 %4 = icmp ne i32 %3, %1225 ret i1 %4226}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 %al233; CHECK-NEXT: retq234 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4235 %4 = xor i32 %3, %1236 %5 = icmp sgt i32 %4, -1237 ret i1 %5238}239