brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.4 KiB · da4cd51 Raw
866 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix -mcpu=pwr7 < %s | FileCheck %s -check-prefix=32BIT3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix -mcpu=pwr7 < %s | FileCheck %s -check-prefix=64BIT4 5define void @i64_join(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) #0 {6; 32BIT-LABEL: i64_join:7; 32BIT:       # %bb.0: # %entry8; 32BIT-NEXT:    mflr 09; 32BIT-NEXT:    stwu 1, -64(1)10; 32BIT-NEXT:    stw 0, 72(1)11; 32BIT-NEXT:    stw 10, 116(1)12; 32BIT-NEXT:    stw 9, 112(1)13; 32BIT-NEXT:    stw 8, 108(1)14; 32BIT-NEXT:    stw 7, 104(1)15; 32BIT-NEXT:    stw 6, 100(1)16; 32BIT-NEXT:    stw 5, 96(1)17; 32BIT-NEXT:    stw 4, 92(1)18; 32BIT-NEXT:    stw 3, 88(1)19; 32BIT-NEXT:    bl .foo[PR]20; 32BIT-NEXT:    nop21; 32BIT-NEXT:    addi 1, 1, 6422; 32BIT-NEXT:    lwz 0, 8(1)23; 32BIT-NEXT:    mtlr 024; 32BIT-NEXT:    blr25;26; 64BIT-LABEL: i64_join:27; 64BIT:       # %bb.0: # %entry28; 64BIT-NEXT:    mflr 029; 64BIT-NEXT:    stdu 1, -112(1)30; 64BIT-NEXT:    std 0, 128(1)31; 64BIT-NEXT:    std 10, 216(1)32; 64BIT-NEXT:    std 9, 208(1)33; 64BIT-NEXT:    std 8, 200(1)34; 64BIT-NEXT:    std 7, 192(1)35; 64BIT-NEXT:    std 6, 184(1)36; 64BIT-NEXT:    std 5, 176(1)37; 64BIT-NEXT:    std 4, 168(1)38; 64BIT-NEXT:    std 3, 160(1)39; 64BIT-NEXT:    bl .foo[PR]40; 64BIT-NEXT:    nop41; 64BIT-NEXT:    addi 1, 1, 11242; 64BIT-NEXT:    ld 0, 16(1)43; 64BIT-NEXT:    mtlr 044; 64BIT-NEXT:    blr45entry:46  %add = add nsw i64 %b, %a47  %add1 = add nsw i64 %add, %c48  %add2 = add nsw i64 %add1, %d49  %add3 = add nsw i64 %add2, %e50  %add4 = add nsw i64 %add3, %f51  %add5 = add nsw i64 %add4, %g52  %add6 = add nsw i64 %add5, %h53  %add7 = add nsw i64 %add6, %i54  %add8 = add nsw i64 %add7, %j55  tail call void @foo()56  ret void57}58 59define void @i64_join_missing(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h, i64 %i, i64 %j) #0 {60; 32BIT-LABEL: i64_join_missing:61; 32BIT:       # %bb.0: # %entry62; 32BIT-NEXT:    mflr 063; 32BIT-NEXT:    stwu 1, -64(1)64; 32BIT-NEXT:    stw 0, 72(1)65; 32BIT-NEXT:    stw 10, 116(1)66; 32BIT-NEXT:    stw 9, 112(1)67; 32BIT-NEXT:    stw 8, 108(1)68; 32BIT-NEXT:    stw 7, 104(1)69; 32BIT-NEXT:    stw 6, 100(1)70; 32BIT-NEXT:    stw 5, 96(1)71; 32BIT-NEXT:    stw 4, 92(1)72; 32BIT-NEXT:    stw 3, 88(1)73; 32BIT-NEXT:    bl .foo[PR]74; 32BIT-NEXT:    nop75; 32BIT-NEXT:    addi 1, 1, 6476; 32BIT-NEXT:    lwz 0, 8(1)77; 32BIT-NEXT:    mtlr 078; 32BIT-NEXT:    blr79;80; 64BIT-LABEL: i64_join_missing:81; 64BIT:       # %bb.0: # %entry82; 64BIT-NEXT:    mflr 083; 64BIT-NEXT:    stdu 1, -112(1)84; 64BIT-NEXT:    std 0, 128(1)85; 64BIT-NEXT:    std 10, 216(1)86; 64BIT-NEXT:    std 9, 208(1)87; 64BIT-NEXT:    std 8, 200(1)88; 64BIT-NEXT:    std 7, 192(1)89; 64BIT-NEXT:    std 6, 184(1)90; 64BIT-NEXT:    std 5, 176(1)91; 64BIT-NEXT:    std 4, 168(1)92; 64BIT-NEXT:    std 3, 160(1)93; 64BIT-NEXT:    bl .foo[PR]94; 64BIT-NEXT:    nop95; 64BIT-NEXT:    addi 1, 1, 11296; 64BIT-NEXT:    ld 0, 16(1)97; 64BIT-NEXT:    mtlr 098; 64BIT-NEXT:    blr99entry:100  %add1 = mul nsw i64 %a, 3101  %add2 = add nsw i64 %add1, %d102  %add3 = add nsw i64 %add2, %e103  %add4 = add nsw i64 %add3, %f104  %add5 = add nsw i64 %add4, %g105  %add6 = add nsw i64 %add5, %h106  %add7 = add nsw i64 %add6, %i107  %add8 = add nsw i64 %add7, %j108  tail call void @foo()109  ret void110}111 112define void @i32_join(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) #0 {113; 32BIT-LABEL: i32_join:114; 32BIT:       # %bb.0: # %entry115; 32BIT-NEXT:    mflr 0116; 32BIT-NEXT:    stwu 1, -64(1)117; 32BIT-NEXT:    stw 0, 72(1)118; 32BIT-NEXT:    stw 10, 116(1)119; 32BIT-NEXT:    stw 9, 112(1)120; 32BIT-NEXT:    stw 8, 108(1)121; 32BIT-NEXT:    stw 7, 104(1)122; 32BIT-NEXT:    stw 6, 100(1)123; 32BIT-NEXT:    stw 5, 96(1)124; 32BIT-NEXT:    stw 4, 92(1)125; 32BIT-NEXT:    stw 3, 88(1)126; 32BIT-NEXT:    bl .foo[PR]127; 32BIT-NEXT:    nop128; 32BIT-NEXT:    addi 1, 1, 64129; 32BIT-NEXT:    lwz 0, 8(1)130; 32BIT-NEXT:    mtlr 0131; 32BIT-NEXT:    blr132;133; 64BIT-LABEL: i32_join:134; 64BIT:       # %bb.0: # %entry135; 64BIT-NEXT:    mflr 0136; 64BIT-NEXT:    stdu 1, -112(1)137; 64BIT-NEXT:    std 0, 128(1)138; 64BIT-NEXT:    std 10, 216(1)139; 64BIT-NEXT:    std 9, 208(1)140; 64BIT-NEXT:    std 8, 200(1)141; 64BIT-NEXT:    std 7, 192(1)142; 64BIT-NEXT:    std 6, 184(1)143; 64BIT-NEXT:    std 5, 176(1)144; 64BIT-NEXT:    std 4, 168(1)145; 64BIT-NEXT:    std 3, 160(1)146; 64BIT-NEXT:    bl .foo[PR]147; 64BIT-NEXT:    nop148; 64BIT-NEXT:    addi 1, 1, 112149; 64BIT-NEXT:    ld 0, 16(1)150; 64BIT-NEXT:    mtlr 0151; 64BIT-NEXT:    blr152entry:153  %add = add nsw i32 %b, %a154  %add1 = add nsw i32 %add, %c155  %add2 = add nsw i32 %add1, %d156  %add3 = add nsw i32 %add2, %e157  %add4 = add nsw i32 %add3, %f158  %add5 = add nsw i32 %add4, %g159  %add6 = add nsw i32 %add5, %h160  %add7 = add nsw i32 %add6, %i161  %add8 = add nsw i32 %add7, %j162  tail call void @foo()163  ret void164}165 166define void @i32_join_missing(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i32 signext %i, i32 signext %j) #0 {167; 32BIT-LABEL: i32_join_missing:168; 32BIT:       # %bb.0: # %entry169; 32BIT-NEXT:    mflr 0170; 32BIT-NEXT:    stwu 1, -64(1)171; 32BIT-NEXT:    stw 0, 72(1)172; 32BIT-NEXT:    stw 10, 116(1)173; 32BIT-NEXT:    stw 9, 112(1)174; 32BIT-NEXT:    stw 8, 108(1)175; 32BIT-NEXT:    stw 7, 104(1)176; 32BIT-NEXT:    stw 6, 100(1)177; 32BIT-NEXT:    stw 5, 96(1)178; 32BIT-NEXT:    stw 4, 92(1)179; 32BIT-NEXT:    stw 3, 88(1)180; 32BIT-NEXT:    bl .foo[PR]181; 32BIT-NEXT:    nop182; 32BIT-NEXT:    addi 1, 1, 64183; 32BIT-NEXT:    lwz 0, 8(1)184; 32BIT-NEXT:    mtlr 0185; 32BIT-NEXT:    blr186;187; 64BIT-LABEL: i32_join_missing:188; 64BIT:       # %bb.0: # %entry189; 64BIT-NEXT:    mflr 0190; 64BIT-NEXT:    stdu 1, -112(1)191; 64BIT-NEXT:    std 0, 128(1)192; 64BIT-NEXT:    std 10, 216(1)193; 64BIT-NEXT:    std 9, 208(1)194; 64BIT-NEXT:    std 8, 200(1)195; 64BIT-NEXT:    std 7, 192(1)196; 64BIT-NEXT:    std 6, 184(1)197; 64BIT-NEXT:    std 5, 176(1)198; 64BIT-NEXT:    std 4, 168(1)199; 64BIT-NEXT:    std 3, 160(1)200; 64BIT-NEXT:    bl .foo[PR]201; 64BIT-NEXT:    nop202; 64BIT-NEXT:    addi 1, 1, 112203; 64BIT-NEXT:    ld 0, 16(1)204; 64BIT-NEXT:    mtlr 0205; 64BIT-NEXT:    blr206entry:207  %add1 = mul nsw i32 %a, 3208  %add2 = add nsw i32 %add1, %d209  %add3 = add nsw i32 %add2, %e210  %add4 = add nsw i32 %add3, %f211  %add5 = add nsw i32 %add4, %g212  %add6 = add nsw i32 %add5, %h213  %add7 = add nsw i32 %add6, %i214  %add8 = add nsw i32 %add7, %j215  tail call void @foo()216  ret void217}218 219define void @f32_join(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) #0 {220; 32BIT-LABEL: f32_join:221; 32BIT:       # %bb.0: # %entry222; 32BIT-NEXT:    mflr 0223; 32BIT-NEXT:    stwu 1, -64(1)224; 32BIT-NEXT:    stw 0, 72(1)225; 32BIT-NEXT:    stfs 10, 124(1)226; 32BIT-NEXT:    stfs 9, 120(1)227; 32BIT-NEXT:    stfs 8, 116(1)228; 32BIT-NEXT:    stfs 7, 112(1)229; 32BIT-NEXT:    stfs 6, 108(1)230; 32BIT-NEXT:    stfs 5, 104(1)231; 32BIT-NEXT:    stfs 4, 100(1)232; 32BIT-NEXT:    stfs 3, 96(1)233; 32BIT-NEXT:    stfs 2, 92(1)234; 32BIT-NEXT:    stfs 1, 88(1)235; 32BIT-NEXT:    bl .foo[PR]236; 32BIT-NEXT:    nop237; 32BIT-NEXT:    addi 1, 1, 64238; 32BIT-NEXT:    lwz 0, 8(1)239; 32BIT-NEXT:    mtlr 0240; 32BIT-NEXT:    blr241;242; 64BIT-LABEL: f32_join:243; 64BIT:       # %bb.0: # %entry244; 64BIT-NEXT:    mflr 0245; 64BIT-NEXT:    stdu 1, -112(1)246; 64BIT-NEXT:    std 0, 128(1)247; 64BIT-NEXT:    stfs 10, 232(1)248; 64BIT-NEXT:    stfs 9, 224(1)249; 64BIT-NEXT:    stfs 8, 216(1)250; 64BIT-NEXT:    stfs 7, 208(1)251; 64BIT-NEXT:    stfs 6, 200(1)252; 64BIT-NEXT:    stfs 5, 192(1)253; 64BIT-NEXT:    stfs 4, 184(1)254; 64BIT-NEXT:    stfs 3, 176(1)255; 64BIT-NEXT:    stfs 2, 168(1)256; 64BIT-NEXT:    stfs 1, 160(1)257; 64BIT-NEXT:    bl .foo[PR]258; 64BIT-NEXT:    nop259; 64BIT-NEXT:    addi 1, 1, 112260; 64BIT-NEXT:    ld 0, 16(1)261; 64BIT-NEXT:    mtlr 0262; 64BIT-NEXT:    blr263entry:264  %add = fadd float %a, %b265  %add1 = fadd float %add, %c266  %add2 = fadd float %add1, %d267  %add3 = fadd float %add2, %e268  %add4 = fadd float %add3, %f269  %add5 = fadd float %add4, %g270  %add6 = fadd float %add5, %h271  %add7 = fadd float %add6, %i272  %add8 = fadd float %add7, %j273  tail call void @foo()274  ret void275}276 277define void @f32_join_missing(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j) #0 {278; 32BIT-LABEL: f32_join_missing:279; 32BIT:       # %bb.0: # %entry280; 32BIT-NEXT:    mflr 0281; 32BIT-NEXT:    stwu 1, -64(1)282; 32BIT-NEXT:    stw 0, 72(1)283; 32BIT-NEXT:    stfs 10, 124(1)284; 32BIT-NEXT:    stfs 9, 120(1)285; 32BIT-NEXT:    stfs 8, 116(1)286; 32BIT-NEXT:    stfs 7, 112(1)287; 32BIT-NEXT:    stfs 6, 108(1)288; 32BIT-NEXT:    stfs 5, 104(1)289; 32BIT-NEXT:    stfs 4, 100(1)290; 32BIT-NEXT:    stfs 3, 96(1)291; 32BIT-NEXT:    stfs 2, 92(1)292; 32BIT-NEXT:    stfs 1, 88(1)293; 32BIT-NEXT:    bl .foo[PR]294; 32BIT-NEXT:    nop295; 32BIT-NEXT:    addi 1, 1, 64296; 32BIT-NEXT:    lwz 0, 8(1)297; 32BIT-NEXT:    mtlr 0298; 32BIT-NEXT:    blr299;300; 64BIT-LABEL: f32_join_missing:301; 64BIT:       # %bb.0: # %entry302; 64BIT-NEXT:    mflr 0303; 64BIT-NEXT:    stdu 1, -112(1)304; 64BIT-NEXT:    std 0, 128(1)305; 64BIT-NEXT:    stfs 10, 232(1)306; 64BIT-NEXT:    stfs 9, 224(1)307; 64BIT-NEXT:    stfs 8, 216(1)308; 64BIT-NEXT:    stfs 7, 208(1)309; 64BIT-NEXT:    stfs 6, 200(1)310; 64BIT-NEXT:    stfs 5, 192(1)311; 64BIT-NEXT:    stfs 4, 184(1)312; 64BIT-NEXT:    stfs 3, 176(1)313; 64BIT-NEXT:    stfs 2, 168(1)314; 64BIT-NEXT:    stfs 1, 160(1)315; 64BIT-NEXT:    bl .foo[PR]316; 64BIT-NEXT:    nop317; 64BIT-NEXT:    addi 1, 1, 112318; 64BIT-NEXT:    ld 0, 16(1)319; 64BIT-NEXT:    mtlr 0320; 64BIT-NEXT:    blr321entry:322  %add = fadd float %a, %a323  %add1 = fadd float %add, %a324  %add2 = fadd float %add1, %d325  %add3 = fadd float %add2, %e326  %add4 = fadd float %add3, %f327  %add5 = fadd float %add4, %g328  %add6 = fadd float %add5, %h329  %add7 = fadd float %add6, %i330  %add8 = fadd float %add7, %j331  tail call void @foo()332  ret void333}334 335define void @f64_join(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) #0 {336; 32BIT-LABEL: f64_join:337; 32BIT:       # %bb.0: # %entry338; 32BIT-NEXT:    mflr 0339; 32BIT-NEXT:    stwu 1, -64(1)340; 32BIT-NEXT:    stw 0, 72(1)341; 32BIT-NEXT:    stfd 10, 160(1)342; 32BIT-NEXT:    stfd 9, 152(1)343; 32BIT-NEXT:    stfd 8, 144(1)344; 32BIT-NEXT:    stfd 7, 136(1)345; 32BIT-NEXT:    stfd 6, 128(1)346; 32BIT-NEXT:    stfd 5, 120(1)347; 32BIT-NEXT:    stfd 4, 112(1)348; 32BIT-NEXT:    stfd 3, 104(1)349; 32BIT-NEXT:    stfd 2, 96(1)350; 32BIT-NEXT:    stfd 1, 88(1)351; 32BIT-NEXT:    bl .foo[PR]352; 32BIT-NEXT:    nop353; 32BIT-NEXT:    addi 1, 1, 64354; 32BIT-NEXT:    lwz 0, 8(1)355; 32BIT-NEXT:    mtlr 0356; 32BIT-NEXT:    blr357;358; 64BIT-LABEL: f64_join:359; 64BIT:       # %bb.0: # %entry360; 64BIT-NEXT:    mflr 0361; 64BIT-NEXT:    stdu 1, -112(1)362; 64BIT-NEXT:    std 0, 128(1)363; 64BIT-NEXT:    stfd 10, 232(1)364; 64BIT-NEXT:    stfd 9, 224(1)365; 64BIT-NEXT:    stfd 8, 216(1)366; 64BIT-NEXT:    stfd 7, 208(1)367; 64BIT-NEXT:    stfd 6, 200(1)368; 64BIT-NEXT:    stfd 5, 192(1)369; 64BIT-NEXT:    stfd 4, 184(1)370; 64BIT-NEXT:    stfd 3, 176(1)371; 64BIT-NEXT:    stfd 2, 168(1)372; 64BIT-NEXT:    stfd 1, 160(1)373; 64BIT-NEXT:    bl .foo[PR]374; 64BIT-NEXT:    nop375; 64BIT-NEXT:    addi 1, 1, 112376; 64BIT-NEXT:    ld 0, 16(1)377; 64BIT-NEXT:    mtlr 0378; 64BIT-NEXT:    blr379entry:380  %add = fadd double %a, %b381  %add1 = fadd double %add, %c382  %add2 = fadd double %add1, %d383  %add3 = fadd double %add2, %e384  %add4 = fadd double %add3, %f385  %add5 = fadd double %add4, %g386  %add6 = fadd double %add5, %h387  %add7 = fadd double %add6, %i388  %add8 = fadd double %add7, %j389  tail call void @foo()390  ret void391}392 393define void @f64_missing(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i, double %j) #0 {394; 32BIT-LABEL: f64_missing:395; 32BIT:       # %bb.0: # %entry396; 32BIT-NEXT:    mflr 0397; 32BIT-NEXT:    stwu 1, -64(1)398; 32BIT-NEXT:    stw 0, 72(1)399; 32BIT-NEXT:    stfd 10, 160(1)400; 32BIT-NEXT:    stfd 9, 152(1)401; 32BIT-NEXT:    stfd 8, 144(1)402; 32BIT-NEXT:    stfd 7, 136(1)403; 32BIT-NEXT:    stfd 6, 128(1)404; 32BIT-NEXT:    stfd 5, 120(1)405; 32BIT-NEXT:    stfd 4, 112(1)406; 32BIT-NEXT:    stfd 3, 104(1)407; 32BIT-NEXT:    stfd 2, 96(1)408; 32BIT-NEXT:    stfd 1, 88(1)409; 32BIT-NEXT:    bl .foo[PR]410; 32BIT-NEXT:    nop411; 32BIT-NEXT:    addi 1, 1, 64412; 32BIT-NEXT:    lwz 0, 8(1)413; 32BIT-NEXT:    mtlr 0414; 32BIT-NEXT:    blr415;416; 64BIT-LABEL: f64_missing:417; 64BIT:       # %bb.0: # %entry418; 64BIT-NEXT:    mflr 0419; 64BIT-NEXT:    stdu 1, -112(1)420; 64BIT-NEXT:    std 0, 128(1)421; 64BIT-NEXT:    stfd 10, 232(1)422; 64BIT-NEXT:    stfd 9, 224(1)423; 64BIT-NEXT:    stfd 8, 216(1)424; 64BIT-NEXT:    stfd 7, 208(1)425; 64BIT-NEXT:    stfd 6, 200(1)426; 64BIT-NEXT:    stfd 5, 192(1)427; 64BIT-NEXT:    stfd 4, 184(1)428; 64BIT-NEXT:    stfd 3, 176(1)429; 64BIT-NEXT:    stfd 2, 168(1)430; 64BIT-NEXT:    stfd 1, 160(1)431; 64BIT-NEXT:    bl .foo[PR]432; 64BIT-NEXT:    nop433; 64BIT-NEXT:    addi 1, 1, 112434; 64BIT-NEXT:    ld 0, 16(1)435; 64BIT-NEXT:    mtlr 0436; 64BIT-NEXT:    blr437entry:438  %add = fadd double %a, %a439  %add1 = fadd double %add, %a440  %add2 = fadd double %add1, %d441  %add3 = fadd double %add2, %e442  %add4 = fadd double %add3, %f443  %add5 = fadd double %add4, %g444  %add6 = fadd double %add5, %h445  %add7 = fadd double %add6, %i446  %add8 = fadd double %add7, %j447  tail call void @foo()448  ret void449}450 451define void @mixed_1(double %a, i64 %b, i64 %c, i32 signext %d, i64 %e, float %f, float %g, double %h, i32 signext %i, double %j) #0 {452; 32BIT-LABEL: mixed_1:453; 32BIT:       # %bb.0: # %entry454; 32BIT-NEXT:    mflr 0455; 32BIT-NEXT:    stwu 1, -112(1)456; 32BIT-NEXT:    stw 0, 120(1)457; 32BIT-NEXT:    stfd 1, 136(1)458; 32BIT-NEXT:    xsadddp 1, 1, 5459; 32BIT-NEXT:    stw 24, 64(1) # 4-byte Folded Spill460; 32BIT-NEXT:    lwz 24, 168(1)461; 32BIT-NEXT:    stw 25, 68(1) # 4-byte Folded Spill462; 32BIT-NEXT:    lwz 25, 188(1)463; 32BIT-NEXT:    stw 26, 72(1) # 4-byte Folded Spill464; 32BIT-NEXT:    stw 27, 76(1) # 4-byte Folded Spill465; 32BIT-NEXT:    stw 28, 80(1) # 4-byte Folded Spill466; 32BIT-NEXT:    stw 29, 84(1) # 4-byte Folded Spill467; 32BIT-NEXT:    stw 30, 88(1) # 4-byte Folded Spill468; 32BIT-NEXT:    stw 31, 92(1) # 4-byte Folded Spill469; 32BIT-NEXT:    stfd 30, 96(1) # 8-byte Folded Spill470; 32BIT-NEXT:    stfd 31, 104(1) # 8-byte Folded Spill471; 32BIT-NEXT:    fmr 31, 3472; 32BIT-NEXT:    fmr 30, 2473; 32BIT-NEXT:    mr 31, 10474; 32BIT-NEXT:    mr 30, 9475; 32BIT-NEXT:    mr 29, 8476; 32BIT-NEXT:    mr 28, 7477; 32BIT-NEXT:    mr 27, 6478; 32BIT-NEXT:    mr 26, 5479; 32BIT-NEXT:    stfd 5, 192(1)480; 32BIT-NEXT:    stfd 4, 180(1)481; 32BIT-NEXT:    stfs 3, 176(1)482; 32BIT-NEXT:    stfs 2, 172(1)483; 32BIT-NEXT:    stw 10, 164(1)484; 32BIT-NEXT:    stw 9, 160(1)485; 32BIT-NEXT:    stw 8, 156(1)486; 32BIT-NEXT:    stw 7, 152(1)487; 32BIT-NEXT:    stw 6, 148(1)488; 32BIT-NEXT:    stw 5, 144(1)489; 32BIT-NEXT:    bl .consume_f64[PR]490; 32BIT-NEXT:    nop491; 32BIT-NEXT:    fadds 1, 30, 31492; 32BIT-NEXT:    bl .consume_f32[PR]493; 32BIT-NEXT:    nop494; 32BIT-NEXT:    addc 3, 29, 27495; 32BIT-NEXT:    adde 4, 28, 26496; 32BIT-NEXT:    srawi 5, 30, 31497; 32BIT-NEXT:    addc 3, 3, 30498; 32BIT-NEXT:    adde 5, 4, 5499; 32BIT-NEXT:    addc 4, 3, 24500; 32BIT-NEXT:    adde 3, 5, 31501; 32BIT-NEXT:    bl .consume_i64[PR]502; 32BIT-NEXT:    nop503; 32BIT-NEXT:    add 3, 25, 30504; 32BIT-NEXT:    bl .consume_i32[PR]505; 32BIT-NEXT:    nop506; 32BIT-NEXT:    lfd 31, 104(1) # 8-byte Folded Reload507; 32BIT-NEXT:    lfd 30, 96(1) # 8-byte Folded Reload508; 32BIT-NEXT:    lwz 31, 92(1) # 4-byte Folded Reload509; 32BIT-NEXT:    lwz 30, 88(1) # 4-byte Folded Reload510; 32BIT-NEXT:    lwz 29, 84(1) # 4-byte Folded Reload511; 32BIT-NEXT:    lwz 28, 80(1) # 4-byte Folded Reload512; 32BIT-NEXT:    lwz 27, 76(1) # 4-byte Folded Reload513; 32BIT-NEXT:    lwz 26, 72(1) # 4-byte Folded Reload514; 32BIT-NEXT:    lwz 25, 68(1) # 4-byte Folded Reload515; 32BIT-NEXT:    lwz 24, 64(1) # 4-byte Folded Reload516; 32BIT-NEXT:    addi 1, 1, 112517; 32BIT-NEXT:    lwz 0, 8(1)518; 32BIT-NEXT:    mtlr 0519; 32BIT-NEXT:    blr520;521; 64BIT-LABEL: mixed_1:522; 64BIT:       # %bb.0: # %entry523; 64BIT-NEXT:    mflr 0524; 64BIT-NEXT:    stdu 1, -176(1)525; 64BIT-NEXT:    std 0, 192(1)526; 64BIT-NEXT:    stfd 1, 224(1)527; 64BIT-NEXT:    xsadddp 1, 1, 5528; 64BIT-NEXT:    std 27, 120(1) # 8-byte Folded Spill529; 64BIT-NEXT:    lwz 27, 292(1)530; 64BIT-NEXT:    std 28, 128(1) # 8-byte Folded Spill531; 64BIT-NEXT:    std 29, 136(1) # 8-byte Folded Spill532; 64BIT-NEXT:    std 30, 144(1) # 8-byte Folded Spill533; 64BIT-NEXT:    std 31, 152(1) # 8-byte Folded Spill534; 64BIT-NEXT:    stfd 30, 160(1) # 8-byte Folded Spill535; 64BIT-NEXT:    stfd 31, 168(1) # 8-byte Folded Spill536; 64BIT-NEXT:    fmr 31, 3537; 64BIT-NEXT:    fmr 30, 2538; 64BIT-NEXT:    mr 31, 7539; 64BIT-NEXT:    mr 30, 6540; 64BIT-NEXT:    mr 29, 5541; 64BIT-NEXT:    mr 28, 4542; 64BIT-NEXT:    stfd 5, 296(1)543; 64BIT-NEXT:    stfd 4, 280(1)544; 64BIT-NEXT:    stfs 3, 272(1)545; 64BIT-NEXT:    stfs 2, 264(1)546; 64BIT-NEXT:    std 7, 256(1)547; 64BIT-NEXT:    std 6, 248(1)548; 64BIT-NEXT:    std 5, 240(1)549; 64BIT-NEXT:    std 4, 232(1)550; 64BIT-NEXT:    bl .consume_f64[PR]551; 64BIT-NEXT:    nop552; 64BIT-NEXT:    fadds 1, 30, 31553; 64BIT-NEXT:    bl .consume_f32[PR]554; 64BIT-NEXT:    nop555; 64BIT-NEXT:    add 3, 29, 28556; 64BIT-NEXT:    add 3, 3, 30557; 64BIT-NEXT:    add 3, 3, 31558; 64BIT-NEXT:    bl .consume_i64[PR]559; 64BIT-NEXT:    nop560; 64BIT-NEXT:    add 3, 27, 30561; 64BIT-NEXT:    extsw 3, 3562; 64BIT-NEXT:    bl .consume_i32[PR]563; 64BIT-NEXT:    nop564; 64BIT-NEXT:    lfd 31, 168(1) # 8-byte Folded Reload565; 64BIT-NEXT:    lfd 30, 160(1) # 8-byte Folded Reload566; 64BIT-NEXT:    ld 31, 152(1) # 8-byte Folded Reload567; 64BIT-NEXT:    ld 30, 144(1) # 8-byte Folded Reload568; 64BIT-NEXT:    ld 29, 136(1) # 8-byte Folded Reload569; 64BIT-NEXT:    ld 28, 128(1) # 8-byte Folded Reload570; 64BIT-NEXT:    ld 27, 120(1) # 8-byte Folded Reload571; 64BIT-NEXT:    addi 1, 1, 176572; 64BIT-NEXT:    ld 0, 16(1)573; 64BIT-NEXT:    mtlr 0574; 64BIT-NEXT:    blr575entry:576  %add = fadd double %a, %j577  tail call void @consume_f64(double %add)578  %add1 = fadd float %f, %g579  tail call void @consume_f32(float %add1)580  %add2 = add nsw i64 %c, %b581  %conv = sext i32 %d to i64582  %add3 = add nsw i64 %add2, %conv583  %add4 = add nsw i64 %add3, %e584  tail call void @consume_i64(i64 %add4)585  %add5 = add nsw i32 %i, %d586  tail call void @consume_i32(i32 signext %add5)587  ret void588}589 590define void @mixed_2(<2 x double> %a, <4 x i32> %b, i64 %c) #0 {591; 32BIT-LABEL: mixed_2:592; 32BIT:       # %bb.0: # %entry593; 32BIT-NEXT:    mflr 0594; 32BIT-NEXT:    stwu 1, -80(1)595; 32BIT-NEXT:    li 5, 64596; 32BIT-NEXT:    stw 0, 88(1)597; 32BIT-NEXT:    stw 4, 140(1)598; 32BIT-NEXT:    stw 3, 136(1)599; 32BIT-NEXT:    stxvd2x 34, 1, 5 # 16-byte Folded Spill600; 32BIT-NEXT:    addi 5, 1, 120601; 32BIT-NEXT:    stxvw4x 35, 0, 5602; 32BIT-NEXT:    addi 5, 1, 104603; 32BIT-NEXT:    stxvd2x 34, 0, 5604; 32BIT-NEXT:    lwz 5, 120(1)605; 32BIT-NEXT:    srawi 6, 5, 31606; 32BIT-NEXT:    addc 4, 5, 4607; 32BIT-NEXT:    adde 3, 6, 3608; 32BIT-NEXT:    bl .consume_i64[PR]609; 32BIT-NEXT:    nop610; 32BIT-NEXT:    li 3, 64611; 32BIT-NEXT:    lxvd2x 1, 1, 3 # 16-byte Folded Reload612; 32BIT-NEXT:    bl .consume_f64[PR]613; 32BIT-NEXT:    nop614; 32BIT-NEXT:    addi 1, 1, 80615; 32BIT-NEXT:    lwz 0, 8(1)616; 32BIT-NEXT:    mtlr 0617; 32BIT-NEXT:    blr618;619; 64BIT-LABEL: mixed_2:620; 64BIT:       # %bb.0: # %entry621; 64BIT-NEXT:    mflr 0622; 64BIT-NEXT:    stdu 1, -144(1)623; 64BIT-NEXT:    li 4, 128624; 64BIT-NEXT:    std 0, 160(1)625; 64BIT-NEXT:    std 3, 224(1)626; 64BIT-NEXT:    stxvd2x 34, 1, 4 # 16-byte Folded Spill627; 64BIT-NEXT:    addi 4, 1, 208628; 64BIT-NEXT:    stxvw4x 35, 0, 4629; 64BIT-NEXT:    addi 4, 1, 192630; 64BIT-NEXT:    stxvd2x 34, 0, 4631; 64BIT-NEXT:    lwa 4, 208(1)632; 64BIT-NEXT:    add 3, 4, 3633; 64BIT-NEXT:    bl .consume_i64[PR]634; 64BIT-NEXT:    nop635; 64BIT-NEXT:    li 3, 128636; 64BIT-NEXT:    lxvd2x 1, 1, 3 # 16-byte Folded Reload637; 64BIT-NEXT:    bl .consume_f64[PR]638; 64BIT-NEXT:    nop639; 64BIT-NEXT:    addi 1, 1, 144640; 64BIT-NEXT:    ld 0, 16(1)641; 64BIT-NEXT:    mtlr 0642; 64BIT-NEXT:    blr643entry:644  %vecext = extractelement <4 x i32> %b, i64 0645  %conv = sext i32 %vecext to i64646  %add = add nsw i64 %conv, %c647  tail call void @consume_i64(i64 %add)648  %vecext1 = extractelement <2 x double> %a, i64 0649  tail call void @consume_f64(double %vecext1)650  ret void651}652 653%struct.foo = type <{ [3 x i32], double, [12 x i8], <4 x i32> }>654 655define void @mixed_3(<2 x double> %a, i64 %b, double %c, float %d, i32 signext %e, double %f, ...) #0 {656; 32BIT-LABEL: mixed_3:657; 32BIT:       # %bb.0: # %entry658; 32BIT-NEXT:    mflr 0659; 32BIT-NEXT:    stwu 1, -80(1)660; 32BIT-NEXT:    xsadddp 0, 34, 3661; 32BIT-NEXT:    stw 0, 88(1)662; 32BIT-NEXT:    stfd 1, 128(1)663; 32BIT-NEXT:    stw 29, 60(1) # 4-byte Folded Spill664; 32BIT-NEXT:    addi 3, 1, 104665; 32BIT-NEXT:    lwz 29, 148(1)666; 32BIT-NEXT:    stw 30, 64(1) # 4-byte Folded Spill667; 32BIT-NEXT:    stw 31, 68(1) # 4-byte Folded Spill668; 32BIT-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill669; 32BIT-NEXT:    fmr 31, 2670; 32BIT-NEXT:    mr 31, 10671; 32BIT-NEXT:    mr 30, 9672; 32BIT-NEXT:    xsadddp 1, 0, 1673; 32BIT-NEXT:    stxvd2x 34, 0, 3674; 32BIT-NEXT:    stfd 3, 144(1)675; 32BIT-NEXT:    stfs 2, 136(1)676; 32BIT-NEXT:    stw 10, 124(1)677; 32BIT-NEXT:    stw 9, 120(1)678; 32BIT-NEXT:    bl .consume_f64[PR]679; 32BIT-NEXT:    nop680; 32BIT-NEXT:    mr 3, 30681; 32BIT-NEXT:    mr 4, 31682; 32BIT-NEXT:    bl .consume_i64[PR]683; 32BIT-NEXT:    nop684; 32BIT-NEXT:    fmr 1, 31685; 32BIT-NEXT:    bl .consume_f32[PR]686; 32BIT-NEXT:    nop687; 32BIT-NEXT:    mr 3, 29688; 32BIT-NEXT:    bl .consume_i32[PR]689; 32BIT-NEXT:    nop690; 32BIT-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload691; 32BIT-NEXT:    lwz 31, 68(1) # 4-byte Folded Reload692; 32BIT-NEXT:    lwz 30, 64(1) # 4-byte Folded Reload693; 32BIT-NEXT:    lwz 29, 60(1) # 4-byte Folded Reload694; 32BIT-NEXT:    addi 1, 1, 80695; 32BIT-NEXT:    lwz 0, 8(1)696; 32BIT-NEXT:    mtlr 0697; 32BIT-NEXT:    blr698; 32BIT: NumOfGPRsSaved = 3699;700; 64BIT-LABEL: mixed_3:701; 64BIT:       # %bb.0: # %entry702; 64BIT-NEXT:    mflr 0703; 64BIT-NEXT:    stdu 1, -144(1)704; 64BIT-NEXT:    xsadddp 0, 34, 3705; 64BIT-NEXT:    std 0, 160(1)706; 64BIT-NEXT:    stfd 1, 216(1)707; 64BIT-NEXT:    addi 3, 1, 192708; 64BIT-NEXT:    std 30, 120(1) # 8-byte Folded Spill709; 64BIT-NEXT:    std 31, 128(1) # 8-byte Folded Spill710; 64BIT-NEXT:    stfd 31, 136(1) # 8-byte Folded Spill711; 64BIT-NEXT:    mr 31, 8712; 64BIT-NEXT:    fmr 31, 2713; 64BIT-NEXT:    mr 30, 5714; 64BIT-NEXT:    stxvd2x 34, 0, 3715; 64BIT-NEXT:    xsadddp 1, 0, 1716; 64BIT-NEXT:    std 10, 248(1)717; 64BIT-NEXT:    stfd 3, 240(1)718; 64BIT-NEXT:    std 8, 232(1)719; 64BIT-NEXT:    stfs 2, 224(1)720; 64BIT-NEXT:    std 5, 208(1)721; 64BIT-NEXT:    bl .consume_f64[PR]722; 64BIT-NEXT:    nop723; 64BIT-NEXT:    mr 3, 30724; 64BIT-NEXT:    bl .consume_i64[PR]725; 64BIT-NEXT:    nop726; 64BIT-NEXT:    fmr 1, 31727; 64BIT-NEXT:    bl .consume_f32[PR]728; 64BIT-NEXT:    nop729; 64BIT-NEXT:    mr 3, 31730; 64BIT-NEXT:    bl .consume_i32[PR]731; 64BIT-NEXT:    nop732; 64BIT-NEXT:    lfd 31, 136(1) # 8-byte Folded Reload733; 64BIT-NEXT:    ld 31, 128(1) # 8-byte Folded Reload734; 64BIT-NEXT:    ld 30, 120(1) # 8-byte Folded Reload735; 64BIT-NEXT:    addi 1, 1, 144736; 64BIT-NEXT:    ld 0, 16(1)737; 64BIT-NEXT:    mtlr 0738; 64BIT-NEXT:    blr739; 64BIT: NumOfGPRsSaved = 2740entry:741  %vecext = extractelement <2 x double> %a, i64 0742  %add = fadd double %vecext, %f743  %add1 = fadd double %add, %c744  tail call void @consume_f64(double %add1)745  tail call void @consume_i64(i64 %b)746  tail call void @consume_f32(float %d)747  tail call void @consume_i32(i32 signext %e)748  ret void749}750 751define signext i32 @mixed_4(ptr byval(%struct.foo) align 16 %foo, i32 %sec) #0 {752; 32BIT-LABEL: mixed_4:753; 32BIT:       # %bb.0: # %entry754; 32BIT-NEXT:    stw 9, 48(1)755; 32BIT-NEXT:    stw 8, 44(1)756; 32BIT-NEXT:    lfd 0, 44(1)757; 32BIT-NEXT:    addi 3, 1, -4758; 32BIT-NEXT:    xscvdpsxws 0, 0759; 32BIT-NEXT:    stw 5, 32(1)760; 32BIT-NEXT:    stw 6, 36(1)761; 32BIT-NEXT:    stw 7, 40(1)762; 32BIT-NEXT:    stw 10, 52(1)763; 32BIT-NEXT:    stfiwx 0, 0, 3764; 32BIT-NEXT:    lwz 3, -4(1)765; 32BIT-NEXT:    lwz 4, 76(1)766; 32BIT-NEXT:    add 3, 5, 3767; 32BIT-NEXT:    add 3, 3, 4768; 32BIT-NEXT:    blr769;770; 64BIT-LABEL: mixed_4:771; 64BIT:       # %bb.0: # %entry772; 64BIT-NEXT:    std 5, 64(1)773; 64BIT-NEXT:    std 4, 56(1)774; 64BIT-NEXT:    lfd 0, 60(1)775; 64BIT-NEXT:    addi 4, 1, -4776; 64BIT-NEXT:    xscvdpsxws 0, 0777; 64BIT-NEXT:    std 3, 48(1)778; 64BIT-NEXT:    std 6, 72(1)779; 64BIT-NEXT:    std 7, 80(1)780; 64BIT-NEXT:    std 8, 88(1)781; 64BIT-NEXT:    std 9, 96(1)782; 64BIT-NEXT:    rldicl 3, 3, 32, 32783; 64BIT-NEXT:    stfiwx 0, 0, 4784; 64BIT-NEXT:    lwz 4, -4(1)785; 64BIT-NEXT:    add 3, 3, 4786; 64BIT-NEXT:    add 3, 3, 8787; 64BIT-NEXT:    extsw 3, 3788; 64BIT-NEXT:    blr789entry:790  %0 = load i32, ptr %foo, align 16791  %x = getelementptr inbounds i8, ptr %foo, i64 12792  %1 = load double, ptr %x, align 4793  %conv = fptosi double %1 to i32794  %add = add nsw i32 %0, %conv795  %2 = getelementptr inbounds i8, ptr %foo, i64 44796  %vecext = load i32, ptr %2, align 4797  %add1 = add nsw i32 %add, %vecext798  ret i32 %add1799}800 801%struct.bar = type { i8, i32, <4 x i32>, ptr, i8 }802 803define void @mixed_5(ptr byref(%struct.bar) align 16 %r, ptr byval(%struct.bar) align 16 %x, i32 signext %y, ptr byval(%struct.foo) align 16 %f) #0 {804; 32BIT-LABEL: mixed_5:805; 32BIT:       # %bb.0: # %entry806; 32BIT-NEXT:    mflr 0807; 32BIT-NEXT:    stwu 1, -64(1)808; 32BIT-NEXT:    stw 0, 72(1)809; 32BIT-NEXT:    stw 5, 96(1)810; 32BIT-NEXT:    lfd 1, 172(1)811; 32BIT-NEXT:    stw 6, 100(1)812; 32BIT-NEXT:    stw 7, 104(1)813; 32BIT-NEXT:    stw 8, 108(1)814; 32BIT-NEXT:    stw 9, 112(1)815; 32BIT-NEXT:    stw 10, 116(1)816; 32BIT-NEXT:    stw 3, 88(1)817; 32BIT-NEXT:    bl .consume_f64[PR]818; 32BIT-NEXT:    nop819; 32BIT-NEXT:    lwz 3, 100(1)820; 32BIT-NEXT:    bl .consume_i32[PR]821; 32BIT-NEXT:    nop822; 32BIT-NEXT:    addi 1, 1, 64823; 32BIT-NEXT:    lwz 0, 8(1)824; 32BIT-NEXT:    mtlr 0825; 32BIT-NEXT:    blr826;827; 64BIT-LABEL: mixed_5:828; 64BIT:       # %bb.0: # %entry829; 64BIT-NEXT:    mflr 0830; 64BIT-NEXT:    stdu 1, -112(1)831; 64BIT-NEXT:    std 0, 128(1)832; 64BIT-NEXT:    std 5, 176(1)833; 64BIT-NEXT:    lfd 1, 252(1)834; 64BIT-NEXT:    std 6, 184(1)835; 64BIT-NEXT:    std 7, 192(1)836; 64BIT-NEXT:    std 8, 200(1)837; 64BIT-NEXT:    std 9, 208(1)838; 64BIT-NEXT:    std 10, 216(1)839; 64BIT-NEXT:    std 3, 160(1)840; 64BIT-NEXT:    bl .consume_f64[PR]841; 64BIT-NEXT:    nop842; 64BIT-NEXT:    lwa 3, 180(1)843; 64BIT-NEXT:    bl .consume_i32[PR]844; 64BIT-NEXT:    nop845; 64BIT-NEXT:    addi 1, 1, 112846; 64BIT-NEXT:    ld 0, 16(1)847; 64BIT-NEXT:    mtlr 0848; 64BIT-NEXT:    blr849entry:850  %d = getelementptr inbounds i8, ptr %f, i64 12851  %0 = load double, ptr %d, align 4852  tail call void @consume_f64(double %0)853  %i = getelementptr inbounds i8, ptr %x, i64 4854  %1 = load i32, ptr %i, align 4855  tail call void @consume_i32(i32 signext %1)856  ret void857}858 859declare void @foo()860declare void @consume_f64(double)861declare void @consume_f32(float)862declare void @consume_i64(i64)863declare void @consume_i32(i32 signext)864 865attributes #0 = { nofree noinline nounwind "save-reg-params" }866