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