973 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8LE4; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \5; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9LE6; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \7; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10LE8; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \9; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P8BE10; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \11; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P9BE12; RUN: llc -verify-machineinstrs --mtriple powerpc64-unknown-linux-gnu \13; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefix=P10BE14 15define signext i8 @caller_1(ptr nocapture readonly byval([1 x i8]) %data) #0 {16; P8LE-LABEL: caller_1:17; P8LE: # %bb.0: # %entry18; P8LE-NEXT: mflr r019; P8LE-NEXT: stdu r1, -64(r1)20; P8LE-NEXT: std r0, 80(r1)21; P8LE-NEXT: stb r3, 48(r1)22; P8LE-NEXT: lbz r3, 48(r1)23; P8LE-NEXT: stb r3, 63(r1)24; P8LE-NEXT: addi r3, r1, 6325; P8LE-NEXT: bl callee26; P8LE-NEXT: nop27; P8LE-NEXT: li r3, 028; P8LE-NEXT: addi r1, r1, 6429; P8LE-NEXT: ld r0, 16(r1)30; P8LE-NEXT: mtlr r031; P8LE-NEXT: blr32;33; P9LE-LABEL: caller_1:34; P9LE: # %bb.0: # %entry35; P9LE-NEXT: mflr r036; P9LE-NEXT: stdu r1, -64(r1)37; P9LE-NEXT: std r0, 80(r1)38; P9LE-NEXT: stb r3, 48(r1)39; P9LE-NEXT: lbz r3, 48(r1)40; P9LE-NEXT: stb r3, 63(r1)41; P9LE-NEXT: addi r3, r1, 6342; P9LE-NEXT: bl callee43; P9LE-NEXT: nop44; P9LE-NEXT: li r3, 045; P9LE-NEXT: addi r1, r1, 6446; P9LE-NEXT: ld r0, 16(r1)47; P9LE-NEXT: mtlr r048; P9LE-NEXT: blr49;50; P10LE-LABEL: caller_1:51; P10LE: # %bb.0: # %entry52; P10LE-NEXT: mflr r053; P10LE-NEXT: std r0, 16(r1)54; P10LE-NEXT: stdu r1, -64(r1)55; P10LE-NEXT: stb r3, 48(r1)56; P10LE-NEXT: lbz r3, 48(r1)57; P10LE-NEXT: stb r3, 63(r1)58; P10LE-NEXT: addi r3, r1, 6359; P10LE-NEXT: bl callee@notoc60; P10LE-NEXT: li r3, 061; P10LE-NEXT: addi r1, r1, 6462; P10LE-NEXT: ld r0, 16(r1)63; P10LE-NEXT: mtlr r064; P10LE-NEXT: blr65;66; P8BE-LABEL: caller_1:67; P8BE: # %bb.0: # %entry68; P8BE-NEXT: mflr r069; P8BE-NEXT: stdu r1, -128(r1)70; P8BE-NEXT: std r0, 144(r1)71; P8BE-NEXT: stb r3, 183(r1)72; P8BE-NEXT: lbz r3, 183(r1)73; P8BE-NEXT: stb r3, 127(r1)74; P8BE-NEXT: addi r3, r1, 12775; P8BE-NEXT: bl callee76; P8BE-NEXT: nop77; P8BE-NEXT: li r3, 078; P8BE-NEXT: addi r1, r1, 12879; P8BE-NEXT: ld r0, 16(r1)80; P8BE-NEXT: mtlr r081; P8BE-NEXT: blr82;83; P9BE-LABEL: caller_1:84; P9BE: # %bb.0: # %entry85; P9BE-NEXT: mflr r086; P9BE-NEXT: stdu r1, -128(r1)87; P9BE-NEXT: std r0, 144(r1)88; P9BE-NEXT: stb r3, 183(r1)89; P9BE-NEXT: lbz r3, 183(r1)90; P9BE-NEXT: stb r3, 127(r1)91; P9BE-NEXT: addi r3, r1, 12792; P9BE-NEXT: bl callee93; P9BE-NEXT: nop94; P9BE-NEXT: li r3, 095; P9BE-NEXT: addi r1, r1, 12896; P9BE-NEXT: ld r0, 16(r1)97; P9BE-NEXT: mtlr r098; P9BE-NEXT: blr99;100; P10BE-LABEL: caller_1:101; P10BE: # %bb.0: # %entry102; P10BE-NEXT: mflr r0103; P10BE-NEXT: std r0, 16(r1)104; P10BE-NEXT: stdu r1, -128(r1)105; P10BE-NEXT: stb r3, 183(r1)106; P10BE-NEXT: lbz r3, 183(r1)107; P10BE-NEXT: stb r3, 127(r1)108; P10BE-NEXT: addi r3, r1, 127109; P10BE-NEXT: bl callee110; P10BE-NEXT: nop111; P10BE-NEXT: li r3, 0112; P10BE-NEXT: addi r1, r1, 128113; P10BE-NEXT: ld r0, 16(r1)114; P10BE-NEXT: mtlr r0115; P10BE-NEXT: blr116entry:117 %_param_data = alloca [1 x i8], align 1118 %.unpack = load i8, ptr %data, align 1119 store i8 %.unpack, ptr %_param_data, align 1120 call void @callee(ptr nonnull %_param_data)121 ret i8 0122}123 124define signext i8 @caller_2(ptr nocapture readonly byval([2 x i8]) %data) #0 {125; P8LE-LABEL: caller_2:126; P8LE: # %bb.0: # %entry127; P8LE-NEXT: mflr r0128; P8LE-NEXT: stdu r1, -64(r1)129; P8LE-NEXT: std r0, 80(r1)130; P8LE-NEXT: sth r3, 48(r1)131; P8LE-NEXT: lhz r3, 48(r1)132; P8LE-NEXT: sth r3, 62(r1)133; P8LE-NEXT: addi r3, r1, 62134; P8LE-NEXT: bl callee135; P8LE-NEXT: nop136; P8LE-NEXT: li r3, 0137; P8LE-NEXT: addi r1, r1, 64138; P8LE-NEXT: ld r0, 16(r1)139; P8LE-NEXT: mtlr r0140; P8LE-NEXT: blr141;142; P9LE-LABEL: caller_2:143; P9LE: # %bb.0: # %entry144; P9LE-NEXT: mflr r0145; P9LE-NEXT: stdu r1, -64(r1)146; P9LE-NEXT: std r0, 80(r1)147; P9LE-NEXT: sth r3, 48(r1)148; P9LE-NEXT: lhz r3, 48(r1)149; P9LE-NEXT: sth r3, 62(r1)150; P9LE-NEXT: addi r3, r1, 62151; P9LE-NEXT: bl callee152; P9LE-NEXT: nop153; P9LE-NEXT: li r3, 0154; P9LE-NEXT: addi r1, r1, 64155; P9LE-NEXT: ld r0, 16(r1)156; P9LE-NEXT: mtlr r0157; P9LE-NEXT: blr158;159; P10LE-LABEL: caller_2:160; P10LE: # %bb.0: # %entry161; P10LE-NEXT: mflr r0162; P10LE-NEXT: std r0, 16(r1)163; P10LE-NEXT: stdu r1, -64(r1)164; P10LE-NEXT: sth r3, 48(r1)165; P10LE-NEXT: lhz r3, 48(r1)166; P10LE-NEXT: sth r3, 62(r1)167; P10LE-NEXT: addi r3, r1, 62168; P10LE-NEXT: bl callee@notoc169; P10LE-NEXT: li r3, 0170; P10LE-NEXT: addi r1, r1, 64171; P10LE-NEXT: ld r0, 16(r1)172; P10LE-NEXT: mtlr r0173; P10LE-NEXT: blr174;175; P8BE-LABEL: caller_2:176; P8BE: # %bb.0: # %entry177; P8BE-NEXT: mflr r0178; P8BE-NEXT: stdu r1, -128(r1)179; P8BE-NEXT: std r0, 144(r1)180; P8BE-NEXT: sth r3, 182(r1)181; P8BE-NEXT: lhz r3, 182(r1)182; P8BE-NEXT: sth r3, 126(r1)183; P8BE-NEXT: addi r3, r1, 126184; P8BE-NEXT: bl callee185; P8BE-NEXT: nop186; P8BE-NEXT: li r3, 0187; P8BE-NEXT: addi r1, r1, 128188; P8BE-NEXT: ld r0, 16(r1)189; P8BE-NEXT: mtlr r0190; P8BE-NEXT: blr191;192; P9BE-LABEL: caller_2:193; P9BE: # %bb.0: # %entry194; P9BE-NEXT: mflr r0195; P9BE-NEXT: stdu r1, -128(r1)196; P9BE-NEXT: std r0, 144(r1)197; P9BE-NEXT: sth r3, 182(r1)198; P9BE-NEXT: lhz r3, 182(r1)199; P9BE-NEXT: sth r3, 126(r1)200; P9BE-NEXT: addi r3, r1, 126201; P9BE-NEXT: bl callee202; P9BE-NEXT: nop203; P9BE-NEXT: li r3, 0204; P9BE-NEXT: addi r1, r1, 128205; P9BE-NEXT: ld r0, 16(r1)206; P9BE-NEXT: mtlr r0207; P9BE-NEXT: blr208;209; P10BE-LABEL: caller_2:210; P10BE: # %bb.0: # %entry211; P10BE-NEXT: mflr r0212; P10BE-NEXT: std r0, 16(r1)213; P10BE-NEXT: stdu r1, -128(r1)214; P10BE-NEXT: sth r3, 182(r1)215; P10BE-NEXT: lhz r3, 182(r1)216; P10BE-NEXT: sth r3, 126(r1)217; P10BE-NEXT: addi r3, r1, 126218; P10BE-NEXT: bl callee219; P10BE-NEXT: nop220; P10BE-NEXT: li r3, 0221; P10BE-NEXT: addi r1, r1, 128222; P10BE-NEXT: ld r0, 16(r1)223; P10BE-NEXT: mtlr r0224; P10BE-NEXT: blr225entry:226 %_param_data = alloca [2 x i8], align 1227 %.unpack = load i8, ptr %data, align 1228 %.elt1 = getelementptr inbounds [2 x i8], ptr %data, i64 0, i64 1229 %.unpack2 = load i8, ptr %.elt1, align 1230 store i8 %.unpack, ptr %_param_data, align 1231 %.temp.1.gep = getelementptr inbounds [2 x i8], ptr %_param_data, i64 0, i64 1232 store i8 %.unpack2, ptr %.temp.1.gep, align 1233 call void @callee(ptr nonnull %_param_data)234 ret i8 0235}236 237define signext i8 @caller_3(ptr nocapture readonly byval([3 x i8]) %data) #0 {238; P8LE-LABEL: caller_3:239; P8LE: # %bb.0: # %entry240; P8LE-NEXT: mflr r0241; P8LE-NEXT: stdu r1, -64(r1)242; P8LE-NEXT: std r0, 80(r1)243; P8LE-NEXT: sth r3, 48(r1)244; P8LE-NEXT: rldicl r3, r3, 48, 16245; P8LE-NEXT: stb r3, 50(r1)246; P8LE-NEXT: lhz r3, 48(r1)247; P8LE-NEXT: lbz r4, 50(r1)248; P8LE-NEXT: sth r3, 61(r1)249; P8LE-NEXT: addi r3, r1, 61250; P8LE-NEXT: stb r4, 63(r1)251; P8LE-NEXT: bl callee252; P8LE-NEXT: nop253; P8LE-NEXT: li r3, 0254; P8LE-NEXT: addi r1, r1, 64255; P8LE-NEXT: ld r0, 16(r1)256; P8LE-NEXT: mtlr r0257; P8LE-NEXT: blr258;259; P9LE-LABEL: caller_3:260; P9LE: # %bb.0: # %entry261; P9LE-NEXT: mflr r0262; P9LE-NEXT: stdu r1, -64(r1)263; P9LE-NEXT: std r0, 80(r1)264; P9LE-NEXT: sth r3, 48(r1)265; P9LE-NEXT: rldicl r3, r3, 48, 16266; P9LE-NEXT: stb r3, 50(r1)267; P9LE-NEXT: lhz r3, 48(r1)268; P9LE-NEXT: lbz r4, 50(r1)269; P9LE-NEXT: sth r3, 61(r1)270; P9LE-NEXT: addi r3, r1, 61271; P9LE-NEXT: stb r4, 63(r1)272; P9LE-NEXT: bl callee273; P9LE-NEXT: nop274; P9LE-NEXT: li r3, 0275; P9LE-NEXT: addi r1, r1, 64276; P9LE-NEXT: ld r0, 16(r1)277; P9LE-NEXT: mtlr r0278; P9LE-NEXT: blr279;280; P10LE-LABEL: caller_3:281; P10LE: # %bb.0: # %entry282; P10LE-NEXT: mflr r0283; P10LE-NEXT: std r0, 16(r1)284; P10LE-NEXT: stdu r1, -64(r1)285; P10LE-NEXT: sth r3, 48(r1)286; P10LE-NEXT: rldicl r3, r3, 48, 16287; P10LE-NEXT: stb r3, 50(r1)288; P10LE-NEXT: lhz r3, 48(r1)289; P10LE-NEXT: lbz r4, 50(r1)290; P10LE-NEXT: sth r3, 61(r1)291; P10LE-NEXT: addi r3, r1, 61292; P10LE-NEXT: stb r4, 63(r1)293; P10LE-NEXT: bl callee@notoc294; P10LE-NEXT: li r3, 0295; P10LE-NEXT: addi r1, r1, 64296; P10LE-NEXT: ld r0, 16(r1)297; P10LE-NEXT: mtlr r0298; P10LE-NEXT: blr299;300; P8BE-LABEL: caller_3:301; P8BE: # %bb.0: # %entry302; P8BE-NEXT: mflr r0303; P8BE-NEXT: stdu r1, -128(r1)304; P8BE-NEXT: rldicl r4, r3, 56, 8305; P8BE-NEXT: std r0, 144(r1)306; P8BE-NEXT: stb r3, 183(r1)307; P8BE-NEXT: sth r4, 181(r1)308; P8BE-NEXT: lbz r4, 183(r1)309; P8BE-NEXT: lhz r3, 181(r1)310; P8BE-NEXT: stb r4, 127(r1)311; P8BE-NEXT: sth r3, 125(r1)312; P8BE-NEXT: addi r3, r1, 125313; P8BE-NEXT: bl callee314; P8BE-NEXT: nop315; P8BE-NEXT: li r3, 0316; P8BE-NEXT: addi r1, r1, 128317; P8BE-NEXT: ld r0, 16(r1)318; P8BE-NEXT: mtlr r0319; P8BE-NEXT: blr320;321; P9BE-LABEL: caller_3:322; P9BE: # %bb.0: # %entry323; P9BE-NEXT: mflr r0324; P9BE-NEXT: stdu r1, -128(r1)325; P9BE-NEXT: rldicl r4, r3, 56, 8326; P9BE-NEXT: std r0, 144(r1)327; P9BE-NEXT: stb r3, 183(r1)328; P9BE-NEXT: sth r4, 181(r1)329; P9BE-NEXT: lbz r4, 183(r1)330; P9BE-NEXT: lhz r3, 181(r1)331; P9BE-NEXT: stb r4, 127(r1)332; P9BE-NEXT: sth r3, 125(r1)333; P9BE-NEXT: addi r3, r1, 125334; P9BE-NEXT: bl callee335; P9BE-NEXT: nop336; P9BE-NEXT: li r3, 0337; P9BE-NEXT: addi r1, r1, 128338; P9BE-NEXT: ld r0, 16(r1)339; P9BE-NEXT: mtlr r0340; P9BE-NEXT: blr341;342; P10BE-LABEL: caller_3:343; P10BE: # %bb.0: # %entry344; P10BE-NEXT: mflr r0345; P10BE-NEXT: std r0, 16(r1)346; P10BE-NEXT: stdu r1, -128(r1)347; P10BE-NEXT: rldicl r4, r3, 56, 8348; P10BE-NEXT: stb r3, 183(r1)349; P10BE-NEXT: sth r4, 181(r1)350; P10BE-NEXT: lbz r4, 183(r1)351; P10BE-NEXT: lhz r3, 181(r1)352; P10BE-NEXT: stb r4, 127(r1)353; P10BE-NEXT: sth r3, 125(r1)354; P10BE-NEXT: addi r3, r1, 125355; P10BE-NEXT: bl callee356; P10BE-NEXT: nop357; P10BE-NEXT: li r3, 0358; P10BE-NEXT: addi r1, r1, 128359; P10BE-NEXT: ld r0, 16(r1)360; P10BE-NEXT: mtlr r0361; P10BE-NEXT: blr362entry:363 %_param_data = alloca [3 x i8], align 1364 %.unpack = load i8, ptr %data, align 1365 %.elt1 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 1366 %.unpack2 = load i8, ptr %.elt1, align 1367 %.elt3 = getelementptr inbounds [3 x i8], ptr %data, i64 0, i64 2368 %.unpack4 = load i8, ptr %.elt3, align 1369 store i8 %.unpack, ptr %_param_data, align 1370 %.temp.1.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 1371 store i8 %.unpack2, ptr %.temp.1.gep, align 1372 %.temp.2.gep = getelementptr inbounds [3 x i8], ptr %_param_data, i64 0, i64 2373 store i8 %.unpack4, ptr %.temp.2.gep, align 1374 call void @callee(ptr nonnull %_param_data)375 ret i8 0376}377 378define signext i8 @caller_4(ptr nocapture readonly byval([4 x i8]) %data) #0 {379; P8LE-LABEL: caller_4:380; P8LE: # %bb.0: # %entry381; P8LE-NEXT: mflr r0382; P8LE-NEXT: stdu r1, -64(r1)383; P8LE-NEXT: std r0, 80(r1)384; P8LE-NEXT: stw r3, 48(r1)385; P8LE-NEXT: lwz r3, 48(r1)386; P8LE-NEXT: stw r3, 60(r1)387; P8LE-NEXT: addi r3, r1, 60388; P8LE-NEXT: bl callee389; P8LE-NEXT: nop390; P8LE-NEXT: li r3, 0391; P8LE-NEXT: addi r1, r1, 64392; P8LE-NEXT: ld r0, 16(r1)393; P8LE-NEXT: mtlr r0394; P8LE-NEXT: blr395;396; P9LE-LABEL: caller_4:397; P9LE: # %bb.0: # %entry398; P9LE-NEXT: mflr r0399; P9LE-NEXT: stdu r1, -64(r1)400; P9LE-NEXT: std r0, 80(r1)401; P9LE-NEXT: stw r3, 48(r1)402; P9LE-NEXT: lwz r3, 48(r1)403; P9LE-NEXT: stw r3, 60(r1)404; P9LE-NEXT: addi r3, r1, 60405; P9LE-NEXT: bl callee406; P9LE-NEXT: nop407; P9LE-NEXT: li r3, 0408; P9LE-NEXT: addi r1, r1, 64409; P9LE-NEXT: ld r0, 16(r1)410; P9LE-NEXT: mtlr r0411; P9LE-NEXT: blr412;413; P10LE-LABEL: caller_4:414; P10LE: # %bb.0: # %entry415; P10LE-NEXT: mflr r0416; P10LE-NEXT: std r0, 16(r1)417; P10LE-NEXT: stdu r1, -64(r1)418; P10LE-NEXT: stw r3, 48(r1)419; P10LE-NEXT: lwz r3, 48(r1)420; P10LE-NEXT: stw r3, 60(r1)421; P10LE-NEXT: addi r3, r1, 60422; P10LE-NEXT: bl callee@notoc423; P10LE-NEXT: li r3, 0424; P10LE-NEXT: addi r1, r1, 64425; P10LE-NEXT: ld r0, 16(r1)426; P10LE-NEXT: mtlr r0427; P10LE-NEXT: blr428;429; P8BE-LABEL: caller_4:430; P8BE: # %bb.0: # %entry431; P8BE-NEXT: mflr r0432; P8BE-NEXT: stdu r1, -128(r1)433; P8BE-NEXT: std r0, 144(r1)434; P8BE-NEXT: stw r3, 180(r1)435; P8BE-NEXT: lwz r3, 180(r1)436; P8BE-NEXT: stw r3, 124(r1)437; P8BE-NEXT: addi r3, r1, 124438; P8BE-NEXT: bl callee439; P8BE-NEXT: nop440; P8BE-NEXT: li r3, 0441; P8BE-NEXT: addi r1, r1, 128442; P8BE-NEXT: ld r0, 16(r1)443; P8BE-NEXT: mtlr r0444; P8BE-NEXT: blr445;446; P9BE-LABEL: caller_4:447; P9BE: # %bb.0: # %entry448; P9BE-NEXT: mflr r0449; P9BE-NEXT: stdu r1, -128(r1)450; P9BE-NEXT: std r0, 144(r1)451; P9BE-NEXT: stw r3, 180(r1)452; P9BE-NEXT: lwz r3, 180(r1)453; P9BE-NEXT: stw r3, 124(r1)454; P9BE-NEXT: addi r3, r1, 124455; P9BE-NEXT: bl callee456; P9BE-NEXT: nop457; P9BE-NEXT: li r3, 0458; P9BE-NEXT: addi r1, r1, 128459; P9BE-NEXT: ld r0, 16(r1)460; P9BE-NEXT: mtlr r0461; P9BE-NEXT: blr462;463; P10BE-LABEL: caller_4:464; P10BE: # %bb.0: # %entry465; P10BE-NEXT: mflr r0466; P10BE-NEXT: std r0, 16(r1)467; P10BE-NEXT: stdu r1, -128(r1)468; P10BE-NEXT: stw r3, 180(r1)469; P10BE-NEXT: lwz r3, 180(r1)470; P10BE-NEXT: stw r3, 124(r1)471; P10BE-NEXT: addi r3, r1, 124472; P10BE-NEXT: bl callee473; P10BE-NEXT: nop474; P10BE-NEXT: li r3, 0475; P10BE-NEXT: addi r1, r1, 128476; P10BE-NEXT: ld r0, 16(r1)477; P10BE-NEXT: mtlr r0478; P10BE-NEXT: blr479entry:480 %_param_data = alloca [4 x i8], align 1481 %.unpack = load i8, ptr %data, align 1482 %.elt1 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 1483 %.unpack2 = load i8, ptr %.elt1, align 1484 %.elt3 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 2485 %.unpack4 = load i8, ptr %.elt3, align 1486 %.elt5 = getelementptr inbounds [4 x i8], ptr %data, i64 0, i64 3487 %.unpack6 = load i8, ptr %.elt5, align 1488 store i8 %.unpack, ptr %_param_data, align 1489 %.temp.1.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 1490 store i8 %.unpack2, ptr %.temp.1.gep, align 1491 %.temp.2.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 2492 store i8 %.unpack4, ptr %.temp.2.gep, align 1493 %.temp.3.gep = getelementptr inbounds [4 x i8], ptr %_param_data, i64 0, i64 3494 store i8 %.unpack6, ptr %.temp.3.gep, align 1495 call void @callee(ptr nonnull %_param_data)496 ret i8 0497}498 499define signext i8 @caller_5(ptr nocapture readonly byval([5 x i8]) %data) #0 {500; P8LE-LABEL: caller_5:501; P8LE: # %bb.0: # %entry502; P8LE-NEXT: mflr r0503; P8LE-NEXT: stdu r1, -64(r1)504; P8LE-NEXT: rldicl r4, r3, 32, 32505; P8LE-NEXT: std r0, 80(r1)506; P8LE-NEXT: stw r3, 48(r1)507; P8LE-NEXT: stw r3, 59(r1)508; P8LE-NEXT: addi r3, r1, 59509; P8LE-NEXT: stb r4, 52(r1)510; P8LE-NEXT: lbz r4, 52(r1)511; P8LE-NEXT: stb r4, 63(r1)512; P8LE-NEXT: bl callee513; P8LE-NEXT: nop514; P8LE-NEXT: li r3, 0515; P8LE-NEXT: addi r1, r1, 64516; P8LE-NEXT: ld r0, 16(r1)517; P8LE-NEXT: mtlr r0518; P8LE-NEXT: blr519;520; P9LE-LABEL: caller_5:521; P9LE: # %bb.0: # %entry522; P9LE-NEXT: mflr r0523; P9LE-NEXT: stdu r1, -64(r1)524; P9LE-NEXT: rldicl r4, r3, 32, 32525; P9LE-NEXT: std r0, 80(r1)526; P9LE-NEXT: stw r3, 48(r1)527; P9LE-NEXT: stw r3, 59(r1)528; P9LE-NEXT: addi r3, r1, 59529; P9LE-NEXT: stb r4, 52(r1)530; P9LE-NEXT: lbz r4, 52(r1)531; P9LE-NEXT: stb r4, 63(r1)532; P9LE-NEXT: bl callee533; P9LE-NEXT: nop534; P9LE-NEXT: li r3, 0535; P9LE-NEXT: addi r1, r1, 64536; P9LE-NEXT: ld r0, 16(r1)537; P9LE-NEXT: mtlr r0538; P9LE-NEXT: blr539;540; P10LE-LABEL: caller_5:541; P10LE: # %bb.0: # %entry542; P10LE-NEXT: mflr r0543; P10LE-NEXT: std r0, 16(r1)544; P10LE-NEXT: stdu r1, -64(r1)545; P10LE-NEXT: rldicl r4, r3, 32, 32546; P10LE-NEXT: stw r3, 48(r1)547; P10LE-NEXT: stw r3, 59(r1)548; P10LE-NEXT: addi r3, r1, 59549; P10LE-NEXT: stb r4, 52(r1)550; P10LE-NEXT: lbz r4, 52(r1)551; P10LE-NEXT: stb r4, 63(r1)552; P10LE-NEXT: bl callee@notoc553; P10LE-NEXT: li r3, 0554; P10LE-NEXT: addi r1, r1, 64555; P10LE-NEXT: ld r0, 16(r1)556; P10LE-NEXT: mtlr r0557; P10LE-NEXT: blr558;559; P8BE-LABEL: caller_5:560; P8BE: # %bb.0: # %entry561; P8BE-NEXT: mflr r0562; P8BE-NEXT: stdu r1, -128(r1)563; P8BE-NEXT: std r0, 144(r1)564; P8BE-NEXT: stb r3, 183(r1)565; P8BE-NEXT: rldicl r3, r3, 56, 8566; P8BE-NEXT: lbz r4, 183(r1)567; P8BE-NEXT: stw r3, 179(r1)568; P8BE-NEXT: stw r3, 123(r1)569; P8BE-NEXT: addi r3, r1, 123570; P8BE-NEXT: stb r4, 127(r1)571; P8BE-NEXT: bl callee572; P8BE-NEXT: nop573; P8BE-NEXT: li r3, 0574; P8BE-NEXT: addi r1, r1, 128575; P8BE-NEXT: ld r0, 16(r1)576; P8BE-NEXT: mtlr r0577; P8BE-NEXT: blr578;579; P9BE-LABEL: caller_5:580; P9BE: # %bb.0: # %entry581; P9BE-NEXT: mflr r0582; P9BE-NEXT: stdu r1, -128(r1)583; P9BE-NEXT: std r0, 144(r1)584; P9BE-NEXT: stb r3, 183(r1)585; P9BE-NEXT: lbz r4, 183(r1)586; P9BE-NEXT: rldicl r3, r3, 56, 8587; P9BE-NEXT: stw r3, 179(r1)588; P9BE-NEXT: stw r3, 123(r1)589; P9BE-NEXT: addi r3, r1, 123590; P9BE-NEXT: stb r4, 127(r1)591; P9BE-NEXT: bl callee592; P9BE-NEXT: nop593; P9BE-NEXT: li r3, 0594; P9BE-NEXT: addi r1, r1, 128595; P9BE-NEXT: ld r0, 16(r1)596; P9BE-NEXT: mtlr r0597; P9BE-NEXT: blr598;599; P10BE-LABEL: caller_5:600; P10BE: # %bb.0: # %entry601; P10BE-NEXT: mflr r0602; P10BE-NEXT: std r0, 16(r1)603; P10BE-NEXT: stdu r1, -128(r1)604; P10BE-NEXT: stb r3, 183(r1)605; P10BE-NEXT: rldicl r3, r3, 56, 8606; P10BE-NEXT: lbz r4, 183(r1)607; P10BE-NEXT: stw r3, 179(r1)608; P10BE-NEXT: stw r3, 123(r1)609; P10BE-NEXT: addi r3, r1, 123610; P10BE-NEXT: stb r4, 127(r1)611; P10BE-NEXT: bl callee612; P10BE-NEXT: nop613; P10BE-NEXT: li r3, 0614; P10BE-NEXT: addi r1, r1, 128615; P10BE-NEXT: ld r0, 16(r1)616; P10BE-NEXT: mtlr r0617; P10BE-NEXT: blr618entry:619 %_param_data = alloca [5 x i8], align 1620 %.unpack = load i8, ptr %data, align 1621 %.elt1 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 1622 %.unpack2 = load i8, ptr %.elt1, align 1623 %.elt3 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 2624 %.unpack4 = load i8, ptr %.elt3, align 1625 %.elt5 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 3626 %.unpack6 = load i8, ptr %.elt5, align 1627 %.elt7 = getelementptr inbounds [5 x i8], ptr %data, i64 0, i64 4628 %.unpack8 = load i8, ptr %.elt7, align 1629 store i8 %.unpack, ptr %_param_data, align 1630 %.temp.1.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 1631 store i8 %.unpack2, ptr %.temp.1.gep, align 1632 %.temp.2.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 2633 store i8 %.unpack4, ptr %.temp.2.gep, align 1634 %.temp.3.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 3635 store i8 %.unpack6, ptr %.temp.3.gep, align 1636 %.temp.4.gep = getelementptr inbounds [5 x i8], ptr %_param_data, i64 0, i64 4637 store i8 %.unpack8, ptr %.temp.4.gep, align 1638 call void @callee(ptr nonnull %_param_data)639 ret i8 0640}641 642define signext i8 @caller_6(ptr nocapture readonly byval([6 x i8]) %data) #0 {643; P8LE-LABEL: caller_6:644; P8LE: # %bb.0: # %entry645; P8LE-NEXT: mflr r0646; P8LE-NEXT: stdu r1, -64(r1)647; P8LE-NEXT: std r0, 80(r1)648; P8LE-NEXT: stw r3, 48(r1)649; P8LE-NEXT: rldicl r3, r3, 32, 32650; P8LE-NEXT: sth r3, 52(r1)651; P8LE-NEXT: lwz r3, 48(r1)652; P8LE-NEXT: lhz r4, 52(r1)653; P8LE-NEXT: stw r3, 58(r1)654; P8LE-NEXT: addi r3, r1, 58655; P8LE-NEXT: sth r4, 62(r1)656; P8LE-NEXT: bl callee657; P8LE-NEXT: nop658; P8LE-NEXT: li r3, 0659; P8LE-NEXT: addi r1, r1, 64660; P8LE-NEXT: ld r0, 16(r1)661; P8LE-NEXT: mtlr r0662; P8LE-NEXT: blr663;664; P9LE-LABEL: caller_6:665; P9LE: # %bb.0: # %entry666; P9LE-NEXT: mflr r0667; P9LE-NEXT: stdu r1, -64(r1)668; P9LE-NEXT: std r0, 80(r1)669; P9LE-NEXT: stw r3, 48(r1)670; P9LE-NEXT: rldicl r3, r3, 32, 32671; P9LE-NEXT: sth r3, 52(r1)672; P9LE-NEXT: lwz r3, 48(r1)673; P9LE-NEXT: lhz r4, 52(r1)674; P9LE-NEXT: stw r3, 58(r1)675; P9LE-NEXT: addi r3, r1, 58676; P9LE-NEXT: sth r4, 62(r1)677; P9LE-NEXT: bl callee678; P9LE-NEXT: nop679; P9LE-NEXT: li r3, 0680; P9LE-NEXT: addi r1, r1, 64681; P9LE-NEXT: ld r0, 16(r1)682; P9LE-NEXT: mtlr r0683; P9LE-NEXT: blr684;685; P10LE-LABEL: caller_6:686; P10LE: # %bb.0: # %entry687; P10LE-NEXT: mflr r0688; P10LE-NEXT: std r0, 16(r1)689; P10LE-NEXT: stdu r1, -64(r1)690; P10LE-NEXT: stw r3, 48(r1)691; P10LE-NEXT: rldicl r3, r3, 32, 32692; P10LE-NEXT: sth r3, 52(r1)693; P10LE-NEXT: lwz r3, 48(r1)694; P10LE-NEXT: lhz r4, 52(r1)695; P10LE-NEXT: stw r3, 58(r1)696; P10LE-NEXT: addi r3, r1, 58697; P10LE-NEXT: sth r4, 62(r1)698; P10LE-NEXT: bl callee@notoc699; P10LE-NEXT: li r3, 0700; P10LE-NEXT: addi r1, r1, 64701; P10LE-NEXT: ld r0, 16(r1)702; P10LE-NEXT: mtlr r0703; P10LE-NEXT: blr704;705; P8BE-LABEL: caller_6:706; P8BE: # %bb.0: # %entry707; P8BE-NEXT: mflr r0708; P8BE-NEXT: stdu r1, -128(r1)709; P8BE-NEXT: rldicl r4, r3, 48, 16710; P8BE-NEXT: std r0, 144(r1)711; P8BE-NEXT: sth r3, 182(r1)712; P8BE-NEXT: stw r4, 178(r1)713; P8BE-NEXT: lhz r4, 182(r1)714; P8BE-NEXT: lwz r3, 178(r1)715; P8BE-NEXT: sth r4, 126(r1)716; P8BE-NEXT: stw r3, 122(r1)717; P8BE-NEXT: addi r3, r1, 122718; P8BE-NEXT: bl callee719; P8BE-NEXT: nop720; P8BE-NEXT: li r3, 0721; P8BE-NEXT: addi r1, r1, 128722; P8BE-NEXT: ld r0, 16(r1)723; P8BE-NEXT: mtlr r0724; P8BE-NEXT: blr725;726; P9BE-LABEL: caller_6:727; P9BE: # %bb.0: # %entry728; P9BE-NEXT: mflr r0729; P9BE-NEXT: stdu r1, -128(r1)730; P9BE-NEXT: rldicl r4, r3, 48, 16731; P9BE-NEXT: std r0, 144(r1)732; P9BE-NEXT: sth r3, 182(r1)733; P9BE-NEXT: stw r4, 178(r1)734; P9BE-NEXT: lhz r4, 182(r1)735; P9BE-NEXT: lwz r3, 178(r1)736; P9BE-NEXT: sth r4, 126(r1)737; P9BE-NEXT: stw r3, 122(r1)738; P9BE-NEXT: addi r3, r1, 122739; P9BE-NEXT: bl callee740; P9BE-NEXT: nop741; P9BE-NEXT: li r3, 0742; P9BE-NEXT: addi r1, r1, 128743; P9BE-NEXT: ld r0, 16(r1)744; P9BE-NEXT: mtlr r0745; P9BE-NEXT: blr746;747; P10BE-LABEL: caller_6:748; P10BE: # %bb.0: # %entry749; P10BE-NEXT: mflr r0750; P10BE-NEXT: std r0, 16(r1)751; P10BE-NEXT: stdu r1, -128(r1)752; P10BE-NEXT: rldicl r4, r3, 48, 16753; P10BE-NEXT: sth r3, 182(r1)754; P10BE-NEXT: stw r4, 178(r1)755; P10BE-NEXT: lhz r4, 182(r1)756; P10BE-NEXT: lwz r3, 178(r1)757; P10BE-NEXT: sth r4, 126(r1)758; P10BE-NEXT: stw r3, 122(r1)759; P10BE-NEXT: addi r3, r1, 122760; P10BE-NEXT: bl callee761; P10BE-NEXT: nop762; P10BE-NEXT: li r3, 0763; P10BE-NEXT: addi r1, r1, 128764; P10BE-NEXT: ld r0, 16(r1)765; P10BE-NEXT: mtlr r0766; P10BE-NEXT: blr767entry:768 %_param_data = alloca [6 x i8], align 1769 %.unpack = load i8, ptr %data, align 1770 %.elt1 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 1771 %.unpack2 = load i8, ptr %.elt1, align 1772 %.elt3 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 2773 %.unpack4 = load i8, ptr %.elt3, align 1774 %.elt5 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 3775 %.unpack6 = load i8, ptr %.elt5, align 1776 %.elt7 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 4777 %.unpack8 = load i8, ptr %.elt7, align 1778 %.elt9 = getelementptr inbounds [6 x i8], ptr %data, i64 0, i64 5779 %.unpack10 = load i8, ptr %.elt9, align 1780 store i8 %.unpack, ptr %_param_data, align 1781 %.temp.1.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 1782 store i8 %.unpack2, ptr %.temp.1.gep, align 1783 %.temp.2.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 2784 store i8 %.unpack4, ptr %.temp.2.gep, align 1785 %.temp.3.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 3786 store i8 %.unpack6, ptr %.temp.3.gep, align 1787 %.temp.4.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 4788 store i8 %.unpack8, ptr %.temp.4.gep, align 1789 %.temp.5.gep = getelementptr inbounds [6 x i8], ptr %_param_data, i64 0, i64 5790 store i8 %.unpack10, ptr %.temp.5.gep, align 1791 call void @callee(ptr nonnull %_param_data)792 ret i8 0793}794 795define signext i8 @caller_7(ptr nocapture readonly byval([7 x i8]) %data) #0 {796; P8LE-LABEL: caller_7:797; P8LE: # %bb.0: # %entry798; P8LE-NEXT: mflr r0799; P8LE-NEXT: stdu r1, -64(r1)800; P8LE-NEXT: rldicl r4, r3, 32, 32801; P8LE-NEXT: std r0, 80(r1)802; P8LE-NEXT: stw r3, 48(r1)803; P8LE-NEXT: stw r3, 57(r1)804; P8LE-NEXT: sth r4, 52(r1)805; P8LE-NEXT: rldicl r4, r3, 16, 48806; P8LE-NEXT: stb r4, 54(r1)807; P8LE-NEXT: lhz r4, 52(r1)808; P8LE-NEXT: lbz r3, 54(r1)809; P8LE-NEXT: sth r4, 61(r1)810; P8LE-NEXT: stb r3, 63(r1)811; P8LE-NEXT: addi r3, r1, 57812; P8LE-NEXT: bl callee813; P8LE-NEXT: nop814; P8LE-NEXT: li r3, 0815; P8LE-NEXT: addi r1, r1, 64816; P8LE-NEXT: ld r0, 16(r1)817; P8LE-NEXT: mtlr r0818; P8LE-NEXT: blr819;820; P9LE-LABEL: caller_7:821; P9LE: # %bb.0: # %entry822; P9LE-NEXT: mflr r0823; P9LE-NEXT: stdu r1, -64(r1)824; P9LE-NEXT: rldicl r4, r3, 32, 32825; P9LE-NEXT: std r0, 80(r1)826; P9LE-NEXT: stw r3, 48(r1)827; P9LE-NEXT: stw r3, 57(r1)828; P9LE-NEXT: sth r4, 52(r1)829; P9LE-NEXT: rldicl r4, r3, 16, 48830; P9LE-NEXT: addi r3, r1, 57831; P9LE-NEXT: stb r4, 54(r1)832; P9LE-NEXT: lhz r4, 52(r1)833; P9LE-NEXT: lbz r5, 54(r1)834; P9LE-NEXT: sth r4, 61(r1)835; P9LE-NEXT: stb r5, 63(r1)836; P9LE-NEXT: bl callee837; P9LE-NEXT: nop838; P9LE-NEXT: li r3, 0839; P9LE-NEXT: addi r1, r1, 64840; P9LE-NEXT: ld r0, 16(r1)841; P9LE-NEXT: mtlr r0842; P9LE-NEXT: blr843;844; P10LE-LABEL: caller_7:845; P10LE: # %bb.0: # %entry846; P10LE-NEXT: mflr r0847; P10LE-NEXT: std r0, 16(r1)848; P10LE-NEXT: stdu r1, -64(r1)849; P10LE-NEXT: rldicl r4, r3, 32, 32850; P10LE-NEXT: stw r3, 48(r1)851; P10LE-NEXT: stw r3, 57(r1)852; P10LE-NEXT: sth r4, 52(r1)853; P10LE-NEXT: rldicl r4, r3, 16, 48854; P10LE-NEXT: addi r3, r1, 57855; P10LE-NEXT: stb r4, 54(r1)856; P10LE-NEXT: lhz r4, 52(r1)857; P10LE-NEXT: lbz r5, 54(r1)858; P10LE-NEXT: sth r4, 61(r1)859; P10LE-NEXT: stb r5, 63(r1)860; P10LE-NEXT: bl callee@notoc861; P10LE-NEXT: li r3, 0862; P10LE-NEXT: addi r1, r1, 64863; P10LE-NEXT: ld r0, 16(r1)864; P10LE-NEXT: mtlr r0865; P10LE-NEXT: blr866;867; P8BE-LABEL: caller_7:868; P8BE: # %bb.0: # %entry869; P8BE-NEXT: mflr r0870; P8BE-NEXT: stdu r1, -128(r1)871; P8BE-NEXT: std r0, 144(r1)872; P8BE-NEXT: rldicl r4, r3, 56, 8873; P8BE-NEXT: stb r3, 183(r1)874; P8BE-NEXT: rldicl r3, r3, 40, 24875; P8BE-NEXT: stw r3, 177(r1)876; P8BE-NEXT: stw r3, 121(r1)877; P8BE-NEXT: lbz r3, 183(r1)878; P8BE-NEXT: sth r4, 181(r1)879; P8BE-NEXT: lhz r4, 181(r1)880; P8BE-NEXT: stb r3, 127(r1)881; P8BE-NEXT: addi r3, r1, 121882; P8BE-NEXT: sth r4, 125(r1)883; P8BE-NEXT: bl callee884; P8BE-NEXT: nop885; P8BE-NEXT: li r3, 0886; P8BE-NEXT: addi r1, r1, 128887; P8BE-NEXT: ld r0, 16(r1)888; P8BE-NEXT: mtlr r0889; P8BE-NEXT: blr890;891; P9BE-LABEL: caller_7:892; P9BE: # %bb.0: # %entry893; P9BE-NEXT: mflr r0894; P9BE-NEXT: stdu r1, -128(r1)895; P9BE-NEXT: rldicl r4, r3, 56, 8896; P9BE-NEXT: std r0, 144(r1)897; P9BE-NEXT: stb r3, 183(r1)898; P9BE-NEXT: lbz r5, 183(r1)899; P9BE-NEXT: rldicl r3, r3, 40, 24900; P9BE-NEXT: sth r4, 181(r1)901; P9BE-NEXT: stw r3, 177(r1)902; P9BE-NEXT: lhz r4, 181(r1)903; P9BE-NEXT: stw r3, 121(r1)904; P9BE-NEXT: addi r3, r1, 121905; P9BE-NEXT: stb r5, 127(r1)906; P9BE-NEXT: sth r4, 125(r1)907; P9BE-NEXT: bl callee908; P9BE-NEXT: nop909; P9BE-NEXT: li r3, 0910; P9BE-NEXT: addi r1, r1, 128911; P9BE-NEXT: ld r0, 16(r1)912; P9BE-NEXT: mtlr r0913; P9BE-NEXT: blr914;915; P10BE-LABEL: caller_7:916; P10BE: # %bb.0: # %entry917; P10BE-NEXT: mflr r0918; P10BE-NEXT: std r0, 16(r1)919; P10BE-NEXT: stdu r1, -128(r1)920; P10BE-NEXT: rldicl r4, r3, 56, 8921; P10BE-NEXT: stb r3, 183(r1)922; P10BE-NEXT: rldicl r3, r3, 40, 24923; P10BE-NEXT: lbz r5, 183(r1)924; P10BE-NEXT: sth r4, 181(r1)925; P10BE-NEXT: stw r3, 177(r1)926; P10BE-NEXT: stw r3, 121(r1)927; P10BE-NEXT: addi r3, r1, 121928; P10BE-NEXT: lhz r4, 181(r1)929; P10BE-NEXT: stb r5, 127(r1)930; P10BE-NEXT: sth r4, 125(r1)931; P10BE-NEXT: bl callee932; P10BE-NEXT: nop933; P10BE-NEXT: li r3, 0934; P10BE-NEXT: addi r1, r1, 128935; P10BE-NEXT: ld r0, 16(r1)936; P10BE-NEXT: mtlr r0937; P10BE-NEXT: blr938entry:939 %_param_data = alloca [7 x i8], align 1940 %.unpack = load i8, ptr %data, align 1941 %.elt1 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 1942 %.unpack2 = load i8, ptr %.elt1, align 1943 %.elt3 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 2944 %.unpack4 = load i8, ptr %.elt3, align 1945 %.elt5 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 3946 %.unpack6 = load i8, ptr %.elt5, align 1947 %.elt7 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 4948 %.unpack8 = load i8, ptr %.elt7, align 1949 %.elt9 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 5950 %.unpack10 = load i8, ptr %.elt9, align 1951 %.elt11 = getelementptr inbounds [7 x i8], ptr %data, i64 0, i64 6952 %.unpack12 = load i8, ptr %.elt11, align 1953 store i8 %.unpack, ptr %_param_data, align 1954 %.temp.1.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 1955 store i8 %.unpack2, ptr %.temp.1.gep, align 1956 %.temp.2.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 2957 store i8 %.unpack4, ptr %.temp.2.gep, align 1958 %.temp.3.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 3959 store i8 %.unpack6, ptr %.temp.3.gep, align 1960 %.temp.4.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 4961 store i8 %.unpack8, ptr %.temp.4.gep, align 1962 %.temp.5.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 5963 store i8 %.unpack10, ptr %.temp.5.gep, align 1964 %.temp.6.gep = getelementptr inbounds [7 x i8], ptr %_param_data, i64 0, i64 6965 store i8 %.unpack12, ptr %.temp.6.gep, align 1966 call void @callee(ptr nonnull %_param_data)967 ret i8 0968}969 970declare void @callee(ptr) local_unnamed_addr #0971 972attributes #0 = { nounwind }973