xref: /llvm-project/llvm/test/CodeGen/PowerPC/pr61882.ll (revision 69b056d5638bbe3c8098b5d3a4980eb9929b9bbe)
146396534SKai Luo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
246396534SKai Luo; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -mtriple=powerpc \
346396534SKai Luo; RUN:   -mcpu=pwr7 < %s | FileCheck %s
446396534SKai Luo; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -mtriple=powerpc \
546396534SKai Luo; RUN:   -mcpu=pwr8 < %s | FileCheck %s --check-prefix=PWR8
646396534SKai Luo
746396534SKai Luodefine void @foo(ptr %a, i32 %x) {
846396534SKai Luo; CHECK-LABEL: foo:
946396534SKai Luo; CHECK:       # %bb.0:
1046396534SKai Luo; CHECK-NEXT:    rlwinm r5, r3, 3, 27, 28
11eee024bfSKai Luo; CHECK-NEXT:    extsb r4, r4
12*69b056d5SQiu Chaofan; CHECK-NEXT:    li r6, 255
1346396534SKai Luo; CHECK-NEXT:    sync
1446396534SKai Luo; CHECK-NEXT:    rlwinm r3, r3, 0, 0, 29
15*69b056d5SQiu Chaofan; CHECK-NEXT:    xori r5, r5, 24
1646396534SKai Luo; CHECK-NEXT:    slw r7, r4, r5
1746396534SKai Luo; CHECK-NEXT:    slw r6, r6, r5
1846396534SKai Luo; CHECK-NEXT:    and r7, r7, r6
1946396534SKai Luo; CHECK-NEXT:  .LBB0_1:
2046396534SKai Luo; CHECK-NEXT:    lwarx r8, 0, r3
2146396534SKai Luo; CHECK-NEXT:    and r9, r8, r6
2246396534SKai Luo; CHECK-NEXT:    srw r9, r9, r5
2346396534SKai Luo; CHECK-NEXT:    extsb r9, r9
2446396534SKai Luo; CHECK-NEXT:    cmpw r9, r4
2546396534SKai Luo; CHECK-NEXT:    bgt cr0, .LBB0_3
2646396534SKai Luo; CHECK-NEXT:  # %bb.2:
2746396534SKai Luo; CHECK-NEXT:    andc r8, r8, r6
2846396534SKai Luo; CHECK-NEXT:    or r8, r7, r8
2946396534SKai Luo; CHECK-NEXT:    stwcx. r8, 0, r3
3046396534SKai Luo; CHECK-NEXT:    bne cr0, .LBB0_1
3146396534SKai Luo; CHECK-NEXT:  .LBB0_3:
3246396534SKai Luo; CHECK-NEXT:    lwsync
3346396534SKai Luo; CHECK-NEXT:    blr
3446396534SKai Luo;
3546396534SKai Luo; PWR8-LABEL: foo:
3646396534SKai Luo; PWR8:       # %bb.0:
3746396534SKai Luo; PWR8-NEXT:    sync
38b922a362SQiu Chaofan; PWR8-NEXT:    extsb r4, r4
3946396534SKai Luo; PWR8-NEXT:  .LBB0_1:
4046396534SKai Luo; PWR8-NEXT:    lbarx r5, 0, r3
4146396534SKai Luo; PWR8-NEXT:    extsb r5, r5
4246396534SKai Luo; PWR8-NEXT:    cmpw r5, r4
4346396534SKai Luo; PWR8-NEXT:    bgt cr0, .LBB0_3
4446396534SKai Luo; PWR8-NEXT:  # %bb.2:
4546396534SKai Luo; PWR8-NEXT:    stbcx. r4, 0, r3
4646396534SKai Luo; PWR8-NEXT:    bne cr0, .LBB0_1
4746396534SKai Luo; PWR8-NEXT:  .LBB0_3:
4846396534SKai Luo; PWR8-NEXT:    lwsync
4946396534SKai Luo; PWR8-NEXT:    blr
5046396534SKai Luo  %val = trunc i32 %x to i8
5146396534SKai Luo  %1 = atomicrmw max ptr %a, i8 %val seq_cst
5246396534SKai Luo  ret void
5346396534SKai Luo}
54