brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 8ac28d6 Raw
124 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s3 4; PR370255;6;#include <stdatomic.h>7;#include <stdbool.h>8;9;void func2();10;11;void func(_Atomic(unsigned long) * obj, ptr obj2)12;{13;        if (atomic_fetch_sub(obj, 1) == 1 && obj2)14;                func2();15;}16 17define void @test_dec_select(ptr nocapture %0, ptr readnone %1) {18; CHECK-LABEL: test_dec_select:19; CHECK:       # %bb.0:20; CHECK-NEXT:    lock decq (%rdi)21; CHECK-NEXT:    sete %al22; CHECK-NEXT:    testq %rsi, %rsi23; CHECK-NEXT:    setne %cl24; CHECK-NEXT:    andb %al, %cl25; CHECK-NEXT:    cmpb $1, %cl26; CHECK-NEXT:    je func2 # TAILCALL27; CHECK-NEXT:  # %bb.1:28; CHECK-NEXT:    retq29  %3 = atomicrmw sub ptr %0, i64 1 seq_cst30  %4 = icmp eq i64 %3, 131  %5 = icmp ne ptr %1, null32  %6 = select i1 %4, i1 %5, i1 false33  br i1 %6, label %7, label %834 357: ; preds = %236  tail call void @func2()37  br label %838 398: ; preds = %7, %240  ret void41}42 43define void @test_dec_select_commute(ptr nocapture %0, ptr readnone %1) {44; CHECK-LABEL: test_dec_select_commute:45; CHECK:       # %bb.0:46; CHECK-NEXT:    lock decq (%rdi)47; CHECK-NEXT:    sete %al48; CHECK-NEXT:    testq %rsi, %rsi49; CHECK-NEXT:    setne %cl50; CHECK-NEXT:    andb %al, %cl51; CHECK-NEXT:    cmpb $1, %cl52; CHECK-NEXT:    je func2 # TAILCALL53; CHECK-NEXT:  # %bb.1:54; CHECK-NEXT:    retq55  %3 = atomicrmw sub ptr %0, i64 1 seq_cst56  %4 = icmp eq i64 %3, 157  %5 = icmp ne ptr %1, null58  %6 = select i1 %5, i1 %4, i1 false59  br i1 %6, label %7, label %860 617: ; preds = %262  tail call void @func2()63  br label %864 658: ; preds = %7, %266  ret void67}68 69define void @test_dec_and(ptr nocapture %0, ptr readnone %1) {70; CHECK-LABEL: test_dec_and:71; CHECK:       # %bb.0:72; CHECK-NEXT:    lock decq (%rdi)73; CHECK-NEXT:    sete %al74; CHECK-NEXT:    notb %al75; CHECK-NEXT:    testq %rsi, %rsi76; CHECK-NEXT:    sete %cl77; CHECK-NEXT:    orb %al, %cl78; CHECK-NEXT:    testb $1, %cl79; CHECK-NEXT:    je func2 # TAILCALL80; CHECK-NEXT:  # %bb.1:81; CHECK-NEXT:    retq82  %3 = atomicrmw sub ptr %0, i64 1 seq_cst83  %4 = icmp eq i64 %3, 184  %5 = icmp ne ptr %1, null85  %6 = and i1 %5, %486  br i1 %6, label %7, label %887 887: ; preds = %289  tail call void @func2()90  br label %891 928: ; preds = %7, %293  ret void94}95 96define void @test_dec_and_commute(ptr nocapture %0, ptr readnone %1) {97; CHECK-LABEL: test_dec_and_commute:98; CHECK:       # %bb.0:99; CHECK-NEXT:    lock decq (%rdi)100; CHECK-NEXT:    sete %al101; CHECK-NEXT:    notb %al102; CHECK-NEXT:    testq %rsi, %rsi103; CHECK-NEXT:    sete %cl104; CHECK-NEXT:    orb %al, %cl105; CHECK-NEXT:    testb $1, %cl106; CHECK-NEXT:    je func2 # TAILCALL107; CHECK-NEXT:  # %bb.1:108; CHECK-NEXT:    retq109  %3 = atomicrmw sub ptr %0, i64 1 seq_cst110  %4 = icmp eq i64 %3, 1111  %5 = icmp ne ptr %1, null112  %6 = and i1 %4, %5113  br i1 %6, label %7, label %8114 1157: ; preds = %2116  tail call void @func2()117  br label %8118 1198: ; preds = %7, %2120  ret void121}122 123declare dso_local void @func2()124