Add an atomic lowering pass
[oota-llvm.git] / test / Transforms / LowerAtomic / atomic-load.ll
1 ; RUN: opt < %s -loweratomic -S | FileCheck %s
2
3 declare i8 @llvm.atomic.load.add.i8.p0i8(i8* %ptr, i8 %delta)
4 declare i8 @llvm.atomic.load.nand.i8.p0i8(i8* %ptr, i8 %delta)
5 declare i8 @llvm.atomic.load.min.i8.p0i8(i8* %ptr, i8 %delta)
6
7 define i8 @add() {
8 ; CHECK: @add
9   %i = alloca i8
10   %j = call i8 @llvm.atomic.load.add.i8.p0i8(i8* %i, i8 42)
11 ; CHECK: [[INST:%[a-z0-9]+]] = load
12 ; CHECK-NEXT: add
13 ; CHECK-NEXT: store
14   ret i8 %j
15 ; CHECK: ret i8 [[INST]]
16 }
17
18 define i8 @nand() {
19 ; CHECK: @nand
20   %i = alloca i8
21   %j = call i8 @llvm.atomic.load.nand.i8.p0i8(i8* %i, i8 42)
22 ; CHECK: [[INST:%[a-z0-9]+]] = load
23 ; CHECK-NEXT: and
24 ; CHECK-NEXT: xor
25 ; CHECK-NEXT: store
26   ret i8 %j
27 ; CHECK: ret i8 [[INST]]
28 }
29
30 define i8 @min() {
31 ; CHECK: @min
32   %i = alloca i8
33   %j = call i8 @llvm.atomic.load.min.i8.p0i8(i8* %i, i8 42)
34 ; CHECK: [[INST:%[a-z0-9]+]] = load
35 ; CHECK-NEXT: icmp
36 ; CHECK-NEXT: select
37 ; CHECK-NEXT: store
38   ret i8 %j
39 ; CHECK: ret i8 [[INST]]
40 }