brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 00ac812 Raw
40 lines · plain
1; RUN: opt < %s -passes=lower-atomic -S | FileCheck %s2 3define i8 @cmpswap() {4; CHECK-LABEL: @cmpswap(5  %i = alloca i86  %pair = cmpxchg ptr %i, i8 0, i8 42 monotonic monotonic7  %j = extractvalue { i8, i1 } %pair, 08; CHECK: [[OLDVAL:%[a-z0-9]+]] = load i8, ptr [[ADDR:%[a-z0-9]+]]9; CHECK-NEXT: [[SAME:%[a-z0-9]+]] = icmp eq i8 [[OLDVAL]], 010; CHECK-NEXT: [[TO_STORE:%[a-z0-9]+]] = select i1 [[SAME]], i8 42, i8 [[OLDVAL]]11; CHECK-NEXT: store i8 [[TO_STORE]], ptr [[ADDR]]12; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = insertvalue { i8, i1 } poison, i8 [[OLDVAL]], 013; CHECK-NEXT: [[RES:%[a-z0-9]+]] = insertvalue { i8, i1 } [[TMP]], i1 [[SAME]], 114; CHECK-NEXT: [[VAL:%[a-z0-9]+]] = extractvalue { i8, i1 } [[RES]], 015  ret i8 %j16; CHECK: ret i8 [[VAL]]17}18 19 20define i8 @swap() {21; CHECK-LABEL: @swap(22  %i = alloca i823  %j = atomicrmw xchg ptr %i, i8 42 monotonic24; CHECK: [[INST:%[a-z0-9]+]] = load25; CHECK-NEXT: store26  ret i8 %j27; CHECK: ret i8 [[INST]]28}29 30 31define i8 @swap_optnone() noinline optnone {32; CHECK-LABEL: @swap_optnone(33  %i = alloca i834  %j = atomicrmw xchg ptr %i, i8 42 monotonic35; CHECK: [[INST:%[a-z0-9]+]] = load36; CHECK-NEXT: store37  ret i8 %j38; CHECK: ret i8 [[INST]]39}40