| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | |
| ; RUN: opt -passes=expand-memcmp -mtriple=powerpc64-ibm-aix -mcpu=pwr8 -S < %s | llc -mcpu=pwr8 -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix | \ | |
| ; RUN: FileCheck %s --check-prefix=CHECK-AIX64-32-P8 | |
| ; RUN: opt -passes=expand-memcmp -mtriple=powerpc64-ibm-aix -mcpu=pwr10 -S < %s | llc -mcpu=pwr10 -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix | \ | |
| ; RUN: FileCheck %s --check-prefix=CHECK-AIX64-32-P10 | |
| ; RUN: opt -passes=expand-memcmp -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -S < %s | llc -mcpu=pwr8 -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu | \ | |
| ; RUN: FileCheck %s --check-prefix=CHECK-LINUX64-P8 | |
| ; RUN: opt -passes=expand-memcmp -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr10 -S < %s | llc -mcpu=pwr10 -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu | \ | |
| ; RUN: FileCheck %s --check-prefix=CHECK-LINUX64-P10 | |
| define dso_local signext range(i32 0, 2) i32 @cmpeq16(ptr noundef readonly captures(none) %a, ptr noundef readonly captures(none) %b) { | |
| ; CHECK-AIX64-32-P8-LABEL: cmpeq16: | |
| ; CHECK-AIX64-32-P8: # %bb.0: # %entry | |
| ; CHECK-AIX64-32-P8-NEXT: lxvw4x vs34, 0, r4 | |
| ; CHECK-AIX64-32-P8-NEXT: lxvw4x vs35, 0, r3 | |
| ; CHECK-AIX64-32-P8-NEXT: vcmpequb. v2, v3, v2 | |
| ; CHECK-AIX64-32-P8-NEXT: mfocrf r3, 2 | |
| ; CHECK-AIX64-32-P8-NEXT: rlwinm r3, r3, 25, 31, 31 | |
| ; CHECK-AIX64-32-P8-NEXT: blr | |
| ; | |
| ; CHECK-AIX64-32-P10-LABEL: cmpeq16: | |
| ; CHECK-AIX64-32-P10: # %bb.0: # %entry | |
| ; CHECK-AIX64-32-P10-NEXT: lxv vs34, 0(r4) | |
| ; CHECK-AIX64-32-P10-NEXT: lxv vs35, 0(r3) | |
| ; CHECK-AIX64-32-P10-NEXT: vcmpequb. v2, v3, v2 | |
| ; CHECK-AIX64-32-P10-NEXT: setbc r3, 4*cr6+lt | |
| ; CHECK-AIX64-32-P10-NEXT: blr | |
| ; | |
| ; CHECK-LINUX64-P8-LABEL: cmpeq16: | |
| ; CHECK-LINUX64-P8: # %bb.0: # %entry | |
| ; CHECK-LINUX64-P8-NEXT: lxvd2x vs34, 0, r4 | |
| ; CHECK-LINUX64-P8-NEXT: lxvd2x vs35, 0, r3 | |
| ; CHECK-LINUX64-P8-NEXT: vcmpequb. v2, v3, v2 | |
| ; CHECK-LINUX64-P8-NEXT: mfocrf r3, 2 | |
| ; CHECK-LINUX64-P8-NEXT: rlwinm r3, r3, 25, 31, 31 | |
| ; CHECK-LINUX64-P8-NEXT: blr | |
| ; | |
| ; CHECK-LINUX64-P10-LABEL: cmpeq16: | |
| ; CHECK-LINUX64-P10: # %bb.0: # %entry | |
| ; CHECK-LINUX64-P10-NEXT: lxv vs34, 0(r4) | |
| ; CHECK-LINUX64-P10-NEXT: lxv vs35, 0(r3) | |
| ; CHECK-LINUX64-P10-NEXT: vcmpequb. v2, v3, v2 | |
| ; CHECK-LINUX64-P10-NEXT: setbc r3, 4*cr6+lt | |
| ; CHECK-LINUX64-P10-NEXT: blr | |
| entry: | |
| %bcmp = tail call i32 @bcmp(ptr noundef nonnull dereferenceable(16) %a, ptr noundef nonnull dereferenceable(16) %b, i64 16) | |
| %cmp = icmp eq i32 %bcmp, 0 | |
| %conv = zext i1 %cmp to i32 | |
| ret i32 %conv | |
| } | |
| declare signext i32 @bcmp(ptr captures(none), ptr captures(none), i64) | |