Home | History | Annotate | Download | only in PowerPC
      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
     17 }
     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
     33 }
     34 
     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
     50 }
     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
     66 }
     67 
     68 declare void @llvm.lifetime.start.p0i8(i64, i8*)
     69 declare void @llvm.lifetime.end.p0i8(i64, i8*)
     70