305 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \3; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck --check-prefix=CHECK-PWR8 %s4; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \5; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck --check-prefix=CHECK-PWR9 %s6 7 8declare signext i32 @callee(i32 signext) local_unnamed_addr9 10define dso_local signext i32 @caller1(i32 signext %a, i32 signext %b) local_unnamed_addr {11; CHECK-PWR8-LABEL: caller1:12; CHECK-PWR8: # %bb.0: # %entry13; CHECK-PWR8-NEXT: mflr r014; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 17615; CHECK-PWR8-NEXT: .cfi_offset lr, 1616; CHECK-PWR8-NEXT: .cfi_offset r14, -14417; CHECK-PWR8-NEXT: .cfi_offset r15, -13618; CHECK-PWR8-NEXT: std r14, -144(r1) # 8-byte Folded Spill19; CHECK-PWR8-NEXT: std r15, -136(r1) # 8-byte Folded Spill20; CHECK-PWR8-NEXT: stdu r1, -176(r1)21; CHECK-PWR8-NEXT: #APP22; CHECK-PWR8-NEXT: add r3, r3, r423; CHECK-PWR8-NEXT: #NO_APP24; CHECK-PWR8-NEXT: extsw r3, r325; CHECK-PWR8-NEXT: std r0, 192(r1)26; CHECK-PWR8-NEXT: bl callee27; CHECK-PWR8-NEXT: nop28; CHECK-PWR8-NEXT: addi r1, r1, 17629; CHECK-PWR8-NEXT: ld r0, 16(r1)30; CHECK-PWR8-NEXT: ld r15, -136(r1) # 8-byte Folded Reload31; CHECK-PWR8-NEXT: ld r14, -144(r1) # 8-byte Folded Reload32; CHECK-PWR8-NEXT: mtlr r033; CHECK-PWR8-NEXT: blr34;35; CHECK-PWR9-LABEL: caller1:36; CHECK-PWR9: # %bb.0: # %entry37; CHECK-PWR9-NEXT: mflr r038; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 17639; CHECK-PWR9-NEXT: .cfi_offset lr, 1640; CHECK-PWR9-NEXT: .cfi_offset r14, -14441; CHECK-PWR9-NEXT: .cfi_offset r15, -13642; CHECK-PWR9-NEXT: std r14, -144(r1) # 8-byte Folded Spill43; CHECK-PWR9-NEXT: std r15, -136(r1) # 8-byte Folded Spill44; CHECK-PWR9-NEXT: stdu r1, -176(r1)45; CHECK-PWR9-NEXT: #APP46; CHECK-PWR9-NEXT: add r3, r3, r447; CHECK-PWR9-NEXT: #NO_APP48; CHECK-PWR9-NEXT: extsw r3, r349; CHECK-PWR9-NEXT: std r0, 192(r1)50; CHECK-PWR9-NEXT: bl callee51; CHECK-PWR9-NEXT: nop52; CHECK-PWR9-NEXT: addi r1, r1, 17653; CHECK-PWR9-NEXT: ld r0, 16(r1)54; CHECK-PWR9-NEXT: ld r15, -136(r1) # 8-byte Folded Reload55; CHECK-PWR9-NEXT: ld r14, -144(r1) # 8-byte Folded Reload56; CHECK-PWR9-NEXT: mtlr r057; CHECK-PWR9-NEXT: blr58entry:59 %0 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{r14},~{r15}"(i32 %a, i32 %b)60 %call = tail call signext i32 @callee(i32 signext %0)61 ret i32 %call62}63 64define dso_local signext i32 @caller2(i32 signext %a, i32 signext %b) local_unnamed_addr {65; CHECK-PWR8-LABEL: caller2:66; CHECK-PWR8: # %bb.0: # %entry67; CHECK-PWR8-NEXT: mflr r068; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 17669; CHECK-PWR8-NEXT: .cfi_offset lr, 1670; CHECK-PWR8-NEXT: .cfi_offset f14, -14471; CHECK-PWR8-NEXT: .cfi_offset f15, -13672; CHECK-PWR8-NEXT: stfd f14, -144(r1) # 8-byte Folded Spill73; CHECK-PWR8-NEXT: stfd f15, -136(r1) # 8-byte Folded Spill74; CHECK-PWR8-NEXT: stdu r1, -176(r1)75; CHECK-PWR8-NEXT: #APP76; CHECK-PWR8-NEXT: add r3, r3, r477; CHECK-PWR8-NEXT: #NO_APP78; CHECK-PWR8-NEXT: extsw r3, r379; CHECK-PWR8-NEXT: std r0, 192(r1)80; CHECK-PWR8-NEXT: bl callee81; CHECK-PWR8-NEXT: nop82; CHECK-PWR8-NEXT: addi r1, r1, 17683; CHECK-PWR8-NEXT: ld r0, 16(r1)84; CHECK-PWR8-NEXT: lfd f15, -136(r1) # 8-byte Folded Reload85; CHECK-PWR8-NEXT: lfd f14, -144(r1) # 8-byte Folded Reload86; CHECK-PWR8-NEXT: mtlr r087; CHECK-PWR8-NEXT: blr88;89; CHECK-PWR9-LABEL: caller2:90; CHECK-PWR9: # %bb.0: # %entry91; CHECK-PWR9-NEXT: mflr r092; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 17693; CHECK-PWR9-NEXT: .cfi_offset lr, 1694; CHECK-PWR9-NEXT: .cfi_offset f14, -14495; CHECK-PWR9-NEXT: .cfi_offset f15, -13696; CHECK-PWR9-NEXT: stfd f14, -144(r1) # 8-byte Folded Spill97; CHECK-PWR9-NEXT: stfd f15, -136(r1) # 8-byte Folded Spill98; CHECK-PWR9-NEXT: stdu r1, -176(r1)99; CHECK-PWR9-NEXT: #APP100; CHECK-PWR9-NEXT: add r3, r3, r4101; CHECK-PWR9-NEXT: #NO_APP102; CHECK-PWR9-NEXT: extsw r3, r3103; CHECK-PWR9-NEXT: std r0, 192(r1)104; CHECK-PWR9-NEXT: bl callee105; CHECK-PWR9-NEXT: nop106; CHECK-PWR9-NEXT: addi r1, r1, 176107; CHECK-PWR9-NEXT: ld r0, 16(r1)108; CHECK-PWR9-NEXT: lfd f15, -136(r1) # 8-byte Folded Reload109; CHECK-PWR9-NEXT: lfd f14, -144(r1) # 8-byte Folded Reload110; CHECK-PWR9-NEXT: mtlr r0111; CHECK-PWR9-NEXT: blr112entry:113 %0 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{f14},~{f15}"(i32 %a, i32 %b)114 %call = tail call signext i32 @callee(i32 signext %0)115 ret i32 %call116}117 118define dso_local signext i32 @caller3(i32 signext %a, i32 signext %b) local_unnamed_addr {119; CHECK-PWR8-LABEL: caller3:120; CHECK-PWR8: # %bb.0: # %entry121; CHECK-PWR8-NEXT: mflr r0122; CHECK-PWR8-NEXT: stdu r1, -240(r1)123; CHECK-PWR8-NEXT: std r0, 256(r1)124; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 240125; CHECK-PWR8-NEXT: .cfi_offset lr, 16126; CHECK-PWR8-NEXT: .cfi_offset v20, -192127; CHECK-PWR8-NEXT: .cfi_offset v21, -176128; CHECK-PWR8-NEXT: li r5, 48129; CHECK-PWR8-NEXT: stvx v20, r1, r5 # 16-byte Folded Spill130; CHECK-PWR8-NEXT: li r5, 64131; CHECK-PWR8-NEXT: stvx v21, r1, r5 # 16-byte Folded Spill132; CHECK-PWR8-NEXT: #APP133; CHECK-PWR8-NEXT: add r3, r3, r4134; CHECK-PWR8-NEXT: #NO_APP135; CHECK-PWR8-NEXT: extsw r3, r3136; CHECK-PWR8-NEXT: bl callee137; CHECK-PWR8-NEXT: nop138; CHECK-PWR8-NEXT: li r4, 64139; CHECK-PWR8-NEXT: lvx v21, r1, r4 # 16-byte Folded Reload140; CHECK-PWR8-NEXT: li r4, 48141; CHECK-PWR8-NEXT: lvx v20, r1, r4 # 16-byte Folded Reload142; CHECK-PWR8-NEXT: addi r1, r1, 240143; CHECK-PWR8-NEXT: ld r0, 16(r1)144; CHECK-PWR8-NEXT: mtlr r0145; CHECK-PWR8-NEXT: blr146;147; CHECK-PWR9-LABEL: caller3:148; CHECK-PWR9: # %bb.0: # %entry149; CHECK-PWR9-NEXT: mflr r0150; CHECK-PWR9-NEXT: stdu r1, -224(r1)151; CHECK-PWR9-NEXT: std r0, 240(r1)152; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 224153; CHECK-PWR9-NEXT: .cfi_offset lr, 16154; CHECK-PWR9-NEXT: .cfi_offset v20, -192155; CHECK-PWR9-NEXT: .cfi_offset v21, -176156; CHECK-PWR9-NEXT: stxv v20, 32(r1) # 16-byte Folded Spill157; CHECK-PWR9-NEXT: stxv v21, 48(r1) # 16-byte Folded Spill158; CHECK-PWR9-NEXT: #APP159; CHECK-PWR9-NEXT: add r3, r3, r4160; CHECK-PWR9-NEXT: #NO_APP161; CHECK-PWR9-NEXT: extsw r3, r3162; CHECK-PWR9-NEXT: bl callee163; CHECK-PWR9-NEXT: nop164; CHECK-PWR9-NEXT: lxv v21, 48(r1) # 16-byte Folded Reload165; CHECK-PWR9-NEXT: lxv v20, 32(r1) # 16-byte Folded Reload166; CHECK-PWR9-NEXT: addi r1, r1, 224167; CHECK-PWR9-NEXT: ld r0, 16(r1)168; CHECK-PWR9-NEXT: mtlr r0169; CHECK-PWR9-NEXT: blr170entry:171 %0 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{v20},~{v21}"(i32 %a, i32 %b)172 %call = tail call signext i32 @callee(i32 signext %0)173 ret i32 %call174}175 176define dso_local signext i32 @caller4(i32 signext %a, i32 signext %b) local_unnamed_addr {177; CHECK-PWR8-LABEL: caller4:178; CHECK-PWR8: # %bb.0: # %entry179; CHECK-PWR8-NEXT: mflr r0180; CHECK-PWR8-NEXT: stdu r1, -240(r1)181; CHECK-PWR8-NEXT: std r0, 256(r1)182; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 240183; CHECK-PWR8-NEXT: .cfi_offset lr, 16184; CHECK-PWR8-NEXT: .cfi_offset v20, -192185; CHECK-PWR8-NEXT: .cfi_offset v21, -176186; CHECK-PWR8-NEXT: li r5, 48187; CHECK-PWR8-NEXT: stvx v20, r1, r5 # 16-byte Folded Spill188; CHECK-PWR8-NEXT: li r5, 64189; CHECK-PWR8-NEXT: stvx v21, r1, r5 # 16-byte Folded Spill190; CHECK-PWR8-NEXT: #APP191; CHECK-PWR8-NEXT: add r3, r3, r4192; CHECK-PWR8-NEXT: #NO_APP193; CHECK-PWR8-NEXT: extsw r3, r3194; CHECK-PWR8-NEXT: bl callee195; CHECK-PWR8-NEXT: nop196; CHECK-PWR8-NEXT: li r4, 64197; CHECK-PWR8-NEXT: lvx v21, r1, r4 # 16-byte Folded Reload198; CHECK-PWR8-NEXT: li r4, 48199; CHECK-PWR8-NEXT: lvx v20, r1, r4 # 16-byte Folded Reload200; CHECK-PWR8-NEXT: addi r1, r1, 240201; CHECK-PWR8-NEXT: ld r0, 16(r1)202; CHECK-PWR8-NEXT: mtlr r0203; CHECK-PWR8-NEXT: blr204;205; CHECK-PWR9-LABEL: caller4:206; CHECK-PWR9: # %bb.0: # %entry207; CHECK-PWR9-NEXT: mflr r0208; CHECK-PWR9-NEXT: stdu r1, -224(r1)209; CHECK-PWR9-NEXT: std r0, 240(r1)210; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 224211; CHECK-PWR9-NEXT: .cfi_offset lr, 16212; CHECK-PWR9-NEXT: .cfi_offset v20, -192213; CHECK-PWR9-NEXT: .cfi_offset v21, -176214; CHECK-PWR9-NEXT: stxv v20, 32(r1) # 16-byte Folded Spill215; CHECK-PWR9-NEXT: stxv v21, 48(r1) # 16-byte Folded Spill216; CHECK-PWR9-NEXT: #APP217; CHECK-PWR9-NEXT: add r3, r3, r4218; CHECK-PWR9-NEXT: #NO_APP219; CHECK-PWR9-NEXT: extsw r3, r3220; CHECK-PWR9-NEXT: bl callee221; CHECK-PWR9-NEXT: nop222; CHECK-PWR9-NEXT: lxv v21, 48(r1) # 16-byte Folded Reload223; CHECK-PWR9-NEXT: lxv v20, 32(r1) # 16-byte Folded Reload224; CHECK-PWR9-NEXT: addi r1, r1, 224225; CHECK-PWR9-NEXT: ld r0, 16(r1)226; CHECK-PWR9-NEXT: mtlr r0227; CHECK-PWR9-NEXT: blr228entry:229 %0 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{vs52},~{vs53}"(i32 %a, i32 %b)230 %call = tail call signext i32 @callee(i32 signext %0)231 ret i32 %call232}233 234define dso_local signext i32 @caller_mixed(i32 signext %a, i32 signext %b) local_unnamed_addr {235; CHECK-PWR8-LABEL: caller_mixed:236; CHECK-PWR8: # %bb.0: # %entry237; CHECK-PWR8-NEXT: mflr r0238; CHECK-PWR8-NEXT: stdu r1, -528(r1)239; CHECK-PWR8-NEXT: std r0, 544(r1)240; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 528241; CHECK-PWR8-NEXT: .cfi_offset lr, 16242; CHECK-PWR8-NEXT: .cfi_offset r14, -288243; CHECK-PWR8-NEXT: .cfi_offset f14, -144244; CHECK-PWR8-NEXT: .cfi_offset v20, -480245; CHECK-PWR8-NEXT: .cfi_offset v21, -464246; CHECK-PWR8-NEXT: li r5, 48247; CHECK-PWR8-NEXT: std r14, 240(r1) # 8-byte Folded Spill248; CHECK-PWR8-NEXT: stfd f14, 384(r1) # 8-byte Folded Spill249; CHECK-PWR8-NEXT: stvx v20, r1, r5 # 16-byte Folded Spill250; CHECK-PWR8-NEXT: li r5, 64251; CHECK-PWR8-NEXT: stvx v21, r1, r5 # 16-byte Folded Spill252; CHECK-PWR8-NEXT: #APP253; CHECK-PWR8-NEXT: add r3, r3, r4254; CHECK-PWR8-NEXT: #NO_APP255; CHECK-PWR8-NEXT: extsw r3, r3256; CHECK-PWR8-NEXT: bl callee257; CHECK-PWR8-NEXT: nop258; CHECK-PWR8-NEXT: li r4, 64259; CHECK-PWR8-NEXT: lfd f14, 384(r1) # 8-byte Folded Reload260; CHECK-PWR8-NEXT: ld r14, 240(r1) # 8-byte Folded Reload261; CHECK-PWR8-NEXT: lvx v21, r1, r4 # 16-byte Folded Reload262; CHECK-PWR8-NEXT: li r4, 48263; CHECK-PWR8-NEXT: lvx v20, r1, r4 # 16-byte Folded Reload264; CHECK-PWR8-NEXT: addi r1, r1, 528265; CHECK-PWR8-NEXT: ld r0, 16(r1)266; CHECK-PWR8-NEXT: mtlr r0267; CHECK-PWR8-NEXT: blr268;269; CHECK-PWR9-LABEL: caller_mixed:270; CHECK-PWR9: # %bb.0: # %entry271; CHECK-PWR9-NEXT: mflr r0272; CHECK-PWR9-NEXT: stdu r1, -512(r1)273; CHECK-PWR9-NEXT: std r0, 528(r1)274; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 512275; CHECK-PWR9-NEXT: .cfi_offset lr, 16276; CHECK-PWR9-NEXT: .cfi_offset r14, -288277; CHECK-PWR9-NEXT: .cfi_offset f14, -144278; CHECK-PWR9-NEXT: .cfi_offset v20, -480279; CHECK-PWR9-NEXT: .cfi_offset v21, -464280; CHECK-PWR9-NEXT: std r14, 224(r1) # 8-byte Folded Spill281; CHECK-PWR9-NEXT: stfd f14, 368(r1) # 8-byte Folded Spill282; CHECK-PWR9-NEXT: stxv v20, 32(r1) # 16-byte Folded Spill283; CHECK-PWR9-NEXT: stxv v21, 48(r1) # 16-byte Folded Spill284; CHECK-PWR9-NEXT: #APP285; CHECK-PWR9-NEXT: add r3, r3, r4286; CHECK-PWR9-NEXT: #NO_APP287; CHECK-PWR9-NEXT: extsw r3, r3288; CHECK-PWR9-NEXT: bl callee289; CHECK-PWR9-NEXT: nop290; CHECK-PWR9-NEXT: lxv v21, 48(r1) # 16-byte Folded Reload291; CHECK-PWR9-NEXT: lxv v20, 32(r1) # 16-byte Folded Reload292; CHECK-PWR9-NEXT: lfd f14, 368(r1) # 8-byte Folded Reload293; CHECK-PWR9-NEXT: ld r14, 224(r1) # 8-byte Folded Reload294; CHECK-PWR9-NEXT: addi r1, r1, 512295; CHECK-PWR9-NEXT: ld r0, 16(r1)296; CHECK-PWR9-NEXT: mtlr r0297; CHECK-PWR9-NEXT: blr298entry:299 %0 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{r14},~{f14},~{v20},~{vs53}"(i32 %a, i32 %b)300 %call = tail call signext i32 @callee(i32 signext %0)301 ret i32 %call302}303 304 305