72 lines
2.7 KiB
LLVM
72 lines
2.7 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix < %s | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-AIX-32-P9
|
|
|
|
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-asm-full-reg-names -mtriple=powerpc-unknown-linux-gnu < %s | \
|
|
; RUN: FileCheck %s --check-prefix=CHECK-LINUX32-P9
|
|
|
|
define i32 @memcmp_test(ptr nocapture noundef readonly %ptr1, ptr nocapture noundef readonly %ptr2, i32 noundef %num) nounwind {
|
|
; CHECK-AIX-32-P9-LABEL: memcmp_test:
|
|
; CHECK-AIX-32-P9: # %bb.0: # %entry
|
|
; CHECK-AIX-32-P9-NEXT: mflr r0
|
|
; CHECK-AIX-32-P9-NEXT: stwu r1, -64(r1)
|
|
; CHECK-AIX-32-P9-NEXT: stw r0, 72(r1)
|
|
; CHECK-AIX-32-P9-NEXT: bl .___memcmp[PR]
|
|
; CHECK-AIX-32-P9-NEXT: nop
|
|
; CHECK-AIX-32-P9-NEXT: addi r1, r1, 64
|
|
; CHECK-AIX-32-P9-NEXT: lwz r0, 8(r1)
|
|
; CHECK-AIX-32-P9-NEXT: mtlr r0
|
|
; CHECK-AIX-32-P9-NEXT: blr
|
|
;
|
|
; CHECK-LINUX32-P9-LABEL: memcmp_test:
|
|
; CHECK-LINUX32-P9: # %bb.0: # %entry
|
|
; CHECK-LINUX32-P9-NEXT: mflr r0
|
|
; CHECK-LINUX32-P9-NEXT: stwu r1, -16(r1)
|
|
; CHECK-LINUX32-P9-NEXT: stw r0, 20(r1)
|
|
; CHECK-LINUX32-P9-NEXT: bl memcmp
|
|
; CHECK-LINUX32-P9-NEXT: lwz r0, 20(r1)
|
|
; CHECK-LINUX32-P9-NEXT: addi r1, r1, 16
|
|
; CHECK-LINUX32-P9-NEXT: mtlr r0
|
|
; CHECK-LINUX32-P9-NEXT: blr
|
|
entry:
|
|
%call = tail call i32 @memcmp(ptr noundef %ptr1, ptr noundef %ptr2, i32 noundef %num)
|
|
ret i32 %call
|
|
}
|
|
|
|
declare i32 @memcmp(ptr noundef captures(none), ptr noundef captures(none), i32 noundef) nounwind
|
|
|
|
define i32 @strlen_test(ptr noundef %str) nounwind {
|
|
; CHECK-AIX-32-P9-LABEL: strlen_test:
|
|
; CHECK-AIX-32-P9: # %bb.0: # %entry
|
|
; CHECK-AIX-32-P9-NEXT: mflr r0
|
|
; CHECK-AIX-32-P9-NEXT: stwu r1, -64(r1)
|
|
; CHECK-AIX-32-P9-NEXT: stw r0, 72(r1)
|
|
; CHECK-AIX-32-P9-NEXT: stw r3, 60(r1)
|
|
; CHECK-AIX-32-P9-NEXT: bl .strlen[PR]
|
|
; CHECK-AIX-32-P9-NEXT: nop
|
|
; CHECK-AIX-32-P9-NEXT: addi r1, r1, 64
|
|
; CHECK-AIX-32-P9-NEXT: lwz r0, 8(r1)
|
|
; CHECK-AIX-32-P9-NEXT: mtlr r0
|
|
; CHECK-AIX-32-P9-NEXT: blr
|
|
;
|
|
; CHECK-LINUX32-P9-LABEL: strlen_test:
|
|
; CHECK-LINUX32-P9: # %bb.0: # %entry
|
|
; CHECK-LINUX32-P9-NEXT: mflr r0
|
|
; CHECK-LINUX32-P9-NEXT: stwu r1, -16(r1)
|
|
; CHECK-LINUX32-P9-NEXT: stw r0, 20(r1)
|
|
; CHECK-LINUX32-P9-NEXT: stw r3, 12(r1)
|
|
; CHECK-LINUX32-P9-NEXT: bl strlen
|
|
; CHECK-LINUX32-P9-NEXT: lwz r0, 20(r1)
|
|
; CHECK-LINUX32-P9-NEXT: addi r1, r1, 16
|
|
; CHECK-LINUX32-P9-NEXT: mtlr r0
|
|
; CHECK-LINUX32-P9-NEXT: blr
|
|
entry:
|
|
%str.addr = alloca ptr, align 4
|
|
store ptr %str, ptr %str.addr, align 4
|
|
%0 = load ptr, ptr %str.addr, align 4
|
|
%call = call i32 @strlen(ptr noundef %0)
|
|
ret i32 %call
|
|
}
|
|
|
|
declare i32 @strlen(ptr noundef) nounwind
|