; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s

; Paramater Save Area is not needed if number of parameter does not exceed
; number of registers
; ------------------------------------------------------------------------------

; Max number of GPR is 8
define linkonce_odr void
    @WithoutParamArea(i8* %a, i32 signext %b) align 2 {
entry:
  call fastcc void @fastccFunc(i32 signext 1)
  ret void

; CHECK-LABEL: WithoutParamArea
; CHECK: stdu 1, -32(1)
; CHECK: blr
}
declare fastcc void @fastccFunc(i32 signext %level) unnamed_addr

; No need for Parameter Save Area if only 8 GPRs is needed.
define linkonce_odr void @WithoutParamArea2(i8* %a, i32 signext %b) align 2 {
entry:
  call fastcc void @eightArgs(i32 signext 1, i32 signext 2, i32 signext 3,
                              i32 signext 4, i32 signext 5, i32 signext 6,
                              i32 signext 7, i32 signext 8)
  ret void

; CHECK-LABEL: WithoutParamArea2
; CHECK: stdu 1, -32(1)
; CHECK: blr
}

declare fastcc void
    @eightArgs(i32 signext %level, i32 signext %level2, i32 signext %level3,
               i32 signext %level4, i32 signext %level5, i32 signext %level6,
               i32 signext %level7, i32 signext %level8) unnamed_addr

; No need for Parameter Save Area for calls that utiliizes 8 GPR and 2 FPR.
define linkonce_odr void @WithoutParamArea3(i8* %a, i32 signext %b) align 2 {
entry:
  call fastcc void
      @mixedArgs(i32 signext 1, float 1.0, i32 signext 2, float 2.0,
                 i32 signext 3, i32 signext 4, i32 signext 5, i32 signext 6,
                 i32 signext 7, i32 signext 8) ret void
  ret void

; CHECK-LABEL: WithoutParamArea3
; CHECK: stdu 1, -32(1)
; CHECK: blr
}

declare fastcc void
    @mixedArgs(i32 signext %level, float %levelf1, i32 signext %level2,
               float %levelf2, i32 signext %level3, i32 signext %level4,
               i32 signext %level5, i32 signext %level6, i32 signext %level7,
               i32 signext %level8) unnamed_addr

; Pass by value usage requiring less GPR then available
%"myClass::Mem" = type { i8, i8, i16, i32, i32, i32, i64 }

define internal fastcc void @CallPassByValue(%"myClass::Mem"* %E) align 2 {
entry:
  call fastcc void @PassByValue(%"myClass::Mem"* byval nonnull align 8 undef);
  ret void

; CHECK-LABEL: PassByValue
; CHECK: stdu 1, -32(1)
; CHECK: blr
}

declare dso_local fastcc void
    @PassByValue(%"myClass::Mem"* byval nocapture readonly align 8) align 2

; Verify Paramater Save Area is allocated if parameter exceed the number that
; can be passed via registers
; ------------------------------------------------------------------------------

; Max number of GPR is 8
define linkonce_odr void @WithParamArea(i8 * %a, i32 signext %b) align 2 {
entry:
  call fastcc void @nineArgs(i32 signext 1, i32 signext 2, i32 signext 3,
                           i32 signext 4, i32 signext 5, i32 signext 6,
                           i32 signext 7, i32 signext 8, i32 signext 9)
  ret void

; CHECK-LABEL: WithParamArea
; CHECK: stdu 1, -96(1)
; CHECK: blr
}

declare fastcc void @nineArgs(i32 signext %level, i32 signext %level2,
  i32 signext %level3, i32 signext %level4, i32 signext %level5,
  i32 signext %level6, i32 signext %level7, i32 signext %level8,
  i32 signext %level9) unnamed_addr

; Max number of FPR for parameter passing is 13
define linkonce_odr void @WithParamArea2(i8* %a, i32 signext %b) align 2 {
entry:
  call fastcc void @funcW14FloatArgs(float 1.0, float 2.0, float 3.0,
    float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 1.0,
    float 2.0, float 3.0, float 4.0, float 5.0, float 14.0)
  ret void

; CHECK-LABEL: WithParamArea2
; CHECK: stdu 1, -96(1)
; CHECK: blr
}

declare fastcc void
    @funcW14FloatArgs(float %level, float %level2, float %level3,
                      float %level4, float %level5, float %level6,
                      float %level7, float %level8, float %level9,
                      float %level10, float %level11, float %level12,
                      float %level13, float %level14);


; Pass by value usage requires more GPR then available
%"myClass::MemA" = type { i8, i8, i16, i32, i32, i32, i64 }
%"myClass::MemB" = type { i32*, i32, i32, %"myClass::MemB"** }
%"myClass::MemC" = type { %"myClass::MemD"*, %"myClass::MemC"*, i64 }
%"myClass::MemD" = type { %"myClass::MemB"*, %"myClass::MemC"*, i8, i8, i16,
              i32 }
%"myStruct::MemF" = type { i32, %"myClass::MemA"*, %"myClass::MemA"*, i64, i64 }
%"myClass::MemK" = type { i32, %"myClass::MemD"*, %"myClass::MemD"*, i64, i32,
                          i64, i8, i32, %"myStruct::MemF",
              i8, %"myClass::MemA"* }

define internal fastcc void @AggMemExprEmitter(%"myClass::MemK"* %E) align 2 {
entry:
  call fastcc void @MemExprEmitterInitialization(%"myClass::MemK" *
                                               byval nonnull align 8 undef);
  ret void

; CHECK-LABEL: AggMemExprEmitter
; CHECK: stdu 1, -144(1)
; CHECK: blr
}

declare dso_local fastcc void
    @MemExprEmitterInitialization(%"myClass::MemK" *
                                  byval nocapture readonly align 8) align 2
