; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8LE
; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9LE
; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10LE
; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8BE
; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9BE
; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10BE
define signext i8 @caller_1(ptr nocapture readonly byval([1 x i8]) %data) #0 {
; P8LE-LABEL: caller_1:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: stb r3, 48(r1)
; P8LE-NEXT: lbz r3, 48(r1)
; P8LE-NEXT: stb r3, 63(r1)
; P8LE-NEXT: addi r3, r1, 63
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_1:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: stb r3, 48(r1)
; P9LE-NEXT: lbz r3, 48(r1)
; P9LE-NEXT: stb r3, 63(r1)
; P9LE-NEXT: addi r3, r1, 63
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_1:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: stb r3, 48(r1)
; P10LE-NEXT: lbz r3, 48(r1)
; P10LE-NEXT: stb r3, 63(r1)
; P10LE-NEXT: addi r3, r1, 63
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_1:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: stb r3, 183(r1)
; P8BE-NEXT: lbz r3, 183(r1)
; P8BE-NEXT: stb r3, 127(r1)
; P8BE-NEXT: addi r3, r1, 127
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_1:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: stb r3, 183(r1)
; P9BE-NEXT: lbz r3, 183(r1)
; P9BE-NEXT: stb r3, 127(r1)
; P9BE-NEXT: addi r3, r1, 127
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_1:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: stb r3, 183(r1)
; P10BE-NEXT: lbz r3, 183(r1)
; P10BE-NEXT: stb r3, 127(r1)
; P10BE-NEXT: addi r3, r1, 127
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [1 x i8], align 1
%.unpack = load i8, ptr %data, align 1
store i8 %.unpack, ptr %_param_data, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_2(ptr nocapture readonly byval([2 x i8]) %data) #0 {
; P8LE-LABEL: caller_2:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: sth r3, 48(r1)
; P8LE-NEXT: lhz r3, 48(r1)
; P8LE-NEXT: sth r3, 62(r1)
; P8LE-NEXT: addi r3, r1, 62
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_2:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: sth r3, 48(r1)
; P9LE-NEXT: lhz r3, 48(r1)
; P9LE-NEXT: sth r3, 62(r1)
; P9LE-NEXT: addi r3, r1, 62
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_2:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: sth r3, 48(r1)
; P10LE-NEXT: lhz r3, 48(r1)
; P10LE-NEXT: sth r3, 62(r1)
; P10LE-NEXT: addi r3, r1, 62
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_2:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: sth r3, 182(r1)
; P8BE-NEXT: lhz r3, 182(r1)
; P8BE-NEXT: sth r3, 126(r1)
; P8BE-NEXT: addi r3, r1, 126
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_2:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: sth r3, 182(r1)
; P9BE-NEXT: lhz r3, 182(r1)
; P9BE-NEXT: sth r3, 126(r1)
; P9BE-NEXT: addi r3, r1, 126
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_2:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: sth r3, 182(r1)
; P10BE-NEXT: lhz r3, 182(r1)
; P10BE-NEXT: sth r3, 126(r1)
; P10BE-NEXT: addi r3, r1, 126
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [2 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [2 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [2 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_3(ptr nocapture readonly byval([3 x i8]) %data) #0 {
; P8LE-LABEL: caller_3:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: sth r3, 48(r1)
; P8LE-NEXT: rldicl r3, r3, 48, 16
; P8LE-NEXT: stb r3, 50(r1)
; P8LE-NEXT: lhz r3, 48(r1)
; P8LE-NEXT: lbz r4, 50(r1)
; P8LE-NEXT: sth r3, 61(r1)
; P8LE-NEXT: addi r3, r1, 61
; P8LE-NEXT: stb r4, 63(r1)
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_3:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: sth r3, 48(r1)
; P9LE-NEXT: rldicl r3, r3, 48, 16
; P9LE-NEXT: stb r3, 50(r1)
; P9LE-NEXT: lhz r3, 48(r1)
; P9LE-NEXT: lbz r4, 50(r1)
; P9LE-NEXT: sth r3, 61(r1)
; P9LE-NEXT: addi r3, r1, 61
; P9LE-NEXT: stb r4, 63(r1)
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_3:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: sth r3, 48(r1)
; P10LE-NEXT: rldicl r3, r3, 48, 16
; P10LE-NEXT: stb r3, 50(r1)
; P10LE-NEXT: lhz r3, 48(r1)
; P10LE-NEXT: lbz r4, 50(r1)
; P10LE-NEXT: sth r3, 61(r1)
; P10LE-NEXT: addi r3, r1, 61
; P10LE-NEXT: stb r4, 63(r1)
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_3:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: rldicl r4, r3, 56, 8
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: stb r3, 183(r1)
; P8BE-NEXT: sth r4, 181(r1)
; P8BE-NEXT: lbz r4, 183(r1)
; P8BE-NEXT: lhz r3, 181(r1)
; P8BE-NEXT: stb r4, 127(r1)
; P8BE-NEXT: sth r3, 125(r1)
; P8BE-NEXT: addi r3, r1, 125
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_3:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: rldicl r4, r3, 56, 8
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: stb r3, 183(r1)
; P9BE-NEXT: sth r4, 181(r1)
; P9BE-NEXT: lbz r4, 183(r1)
; P9BE-NEXT: lhz r3, 181(r1)
; P9BE-NEXT: stb r4, 127(r1)
; P9BE-NEXT: sth r3, 125(r1)
; P9BE-NEXT: addi r3, r1, 125
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_3:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: rldicl r4, r3, 56, 8
; P10BE-NEXT: stb r3, 183(r1)
; P10BE-NEXT: sth r4, 181(r1)
; P10BE-NEXT: lbz r4, 183(r1)
; P10BE-NEXT: lhz r3, 181(r1)
; P10BE-NEXT: stb r4, 127(r1)
; P10BE-NEXT: sth r3, 125(r1)
; P10BE-NEXT: addi r3, r1, 125
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [3 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
%.elt3 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 2
%.unpack4 = load i8, ptr %.elt3, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
%.temp.2.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 2
store i8 %.unpack4, ptr %.temp.2.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_4(ptr nocapture readonly byval([4 x i8]) %data) #0 {
; P8LE-LABEL: caller_4:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: stw r3, 48(r1)
; P8LE-NEXT: lwz r3, 48(r1)
; P8LE-NEXT: stw r3, 60(r1)
; P8LE-NEXT: addi r3, r1, 60
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_4:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: stw r3, 48(r1)
; P9LE-NEXT: lwz r3, 48(r1)
; P9LE-NEXT: stw r3, 60(r1)
; P9LE-NEXT: addi r3, r1, 60
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_4:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: stw r3, 48(r1)
; P10LE-NEXT: lwz r3, 48(r1)
; P10LE-NEXT: stw r3, 60(r1)
; P10LE-NEXT: addi r3, r1, 60
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_4:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: stw r3, 180(r1)
; P8BE-NEXT: lwz r3, 180(r1)
; P8BE-NEXT: stw r3, 124(r1)
; P8BE-NEXT: addi r3, r1, 124
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_4:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: stw r3, 180(r1)
; P9BE-NEXT: lwz r3, 180(r1)
; P9BE-NEXT: stw r3, 124(r1)
; P9BE-NEXT: addi r3, r1, 124
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_4:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: stw r3, 180(r1)
; P10BE-NEXT: lwz r3, 180(r1)
; P10BE-NEXT: stw r3, 124(r1)
; P10BE-NEXT: addi r3, r1, 124
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [4 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
%.elt3 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 2
%.unpack4 = load i8, ptr %.elt3, align 1
%.elt5 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 3
%.unpack6 = load i8, ptr %.elt5, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
%.temp.2.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 2
store i8 %.unpack4, ptr %.temp.2.gep, align 1
%.temp.3.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 3
store i8 %.unpack6, ptr %.temp.3.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_5(ptr nocapture readonly byval([5 x i8]) %data) #0 {
; P8LE-LABEL: caller_5:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: rldicl r4, r3, 32, 32
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: stw r3, 48(r1)
; P8LE-NEXT: stw r3, 59(r1)
; P8LE-NEXT: addi r3, r1, 59
; P8LE-NEXT: stb r4, 52(r1)
; P8LE-NEXT: lbz r4, 52(r1)
; P8LE-NEXT: stb r4, 63(r1)
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_5:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: rldicl r4, r3, 32, 32
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: stw r3, 48(r1)
; P9LE-NEXT: stw r3, 59(r1)
; P9LE-NEXT: addi r3, r1, 59
; P9LE-NEXT: stb r4, 52(r1)
; P9LE-NEXT: lbz r4, 52(r1)
; P9LE-NEXT: stb r4, 63(r1)
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_5:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: rldicl r4, r3, 32, 32
; P10LE-NEXT: stw r3, 48(r1)
; P10LE-NEXT: stw r3, 59(r1)
; P10LE-NEXT: addi r3, r1, 59
; P10LE-NEXT: stb r4, 52(r1)
; P10LE-NEXT: lbz r4, 52(r1)
; P10LE-NEXT: stb r4, 63(r1)
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_5:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: stb r3, 183(r1)
; P8BE-NEXT: rldicl r3, r3, 56, 8
; P8BE-NEXT: lbz r4, 183(r1)
; P8BE-NEXT: stw r3, 179(r1)
; P8BE-NEXT: stw r3, 123(r1)
; P8BE-NEXT: addi r3, r1, 123
; P8BE-NEXT: stb r4, 127(r1)
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_5:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: stb r3, 183(r1)
; P9BE-NEXT: lbz r4, 183(r1)
; P9BE-NEXT: rldicl r3, r3, 56, 8
; P9BE-NEXT: stw r3, 179(r1)
; P9BE-NEXT: stw r3, 123(r1)
; P9BE-NEXT: addi r3, r1, 123
; P9BE-NEXT: stb r4, 127(r1)
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_5:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: stb r3, 183(r1)
; P10BE-NEXT: rldicl r3, r3, 56, 8
; P10BE-NEXT: lbz r4, 183(r1)
; P10BE-NEXT: stw r3, 179(r1)
; P10BE-NEXT: stw r3, 123(r1)
; P10BE-NEXT: addi r3, r1, 123
; P10BE-NEXT: stb r4, 127(r1)
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [5 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
%.elt3 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 2
%.unpack4 = load i8, ptr %.elt3, align 1
%.elt5 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 3
%.unpack6 = load i8, ptr %.elt5, align 1
%.elt7 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 4
%.unpack8 = load i8, ptr %.elt7, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
%.temp.2.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 2
store i8 %.unpack4, ptr %.temp.2.gep, align 1
%.temp.3.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 3
store i8 %.unpack6, ptr %.temp.3.gep, align 1
%.temp.4.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 4
store i8 %.unpack8, ptr %.temp.4.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_6(ptr nocapture readonly byval([6 x i8]) %data) #0 {
; P8LE-LABEL: caller_6:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: stw r3, 48(r1)
; P8LE-NEXT: rldicl r3, r3, 32, 32
; P8LE-NEXT: sth r3, 52(r1)
; P8LE-NEXT: lwz r3, 48(r1)
; P8LE-NEXT: lhz r4, 52(r1)
; P8LE-NEXT: stw r3, 58(r1)
; P8LE-NEXT: addi r3, r1, 58
; P8LE-NEXT: sth r4, 62(r1)
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_6:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: stw r3, 48(r1)
; P9LE-NEXT: rldicl r3, r3, 32, 32
; P9LE-NEXT: sth r3, 52(r1)
; P9LE-NEXT: lwz r3, 48(r1)
; P9LE-NEXT: lhz r4, 52(r1)
; P9LE-NEXT: stw r3, 58(r1)
; P9LE-NEXT: addi r3, r1, 58
; P9LE-NEXT: sth r4, 62(r1)
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_6:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: stw r3, 48(r1)
; P10LE-NEXT: rldicl r3, r3, 32, 32
; P10LE-NEXT: sth r3, 52(r1)
; P10LE-NEXT: lwz r3, 48(r1)
; P10LE-NEXT: lhz r4, 52(r1)
; P10LE-NEXT: stw r3, 58(r1)
; P10LE-NEXT: addi r3, r1, 58
; P10LE-NEXT: sth r4, 62(r1)
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_6:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: rldicl r4, r3, 48, 16
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: sth r3, 182(r1)
; P8BE-NEXT: stw r4, 178(r1)
; P8BE-NEXT: lhz r4, 182(r1)
; P8BE-NEXT: lwz r3, 178(r1)
; P8BE-NEXT: sth r4, 126(r1)
; P8BE-NEXT: stw r3, 122(r1)
; P8BE-NEXT: addi r3, r1, 122
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_6:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: rldicl r4, r3, 48, 16
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: sth r3, 182(r1)
; P9BE-NEXT: stw r4, 178(r1)
; P9BE-NEXT: lhz r4, 182(r1)
; P9BE-NEXT: lwz r3, 178(r1)
; P9BE-NEXT: sth r4, 126(r1)
; P9BE-NEXT: stw r3, 122(r1)
; P9BE-NEXT: addi r3, r1, 122
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_6:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: rldicl r4, r3, 48, 16
; P10BE-NEXT: sth r3, 182(r1)
; P10BE-NEXT: stw r4, 178(r1)
; P10BE-NEXT: lhz r4, 182(r1)
; P10BE-NEXT: lwz r3, 178(r1)
; P10BE-NEXT: sth r4, 126(r1)
; P10BE-NEXT: stw r3, 122(r1)
; P10BE-NEXT: addi r3, r1, 122
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [6 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
%.elt3 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 2
%.unpack4 = load i8, ptr %.elt3, align 1
%.elt5 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 3
%.unpack6 = load i8, ptr %.elt5, align 1
%.elt7 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 4
%.unpack8 = load i8, ptr %.elt7, align 1
%.elt9 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 5
%.unpack10 = load i8, ptr %.elt9, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
%.temp.2.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 2
store i8 %.unpack4, ptr %.temp.2.gep, align 1
%.temp.3.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 3
store i8 %.unpack6, ptr %.temp.3.gep, align 1
%.temp.4.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 4
store i8 %.unpack8, ptr %.temp.4.gep, align 1
%.temp.5.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 5
store i8 %.unpack10, ptr %.temp.5.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
define signext i8 @caller_7(ptr nocapture readonly byval([7 x i8]) %data) #0 {
; P8LE-LABEL: caller_7:
; P8LE: # %bb.0: # %entry
; P8LE-NEXT: mflr r0
; P8LE-NEXT: stdu r1, -64(r1)
; P8LE-NEXT: rldicl r4, r3, 32, 32
; P8LE-NEXT: std r0, 80(r1)
; P8LE-NEXT: stw r3, 48(r1)
; P8LE-NEXT: stw r3, 57(r1)
; P8LE-NEXT: sth r4, 52(r1)
; P8LE-NEXT: rldicl r4, r3, 16, 48
; P8LE-NEXT: stb r4, 54(r1)
; P8LE-NEXT: lhz r4, 52(r1)
; P8LE-NEXT: lbz r3, 54(r1)
; P8LE-NEXT: sth r4, 61(r1)
; P8LE-NEXT: stb r3, 63(r1)
; P8LE-NEXT: addi r3, r1, 57
; P8LE-NEXT: bl callee
; P8LE-NEXT: nop
; P8LE-NEXT: li r3, 0
; P8LE-NEXT: addi r1, r1, 64
; P8LE-NEXT: ld r0, 16(r1)
; P8LE-NEXT: mtlr r0
; P8LE-NEXT: blr
;
; P9LE-LABEL: caller_7:
; P9LE: # %bb.0: # %entry
; P9LE-NEXT: mflr r0
; P9LE-NEXT: stdu r1, -64(r1)
; P9LE-NEXT: rldicl r4, r3, 32, 32
; P9LE-NEXT: std r0, 80(r1)
; P9LE-NEXT: stw r3, 48(r1)
; P9LE-NEXT: stw r3, 57(r1)
; P9LE-NEXT: sth r4, 52(r1)
; P9LE-NEXT: rldicl r4, r3, 16, 48
; P9LE-NEXT: addi r3, r1, 57
; P9LE-NEXT: stb r4, 54(r1)
; P9LE-NEXT: lhz r4, 52(r1)
; P9LE-NEXT: lbz r5, 54(r1)
; P9LE-NEXT: sth r4, 61(r1)
; P9LE-NEXT: stb r5, 63(r1)
; P9LE-NEXT: bl callee
; P9LE-NEXT: nop
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: addi r1, r1, 64
; P9LE-NEXT: ld r0, 16(r1)
; P9LE-NEXT: mtlr r0
; P9LE-NEXT: blr
;
; P10LE-LABEL: caller_7:
; P10LE: # %bb.0: # %entry
; P10LE-NEXT: mflr r0
; P10LE-NEXT: std r0, 16(r1)
; P10LE-NEXT: stdu r1, -64(r1)
; P10LE-NEXT: rldicl r4, r3, 32, 32
; P10LE-NEXT: stw r3, 48(r1)
; P10LE-NEXT: stw r3, 57(r1)
; P10LE-NEXT: sth r4, 52(r1)
; P10LE-NEXT: rldicl r4, r3, 16, 48
; P10LE-NEXT: addi r3, r1, 57
; P10LE-NEXT: stb r4, 54(r1)
; P10LE-NEXT: lhz r4, 52(r1)
; P10LE-NEXT: lbz r5, 54(r1)
; P10LE-NEXT: sth r4, 61(r1)
; P10LE-NEXT: stb r5, 63(r1)
; P10LE-NEXT: bl callee@notoc
; P10LE-NEXT: li r3, 0
; P10LE-NEXT: addi r1, r1, 64
; P10LE-NEXT: ld r0, 16(r1)
; P10LE-NEXT: mtlr r0
; P10LE-NEXT: blr
;
; P8BE-LABEL: caller_7:
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: mflr r0
; P8BE-NEXT: stdu r1, -128(r1)
; P8BE-NEXT: std r0, 144(r1)
; P8BE-NEXT: rldicl r4, r3, 56, 8
; P8BE-NEXT: stb r3, 183(r1)
; P8BE-NEXT: rldicl r3, r3, 40, 24
; P8BE-NEXT: stw r3, 177(r1)
; P8BE-NEXT: stw r3, 121(r1)
; P8BE-NEXT: lbz r3, 183(r1)
; P8BE-NEXT: sth r4, 181(r1)
; P8BE-NEXT: lhz r4, 181(r1)
; P8BE-NEXT: stb r3, 127(r1)
; P8BE-NEXT: addi r3, r1, 121
; P8BE-NEXT: sth r4, 125(r1)
; P8BE-NEXT: bl callee
; P8BE-NEXT: nop
; P8BE-NEXT: li r3, 0
; P8BE-NEXT: addi r1, r1, 128
; P8BE-NEXT: ld r0, 16(r1)
; P8BE-NEXT: mtlr r0
; P8BE-NEXT: blr
;
; P9BE-LABEL: caller_7:
; P9BE: # %bb.0: # %entry
; P9BE-NEXT: mflr r0
; P9BE-NEXT: stdu r1, -128(r1)
; P9BE-NEXT: rldicl r4, r3, 56, 8
; P9BE-NEXT: std r0, 144(r1)
; P9BE-NEXT: stb r3, 183(r1)
; P9BE-NEXT: lbz r5, 183(r1)
; P9BE-NEXT: rldicl r3, r3, 40, 24
; P9BE-NEXT: sth r4, 181(r1)
; P9BE-NEXT: stw r3, 177(r1)
; P9BE-NEXT: lhz r4, 181(r1)
; P9BE-NEXT: stw r3, 121(r1)
; P9BE-NEXT: addi r3, r1, 121
; P9BE-NEXT: stb r5, 127(r1)
; P9BE-NEXT: sth r4, 125(r1)
; P9BE-NEXT: bl callee
; P9BE-NEXT: nop
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: addi r1, r1, 128
; P9BE-NEXT: ld r0, 16(r1)
; P9BE-NEXT: mtlr r0
; P9BE-NEXT: blr
;
; P10BE-LABEL: caller_7:
; P10BE: # %bb.0: # %entry
; P10BE-NEXT: mflr r0
; P10BE-NEXT: std r0, 16(r1)
; P10BE-NEXT: stdu r1, -128(r1)
; P10BE-NEXT: rldicl r4, r3, 56, 8
; P10BE-NEXT: stb r3, 183(r1)
; P10BE-NEXT: rldicl r3, r3, 40, 24
; P10BE-NEXT: lbz r5, 183(r1)
; P10BE-NEXT: sth r4, 181(r1)
; P10BE-NEXT: stw r3, 177(r1)
; P10BE-NEXT: stw r3, 121(r1)
; P10BE-NEXT: addi r3, r1, 121
; P10BE-NEXT: lhz r4, 181(r1)
; P10BE-NEXT: stb r5, 127(r1)
; P10BE-NEXT: sth r4, 125(r1)
; P10BE-NEXT: bl callee
; P10BE-NEXT: nop
; P10BE-NEXT: li r3, 0
; P10BE-NEXT: addi r1, r1, 128
; P10BE-NEXT: ld r0, 16(r1)
; P10BE-NEXT: mtlr r0
; P10BE-NEXT: blr
entry:
%_param_data = alloca [7 x i8], align 1
%.unpack = load i8, ptr %data, align 1
%.elt1 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 1
%.unpack2 = load i8, ptr %.elt1, align 1
%.elt3 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 2
%.unpack4 = load i8, ptr %.elt3, align 1
%.elt5 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 3
%.unpack6 = load i8, ptr %.elt5, align 1
%.elt7 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 4
%.unpack8 = load i8, ptr %.elt7, align 1
%.elt9 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 5
%.unpack10 = load i8, ptr %.elt9, align 1
%.elt11 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 6
%.unpack12 = load i8, ptr %.elt11, align 1
store i8 %.unpack, ptr %_param_data, align 1
%.temp.1.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 1
store i8 %.unpack2, ptr %.temp.1.gep, align 1
%.temp.2.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 2
store i8 %.unpack4, ptr %.temp.2.gep, align 1
%.temp.3.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 3
store i8 %.unpack6, ptr %.temp.3.gep, align 1
%.temp.4.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 4
store i8 %.unpack8, ptr %.temp.4.gep, align 1
%.temp.5.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 5
store i8 %.unpack10, ptr %.temp.5.gep, align 1
%.temp.6.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 6
store i8 %.unpack12, ptr %.temp.6.gep, align 1
call void @callee(ptr nonnull %_param_data)
ret i8 0
}
declare void @callee(ptr) local_unnamed_addr #0
attributes #0 = { nounwind }