[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / PowerPC / pr30451.ll
blob9b07df00f9c357aa708aeb617cebe742b059c0a9
1 ; RUN: llc < %s -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown | FileCheck %s
2 define i8 @atomic_min_i8() {
3     top:
4       %0 = alloca i8, align 2
5       %1 = bitcast i8* %0 to i8*
6       call void @llvm.lifetime.start.p0i8(i64 2, i8* %1)
7       store i8 -1, i8* %0, align 2
8       %2 = atomicrmw min i8* %0, i8 0 acq_rel
9       %3 = load atomic i8, i8* %0 acquire, align 8
10       call void @llvm.lifetime.end.p0i8(i64 2, i8* %1)
11       ret i8 %3
12 ; CHECK-LABEL: atomic_min_i8
13 ; CHECK: lbarx [[DST:[0-9]+]],
14 ; CHECK-NEXT: extsb [[EXT:[0-9]+]], [[DST]]
15 ; CHECK-NEXT: cmpw {{[0-9]+}}, [[EXT]]
16 ; CHECK-NEXT: bge 0
18 define i16 @atomic_min_i16() {
19     top:
20       %0 = alloca i16, align 2
21       %1 = bitcast i16* %0 to i8*
22       call void @llvm.lifetime.start.p0i8(i64 2, i8* %1)
23       store i16 -1, i16* %0, align 2
24       %2 = atomicrmw min i16* %0, i16 0 acq_rel
25       %3 = load atomic i16, i16* %0 acquire, align 8
26       call void @llvm.lifetime.end.p0i8(i64 2, i8* %1)
27       ret i16 %3
28 ; CHECK-LABEL: atomic_min_i16
29 ; CHECK: lharx [[DST:[0-9]+]],
30 ; CHECK-NEXT: extsh [[EXT:[0-9]+]], [[DST]]
31 ; CHECK-NEXT: cmpw {{[0-9]+}}, [[EXT]]
32 ; CHECK-NEXT: bge 0
35 define i8 @atomic_max_i8() {
36     top:
37       %0 = alloca i8, align 2
38       %1 = bitcast i8* %0 to i8*
39       call void @llvm.lifetime.start.p0i8(i64 2, i8* %1)
40       store i8 -1, i8* %0, align 2
41       %2 = atomicrmw max i8* %0, i8 0 acq_rel
42       %3 = load atomic i8, i8* %0 acquire, align 8
43       call void @llvm.lifetime.end.p0i8(i64 2, i8* %1)
44       ret i8 %3
45 ; CHECK-LABEL: atomic_max_i8
46 ; CHECK: lbarx [[DST:[0-9]+]],
47 ; CHECK-NEXT: extsb [[EXT:[0-9]+]], [[DST]]
48 ; CHECK-NEXT: cmpw {{[0-9]+}}, [[EXT]]
49 ; CHECK-NEXT: ble 0
51 define i16 @atomic_max_i16() {
52     top:
53       %0 = alloca i16, align 2
54       %1 = bitcast i16* %0 to i8*
55       call void @llvm.lifetime.start.p0i8(i64 2, i8* %1)
56       store i16 -1, i16* %0, align 2
57       %2 = atomicrmw max i16* %0, i16 0 acq_rel
58       %3 = load atomic i16, i16* %0 acquire, align 8
59       call void @llvm.lifetime.end.p0i8(i64 2, i8* %1)
60       ret i16 %3
61 ; CHECK-LABEL: atomic_max_i16
62 ; CHECK: lharx [[DST:[0-9]+]],
63 ; CHECK-NEXT: extsh [[EXT:[0-9]+]], [[DST]]
64 ; CHECK-NEXT: cmpw {{[0-9]+}}, [[EXT]]
65 ; CHECK-NEXT: ble 0
68 declare void @llvm.lifetime.start.p0i8(i64, i8*)
69 declare void @llvm.lifetime.end.p0i8(i64, i8*)