3139 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -verify-machineinstrs \3; RUN: | FileCheck -check-prefix=ILP32-ILP32F-FPELIM %s4; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -verify-machineinstrs -frame-pointer=all \5; RUN: | FileCheck -check-prefix=ILP32-ILP32F-WITHFP %s6; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs \7; RUN: | FileCheck -check-prefix=RV32D-ILP32-ILP32F-ILP32D-FPELIM %s8; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d -target-abi ilp32f \9; RUN: -verify-machineinstrs \10; RUN: | FileCheck -check-prefix=RV32D-ILP32-ILP32F-ILP32D-FPELIM %s11; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d -target-abi ilp32d \12; RUN: -verify-machineinstrs \13; RUN: | FileCheck -check-prefix=RV32D-ILP32-ILP32F-ILP32D-FPELIM %s14; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -target-abi ilp32e \15; RUN: -verify-machineinstrs \16; RUN: | FileCheck -check-prefix=ILP32E-FPELIM %s17; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -target-abi ilp32e -frame-pointer=all \18; RUN: -verify-machineinstrs \19; RUN: | FileCheck -check-prefix=ILP32E-WITHFP %s20; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -verify-machineinstrs \21; RUN: | FileCheck -check-prefix=LP64-LP64F-LP64D-FPELIM %s22; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d -target-abi lp64f \23; RUN: -verify-machineinstrs \24; RUN: | FileCheck -check-prefix=LP64-LP64F-LP64D-FPELIM %s25; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d -target-abi lp64d \26; RUN: -verify-machineinstrs \27; RUN: | FileCheck -check-prefix=LP64-LP64F-LP64D-FPELIM %s28; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -verify-machineinstrs -frame-pointer=all \29; RUN: | FileCheck -check-prefix=LP64-LP64F-LP64D-WITHFP %s30; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -target-abi lp64e \31; RUN: -verify-machineinstrs \32; RUN: | FileCheck -check-prefix=LP64E-FPELIM %s33; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -target-abi lp64e -frame-pointer=all \34; RUN: -verify-machineinstrs \35; RUN: | FileCheck -check-prefix=LP64E-WITHFP %s36 37; The same vararg calling convention is used for ilp32/ilp32f/ilp32d and for38; lp64/lp64f/lp64d. Different CHECK lines are required for RV32D due to slight39; codegen differences due to the way the f64 load operations are lowered.40; The nounwind attribute is omitted for some of the tests, to check that CFI41; directives are correctly generated.42 43declare void @notdead(ptr)44 45; Although frontends are recommended to not generate va_arg due to the lack of46; support for aggregate types, we test simple cases here to ensure they are47; lowered correctly48 49define i32 @va1(ptr %fmt, ...) {50; ILP32-ILP32F-FPELIM-LABEL: va1:51; ILP32-ILP32F-FPELIM: # %bb.0:52; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -4853; ILP32-ILP32F-FPELIM-NEXT: .cfi_def_cfa_offset 4854; ILP32-ILP32F-FPELIM-NEXT: mv a0, a155; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)56; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)57; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)58; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)59; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)60; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)61; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)62; ILP32-ILP32F-FPELIM-NEXT: addi a1, sp, 2463; ILP32-ILP32F-FPELIM-NEXT: sw a1, 12(sp)64; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 4865; ILP32-ILP32F-FPELIM-NEXT: .cfi_def_cfa_offset 066; ILP32-ILP32F-FPELIM-NEXT: ret67;68; ILP32-ILP32F-WITHFP-LABEL: va1:69; ILP32-ILP32F-WITHFP: # %bb.0:70; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -4871; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa_offset 4872; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill73; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill74; ILP32-ILP32F-WITHFP-NEXT: .cfi_offset ra, -3675; ILP32-ILP32F-WITHFP-NEXT: .cfi_offset s0, -4076; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 1677; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa s0, 3278; ILP32-ILP32F-WITHFP-NEXT: mv a0, a179; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)80; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)81; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)82; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)83; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)84; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)85; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)86; ILP32-ILP32F-WITHFP-NEXT: addi a1, s0, 887; ILP32-ILP32F-WITHFP-NEXT: sw a1, -12(s0)88; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa sp, 4889; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload90; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload91; ILP32-ILP32F-WITHFP-NEXT: .cfi_restore ra92; ILP32-ILP32F-WITHFP-NEXT: .cfi_restore s093; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 4894; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa_offset 095; ILP32-ILP32F-WITHFP-NEXT: ret96;97; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va1:98; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:99; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -48100; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: .cfi_def_cfa_offset 48101; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv a0, a1102; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)103; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)104; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)105; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)106; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)107; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)108; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)109; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, sp, 24110; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 12(sp)111; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 48112; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: .cfi_def_cfa_offset 0113; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret114;115; ILP32E-FPELIM-LABEL: va1:116; ILP32E-FPELIM: # %bb.0:117; ILP32E-FPELIM-NEXT: addi sp, sp, -28118; ILP32E-FPELIM-NEXT: .cfi_def_cfa_offset 28119; ILP32E-FPELIM-NEXT: mv a0, a1120; ILP32E-FPELIM-NEXT: sw a5, 24(sp)121; ILP32E-FPELIM-NEXT: sw a1, 8(sp)122; ILP32E-FPELIM-NEXT: sw a2, 12(sp)123; ILP32E-FPELIM-NEXT: sw a3, 16(sp)124; ILP32E-FPELIM-NEXT: sw a4, 20(sp)125; ILP32E-FPELIM-NEXT: addi a1, sp, 12126; ILP32E-FPELIM-NEXT: sw a1, 0(sp)127; ILP32E-FPELIM-NEXT: addi sp, sp, 28128; ILP32E-FPELIM-NEXT: .cfi_def_cfa_offset 0129; ILP32E-FPELIM-NEXT: ret130;131; ILP32E-WITHFP-LABEL: va1:132; ILP32E-WITHFP: # %bb.0:133; ILP32E-WITHFP-NEXT: addi sp, sp, -36134; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 36135; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill136; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill137; ILP32E-WITHFP-NEXT: .cfi_offset ra, -28138; ILP32E-WITHFP-NEXT: .cfi_offset s0, -32139; ILP32E-WITHFP-NEXT: addi s0, sp, 12140; ILP32E-WITHFP-NEXT: .cfi_def_cfa s0, 24141; ILP32E-WITHFP-NEXT: mv a0, a1142; ILP32E-WITHFP-NEXT: sw a5, 20(s0)143; ILP32E-WITHFP-NEXT: sw a1, 4(s0)144; ILP32E-WITHFP-NEXT: sw a2, 8(s0)145; ILP32E-WITHFP-NEXT: sw a3, 12(s0)146; ILP32E-WITHFP-NEXT: sw a4, 16(s0)147; ILP32E-WITHFP-NEXT: addi a1, s0, 8148; ILP32E-WITHFP-NEXT: sw a1, -12(s0)149; ILP32E-WITHFP-NEXT: .cfi_def_cfa sp, 36150; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload151; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload152; ILP32E-WITHFP-NEXT: .cfi_restore ra153; ILP32E-WITHFP-NEXT: .cfi_restore s0154; ILP32E-WITHFP-NEXT: addi sp, sp, 36155; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 0156; ILP32E-WITHFP-NEXT: ret157;158; LP64-LP64F-LP64D-FPELIM-LABEL: va1:159; LP64-LP64F-LP64D-FPELIM: # %bb.0:160; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -80161; LP64-LP64F-LP64D-FPELIM-NEXT: .cfi_def_cfa_offset 80162; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 24(sp)163; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, sp, 28164; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, 8(sp)165; LP64-LP64F-LP64D-FPELIM-NEXT: lw a0, 24(sp)166; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 56(sp)167; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 64(sp)168; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 72(sp)169; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 32(sp)170; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 40(sp)171; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 48(sp)172; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 80173; LP64-LP64F-LP64D-FPELIM-NEXT: .cfi_def_cfa_offset 0174; LP64-LP64F-LP64D-FPELIM-NEXT: ret175;176; LP64-LP64F-LP64D-WITHFP-LABEL: va1:177; LP64-LP64F-LP64D-WITHFP: # %bb.0:178; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -96179; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa_offset 96180; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill181; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill182; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_offset ra, -72183; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_offset s0, -80184; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 32185; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa s0, 64186; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)187; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, s0, 12188; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, -24(s0)189; LP64-LP64F-LP64D-WITHFP-NEXT: lw a0, 8(s0)190; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)191; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)192; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)193; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)194; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)195; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)196; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa sp, 96197; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload198; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload199; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_restore ra200; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_restore s0201; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 96202; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa_offset 0203; LP64-LP64F-LP64D-WITHFP-NEXT: ret204;205; LP64E-FPELIM-LABEL: va1:206; LP64E-FPELIM: # %bb.0:207; LP64E-FPELIM-NEXT: addi sp, sp, -56208; LP64E-FPELIM-NEXT: .cfi_def_cfa_offset 56209; LP64E-FPELIM-NEXT: sd a1, 16(sp)210; LP64E-FPELIM-NEXT: addi a0, sp, 20211; LP64E-FPELIM-NEXT: sd a0, 0(sp)212; LP64E-FPELIM-NEXT: lw a0, 16(sp)213; LP64E-FPELIM-NEXT: sd a5, 48(sp)214; LP64E-FPELIM-NEXT: sd a2, 24(sp)215; LP64E-FPELIM-NEXT: sd a3, 32(sp)216; LP64E-FPELIM-NEXT: sd a4, 40(sp)217; LP64E-FPELIM-NEXT: addi sp, sp, 56218; LP64E-FPELIM-NEXT: .cfi_def_cfa_offset 0219; LP64E-FPELIM-NEXT: ret220;221; LP64E-WITHFP-LABEL: va1:222; LP64E-WITHFP: # %bb.0:223; LP64E-WITHFP-NEXT: addi sp, sp, -72224; LP64E-WITHFP-NEXT: .cfi_def_cfa_offset 72225; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill226; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill227; LP64E-WITHFP-NEXT: .cfi_offset ra, -56228; LP64E-WITHFP-NEXT: .cfi_offset s0, -64229; LP64E-WITHFP-NEXT: addi s0, sp, 24230; LP64E-WITHFP-NEXT: .cfi_def_cfa s0, 48231; LP64E-WITHFP-NEXT: sd a1, 8(s0)232; LP64E-WITHFP-NEXT: addi a0, s0, 12233; LP64E-WITHFP-NEXT: sd a0, -24(s0)234; LP64E-WITHFP-NEXT: lw a0, 8(s0)235; LP64E-WITHFP-NEXT: sd a5, 40(s0)236; LP64E-WITHFP-NEXT: sd a2, 16(s0)237; LP64E-WITHFP-NEXT: sd a3, 24(s0)238; LP64E-WITHFP-NEXT: sd a4, 32(s0)239; LP64E-WITHFP-NEXT: .cfi_def_cfa sp, 72240; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload241; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload242; LP64E-WITHFP-NEXT: .cfi_restore ra243; LP64E-WITHFP-NEXT: .cfi_restore s0244; LP64E-WITHFP-NEXT: addi sp, sp, 72245; LP64E-WITHFP-NEXT: .cfi_def_cfa_offset 0246; LP64E-WITHFP-NEXT: ret247 %va = alloca ptr248 call void @llvm.va_start(ptr %va)249 %argp.cur = load ptr, ptr %va, align 4250 %argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 4251 store ptr %argp.next, ptr %va, align 4252 %1 = load i32, ptr %argp.cur, align 4253 call void @llvm.va_end(ptr %va)254 ret i32 %1255}256 257define i32 @va1_va_arg(ptr %fmt, ...) nounwind {258; ILP32-ILP32F-FPELIM-LABEL: va1_va_arg:259; ILP32-ILP32F-FPELIM: # %bb.0:260; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -48261; ILP32-ILP32F-FPELIM-NEXT: mv a0, a1262; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)263; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)264; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)265; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)266; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)267; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)268; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)269; ILP32-ILP32F-FPELIM-NEXT: addi a1, sp, 24270; ILP32-ILP32F-FPELIM-NEXT: sw a1, 12(sp)271; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 48272; ILP32-ILP32F-FPELIM-NEXT: ret273;274; ILP32-ILP32F-WITHFP-LABEL: va1_va_arg:275; ILP32-ILP32F-WITHFP: # %bb.0:276; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -48277; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill278; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill279; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 16280; ILP32-ILP32F-WITHFP-NEXT: mv a0, a1281; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)282; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)283; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)284; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)285; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)286; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)287; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)288; ILP32-ILP32F-WITHFP-NEXT: addi a1, s0, 8289; ILP32-ILP32F-WITHFP-NEXT: sw a1, -12(s0)290; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload291; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload292; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 48293; ILP32-ILP32F-WITHFP-NEXT: ret294;295; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va1_va_arg:296; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:297; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -48298; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv a0, a1299; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)300; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)301; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)302; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)303; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)304; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)305; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)306; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, sp, 24307; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 12(sp)308; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 48309; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret310;311; ILP32E-FPELIM-LABEL: va1_va_arg:312; ILP32E-FPELIM: # %bb.0:313; ILP32E-FPELIM-NEXT: addi sp, sp, -28314; ILP32E-FPELIM-NEXT: mv a0, a1315; ILP32E-FPELIM-NEXT: sw a5, 24(sp)316; ILP32E-FPELIM-NEXT: sw a1, 8(sp)317; ILP32E-FPELIM-NEXT: sw a2, 12(sp)318; ILP32E-FPELIM-NEXT: sw a3, 16(sp)319; ILP32E-FPELIM-NEXT: sw a4, 20(sp)320; ILP32E-FPELIM-NEXT: addi a1, sp, 12321; ILP32E-FPELIM-NEXT: sw a1, 0(sp)322; ILP32E-FPELIM-NEXT: addi sp, sp, 28323; ILP32E-FPELIM-NEXT: ret324;325; ILP32E-WITHFP-LABEL: va1_va_arg:326; ILP32E-WITHFP: # %bb.0:327; ILP32E-WITHFP-NEXT: addi sp, sp, -36328; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill329; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill330; ILP32E-WITHFP-NEXT: addi s0, sp, 12331; ILP32E-WITHFP-NEXT: mv a0, a1332; ILP32E-WITHFP-NEXT: sw a5, 20(s0)333; ILP32E-WITHFP-NEXT: sw a1, 4(s0)334; ILP32E-WITHFP-NEXT: sw a2, 8(s0)335; ILP32E-WITHFP-NEXT: sw a3, 12(s0)336; ILP32E-WITHFP-NEXT: sw a4, 16(s0)337; ILP32E-WITHFP-NEXT: addi a1, s0, 8338; ILP32E-WITHFP-NEXT: sw a1, -12(s0)339; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload340; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload341; ILP32E-WITHFP-NEXT: addi sp, sp, 36342; ILP32E-WITHFP-NEXT: ret343;344; LP64-LP64F-LP64D-FPELIM-LABEL: va1_va_arg:345; LP64-LP64F-LP64D-FPELIM: # %bb.0:346; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -80347; LP64-LP64F-LP64D-FPELIM-NEXT: mv a0, a1348; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 56(sp)349; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 64(sp)350; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 72(sp)351; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 24(sp)352; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 32(sp)353; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 40(sp)354; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 48(sp)355; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, sp, 32356; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)357; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 80358; LP64-LP64F-LP64D-FPELIM-NEXT: ret359;360; LP64-LP64F-LP64D-WITHFP-LABEL: va1_va_arg:361; LP64-LP64F-LP64D-WITHFP: # %bb.0:362; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -96363; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill364; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill365; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 32366; LP64-LP64F-LP64D-WITHFP-NEXT: mv a0, a1367; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)368; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)369; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)370; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)371; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)372; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)373; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)374; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, s0, 16375; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -24(s0)376; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload377; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload378; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 96379; LP64-LP64F-LP64D-WITHFP-NEXT: ret380;381; LP64E-FPELIM-LABEL: va1_va_arg:382; LP64E-FPELIM: # %bb.0:383; LP64E-FPELIM-NEXT: addi sp, sp, -56384; LP64E-FPELIM-NEXT: mv a0, a1385; LP64E-FPELIM-NEXT: sd a5, 48(sp)386; LP64E-FPELIM-NEXT: sd a1, 16(sp)387; LP64E-FPELIM-NEXT: sd a2, 24(sp)388; LP64E-FPELIM-NEXT: sd a3, 32(sp)389; LP64E-FPELIM-NEXT: sd a4, 40(sp)390; LP64E-FPELIM-NEXT: addi a1, sp, 24391; LP64E-FPELIM-NEXT: sd a1, 0(sp)392; LP64E-FPELIM-NEXT: addi sp, sp, 56393; LP64E-FPELIM-NEXT: ret394;395; LP64E-WITHFP-LABEL: va1_va_arg:396; LP64E-WITHFP: # %bb.0:397; LP64E-WITHFP-NEXT: addi sp, sp, -72398; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill399; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill400; LP64E-WITHFP-NEXT: addi s0, sp, 24401; LP64E-WITHFP-NEXT: mv a0, a1402; LP64E-WITHFP-NEXT: sd a5, 40(s0)403; LP64E-WITHFP-NEXT: sd a1, 8(s0)404; LP64E-WITHFP-NEXT: sd a2, 16(s0)405; LP64E-WITHFP-NEXT: sd a3, 24(s0)406; LP64E-WITHFP-NEXT: sd a4, 32(s0)407; LP64E-WITHFP-NEXT: addi a1, s0, 16408; LP64E-WITHFP-NEXT: sd a1, -24(s0)409; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload410; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload411; LP64E-WITHFP-NEXT: addi sp, sp, 72412; LP64E-WITHFP-NEXT: ret413 %va = alloca ptr414 call void @llvm.va_start(ptr %va)415 %1 = va_arg ptr %va, i32416 call void @llvm.va_end(ptr %va)417 ret i32 %1418}419 420; Ensure the adjustment when restoring the stack pointer using the frame421; pointer is correct422define i32 @va1_va_arg_alloca(ptr %fmt, ...) nounwind {423; ILP32-ILP32F-FPELIM-LABEL: va1_va_arg_alloca:424; ILP32-ILP32F-FPELIM: # %bb.0:425; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -48426; ILP32-ILP32F-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill427; ILP32-ILP32F-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill428; ILP32-ILP32F-FPELIM-NEXT: sw s1, 4(sp) # 4-byte Folded Spill429; ILP32-ILP32F-FPELIM-NEXT: addi s0, sp, 16430; ILP32-ILP32F-FPELIM-NEXT: mv s1, a1431; ILP32-ILP32F-FPELIM-NEXT: sw a5, 20(s0)432; ILP32-ILP32F-FPELIM-NEXT: sw a6, 24(s0)433; ILP32-ILP32F-FPELIM-NEXT: sw a7, 28(s0)434; ILP32-ILP32F-FPELIM-NEXT: sw a1, 4(s0)435; ILP32-ILP32F-FPELIM-NEXT: sw a2, 8(s0)436; ILP32-ILP32F-FPELIM-NEXT: sw a3, 12(s0)437; ILP32-ILP32F-FPELIM-NEXT: sw a4, 16(s0)438; ILP32-ILP32F-FPELIM-NEXT: addi a0, s0, 8439; ILP32-ILP32F-FPELIM-NEXT: sw a0, -16(s0)440; ILP32-ILP32F-FPELIM-NEXT: addi a0, a1, 15441; ILP32-ILP32F-FPELIM-NEXT: andi a0, a0, -16442; ILP32-ILP32F-FPELIM-NEXT: sub a0, sp, a0443; ILP32-ILP32F-FPELIM-NEXT: mv sp, a0444; ILP32-ILP32F-FPELIM-NEXT: call notdead445; ILP32-ILP32F-FPELIM-NEXT: mv a0, s1446; ILP32-ILP32F-FPELIM-NEXT: addi sp, s0, -16447; ILP32-ILP32F-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload448; ILP32-ILP32F-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload449; ILP32-ILP32F-FPELIM-NEXT: lw s1, 4(sp) # 4-byte Folded Reload450; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 48451; ILP32-ILP32F-FPELIM-NEXT: ret452;453; ILP32-ILP32F-WITHFP-LABEL: va1_va_arg_alloca:454; ILP32-ILP32F-WITHFP: # %bb.0:455; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -48456; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill457; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill458; ILP32-ILP32F-WITHFP-NEXT: sw s1, 4(sp) # 4-byte Folded Spill459; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 16460; ILP32-ILP32F-WITHFP-NEXT: mv s1, a1461; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)462; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)463; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)464; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)465; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)466; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)467; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)468; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 8469; ILP32-ILP32F-WITHFP-NEXT: sw a0, -16(s0)470; ILP32-ILP32F-WITHFP-NEXT: addi a0, a1, 15471; ILP32-ILP32F-WITHFP-NEXT: andi a0, a0, -16472; ILP32-ILP32F-WITHFP-NEXT: sub a0, sp, a0473; ILP32-ILP32F-WITHFP-NEXT: mv sp, a0474; ILP32-ILP32F-WITHFP-NEXT: call notdead475; ILP32-ILP32F-WITHFP-NEXT: mv a0, s1476; ILP32-ILP32F-WITHFP-NEXT: addi sp, s0, -16477; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload478; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload479; ILP32-ILP32F-WITHFP-NEXT: lw s1, 4(sp) # 4-byte Folded Reload480; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 48481; ILP32-ILP32F-WITHFP-NEXT: ret482;483; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va1_va_arg_alloca:484; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:485; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -48486; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill487; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill488; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw s1, 4(sp) # 4-byte Folded Spill489; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi s0, sp, 16490; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv s1, a1491; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 20(s0)492; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 24(s0)493; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 28(s0)494; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 4(s0)495; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 8(s0)496; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 12(s0)497; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 16(s0)498; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, s0, 8499; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, -16(s0)500; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, a1, 15501; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a0, a0, -16502; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sub a0, sp, a0503; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv sp, a0504; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call notdead505; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv a0, s1506; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, s0, -16507; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload508; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload509; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw s1, 4(sp) # 4-byte Folded Reload510; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 48511; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret512;513; ILP32E-FPELIM-LABEL: va1_va_arg_alloca:514; ILP32E-FPELIM: # %bb.0:515; ILP32E-FPELIM-NEXT: addi sp, sp, -40516; ILP32E-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill517; ILP32E-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill518; ILP32E-FPELIM-NEXT: sw s1, 4(sp) # 4-byte Folded Spill519; ILP32E-FPELIM-NEXT: addi s0, sp, 16520; ILP32E-FPELIM-NEXT: mv s1, a1521; ILP32E-FPELIM-NEXT: sw a5, 20(s0)522; ILP32E-FPELIM-NEXT: sw a1, 4(s0)523; ILP32E-FPELIM-NEXT: sw a2, 8(s0)524; ILP32E-FPELIM-NEXT: sw a3, 12(s0)525; ILP32E-FPELIM-NEXT: sw a4, 16(s0)526; ILP32E-FPELIM-NEXT: addi a0, s0, 8527; ILP32E-FPELIM-NEXT: sw a0, -16(s0)528; ILP32E-FPELIM-NEXT: addi a0, a1, 3529; ILP32E-FPELIM-NEXT: andi a0, a0, -4530; ILP32E-FPELIM-NEXT: sub a0, sp, a0531; ILP32E-FPELIM-NEXT: mv sp, a0532; ILP32E-FPELIM-NEXT: call notdead533; ILP32E-FPELIM-NEXT: mv a0, s1534; ILP32E-FPELIM-NEXT: addi sp, s0, -16535; ILP32E-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload536; ILP32E-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload537; ILP32E-FPELIM-NEXT: lw s1, 4(sp) # 4-byte Folded Reload538; ILP32E-FPELIM-NEXT: addi sp, sp, 40539; ILP32E-FPELIM-NEXT: ret540;541; ILP32E-WITHFP-LABEL: va1_va_arg_alloca:542; ILP32E-WITHFP: # %bb.0:543; ILP32E-WITHFP-NEXT: addi sp, sp, -40544; ILP32E-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill545; ILP32E-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill546; ILP32E-WITHFP-NEXT: sw s1, 4(sp) # 4-byte Folded Spill547; ILP32E-WITHFP-NEXT: addi s0, sp, 16548; ILP32E-WITHFP-NEXT: mv s1, a1549; ILP32E-WITHFP-NEXT: sw a5, 20(s0)550; ILP32E-WITHFP-NEXT: sw a1, 4(s0)551; ILP32E-WITHFP-NEXT: sw a2, 8(s0)552; ILP32E-WITHFP-NEXT: sw a3, 12(s0)553; ILP32E-WITHFP-NEXT: sw a4, 16(s0)554; ILP32E-WITHFP-NEXT: addi a0, s0, 8555; ILP32E-WITHFP-NEXT: sw a0, -16(s0)556; ILP32E-WITHFP-NEXT: addi a0, a1, 3557; ILP32E-WITHFP-NEXT: andi a0, a0, -4558; ILP32E-WITHFP-NEXT: sub a0, sp, a0559; ILP32E-WITHFP-NEXT: mv sp, a0560; ILP32E-WITHFP-NEXT: call notdead561; ILP32E-WITHFP-NEXT: mv a0, s1562; ILP32E-WITHFP-NEXT: addi sp, s0, -16563; ILP32E-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload564; ILP32E-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload565; ILP32E-WITHFP-NEXT: lw s1, 4(sp) # 4-byte Folded Reload566; ILP32E-WITHFP-NEXT: addi sp, sp, 40567; ILP32E-WITHFP-NEXT: ret568;569; LP64-LP64F-LP64D-FPELIM-LABEL: va1_va_arg_alloca:570; LP64-LP64F-LP64D-FPELIM: # %bb.0:571; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -96572; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill573; LP64-LP64F-LP64D-FPELIM-NEXT: sd s0, 16(sp) # 8-byte Folded Spill574; LP64-LP64F-LP64D-FPELIM-NEXT: sd s1, 8(sp) # 8-byte Folded Spill575; LP64-LP64F-LP64D-FPELIM-NEXT: addi s0, sp, 32576; LP64-LP64F-LP64D-FPELIM-NEXT: mv s1, a1577; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 40(s0)578; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 48(s0)579; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 56(s0)580; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(s0)581; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 16(s0)582; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 24(s0)583; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 32(s0)584; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, s0, 16585; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, -32(s0)586; LP64-LP64F-LP64D-FPELIM-NEXT: slli a0, a1, 32587; LP64-LP64F-LP64D-FPELIM-NEXT: srli a0, a0, 32588; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, a0, 15589; LP64-LP64F-LP64D-FPELIM-NEXT: andi a0, a0, -16590; LP64-LP64F-LP64D-FPELIM-NEXT: sub a0, sp, a0591; LP64-LP64F-LP64D-FPELIM-NEXT: mv sp, a0592; LP64-LP64F-LP64D-FPELIM-NEXT: call notdead593; LP64-LP64F-LP64D-FPELIM-NEXT: mv a0, s1594; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, s0, -32595; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload596; LP64-LP64F-LP64D-FPELIM-NEXT: ld s0, 16(sp) # 8-byte Folded Reload597; LP64-LP64F-LP64D-FPELIM-NEXT: ld s1, 8(sp) # 8-byte Folded Reload598; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 96599; LP64-LP64F-LP64D-FPELIM-NEXT: ret600;601; LP64-LP64F-LP64D-WITHFP-LABEL: va1_va_arg_alloca:602; LP64-LP64F-LP64D-WITHFP: # %bb.0:603; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -96604; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill605; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill606; LP64-LP64F-LP64D-WITHFP-NEXT: sd s1, 8(sp) # 8-byte Folded Spill607; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 32608; LP64-LP64F-LP64D-WITHFP-NEXT: mv s1, a1609; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)610; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)611; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)612; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)613; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)614; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)615; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)616; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, s0, 16617; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, -32(s0)618; LP64-LP64F-LP64D-WITHFP-NEXT: slli a0, a1, 32619; LP64-LP64F-LP64D-WITHFP-NEXT: srli a0, a0, 32620; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, a0, 15621; LP64-LP64F-LP64D-WITHFP-NEXT: andi a0, a0, -16622; LP64-LP64F-LP64D-WITHFP-NEXT: sub a0, sp, a0623; LP64-LP64F-LP64D-WITHFP-NEXT: mv sp, a0624; LP64-LP64F-LP64D-WITHFP-NEXT: call notdead625; LP64-LP64F-LP64D-WITHFP-NEXT: mv a0, s1626; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, s0, -32627; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload628; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload629; LP64-LP64F-LP64D-WITHFP-NEXT: ld s1, 8(sp) # 8-byte Folded Reload630; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 96631; LP64-LP64F-LP64D-WITHFP-NEXT: ret632;633; LP64E-FPELIM-LABEL: va1_va_arg_alloca:634; LP64E-FPELIM: # %bb.0:635; LP64E-FPELIM-NEXT: addi sp, sp, -80636; LP64E-FPELIM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill637; LP64E-FPELIM-NEXT: sd s0, 16(sp) # 8-byte Folded Spill638; LP64E-FPELIM-NEXT: sd s1, 8(sp) # 8-byte Folded Spill639; LP64E-FPELIM-NEXT: addi s0, sp, 32640; LP64E-FPELIM-NEXT: mv s1, a1641; LP64E-FPELIM-NEXT: sd a5, 40(s0)642; LP64E-FPELIM-NEXT: sd a1, 8(s0)643; LP64E-FPELIM-NEXT: sd a2, 16(s0)644; LP64E-FPELIM-NEXT: sd a3, 24(s0)645; LP64E-FPELIM-NEXT: sd a4, 32(s0)646; LP64E-FPELIM-NEXT: addi a0, s0, 16647; LP64E-FPELIM-NEXT: sd a0, -32(s0)648; LP64E-FPELIM-NEXT: slli a0, a1, 32649; LP64E-FPELIM-NEXT: srli a0, a0, 32650; LP64E-FPELIM-NEXT: addi a0, a0, 7651; LP64E-FPELIM-NEXT: andi a0, a0, -8652; LP64E-FPELIM-NEXT: sub a0, sp, a0653; LP64E-FPELIM-NEXT: mv sp, a0654; LP64E-FPELIM-NEXT: call notdead655; LP64E-FPELIM-NEXT: mv a0, s1656; LP64E-FPELIM-NEXT: addi sp, s0, -32657; LP64E-FPELIM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload658; LP64E-FPELIM-NEXT: ld s0, 16(sp) # 8-byte Folded Reload659; LP64E-FPELIM-NEXT: ld s1, 8(sp) # 8-byte Folded Reload660; LP64E-FPELIM-NEXT: addi sp, sp, 80661; LP64E-FPELIM-NEXT: ret662;663; LP64E-WITHFP-LABEL: va1_va_arg_alloca:664; LP64E-WITHFP: # %bb.0:665; LP64E-WITHFP-NEXT: addi sp, sp, -80666; LP64E-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill667; LP64E-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill668; LP64E-WITHFP-NEXT: sd s1, 8(sp) # 8-byte Folded Spill669; LP64E-WITHFP-NEXT: addi s0, sp, 32670; LP64E-WITHFP-NEXT: mv s1, a1671; LP64E-WITHFP-NEXT: sd a5, 40(s0)672; LP64E-WITHFP-NEXT: sd a1, 8(s0)673; LP64E-WITHFP-NEXT: sd a2, 16(s0)674; LP64E-WITHFP-NEXT: sd a3, 24(s0)675; LP64E-WITHFP-NEXT: sd a4, 32(s0)676; LP64E-WITHFP-NEXT: addi a0, s0, 16677; LP64E-WITHFP-NEXT: sd a0, -32(s0)678; LP64E-WITHFP-NEXT: slli a0, a1, 32679; LP64E-WITHFP-NEXT: srli a0, a0, 32680; LP64E-WITHFP-NEXT: addi a0, a0, 7681; LP64E-WITHFP-NEXT: andi a0, a0, -8682; LP64E-WITHFP-NEXT: sub a0, sp, a0683; LP64E-WITHFP-NEXT: mv sp, a0684; LP64E-WITHFP-NEXT: call notdead685; LP64E-WITHFP-NEXT: mv a0, s1686; LP64E-WITHFP-NEXT: addi sp, s0, -32687; LP64E-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload688; LP64E-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload689; LP64E-WITHFP-NEXT: ld s1, 8(sp) # 8-byte Folded Reload690; LP64E-WITHFP-NEXT: addi sp, sp, 80691; LP64E-WITHFP-NEXT: ret692 %va = alloca ptr693 call void @llvm.va_start(ptr %va)694 %1 = va_arg ptr %va, i32695 %2 = alloca i8, i32 %1696 call void @notdead(ptr %2)697 call void @llvm.va_end(ptr %va)698 ret i32 %1699}700 701define void @va1_caller() nounwind {702; Pass a double, as a float would be promoted by a C/C++ frontend703; ILP32-ILP32F-FPELIM-LABEL: va1_caller:704; ILP32-ILP32F-FPELIM: # %bb.0:705; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -16706; ILP32-ILP32F-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill707; ILP32-ILP32F-FPELIM-NEXT: lui a3, 261888708; ILP32-ILP32F-FPELIM-NEXT: li a4, 2709; ILP32-ILP32F-FPELIM-NEXT: li a2, 0710; ILP32-ILP32F-FPELIM-NEXT: call va1711; ILP32-ILP32F-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload712; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 16713; ILP32-ILP32F-FPELIM-NEXT: ret714;715; ILP32-ILP32F-WITHFP-LABEL: va1_caller:716; ILP32-ILP32F-WITHFP: # %bb.0:717; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -16718; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill719; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill720; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 16721; ILP32-ILP32F-WITHFP-NEXT: lui a3, 261888722; ILP32-ILP32F-WITHFP-NEXT: li a4, 2723; ILP32-ILP32F-WITHFP-NEXT: li a2, 0724; ILP32-ILP32F-WITHFP-NEXT: call va1725; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload726; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload727; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 16728; ILP32-ILP32F-WITHFP-NEXT: ret729;730; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va1_caller:731; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:732; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -16733; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill734; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a3, 261888735; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a4, 2736; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a2, 0737; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call va1738; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload739; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 16740; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret741;742; ILP32E-FPELIM-LABEL: va1_caller:743; ILP32E-FPELIM: # %bb.0:744; ILP32E-FPELIM-NEXT: addi sp, sp, -4745; ILP32E-FPELIM-NEXT: sw ra, 0(sp) # 4-byte Folded Spill746; ILP32E-FPELIM-NEXT: lui a2, 261888747; ILP32E-FPELIM-NEXT: li a3, 2748; ILP32E-FPELIM-NEXT: li a1, 0749; ILP32E-FPELIM-NEXT: call va1750; ILP32E-FPELIM-NEXT: lw ra, 0(sp) # 4-byte Folded Reload751; ILP32E-FPELIM-NEXT: addi sp, sp, 4752; ILP32E-FPELIM-NEXT: ret753;754; ILP32E-WITHFP-LABEL: va1_caller:755; ILP32E-WITHFP: # %bb.0:756; ILP32E-WITHFP-NEXT: addi sp, sp, -8757; ILP32E-WITHFP-NEXT: sw ra, 4(sp) # 4-byte Folded Spill758; ILP32E-WITHFP-NEXT: sw s0, 0(sp) # 4-byte Folded Spill759; ILP32E-WITHFP-NEXT: addi s0, sp, 8760; ILP32E-WITHFP-NEXT: lui a2, 261888761; ILP32E-WITHFP-NEXT: li a3, 2762; ILP32E-WITHFP-NEXT: li a1, 0763; ILP32E-WITHFP-NEXT: call va1764; ILP32E-WITHFP-NEXT: lw ra, 4(sp) # 4-byte Folded Reload765; ILP32E-WITHFP-NEXT: lw s0, 0(sp) # 4-byte Folded Reload766; ILP32E-WITHFP-NEXT: addi sp, sp, 8767; ILP32E-WITHFP-NEXT: ret768;769; LP64-LP64F-LP64D-FPELIM-LABEL: va1_caller:770; LP64-LP64F-LP64D-FPELIM: # %bb.0:771; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -16772; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 8(sp) # 8-byte Folded Spill773; LP64-LP64F-LP64D-FPELIM-NEXT: li a1, 1023774; LP64-LP64F-LP64D-FPELIM-NEXT: slli a1, a1, 52775; LP64-LP64F-LP64D-FPELIM-NEXT: li a2, 2776; LP64-LP64F-LP64D-FPELIM-NEXT: call va1777; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 8(sp) # 8-byte Folded Reload778; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 16779; LP64-LP64F-LP64D-FPELIM-NEXT: ret780;781; LP64-LP64F-LP64D-WITHFP-LABEL: va1_caller:782; LP64-LP64F-LP64D-WITHFP: # %bb.0:783; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -16784; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill785; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill786; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 16787; LP64-LP64F-LP64D-WITHFP-NEXT: li a1, 1023788; LP64-LP64F-LP64D-WITHFP-NEXT: slli a1, a1, 52789; LP64-LP64F-LP64D-WITHFP-NEXT: li a2, 2790; LP64-LP64F-LP64D-WITHFP-NEXT: call va1791; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload792; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload793; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 16794; LP64-LP64F-LP64D-WITHFP-NEXT: ret795;796; LP64E-FPELIM-LABEL: va1_caller:797; LP64E-FPELIM: # %bb.0:798; LP64E-FPELIM-NEXT: addi sp, sp, -8799; LP64E-FPELIM-NEXT: sd ra, 0(sp) # 8-byte Folded Spill800; LP64E-FPELIM-NEXT: li a1, 1023801; LP64E-FPELIM-NEXT: slli a1, a1, 52802; LP64E-FPELIM-NEXT: li a2, 2803; LP64E-FPELIM-NEXT: call va1804; LP64E-FPELIM-NEXT: ld ra, 0(sp) # 8-byte Folded Reload805; LP64E-FPELIM-NEXT: addi sp, sp, 8806; LP64E-FPELIM-NEXT: ret807;808; LP64E-WITHFP-LABEL: va1_caller:809; LP64E-WITHFP: # %bb.0:810; LP64E-WITHFP-NEXT: addi sp, sp, -16811; LP64E-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill812; LP64E-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill813; LP64E-WITHFP-NEXT: addi s0, sp, 16814; LP64E-WITHFP-NEXT: li a1, 1023815; LP64E-WITHFP-NEXT: slli a1, a1, 52816; LP64E-WITHFP-NEXT: li a2, 2817; LP64E-WITHFP-NEXT: call va1818; LP64E-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload819; LP64E-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload820; LP64E-WITHFP-NEXT: addi sp, sp, 16821; LP64E-WITHFP-NEXT: ret822 %1 = call i32 (ptr, ...) @va1(ptr poison, double 1.0, i32 2)823 ret void824}825 826; Ensure that 2x xlen size+alignment varargs are accessed via an "aligned"827; register pair (where the first register is even-numbered).828 829define i64 @va2(ptr %fmt, ...) nounwind {830; ILP32-ILP32F-FPELIM-LABEL: va2:831; ILP32-ILP32F-FPELIM: # %bb.0:832; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -48833; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)834; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)835; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)836; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)837; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)838; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)839; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)840; ILP32-ILP32F-FPELIM-NEXT: addi a0, sp, 20841; ILP32-ILP32F-FPELIM-NEXT: addi a1, sp, 27842; ILP32-ILP32F-FPELIM-NEXT: addi a2, sp, 35843; ILP32-ILP32F-FPELIM-NEXT: sw a0, 12(sp)844; ILP32-ILP32F-FPELIM-NEXT: andi a1, a1, -8845; ILP32-ILP32F-FPELIM-NEXT: sw a2, 12(sp)846; ILP32-ILP32F-FPELIM-NEXT: lw a0, 0(a1)847; ILP32-ILP32F-FPELIM-NEXT: lw a1, 4(a1)848; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 48849; ILP32-ILP32F-FPELIM-NEXT: ret850;851; ILP32-ILP32F-WITHFP-LABEL: va2:852; ILP32-ILP32F-WITHFP: # %bb.0:853; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -48854; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill855; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill856; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 16857; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)858; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)859; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)860; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)861; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)862; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)863; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)864; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 4865; ILP32-ILP32F-WITHFP-NEXT: addi a1, s0, 11866; ILP32-ILP32F-WITHFP-NEXT: addi a2, s0, 19867; ILP32-ILP32F-WITHFP-NEXT: sw a0, -12(s0)868; ILP32-ILP32F-WITHFP-NEXT: andi a1, a1, -8869; ILP32-ILP32F-WITHFP-NEXT: sw a2, -12(s0)870; ILP32-ILP32F-WITHFP-NEXT: lw a0, 0(a1)871; ILP32-ILP32F-WITHFP-NEXT: lw a1, 4(a1)872; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload873; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload874; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 48875; ILP32-ILP32F-WITHFP-NEXT: ret876;877; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va2:878; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:879; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -48880; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)881; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)882; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)883; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)884; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)885; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)886; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)887; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, sp, 20888; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, sp, 27889; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a2, sp, 35890; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, 12(sp)891; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a1, a1, -8892; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 12(sp)893; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 0(a1)894; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a1, 4(a1)895; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 48896; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret897;898; ILP32E-FPELIM-LABEL: va2:899; ILP32E-FPELIM: # %bb.0:900; ILP32E-FPELIM-NEXT: addi sp, sp, -28901; ILP32E-FPELIM-NEXT: sw a5, 24(sp)902; ILP32E-FPELIM-NEXT: sw a1, 8(sp)903; ILP32E-FPELIM-NEXT: sw a2, 12(sp)904; ILP32E-FPELIM-NEXT: sw a3, 16(sp)905; ILP32E-FPELIM-NEXT: sw a4, 20(sp)906; ILP32E-FPELIM-NEXT: addi a0, sp, 8907; ILP32E-FPELIM-NEXT: addi a1, sp, 15908; ILP32E-FPELIM-NEXT: addi a2, sp, 23909; ILP32E-FPELIM-NEXT: sw a0, 0(sp)910; ILP32E-FPELIM-NEXT: andi a1, a1, -8911; ILP32E-FPELIM-NEXT: sw a2, 0(sp)912; ILP32E-FPELIM-NEXT: lw a0, 0(a1)913; ILP32E-FPELIM-NEXT: lw a1, 4(a1)914; ILP32E-FPELIM-NEXT: addi sp, sp, 28915; ILP32E-FPELIM-NEXT: ret916;917; ILP32E-WITHFP-LABEL: va2:918; ILP32E-WITHFP: # %bb.0:919; ILP32E-WITHFP-NEXT: addi sp, sp, -36920; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill921; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill922; ILP32E-WITHFP-NEXT: addi s0, sp, 12923; ILP32E-WITHFP-NEXT: sw a5, 20(s0)924; ILP32E-WITHFP-NEXT: sw a1, 4(s0)925; ILP32E-WITHFP-NEXT: sw a2, 8(s0)926; ILP32E-WITHFP-NEXT: sw a3, 12(s0)927; ILP32E-WITHFP-NEXT: sw a4, 16(s0)928; ILP32E-WITHFP-NEXT: addi a0, s0, 4929; ILP32E-WITHFP-NEXT: addi a1, s0, 11930; ILP32E-WITHFP-NEXT: addi a2, s0, 19931; ILP32E-WITHFP-NEXT: sw a0, -12(s0)932; ILP32E-WITHFP-NEXT: andi a1, a1, -8933; ILP32E-WITHFP-NEXT: sw a2, -12(s0)934; ILP32E-WITHFP-NEXT: lw a0, 0(a1)935; ILP32E-WITHFP-NEXT: lw a1, 4(a1)936; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload937; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload938; ILP32E-WITHFP-NEXT: addi sp, sp, 36939; ILP32E-WITHFP-NEXT: ret940;941; LP64-LP64F-LP64D-FPELIM-LABEL: va2:942; LP64-LP64F-LP64D-FPELIM: # %bb.0:943; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -80944; LP64-LP64F-LP64D-FPELIM-NEXT: mv a0, a1945; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 56(sp)946; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 64(sp)947; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 72(sp)948; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 24(sp)949; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 32(sp)950; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 40(sp)951; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 48(sp)952; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, sp, 39953; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)954; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 80955; LP64-LP64F-LP64D-FPELIM-NEXT: ret956;957; LP64-LP64F-LP64D-WITHFP-LABEL: va2:958; LP64-LP64F-LP64D-WITHFP: # %bb.0:959; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -96960; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill961; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill962; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 32963; LP64-LP64F-LP64D-WITHFP-NEXT: mv a0, a1964; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)965; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)966; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)967; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)968; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)969; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)970; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)971; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, s0, 23972; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -24(s0)973; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload974; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload975; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 96976; LP64-LP64F-LP64D-WITHFP-NEXT: ret977;978; LP64E-FPELIM-LABEL: va2:979; LP64E-FPELIM: # %bb.0:980; LP64E-FPELIM-NEXT: addi sp, sp, -56981; LP64E-FPELIM-NEXT: mv a0, a1982; LP64E-FPELIM-NEXT: sd a5, 48(sp)983; LP64E-FPELIM-NEXT: sd a1, 16(sp)984; LP64E-FPELIM-NEXT: sd a2, 24(sp)985; LP64E-FPELIM-NEXT: sd a3, 32(sp)986; LP64E-FPELIM-NEXT: sd a4, 40(sp)987; LP64E-FPELIM-NEXT: addi a1, sp, 31988; LP64E-FPELIM-NEXT: sd a1, 0(sp)989; LP64E-FPELIM-NEXT: addi sp, sp, 56990; LP64E-FPELIM-NEXT: ret991;992; LP64E-WITHFP-LABEL: va2:993; LP64E-WITHFP: # %bb.0:994; LP64E-WITHFP-NEXT: addi sp, sp, -72995; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill996; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill997; LP64E-WITHFP-NEXT: addi s0, sp, 24998; LP64E-WITHFP-NEXT: mv a0, a1999; LP64E-WITHFP-NEXT: sd a5, 40(s0)1000; LP64E-WITHFP-NEXT: sd a1, 8(s0)1001; LP64E-WITHFP-NEXT: sd a2, 16(s0)1002; LP64E-WITHFP-NEXT: sd a3, 24(s0)1003; LP64E-WITHFP-NEXT: sd a4, 32(s0)1004; LP64E-WITHFP-NEXT: addi a1, s0, 231005; LP64E-WITHFP-NEXT: sd a1, -24(s0)1006; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload1007; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload1008; LP64E-WITHFP-NEXT: addi sp, sp, 721009; LP64E-WITHFP-NEXT: ret1010 %va = alloca ptr1011 call void @llvm.va_start(ptr %va)1012 %argp.cur = load ptr, ptr %va1013 %ptrint = ptrtoint ptr %argp.cur to iXLen1014 %1 = add iXLen %ptrint, 71015 %2 = and iXLen %1, -81016 %argp.cur.aligned = inttoptr iXLen %1 to ptr1017 %argp.next = getelementptr inbounds i8, ptr %argp.cur.aligned, i32 81018 store ptr %argp.next, ptr %va1019 %3 = inttoptr iXLen %2 to ptr1020 %4 = load double, ptr %3, align 81021 %5 = bitcast double %4 to i641022 call void @llvm.va_end(ptr %va)1023 ret i64 %51024}1025 1026define i64 @va2_va_arg(ptr %fmt, ...) nounwind {1027; ILP32-ILP32F-FPELIM-LABEL: va2_va_arg:1028; ILP32-ILP32F-FPELIM: # %bb.0:1029; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -481030; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)1031; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)1032; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)1033; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)1034; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)1035; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)1036; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)1037; ILP32-ILP32F-FPELIM-NEXT: addi a0, sp, 271038; ILP32-ILP32F-FPELIM-NEXT: andi a1, a0, -81039; ILP32-ILP32F-FPELIM-NEXT: addi a0, a1, 41040; ILP32-ILP32F-FPELIM-NEXT: addi a2, a1, 81041; ILP32-ILP32F-FPELIM-NEXT: sw a0, 12(sp)1042; ILP32-ILP32F-FPELIM-NEXT: lw a0, 0(a1)1043; ILP32-ILP32F-FPELIM-NEXT: sw a2, 12(sp)1044; ILP32-ILP32F-FPELIM-NEXT: lw a1, 4(a1)1045; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 481046; ILP32-ILP32F-FPELIM-NEXT: ret1047;1048; ILP32-ILP32F-WITHFP-LABEL: va2_va_arg:1049; ILP32-ILP32F-WITHFP: # %bb.0:1050; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -481051; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1052; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1053; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 161054; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)1055; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)1056; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)1057; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)1058; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)1059; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)1060; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)1061; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 111062; ILP32-ILP32F-WITHFP-NEXT: andi a1, a0, -81063; ILP32-ILP32F-WITHFP-NEXT: addi a0, a1, 41064; ILP32-ILP32F-WITHFP-NEXT: addi a2, a1, 81065; ILP32-ILP32F-WITHFP-NEXT: sw a0, -12(s0)1066; ILP32-ILP32F-WITHFP-NEXT: lw a0, 0(a1)1067; ILP32-ILP32F-WITHFP-NEXT: sw a2, -12(s0)1068; ILP32-ILP32F-WITHFP-NEXT: lw a1, 4(a1)1069; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1070; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1071; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 481072; ILP32-ILP32F-WITHFP-NEXT: ret1073;1074; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va2_va_arg:1075; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1076; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -481077; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)1078; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)1079; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)1080; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)1081; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)1082; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)1083; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)1084; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, sp, 271085; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a0, a0, -81086; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, a0, 81087; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 12(sp)1088; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: fld fa5, 0(a0)1089; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: fsd fa5, 0(sp)1090; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 0(sp)1091; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a1, 4(sp)1092; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 481093; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1094;1095; ILP32E-FPELIM-LABEL: va2_va_arg:1096; ILP32E-FPELIM: # %bb.0:1097; ILP32E-FPELIM-NEXT: addi sp, sp, -281098; ILP32E-FPELIM-NEXT: sw a5, 24(sp)1099; ILP32E-FPELIM-NEXT: sw a1, 8(sp)1100; ILP32E-FPELIM-NEXT: sw a2, 12(sp)1101; ILP32E-FPELIM-NEXT: sw a3, 16(sp)1102; ILP32E-FPELIM-NEXT: sw a4, 20(sp)1103; ILP32E-FPELIM-NEXT: addi a0, sp, 151104; ILP32E-FPELIM-NEXT: andi a1, a0, -81105; ILP32E-FPELIM-NEXT: addi a0, a1, 41106; ILP32E-FPELIM-NEXT: addi a2, a1, 81107; ILP32E-FPELIM-NEXT: sw a0, 0(sp)1108; ILP32E-FPELIM-NEXT: lw a0, 0(a1)1109; ILP32E-FPELIM-NEXT: sw a2, 0(sp)1110; ILP32E-FPELIM-NEXT: lw a1, 4(a1)1111; ILP32E-FPELIM-NEXT: addi sp, sp, 281112; ILP32E-FPELIM-NEXT: ret1113;1114; ILP32E-WITHFP-LABEL: va2_va_arg:1115; ILP32E-WITHFP: # %bb.0:1116; ILP32E-WITHFP-NEXT: addi sp, sp, -361117; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill1118; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill1119; ILP32E-WITHFP-NEXT: addi s0, sp, 121120; ILP32E-WITHFP-NEXT: sw a5, 20(s0)1121; ILP32E-WITHFP-NEXT: sw a1, 4(s0)1122; ILP32E-WITHFP-NEXT: sw a2, 8(s0)1123; ILP32E-WITHFP-NEXT: sw a3, 12(s0)1124; ILP32E-WITHFP-NEXT: sw a4, 16(s0)1125; ILP32E-WITHFP-NEXT: addi a0, s0, 111126; ILP32E-WITHFP-NEXT: andi a1, a0, -81127; ILP32E-WITHFP-NEXT: addi a0, a1, 41128; ILP32E-WITHFP-NEXT: addi a2, a1, 81129; ILP32E-WITHFP-NEXT: sw a0, -12(s0)1130; ILP32E-WITHFP-NEXT: lw a0, 0(a1)1131; ILP32E-WITHFP-NEXT: sw a2, -12(s0)1132; ILP32E-WITHFP-NEXT: lw a1, 4(a1)1133; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload1134; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload1135; ILP32E-WITHFP-NEXT: addi sp, sp, 361136; ILP32E-WITHFP-NEXT: ret1137;1138; LP64-LP64F-LP64D-FPELIM-LABEL: va2_va_arg:1139; LP64-LP64F-LP64D-FPELIM: # %bb.0:1140; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -801141; LP64-LP64F-LP64D-FPELIM-NEXT: mv a0, a11142; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 56(sp)1143; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 64(sp)1144; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 72(sp)1145; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 24(sp)1146; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 32(sp)1147; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 40(sp)1148; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 48(sp)1149; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, sp, 321150; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)1151; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 801152; LP64-LP64F-LP64D-FPELIM-NEXT: ret1153;1154; LP64-LP64F-LP64D-WITHFP-LABEL: va2_va_arg:1155; LP64-LP64F-LP64D-WITHFP: # %bb.0:1156; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -961157; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill1158; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill1159; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 321160; LP64-LP64F-LP64D-WITHFP-NEXT: mv a0, a11161; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)1162; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)1163; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)1164; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)1165; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)1166; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)1167; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)1168; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, s0, 161169; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -24(s0)1170; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload1171; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload1172; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 961173; LP64-LP64F-LP64D-WITHFP-NEXT: ret1174;1175; LP64E-FPELIM-LABEL: va2_va_arg:1176; LP64E-FPELIM: # %bb.0:1177; LP64E-FPELIM-NEXT: addi sp, sp, -561178; LP64E-FPELIM-NEXT: mv a0, a11179; LP64E-FPELIM-NEXT: sd a5, 48(sp)1180; LP64E-FPELIM-NEXT: sd a1, 16(sp)1181; LP64E-FPELIM-NEXT: sd a2, 24(sp)1182; LP64E-FPELIM-NEXT: sd a3, 32(sp)1183; LP64E-FPELIM-NEXT: sd a4, 40(sp)1184; LP64E-FPELIM-NEXT: addi a1, sp, 241185; LP64E-FPELIM-NEXT: sd a1, 0(sp)1186; LP64E-FPELIM-NEXT: addi sp, sp, 561187; LP64E-FPELIM-NEXT: ret1188;1189; LP64E-WITHFP-LABEL: va2_va_arg:1190; LP64E-WITHFP: # %bb.0:1191; LP64E-WITHFP-NEXT: addi sp, sp, -721192; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill1193; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill1194; LP64E-WITHFP-NEXT: addi s0, sp, 241195; LP64E-WITHFP-NEXT: mv a0, a11196; LP64E-WITHFP-NEXT: sd a5, 40(s0)1197; LP64E-WITHFP-NEXT: sd a1, 8(s0)1198; LP64E-WITHFP-NEXT: sd a2, 16(s0)1199; LP64E-WITHFP-NEXT: sd a3, 24(s0)1200; LP64E-WITHFP-NEXT: sd a4, 32(s0)1201; LP64E-WITHFP-NEXT: addi a1, s0, 161202; LP64E-WITHFP-NEXT: sd a1, -24(s0)1203; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload1204; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload1205; LP64E-WITHFP-NEXT: addi sp, sp, 721206; LP64E-WITHFP-NEXT: ret1207 %va = alloca ptr1208 call void @llvm.va_start(ptr %va)1209 %1 = va_arg ptr %va, double1210 call void @llvm.va_end(ptr %va)1211 %2 = bitcast double %1 to i641212 ret i64 %21213}1214 1215define void @va2_caller() nounwind {1216; ILP32-ILP32F-FPELIM-LABEL: va2_caller:1217; ILP32-ILP32F-FPELIM: # %bb.0:1218; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -161219; ILP32-ILP32F-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1220; ILP32-ILP32F-FPELIM-NEXT: lui a3, 2618881221; ILP32-ILP32F-FPELIM-NEXT: li a2, 01222; ILP32-ILP32F-FPELIM-NEXT: call va21223; ILP32-ILP32F-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1224; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 161225; ILP32-ILP32F-FPELIM-NEXT: ret1226;1227; ILP32-ILP32F-WITHFP-LABEL: va2_caller:1228; ILP32-ILP32F-WITHFP: # %bb.0:1229; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -161230; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1231; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1232; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 161233; ILP32-ILP32F-WITHFP-NEXT: lui a3, 2618881234; ILP32-ILP32F-WITHFP-NEXT: li a2, 01235; ILP32-ILP32F-WITHFP-NEXT: call va21236; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1237; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1238; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 161239; ILP32-ILP32F-WITHFP-NEXT: ret1240;1241; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va2_caller:1242; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1243; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -161244; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1245; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a3, 2618881246; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a2, 01247; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call va21248; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1249; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 161250; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1251;1252; ILP32E-FPELIM-LABEL: va2_caller:1253; ILP32E-FPELIM: # %bb.0:1254; ILP32E-FPELIM-NEXT: addi sp, sp, -41255; ILP32E-FPELIM-NEXT: sw ra, 0(sp) # 4-byte Folded Spill1256; ILP32E-FPELIM-NEXT: lui a2, 2618881257; ILP32E-FPELIM-NEXT: li a1, 01258; ILP32E-FPELIM-NEXT: call va21259; ILP32E-FPELIM-NEXT: lw ra, 0(sp) # 4-byte Folded Reload1260; ILP32E-FPELIM-NEXT: addi sp, sp, 41261; ILP32E-FPELIM-NEXT: ret1262;1263; ILP32E-WITHFP-LABEL: va2_caller:1264; ILP32E-WITHFP: # %bb.0:1265; ILP32E-WITHFP-NEXT: addi sp, sp, -81266; ILP32E-WITHFP-NEXT: sw ra, 4(sp) # 4-byte Folded Spill1267; ILP32E-WITHFP-NEXT: sw s0, 0(sp) # 4-byte Folded Spill1268; ILP32E-WITHFP-NEXT: addi s0, sp, 81269; ILP32E-WITHFP-NEXT: lui a2, 2618881270; ILP32E-WITHFP-NEXT: li a1, 01271; ILP32E-WITHFP-NEXT: call va21272; ILP32E-WITHFP-NEXT: lw ra, 4(sp) # 4-byte Folded Reload1273; ILP32E-WITHFP-NEXT: lw s0, 0(sp) # 4-byte Folded Reload1274; ILP32E-WITHFP-NEXT: addi sp, sp, 81275; ILP32E-WITHFP-NEXT: ret1276;1277; LP64-LP64F-LP64D-FPELIM-LABEL: va2_caller:1278; LP64-LP64F-LP64D-FPELIM: # %bb.0:1279; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -161280; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1281; LP64-LP64F-LP64D-FPELIM-NEXT: li a1, 10231282; LP64-LP64F-LP64D-FPELIM-NEXT: slli a1, a1, 521283; LP64-LP64F-LP64D-FPELIM-NEXT: call va21284; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1285; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 161286; LP64-LP64F-LP64D-FPELIM-NEXT: ret1287;1288; LP64-LP64F-LP64D-WITHFP-LABEL: va2_caller:1289; LP64-LP64F-LP64D-WITHFP: # %bb.0:1290; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -161291; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1292; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill1293; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 161294; LP64-LP64F-LP64D-WITHFP-NEXT: li a1, 10231295; LP64-LP64F-LP64D-WITHFP-NEXT: slli a1, a1, 521296; LP64-LP64F-LP64D-WITHFP-NEXT: call va21297; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1298; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload1299; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 161300; LP64-LP64F-LP64D-WITHFP-NEXT: ret1301;1302; LP64E-FPELIM-LABEL: va2_caller:1303; LP64E-FPELIM: # %bb.0:1304; LP64E-FPELIM-NEXT: addi sp, sp, -81305; LP64E-FPELIM-NEXT: sd ra, 0(sp) # 8-byte Folded Spill1306; LP64E-FPELIM-NEXT: li a1, 10231307; LP64E-FPELIM-NEXT: slli a1, a1, 521308; LP64E-FPELIM-NEXT: call va21309; LP64E-FPELIM-NEXT: ld ra, 0(sp) # 8-byte Folded Reload1310; LP64E-FPELIM-NEXT: addi sp, sp, 81311; LP64E-FPELIM-NEXT: ret1312;1313; LP64E-WITHFP-LABEL: va2_caller:1314; LP64E-WITHFP: # %bb.0:1315; LP64E-WITHFP-NEXT: addi sp, sp, -161316; LP64E-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1317; LP64E-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill1318; LP64E-WITHFP-NEXT: addi s0, sp, 161319; LP64E-WITHFP-NEXT: li a1, 10231320; LP64E-WITHFP-NEXT: slli a1, a1, 521321; LP64E-WITHFP-NEXT: call va21322; LP64E-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1323; LP64E-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload1324; LP64E-WITHFP-NEXT: addi sp, sp, 161325; LP64E-WITHFP-NEXT: ret1326 %1 = call i64 (ptr, ...) @va2(ptr poison, double 1.000000e+00)1327 ret void1328}1329 1330; On RV32, Ensure a named 2*xlen argument is passed in a1 and a2, while the1331; vararg double is passed in a4 and a5 (rather than a3 and a4)1332 1333define i64 @va3(i32 %a, i64 %b, ...) nounwind {1334; ILP32-ILP32F-FPELIM-LABEL: va3:1335; ILP32-ILP32F-FPELIM: # %bb.0:1336; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -321337; ILP32-ILP32F-FPELIM-NEXT: sw a7, 28(sp)1338; ILP32-ILP32F-FPELIM-NEXT: sw a3, 12(sp)1339; ILP32-ILP32F-FPELIM-NEXT: sw a4, 16(sp)1340; ILP32-ILP32F-FPELIM-NEXT: sw a5, 20(sp)1341; ILP32-ILP32F-FPELIM-NEXT: sw a6, 24(sp)1342; ILP32-ILP32F-FPELIM-NEXT: addi a0, sp, 121343; ILP32-ILP32F-FPELIM-NEXT: addi a3, sp, 191344; ILP32-ILP32F-FPELIM-NEXT: addi a4, sp, 271345; ILP32-ILP32F-FPELIM-NEXT: sw a0, 4(sp)1346; ILP32-ILP32F-FPELIM-NEXT: andi a3, a3, -81347; ILP32-ILP32F-FPELIM-NEXT: sw a4, 4(sp)1348; ILP32-ILP32F-FPELIM-NEXT: lw a0, 4(a3)1349; ILP32-ILP32F-FPELIM-NEXT: lw a3, 0(a3)1350; ILP32-ILP32F-FPELIM-NEXT: add a2, a2, a01351; ILP32-ILP32F-FPELIM-NEXT: add a0, a1, a31352; ILP32-ILP32F-FPELIM-NEXT: sltu a1, a0, a11353; ILP32-ILP32F-FPELIM-NEXT: add a1, a2, a11354; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 321355; ILP32-ILP32F-FPELIM-NEXT: ret1356;1357; ILP32-ILP32F-WITHFP-LABEL: va3:1358; ILP32-ILP32F-WITHFP: # %bb.0:1359; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -481360; ILP32-ILP32F-WITHFP-NEXT: sw ra, 20(sp) # 4-byte Folded Spill1361; ILP32-ILP32F-WITHFP-NEXT: sw s0, 16(sp) # 4-byte Folded Spill1362; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 241363; ILP32-ILP32F-WITHFP-NEXT: sw a7, 20(s0)1364; ILP32-ILP32F-WITHFP-NEXT: sw a3, 4(s0)1365; ILP32-ILP32F-WITHFP-NEXT: sw a4, 8(s0)1366; ILP32-ILP32F-WITHFP-NEXT: sw a5, 12(s0)1367; ILP32-ILP32F-WITHFP-NEXT: sw a6, 16(s0)1368; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 41369; ILP32-ILP32F-WITHFP-NEXT: addi a3, s0, 111370; ILP32-ILP32F-WITHFP-NEXT: addi a4, s0, 191371; ILP32-ILP32F-WITHFP-NEXT: sw a0, -12(s0)1372; ILP32-ILP32F-WITHFP-NEXT: andi a3, a3, -81373; ILP32-ILP32F-WITHFP-NEXT: sw a4, -12(s0)1374; ILP32-ILP32F-WITHFP-NEXT: lw a0, 4(a3)1375; ILP32-ILP32F-WITHFP-NEXT: lw a3, 0(a3)1376; ILP32-ILP32F-WITHFP-NEXT: add a2, a2, a01377; ILP32-ILP32F-WITHFP-NEXT: add a0, a1, a31378; ILP32-ILP32F-WITHFP-NEXT: sltu a1, a0, a11379; ILP32-ILP32F-WITHFP-NEXT: add a1, a2, a11380; ILP32-ILP32F-WITHFP-NEXT: lw ra, 20(sp) # 4-byte Folded Reload1381; ILP32-ILP32F-WITHFP-NEXT: lw s0, 16(sp) # 4-byte Folded Reload1382; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 481383; ILP32-ILP32F-WITHFP-NEXT: ret1384;1385; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va3:1386; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1387; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -321388; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 28(sp)1389; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 12(sp)1390; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 16(sp)1391; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 20(sp)1392; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 24(sp)1393; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, sp, 121394; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a3, sp, 191395; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a4, sp, 271396; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, 4(sp)1397; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a3, a3, -81398; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 4(sp)1399; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 4(a3)1400; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a3, 0(a3)1401; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a2, a2, a01402; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a0, a1, a31403; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sltu a1, a0, a11404; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, a2, a11405; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 321406; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1407;1408; ILP32E-FPELIM-LABEL: va3:1409; ILP32E-FPELIM: # %bb.0:1410; ILP32E-FPELIM-NEXT: addi sp, sp, -201411; ILP32E-FPELIM-NEXT: sw a3, 8(sp)1412; ILP32E-FPELIM-NEXT: sw a4, 12(sp)1413; ILP32E-FPELIM-NEXT: sw a5, 16(sp)1414; ILP32E-FPELIM-NEXT: addi a0, sp, 81415; ILP32E-FPELIM-NEXT: addi a3, sp, 151416; ILP32E-FPELIM-NEXT: addi a4, sp, 231417; ILP32E-FPELIM-NEXT: sw a0, 0(sp)1418; ILP32E-FPELIM-NEXT: andi a3, a3, -81419; ILP32E-FPELIM-NEXT: sw a4, 0(sp)1420; ILP32E-FPELIM-NEXT: lw a0, 4(a3)1421; ILP32E-FPELIM-NEXT: lw a3, 0(a3)1422; ILP32E-FPELIM-NEXT: add a2, a2, a01423; ILP32E-FPELIM-NEXT: add a0, a1, a31424; ILP32E-FPELIM-NEXT: sltu a1, a0, a11425; ILP32E-FPELIM-NEXT: add a1, a2, a11426; ILP32E-FPELIM-NEXT: addi sp, sp, 201427; ILP32E-FPELIM-NEXT: ret1428;1429; ILP32E-WITHFP-LABEL: va3:1430; ILP32E-WITHFP: # %bb.0:1431; ILP32E-WITHFP-NEXT: addi sp, sp, -281432; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill1433; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill1434; ILP32E-WITHFP-NEXT: addi s0, sp, 121435; ILP32E-WITHFP-NEXT: sw a3, 4(s0)1436; ILP32E-WITHFP-NEXT: sw a4, 8(s0)1437; ILP32E-WITHFP-NEXT: sw a5, 12(s0)1438; ILP32E-WITHFP-NEXT: addi a0, s0, 41439; ILP32E-WITHFP-NEXT: addi a3, s0, 111440; ILP32E-WITHFP-NEXT: addi a4, s0, 191441; ILP32E-WITHFP-NEXT: sw a0, -12(s0)1442; ILP32E-WITHFP-NEXT: andi a3, a3, -81443; ILP32E-WITHFP-NEXT: sw a4, -12(s0)1444; ILP32E-WITHFP-NEXT: lw a0, 4(a3)1445; ILP32E-WITHFP-NEXT: lw a3, 0(a3)1446; ILP32E-WITHFP-NEXT: add a2, a2, a01447; ILP32E-WITHFP-NEXT: add a0, a1, a31448; ILP32E-WITHFP-NEXT: sltu a1, a0, a11449; ILP32E-WITHFP-NEXT: add a1, a2, a11450; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload1451; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload1452; ILP32E-WITHFP-NEXT: addi sp, sp, 281453; ILP32E-WITHFP-NEXT: ret1454;1455; LP64-LP64F-LP64D-FPELIM-LABEL: va3:1456; LP64-LP64F-LP64D-FPELIM: # %bb.0:1457; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -641458; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 48(sp)1459; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 56(sp)1460; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 16(sp)1461; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 24(sp)1462; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 32(sp)1463; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 40(sp)1464; LP64-LP64F-LP64D-FPELIM-NEXT: addi a3, sp, 311465; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, a1, a21466; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 8(sp)1467; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 641468; LP64-LP64F-LP64D-FPELIM-NEXT: ret1469;1470; LP64-LP64F-LP64D-WITHFP-LABEL: va3:1471; LP64-LP64F-LP64D-WITHFP: # %bb.0:1472; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -801473; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill1474; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill1475; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 321476; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 32(s0)1477; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 40(s0)1478; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 0(s0)1479; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 8(s0)1480; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 16(s0)1481; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 24(s0)1482; LP64-LP64F-LP64D-WITHFP-NEXT: addi a3, s0, 151483; LP64-LP64F-LP64D-WITHFP-NEXT: add a0, a1, a21484; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, -24(s0)1485; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload1486; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload1487; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 801488; LP64-LP64F-LP64D-WITHFP-NEXT: ret1489;1490; LP64E-FPELIM-LABEL: va3:1491; LP64E-FPELIM: # %bb.0:1492; LP64E-FPELIM-NEXT: addi sp, sp, -401493; LP64E-FPELIM-NEXT: sd a2, 8(sp)1494; LP64E-FPELIM-NEXT: sd a3, 16(sp)1495; LP64E-FPELIM-NEXT: sd a4, 24(sp)1496; LP64E-FPELIM-NEXT: sd a5, 32(sp)1497; LP64E-FPELIM-NEXT: addi a3, sp, 231498; LP64E-FPELIM-NEXT: add a0, a1, a21499; LP64E-FPELIM-NEXT: sd a3, 0(sp)1500; LP64E-FPELIM-NEXT: addi sp, sp, 401501; LP64E-FPELIM-NEXT: ret1502;1503; LP64E-WITHFP-LABEL: va3:1504; LP64E-WITHFP: # %bb.0:1505; LP64E-WITHFP-NEXT: addi sp, sp, -561506; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill1507; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill1508; LP64E-WITHFP-NEXT: addi s0, sp, 241509; LP64E-WITHFP-NEXT: sd a2, 0(s0)1510; LP64E-WITHFP-NEXT: sd a3, 8(s0)1511; LP64E-WITHFP-NEXT: sd a4, 16(s0)1512; LP64E-WITHFP-NEXT: sd a5, 24(s0)1513; LP64E-WITHFP-NEXT: addi a3, s0, 151514; LP64E-WITHFP-NEXT: add a0, a1, a21515; LP64E-WITHFP-NEXT: sd a3, -24(s0)1516; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload1517; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload1518; LP64E-WITHFP-NEXT: addi sp, sp, 561519; LP64E-WITHFP-NEXT: ret1520 %va = alloca ptr1521 call void @llvm.va_start(ptr %va)1522 %argp.cur = load ptr, ptr %va1523 %ptrint = ptrtoint ptr %argp.cur to iXLen1524 %1 = add iXLen %ptrint, 71525 %2 = and iXLen %1, -81526 %argp.cur.aligned = inttoptr iXLen %1 to ptr1527 %argp.next = getelementptr inbounds i8, ptr %argp.cur.aligned, i32 81528 store ptr %argp.next, ptr %va1529 %3 = inttoptr iXLen %2 to ptr1530 %4 = load double, ptr %3, align 81531 call void @llvm.va_end(ptr %va)1532 %5 = bitcast double %4 to i641533 %6 = add i64 %b, %51534 ret i64 %61535}1536 1537define i64 @va3_va_arg(i32 %a, i64 %b, ...) nounwind {1538; ILP32-ILP32F-FPELIM-LABEL: va3_va_arg:1539; ILP32-ILP32F-FPELIM: # %bb.0:1540; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -321541; ILP32-ILP32F-FPELIM-NEXT: sw a7, 28(sp)1542; ILP32-ILP32F-FPELIM-NEXT: sw a3, 12(sp)1543; ILP32-ILP32F-FPELIM-NEXT: sw a4, 16(sp)1544; ILP32-ILP32F-FPELIM-NEXT: sw a5, 20(sp)1545; ILP32-ILP32F-FPELIM-NEXT: sw a6, 24(sp)1546; ILP32-ILP32F-FPELIM-NEXT: addi a0, sp, 191547; ILP32-ILP32F-FPELIM-NEXT: andi a0, a0, -81548; ILP32-ILP32F-FPELIM-NEXT: addi a3, a0, 41549; ILP32-ILP32F-FPELIM-NEXT: addi a4, a0, 81550; ILP32-ILP32F-FPELIM-NEXT: sw a3, 4(sp)1551; ILP32-ILP32F-FPELIM-NEXT: lw a3, 0(a0)1552; ILP32-ILP32F-FPELIM-NEXT: sw a4, 4(sp)1553; ILP32-ILP32F-FPELIM-NEXT: lw a4, 4(a0)1554; ILP32-ILP32F-FPELIM-NEXT: add a0, a1, a31555; ILP32-ILP32F-FPELIM-NEXT: sltu a1, a0, a11556; ILP32-ILP32F-FPELIM-NEXT: add a2, a2, a41557; ILP32-ILP32F-FPELIM-NEXT: add a1, a2, a11558; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 321559; ILP32-ILP32F-FPELIM-NEXT: ret1560;1561; ILP32-ILP32F-WITHFP-LABEL: va3_va_arg:1562; ILP32-ILP32F-WITHFP: # %bb.0:1563; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -481564; ILP32-ILP32F-WITHFP-NEXT: sw ra, 20(sp) # 4-byte Folded Spill1565; ILP32-ILP32F-WITHFP-NEXT: sw s0, 16(sp) # 4-byte Folded Spill1566; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 241567; ILP32-ILP32F-WITHFP-NEXT: sw a7, 20(s0)1568; ILP32-ILP32F-WITHFP-NEXT: sw a3, 4(s0)1569; ILP32-ILP32F-WITHFP-NEXT: sw a4, 8(s0)1570; ILP32-ILP32F-WITHFP-NEXT: sw a5, 12(s0)1571; ILP32-ILP32F-WITHFP-NEXT: sw a6, 16(s0)1572; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 111573; ILP32-ILP32F-WITHFP-NEXT: andi a0, a0, -81574; ILP32-ILP32F-WITHFP-NEXT: addi a3, a0, 41575; ILP32-ILP32F-WITHFP-NEXT: addi a4, a0, 81576; ILP32-ILP32F-WITHFP-NEXT: sw a3, -12(s0)1577; ILP32-ILP32F-WITHFP-NEXT: lw a3, 0(a0)1578; ILP32-ILP32F-WITHFP-NEXT: sw a4, -12(s0)1579; ILP32-ILP32F-WITHFP-NEXT: lw a4, 4(a0)1580; ILP32-ILP32F-WITHFP-NEXT: add a0, a1, a31581; ILP32-ILP32F-WITHFP-NEXT: sltu a1, a0, a11582; ILP32-ILP32F-WITHFP-NEXT: add a2, a2, a41583; ILP32-ILP32F-WITHFP-NEXT: add a1, a2, a11584; ILP32-ILP32F-WITHFP-NEXT: lw ra, 20(sp) # 4-byte Folded Reload1585; ILP32-ILP32F-WITHFP-NEXT: lw s0, 16(sp) # 4-byte Folded Reload1586; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 481587; ILP32-ILP32F-WITHFP-NEXT: ret1588;1589; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va3_va_arg:1590; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1591; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -481592; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)1593; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)1594; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)1595; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)1596; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)1597; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, sp, 351598; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a0, a0, -81599; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a3, a0, 81600; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 20(sp)1601; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: fld fa5, 0(a0)1602; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: fsd fa5, 8(sp)1603; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 12(sp)1604; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a3, 8(sp)1605; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a2, a2, a01606; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a0, a1, a31607; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sltu a1, a0, a11608; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, a2, a11609; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 481610; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1611;1612; ILP32E-FPELIM-LABEL: va3_va_arg:1613; ILP32E-FPELIM: # %bb.0:1614; ILP32E-FPELIM-NEXT: addi sp, sp, -201615; ILP32E-FPELIM-NEXT: sw a3, 8(sp)1616; ILP32E-FPELIM-NEXT: sw a4, 12(sp)1617; ILP32E-FPELIM-NEXT: sw a5, 16(sp)1618; ILP32E-FPELIM-NEXT: addi a0, sp, 151619; ILP32E-FPELIM-NEXT: andi a0, a0, -81620; ILP32E-FPELIM-NEXT: addi a3, a0, 41621; ILP32E-FPELIM-NEXT: addi a4, a0, 81622; ILP32E-FPELIM-NEXT: sw a3, 0(sp)1623; ILP32E-FPELIM-NEXT: lw a3, 0(a0)1624; ILP32E-FPELIM-NEXT: sw a4, 0(sp)1625; ILP32E-FPELIM-NEXT: lw a4, 4(a0)1626; ILP32E-FPELIM-NEXT: add a0, a1, a31627; ILP32E-FPELIM-NEXT: sltu a1, a0, a11628; ILP32E-FPELIM-NEXT: add a2, a2, a41629; ILP32E-FPELIM-NEXT: add a1, a2, a11630; ILP32E-FPELIM-NEXT: addi sp, sp, 201631; ILP32E-FPELIM-NEXT: ret1632;1633; ILP32E-WITHFP-LABEL: va3_va_arg:1634; ILP32E-WITHFP: # %bb.0:1635; ILP32E-WITHFP-NEXT: addi sp, sp, -281636; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill1637; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill1638; ILP32E-WITHFP-NEXT: addi s0, sp, 121639; ILP32E-WITHFP-NEXT: sw a3, 4(s0)1640; ILP32E-WITHFP-NEXT: sw a4, 8(s0)1641; ILP32E-WITHFP-NEXT: sw a5, 12(s0)1642; ILP32E-WITHFP-NEXT: addi a0, s0, 111643; ILP32E-WITHFP-NEXT: andi a0, a0, -81644; ILP32E-WITHFP-NEXT: addi a3, a0, 41645; ILP32E-WITHFP-NEXT: addi a4, a0, 81646; ILP32E-WITHFP-NEXT: sw a3, -12(s0)1647; ILP32E-WITHFP-NEXT: lw a3, 0(a0)1648; ILP32E-WITHFP-NEXT: sw a4, -12(s0)1649; ILP32E-WITHFP-NEXT: lw a4, 4(a0)1650; ILP32E-WITHFP-NEXT: add a0, a1, a31651; ILP32E-WITHFP-NEXT: sltu a1, a0, a11652; ILP32E-WITHFP-NEXT: add a2, a2, a41653; ILP32E-WITHFP-NEXT: add a1, a2, a11654; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload1655; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload1656; ILP32E-WITHFP-NEXT: addi sp, sp, 281657; ILP32E-WITHFP-NEXT: ret1658;1659; LP64-LP64F-LP64D-FPELIM-LABEL: va3_va_arg:1660; LP64-LP64F-LP64D-FPELIM: # %bb.0:1661; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -641662; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 48(sp)1663; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 56(sp)1664; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 16(sp)1665; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 24(sp)1666; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 32(sp)1667; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 40(sp)1668; LP64-LP64F-LP64D-FPELIM-NEXT: addi a3, sp, 241669; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, a1, a21670; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 8(sp)1671; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 641672; LP64-LP64F-LP64D-FPELIM-NEXT: ret1673;1674; LP64-LP64F-LP64D-WITHFP-LABEL: va3_va_arg:1675; LP64-LP64F-LP64D-WITHFP: # %bb.0:1676; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -801677; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill1678; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill1679; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 321680; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 32(s0)1681; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 40(s0)1682; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 0(s0)1683; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 8(s0)1684; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 16(s0)1685; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 24(s0)1686; LP64-LP64F-LP64D-WITHFP-NEXT: addi a3, s0, 81687; LP64-LP64F-LP64D-WITHFP-NEXT: add a0, a1, a21688; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, -24(s0)1689; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload1690; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload1691; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 801692; LP64-LP64F-LP64D-WITHFP-NEXT: ret1693;1694; LP64E-FPELIM-LABEL: va3_va_arg:1695; LP64E-FPELIM: # %bb.0:1696; LP64E-FPELIM-NEXT: addi sp, sp, -401697; LP64E-FPELIM-NEXT: sd a2, 8(sp)1698; LP64E-FPELIM-NEXT: sd a3, 16(sp)1699; LP64E-FPELIM-NEXT: sd a4, 24(sp)1700; LP64E-FPELIM-NEXT: sd a5, 32(sp)1701; LP64E-FPELIM-NEXT: addi a3, sp, 161702; LP64E-FPELIM-NEXT: add a0, a1, a21703; LP64E-FPELIM-NEXT: sd a3, 0(sp)1704; LP64E-FPELIM-NEXT: addi sp, sp, 401705; LP64E-FPELIM-NEXT: ret1706;1707; LP64E-WITHFP-LABEL: va3_va_arg:1708; LP64E-WITHFP: # %bb.0:1709; LP64E-WITHFP-NEXT: addi sp, sp, -561710; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill1711; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill1712; LP64E-WITHFP-NEXT: addi s0, sp, 241713; LP64E-WITHFP-NEXT: sd a2, 0(s0)1714; LP64E-WITHFP-NEXT: sd a3, 8(s0)1715; LP64E-WITHFP-NEXT: sd a4, 16(s0)1716; LP64E-WITHFP-NEXT: sd a5, 24(s0)1717; LP64E-WITHFP-NEXT: addi a3, s0, 81718; LP64E-WITHFP-NEXT: add a0, a1, a21719; LP64E-WITHFP-NEXT: sd a3, -24(s0)1720; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload1721; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload1722; LP64E-WITHFP-NEXT: addi sp, sp, 561723; LP64E-WITHFP-NEXT: ret1724 %va = alloca ptr1725 call void @llvm.va_start(ptr %va)1726 %1 = va_arg ptr %va, double1727 call void @llvm.va_end(ptr %va)1728 %2 = bitcast double %1 to i641729 %3 = add i64 %b, %21730 ret i64 %31731}1732 1733define void @va3_caller() nounwind {1734; ILP32-ILP32F-FPELIM-LABEL: va3_caller:1735; ILP32-ILP32F-FPELIM: # %bb.0:1736; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -161737; ILP32-ILP32F-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1738; ILP32-ILP32F-FPELIM-NEXT: li a0, 21739; ILP32-ILP32F-FPELIM-NEXT: li a1, 11111740; ILP32-ILP32F-FPELIM-NEXT: lui a5, 2621441741; ILP32-ILP32F-FPELIM-NEXT: li a2, 01742; ILP32-ILP32F-FPELIM-NEXT: li a4, 01743; ILP32-ILP32F-FPELIM-NEXT: call va31744; ILP32-ILP32F-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1745; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 161746; ILP32-ILP32F-FPELIM-NEXT: ret1747;1748; ILP32-ILP32F-WITHFP-LABEL: va3_caller:1749; ILP32-ILP32F-WITHFP: # %bb.0:1750; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -161751; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1752; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1753; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 161754; ILP32-ILP32F-WITHFP-NEXT: li a0, 21755; ILP32-ILP32F-WITHFP-NEXT: li a1, 11111756; ILP32-ILP32F-WITHFP-NEXT: lui a5, 2621441757; ILP32-ILP32F-WITHFP-NEXT: li a2, 01758; ILP32-ILP32F-WITHFP-NEXT: li a4, 01759; ILP32-ILP32F-WITHFP-NEXT: call va31760; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1761; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1762; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 161763; ILP32-ILP32F-WITHFP-NEXT: ret1764;1765; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va3_caller:1766; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1767; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -161768; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1769; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a0, 21770; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a1, 11111771; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a5, 2621441772; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a2, 01773; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a4, 01774; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call va31775; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1776; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 161777; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1778;1779; ILP32E-FPELIM-LABEL: va3_caller:1780; ILP32E-FPELIM: # %bb.0:1781; ILP32E-FPELIM-NEXT: addi sp, sp, -41782; ILP32E-FPELIM-NEXT: sw ra, 0(sp) # 4-byte Folded Spill1783; ILP32E-FPELIM-NEXT: li a0, 21784; ILP32E-FPELIM-NEXT: li a1, 11111785; ILP32E-FPELIM-NEXT: lui a4, 2621441786; ILP32E-FPELIM-NEXT: li a2, 01787; ILP32E-FPELIM-NEXT: li a3, 01788; ILP32E-FPELIM-NEXT: call va31789; ILP32E-FPELIM-NEXT: lw ra, 0(sp) # 4-byte Folded Reload1790; ILP32E-FPELIM-NEXT: addi sp, sp, 41791; ILP32E-FPELIM-NEXT: ret1792;1793; ILP32E-WITHFP-LABEL: va3_caller:1794; ILP32E-WITHFP: # %bb.0:1795; ILP32E-WITHFP-NEXT: addi sp, sp, -81796; ILP32E-WITHFP-NEXT: sw ra, 4(sp) # 4-byte Folded Spill1797; ILP32E-WITHFP-NEXT: sw s0, 0(sp) # 4-byte Folded Spill1798; ILP32E-WITHFP-NEXT: addi s0, sp, 81799; ILP32E-WITHFP-NEXT: li a0, 21800; ILP32E-WITHFP-NEXT: li a1, 11111801; ILP32E-WITHFP-NEXT: lui a4, 2621441802; ILP32E-WITHFP-NEXT: li a2, 01803; ILP32E-WITHFP-NEXT: li a3, 01804; ILP32E-WITHFP-NEXT: call va31805; ILP32E-WITHFP-NEXT: lw ra, 4(sp) # 4-byte Folded Reload1806; ILP32E-WITHFP-NEXT: lw s0, 0(sp) # 4-byte Folded Reload1807; ILP32E-WITHFP-NEXT: addi sp, sp, 81808; ILP32E-WITHFP-NEXT: ret1809;1810; LP64-LP64F-LP64D-FPELIM-LABEL: va3_caller:1811; LP64-LP64F-LP64D-FPELIM: # %bb.0:1812; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -161813; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1814; LP64-LP64F-LP64D-FPELIM-NEXT: li a2, 11815; LP64-LP64F-LP64D-FPELIM-NEXT: li a0, 21816; LP64-LP64F-LP64D-FPELIM-NEXT: slli a2, a2, 621817; LP64-LP64F-LP64D-FPELIM-NEXT: li a1, 11111818; LP64-LP64F-LP64D-FPELIM-NEXT: call va31819; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1820; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 161821; LP64-LP64F-LP64D-FPELIM-NEXT: ret1822;1823; LP64-LP64F-LP64D-WITHFP-LABEL: va3_caller:1824; LP64-LP64F-LP64D-WITHFP: # %bb.0:1825; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -161826; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1827; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill1828; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 161829; LP64-LP64F-LP64D-WITHFP-NEXT: li a2, 11830; LP64-LP64F-LP64D-WITHFP-NEXT: li a0, 21831; LP64-LP64F-LP64D-WITHFP-NEXT: slli a2, a2, 621832; LP64-LP64F-LP64D-WITHFP-NEXT: li a1, 11111833; LP64-LP64F-LP64D-WITHFP-NEXT: call va31834; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1835; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload1836; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 161837; LP64-LP64F-LP64D-WITHFP-NEXT: ret1838;1839; LP64E-FPELIM-LABEL: va3_caller:1840; LP64E-FPELIM: # %bb.0:1841; LP64E-FPELIM-NEXT: addi sp, sp, -81842; LP64E-FPELIM-NEXT: sd ra, 0(sp) # 8-byte Folded Spill1843; LP64E-FPELIM-NEXT: li a2, 11844; LP64E-FPELIM-NEXT: li a0, 21845; LP64E-FPELIM-NEXT: slli a2, a2, 621846; LP64E-FPELIM-NEXT: li a1, 11111847; LP64E-FPELIM-NEXT: call va31848; LP64E-FPELIM-NEXT: ld ra, 0(sp) # 8-byte Folded Reload1849; LP64E-FPELIM-NEXT: addi sp, sp, 81850; LP64E-FPELIM-NEXT: ret1851;1852; LP64E-WITHFP-LABEL: va3_caller:1853; LP64E-WITHFP: # %bb.0:1854; LP64E-WITHFP-NEXT: addi sp, sp, -161855; LP64E-WITHFP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1856; LP64E-WITHFP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill1857; LP64E-WITHFP-NEXT: addi s0, sp, 161858; LP64E-WITHFP-NEXT: li a2, 11859; LP64E-WITHFP-NEXT: li a0, 21860; LP64E-WITHFP-NEXT: slli a2, a2, 621861; LP64E-WITHFP-NEXT: li a1, 11111862; LP64E-WITHFP-NEXT: call va31863; LP64E-WITHFP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1864; LP64E-WITHFP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload1865; LP64E-WITHFP-NEXT: addi sp, sp, 161866; LP64E-WITHFP-NEXT: ret1867 %1 = call i64 (i32, i64, ...) @va3(i32 2, i64 1111, double 2.000000e+00)1868 ret void1869}1870 1871define i32 @va4_va_copy(i32 %argno, ...) nounwind {1872; ILP32-ILP32F-FPELIM-LABEL: va4_va_copy:1873; ILP32-ILP32F-FPELIM: # %bb.0:1874; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -481875; ILP32-ILP32F-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1876; ILP32-ILP32F-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1877; ILP32-ILP32F-FPELIM-NEXT: mv s0, a11878; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)1879; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)1880; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)1881; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)1882; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)1883; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)1884; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)1885; ILP32-ILP32F-FPELIM-NEXT: addi a0, sp, 241886; ILP32-ILP32F-FPELIM-NEXT: sw a0, 4(sp)1887; ILP32-ILP32F-FPELIM-NEXT: sw a0, 0(sp)1888; ILP32-ILP32F-FPELIM-NEXT: call notdead1889; ILP32-ILP32F-FPELIM-NEXT: lw a0, 4(sp)1890; ILP32-ILP32F-FPELIM-NEXT: addi a0, a0, 31891; ILP32-ILP32F-FPELIM-NEXT: andi a0, a0, -41892; ILP32-ILP32F-FPELIM-NEXT: addi a1, a0, 41893; ILP32-ILP32F-FPELIM-NEXT: addi a2, a0, 71894; ILP32-ILP32F-FPELIM-NEXT: sw a1, 4(sp)1895; ILP32-ILP32F-FPELIM-NEXT: andi a2, a2, -41896; ILP32-ILP32F-FPELIM-NEXT: lw a0, 0(a0)1897; ILP32-ILP32F-FPELIM-NEXT: addi a1, a2, 41898; ILP32-ILP32F-FPELIM-NEXT: addi a3, a2, 71899; ILP32-ILP32F-FPELIM-NEXT: sw a1, 4(sp)1900; ILP32-ILP32F-FPELIM-NEXT: andi a3, a3, -41901; ILP32-ILP32F-FPELIM-NEXT: lw a1, 0(a2)1902; ILP32-ILP32F-FPELIM-NEXT: addi a2, a3, 41903; ILP32-ILP32F-FPELIM-NEXT: sw a2, 4(sp)1904; ILP32-ILP32F-FPELIM-NEXT: lw a2, 0(a3)1905; ILP32-ILP32F-FPELIM-NEXT: add a0, a0, s01906; ILP32-ILP32F-FPELIM-NEXT: add a0, a0, a11907; ILP32-ILP32F-FPELIM-NEXT: add a0, a0, a21908; ILP32-ILP32F-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1909; ILP32-ILP32F-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1910; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 481911; ILP32-ILP32F-FPELIM-NEXT: ret1912;1913; ILP32-ILP32F-WITHFP-LABEL: va4_va_copy:1914; ILP32-ILP32F-WITHFP: # %bb.0:1915; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -641916; ILP32-ILP32F-WITHFP-NEXT: sw ra, 28(sp) # 4-byte Folded Spill1917; ILP32-ILP32F-WITHFP-NEXT: sw s0, 24(sp) # 4-byte Folded Spill1918; ILP32-ILP32F-WITHFP-NEXT: sw s1, 20(sp) # 4-byte Folded Spill1919; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 321920; ILP32-ILP32F-WITHFP-NEXT: mv s1, a11921; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)1922; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)1923; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)1924; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)1925; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)1926; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)1927; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)1928; ILP32-ILP32F-WITHFP-NEXT: addi a0, s0, 81929; ILP32-ILP32F-WITHFP-NEXT: sw a0, -16(s0)1930; ILP32-ILP32F-WITHFP-NEXT: sw a0, -20(s0)1931; ILP32-ILP32F-WITHFP-NEXT: call notdead1932; ILP32-ILP32F-WITHFP-NEXT: lw a0, -16(s0)1933; ILP32-ILP32F-WITHFP-NEXT: addi a0, a0, 31934; ILP32-ILP32F-WITHFP-NEXT: andi a0, a0, -41935; ILP32-ILP32F-WITHFP-NEXT: addi a1, a0, 41936; ILP32-ILP32F-WITHFP-NEXT: addi a2, a0, 71937; ILP32-ILP32F-WITHFP-NEXT: sw a1, -16(s0)1938; ILP32-ILP32F-WITHFP-NEXT: andi a2, a2, -41939; ILP32-ILP32F-WITHFP-NEXT: lw a0, 0(a0)1940; ILP32-ILP32F-WITHFP-NEXT: addi a1, a2, 41941; ILP32-ILP32F-WITHFP-NEXT: addi a3, a2, 71942; ILP32-ILP32F-WITHFP-NEXT: sw a1, -16(s0)1943; ILP32-ILP32F-WITHFP-NEXT: andi a3, a3, -41944; ILP32-ILP32F-WITHFP-NEXT: lw a1, 0(a2)1945; ILP32-ILP32F-WITHFP-NEXT: addi a2, a3, 41946; ILP32-ILP32F-WITHFP-NEXT: sw a2, -16(s0)1947; ILP32-ILP32F-WITHFP-NEXT: lw a2, 0(a3)1948; ILP32-ILP32F-WITHFP-NEXT: add a0, a0, s11949; ILP32-ILP32F-WITHFP-NEXT: add a0, a0, a11950; ILP32-ILP32F-WITHFP-NEXT: add a0, a0, a21951; ILP32-ILP32F-WITHFP-NEXT: lw ra, 28(sp) # 4-byte Folded Reload1952; ILP32-ILP32F-WITHFP-NEXT: lw s0, 24(sp) # 4-byte Folded Reload1953; ILP32-ILP32F-WITHFP-NEXT: lw s1, 20(sp) # 4-byte Folded Reload1954; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 641955; ILP32-ILP32F-WITHFP-NEXT: ret1956;1957; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va4_va_copy:1958; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:1959; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -481960; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1961; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1962; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv s0, a11963; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)1964; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)1965; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)1966; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)1967; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)1968; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)1969; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)1970; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, sp, 241971; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, 4(sp)1972; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, 0(sp)1973; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call notdead1974; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 4(sp)1975; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, a0, 31976; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a0, a0, -41977; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, a0, 41978; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a2, a0, 71979; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 4(sp)1980; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a2, a2, -41981; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a0, 0(a0)1982; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, a2, 41983; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a3, a2, 71984; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 4(sp)1985; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: andi a3, a3, -41986; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a1, 0(a2)1987; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a2, a3, 41988; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 4(sp)1989; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw a2, 0(a3)1990; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a0, a0, s01991; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a0, a0, a11992; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a0, a0, a21993; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1994; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1995; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 481996; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret1997;1998; ILP32E-FPELIM-LABEL: va4_va_copy:1999; ILP32E-FPELIM: # %bb.0:2000; ILP32E-FPELIM-NEXT: addi sp, sp, -402001; ILP32E-FPELIM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2002; ILP32E-FPELIM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2003; ILP32E-FPELIM-NEXT: mv s0, a12004; ILP32E-FPELIM-NEXT: sw a5, 36(sp)2005; ILP32E-FPELIM-NEXT: sw a1, 20(sp)2006; ILP32E-FPELIM-NEXT: sw a2, 24(sp)2007; ILP32E-FPELIM-NEXT: sw a3, 28(sp)2008; ILP32E-FPELIM-NEXT: sw a4, 32(sp)2009; ILP32E-FPELIM-NEXT: addi a0, sp, 242010; ILP32E-FPELIM-NEXT: sw a0, 4(sp)2011; ILP32E-FPELIM-NEXT: sw a0, 0(sp)2012; ILP32E-FPELIM-NEXT: call notdead2013; ILP32E-FPELIM-NEXT: lw a0, 4(sp)2014; ILP32E-FPELIM-NEXT: addi a0, a0, 32015; ILP32E-FPELIM-NEXT: andi a0, a0, -42016; ILP32E-FPELIM-NEXT: addi a1, a0, 42017; ILP32E-FPELIM-NEXT: addi a2, a0, 72018; ILP32E-FPELIM-NEXT: sw a1, 4(sp)2019; ILP32E-FPELIM-NEXT: andi a2, a2, -42020; ILP32E-FPELIM-NEXT: lw a0, 0(a0)2021; ILP32E-FPELIM-NEXT: addi a1, a2, 42022; ILP32E-FPELIM-NEXT: addi a3, a2, 72023; ILP32E-FPELIM-NEXT: sw a1, 4(sp)2024; ILP32E-FPELIM-NEXT: andi a3, a3, -42025; ILP32E-FPELIM-NEXT: lw a1, 0(a2)2026; ILP32E-FPELIM-NEXT: addi a2, a3, 42027; ILP32E-FPELIM-NEXT: sw a2, 4(sp)2028; ILP32E-FPELIM-NEXT: lw a2, 0(a3)2029; ILP32E-FPELIM-NEXT: add a0, a0, s02030; ILP32E-FPELIM-NEXT: add a0, a0, a12031; ILP32E-FPELIM-NEXT: add a0, a0, a22032; ILP32E-FPELIM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2033; ILP32E-FPELIM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2034; ILP32E-FPELIM-NEXT: addi sp, sp, 402035; ILP32E-FPELIM-NEXT: ret2036;2037; ILP32E-WITHFP-LABEL: va4_va_copy:2038; ILP32E-WITHFP: # %bb.0:2039; ILP32E-WITHFP-NEXT: addi sp, sp, -442040; ILP32E-WITHFP-NEXT: sw ra, 16(sp) # 4-byte Folded Spill2041; ILP32E-WITHFP-NEXT: sw s0, 12(sp) # 4-byte Folded Spill2042; ILP32E-WITHFP-NEXT: sw s1, 8(sp) # 4-byte Folded Spill2043; ILP32E-WITHFP-NEXT: addi s0, sp, 202044; ILP32E-WITHFP-NEXT: mv s1, a12045; ILP32E-WITHFP-NEXT: sw a5, 20(s0)2046; ILP32E-WITHFP-NEXT: sw a1, 4(s0)2047; ILP32E-WITHFP-NEXT: sw a2, 8(s0)2048; ILP32E-WITHFP-NEXT: sw a3, 12(s0)2049; ILP32E-WITHFP-NEXT: sw a4, 16(s0)2050; ILP32E-WITHFP-NEXT: addi a0, s0, 82051; ILP32E-WITHFP-NEXT: sw a0, -16(s0)2052; ILP32E-WITHFP-NEXT: sw a0, -20(s0)2053; ILP32E-WITHFP-NEXT: call notdead2054; ILP32E-WITHFP-NEXT: lw a0, -16(s0)2055; ILP32E-WITHFP-NEXT: addi a0, a0, 32056; ILP32E-WITHFP-NEXT: andi a0, a0, -42057; ILP32E-WITHFP-NEXT: addi a1, a0, 42058; ILP32E-WITHFP-NEXT: addi a2, a0, 72059; ILP32E-WITHFP-NEXT: sw a1, -16(s0)2060; ILP32E-WITHFP-NEXT: andi a2, a2, -42061; ILP32E-WITHFP-NEXT: lw a0, 0(a0)2062; ILP32E-WITHFP-NEXT: addi a1, a2, 42063; ILP32E-WITHFP-NEXT: addi a3, a2, 72064; ILP32E-WITHFP-NEXT: sw a1, -16(s0)2065; ILP32E-WITHFP-NEXT: andi a3, a3, -42066; ILP32E-WITHFP-NEXT: lw a1, 0(a2)2067; ILP32E-WITHFP-NEXT: addi a2, a3, 42068; ILP32E-WITHFP-NEXT: sw a2, -16(s0)2069; ILP32E-WITHFP-NEXT: lw a2, 0(a3)2070; ILP32E-WITHFP-NEXT: add a0, a0, s12071; ILP32E-WITHFP-NEXT: add a0, a0, a12072; ILP32E-WITHFP-NEXT: add a0, a0, a22073; ILP32E-WITHFP-NEXT: lw ra, 16(sp) # 4-byte Folded Reload2074; ILP32E-WITHFP-NEXT: lw s0, 12(sp) # 4-byte Folded Reload2075; ILP32E-WITHFP-NEXT: lw s1, 8(sp) # 4-byte Folded Reload2076; ILP32E-WITHFP-NEXT: addi sp, sp, 442077; ILP32E-WITHFP-NEXT: ret2078;2079; LP64-LP64F-LP64D-FPELIM-LABEL: va4_va_copy:2080; LP64-LP64F-LP64D-FPELIM: # %bb.0:2081; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -962082; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill2083; LP64-LP64F-LP64D-FPELIM-NEXT: sd s0, 16(sp) # 8-byte Folded Spill2084; LP64-LP64F-LP64D-FPELIM-NEXT: mv s0, a12085; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 72(sp)2086; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 80(sp)2087; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 88(sp)2088; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 40(sp)2089; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 48(sp)2090; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 56(sp)2091; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 64(sp)2092; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, sp, 482093; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, 8(sp)2094; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, 0(sp)2095; LP64-LP64F-LP64D-FPELIM-NEXT: call notdead2096; LP64-LP64F-LP64D-FPELIM-NEXT: ld a0, 8(sp)2097; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, a0, 32098; LP64-LP64F-LP64D-FPELIM-NEXT: andi a0, a0, -42099; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, a0, 82100; LP64-LP64F-LP64D-FPELIM-NEXT: addi a2, a0, 112101; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)2102; LP64-LP64F-LP64D-FPELIM-NEXT: andi a2, a2, -42103; LP64-LP64F-LP64D-FPELIM-NEXT: ld a0, 0(a0)2104; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, a2, 82105; LP64-LP64F-LP64D-FPELIM-NEXT: addi a3, a2, 112106; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)2107; LP64-LP64F-LP64D-FPELIM-NEXT: andi a3, a3, -42108; LP64-LP64F-LP64D-FPELIM-NEXT: ld a1, 0(a2)2109; LP64-LP64F-LP64D-FPELIM-NEXT: addi a2, a3, 82110; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 8(sp)2111; LP64-LP64F-LP64D-FPELIM-NEXT: ld a2, 0(a3)2112; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, a0, s02113; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, a0, a12114; LP64-LP64F-LP64D-FPELIM-NEXT: addw a0, a0, a22115; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload2116; LP64-LP64F-LP64D-FPELIM-NEXT: ld s0, 16(sp) # 8-byte Folded Reload2117; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 962118; LP64-LP64F-LP64D-FPELIM-NEXT: ret2119;2120; LP64-LP64F-LP64D-WITHFP-LABEL: va4_va_copy:2121; LP64-LP64F-LP64D-WITHFP: # %bb.0:2122; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -1122123; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 40(sp) # 8-byte Folded Spill2124; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 32(sp) # 8-byte Folded Spill2125; LP64-LP64F-LP64D-WITHFP-NEXT: sd s1, 24(sp) # 8-byte Folded Spill2126; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 482127; LP64-LP64F-LP64D-WITHFP-NEXT: mv s1, a12128; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)2129; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)2130; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)2131; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)2132; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)2133; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)2134; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)2135; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, s0, 162136; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, -32(s0)2137; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, -40(s0)2138; LP64-LP64F-LP64D-WITHFP-NEXT: call notdead2139; LP64-LP64F-LP64D-WITHFP-NEXT: ld a0, -32(s0)2140; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, a0, 32141; LP64-LP64F-LP64D-WITHFP-NEXT: andi a0, a0, -42142; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, a0, 82143; LP64-LP64F-LP64D-WITHFP-NEXT: addi a2, a0, 112144; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -32(s0)2145; LP64-LP64F-LP64D-WITHFP-NEXT: andi a2, a2, -42146; LP64-LP64F-LP64D-WITHFP-NEXT: ld a0, 0(a0)2147; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, a2, 82148; LP64-LP64F-LP64D-WITHFP-NEXT: addi a3, a2, 112149; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -32(s0)2150; LP64-LP64F-LP64D-WITHFP-NEXT: andi a3, a3, -42151; LP64-LP64F-LP64D-WITHFP-NEXT: ld a1, 0(a2)2152; LP64-LP64F-LP64D-WITHFP-NEXT: addi a2, a3, 82153; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, -32(s0)2154; LP64-LP64F-LP64D-WITHFP-NEXT: ld a2, 0(a3)2155; LP64-LP64F-LP64D-WITHFP-NEXT: add a0, a0, s12156; LP64-LP64F-LP64D-WITHFP-NEXT: add a0, a0, a12157; LP64-LP64F-LP64D-WITHFP-NEXT: addw a0, a0, a22158; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 40(sp) # 8-byte Folded Reload2159; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 32(sp) # 8-byte Folded Reload2160; LP64-LP64F-LP64D-WITHFP-NEXT: ld s1, 24(sp) # 8-byte Folded Reload2161; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 1122162; LP64-LP64F-LP64D-WITHFP-NEXT: ret2163;2164; LP64E-FPELIM-LABEL: va4_va_copy:2165; LP64E-FPELIM: # %bb.0:2166; LP64E-FPELIM-NEXT: addi sp, sp, -802167; LP64E-FPELIM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill2168; LP64E-FPELIM-NEXT: sd s0, 16(sp) # 8-byte Folded Spill2169; LP64E-FPELIM-NEXT: mv s0, a12170; LP64E-FPELIM-NEXT: sd a5, 72(sp)2171; LP64E-FPELIM-NEXT: sd a1, 40(sp)2172; LP64E-FPELIM-NEXT: sd a2, 48(sp)2173; LP64E-FPELIM-NEXT: sd a3, 56(sp)2174; LP64E-FPELIM-NEXT: sd a4, 64(sp)2175; LP64E-FPELIM-NEXT: addi a0, sp, 482176; LP64E-FPELIM-NEXT: sd a0, 8(sp)2177; LP64E-FPELIM-NEXT: sd a0, 0(sp)2178; LP64E-FPELIM-NEXT: call notdead2179; LP64E-FPELIM-NEXT: ld a0, 8(sp)2180; LP64E-FPELIM-NEXT: addi a0, a0, 32181; LP64E-FPELIM-NEXT: andi a0, a0, -42182; LP64E-FPELIM-NEXT: addi a1, a0, 82183; LP64E-FPELIM-NEXT: addi a2, a0, 112184; LP64E-FPELIM-NEXT: sd a1, 8(sp)2185; LP64E-FPELIM-NEXT: andi a2, a2, -42186; LP64E-FPELIM-NEXT: ld a0, 0(a0)2187; LP64E-FPELIM-NEXT: addi a1, a2, 82188; LP64E-FPELIM-NEXT: addi a3, a2, 112189; LP64E-FPELIM-NEXT: sd a1, 8(sp)2190; LP64E-FPELIM-NEXT: andi a3, a3, -42191; LP64E-FPELIM-NEXT: ld a1, 0(a2)2192; LP64E-FPELIM-NEXT: addi a2, a3, 82193; LP64E-FPELIM-NEXT: sd a2, 8(sp)2194; LP64E-FPELIM-NEXT: ld a2, 0(a3)2195; LP64E-FPELIM-NEXT: add a0, a0, s02196; LP64E-FPELIM-NEXT: add a0, a0, a12197; LP64E-FPELIM-NEXT: addw a0, a0, a22198; LP64E-FPELIM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload2199; LP64E-FPELIM-NEXT: ld s0, 16(sp) # 8-byte Folded Reload2200; LP64E-FPELIM-NEXT: addi sp, sp, 802201; LP64E-FPELIM-NEXT: ret2202;2203; LP64E-WITHFP-LABEL: va4_va_copy:2204; LP64E-WITHFP: # %bb.0:2205; LP64E-WITHFP-NEXT: addi sp, sp, -882206; LP64E-WITHFP-NEXT: sd ra, 32(sp) # 8-byte Folded Spill2207; LP64E-WITHFP-NEXT: sd s0, 24(sp) # 8-byte Folded Spill2208; LP64E-WITHFP-NEXT: sd s1, 16(sp) # 8-byte Folded Spill2209; LP64E-WITHFP-NEXT: addi s0, sp, 402210; LP64E-WITHFP-NEXT: mv s1, a12211; LP64E-WITHFP-NEXT: sd a5, 40(s0)2212; LP64E-WITHFP-NEXT: sd a1, 8(s0)2213; LP64E-WITHFP-NEXT: sd a2, 16(s0)2214; LP64E-WITHFP-NEXT: sd a3, 24(s0)2215; LP64E-WITHFP-NEXT: sd a4, 32(s0)2216; LP64E-WITHFP-NEXT: addi a0, s0, 162217; LP64E-WITHFP-NEXT: sd a0, -32(s0)2218; LP64E-WITHFP-NEXT: sd a0, -40(s0)2219; LP64E-WITHFP-NEXT: call notdead2220; LP64E-WITHFP-NEXT: ld a0, -32(s0)2221; LP64E-WITHFP-NEXT: addi a0, a0, 32222; LP64E-WITHFP-NEXT: andi a0, a0, -42223; LP64E-WITHFP-NEXT: addi a1, a0, 82224; LP64E-WITHFP-NEXT: addi a2, a0, 112225; LP64E-WITHFP-NEXT: sd a1, -32(s0)2226; LP64E-WITHFP-NEXT: andi a2, a2, -42227; LP64E-WITHFP-NEXT: ld a0, 0(a0)2228; LP64E-WITHFP-NEXT: addi a1, a2, 82229; LP64E-WITHFP-NEXT: addi a3, a2, 112230; LP64E-WITHFP-NEXT: sd a1, -32(s0)2231; LP64E-WITHFP-NEXT: andi a3, a3, -42232; LP64E-WITHFP-NEXT: ld a1, 0(a2)2233; LP64E-WITHFP-NEXT: addi a2, a3, 82234; LP64E-WITHFP-NEXT: sd a2, -32(s0)2235; LP64E-WITHFP-NEXT: ld a2, 0(a3)2236; LP64E-WITHFP-NEXT: add a0, a0, s12237; LP64E-WITHFP-NEXT: add a0, a0, a12238; LP64E-WITHFP-NEXT: addw a0, a0, a22239; LP64E-WITHFP-NEXT: ld ra, 32(sp) # 8-byte Folded Reload2240; LP64E-WITHFP-NEXT: ld s0, 24(sp) # 8-byte Folded Reload2241; LP64E-WITHFP-NEXT: ld s1, 16(sp) # 8-byte Folded Reload2242; LP64E-WITHFP-NEXT: addi sp, sp, 882243; LP64E-WITHFP-NEXT: ret2244 %vargs = alloca ptr2245 %wargs = alloca ptr2246 call void @llvm.va_start(ptr %vargs)2247 %1 = va_arg ptr %vargs, i322248 call void @llvm.va_copy(ptr %wargs, ptr %vargs)2249 %2 = load ptr, ptr %wargs, align 42250 call void @notdead(ptr %2)2251 %3 = va_arg ptr %vargs, i322252 %4 = va_arg ptr %vargs, i322253 %5 = va_arg ptr %vargs, i322254 call void @llvm.va_end(ptr %vargs)2255 call void @llvm.va_end(ptr %wargs)2256 %add1 = add i32 %3, %12257 %add2 = add i32 %add1, %42258 %add3 = add i32 %add2, %52259 ret i32 %add32260}2261 2262; Check 2x*xlen values are aligned appropriately when passed on the stack in a vararg call2263 2264declare i32 @va5_aligned_stack_callee(i32, ...)2265 2266define void @va5_aligned_stack_caller() nounwind {2267; The double should be 8-byte aligned on the stack, but the two-element array2268; should only be 4-byte aligned2269; ILP32-ILP32F-FPELIM-LABEL: va5_aligned_stack_caller:2270; ILP32-ILP32F-FPELIM: # %bb.0:2271; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -642272; ILP32-ILP32F-FPELIM-NEXT: sw ra, 60(sp) # 4-byte Folded Spill2273; ILP32-ILP32F-FPELIM-NEXT: li a4, 172274; ILP32-ILP32F-FPELIM-NEXT: li a5, 162275; ILP32-ILP32F-FPELIM-NEXT: li a6, 152276; ILP32-ILP32F-FPELIM-NEXT: lui a7, 2622362277; ILP32-ILP32F-FPELIM-NEXT: lui t0, 3774872278; ILP32-ILP32F-FPELIM-NEXT: li t1, 142279; ILP32-ILP32F-FPELIM-NEXT: lui t2, 2621532280; ILP32-ILP32F-FPELIM-NEXT: lui t3, 5452602281; ILP32-ILP32F-FPELIM-NEXT: lui t4, 9646902282; ILP32-ILP32F-FPELIM-NEXT: lui t5, 3355442283; ILP32-ILP32F-FPELIM-NEXT: lui t6, 6885092284; ILP32-ILP32F-FPELIM-NEXT: li a0, 12285; ILP32-ILP32F-FPELIM-NEXT: li a1, 112286; ILP32-ILP32F-FPELIM-NEXT: addi a2, sp, 322287; ILP32-ILP32F-FPELIM-NEXT: li a3, 122288; ILP32-ILP32F-FPELIM-NEXT: sw a5, 20(sp)2289; ILP32-ILP32F-FPELIM-NEXT: sw a4, 24(sp)2290; ILP32-ILP32F-FPELIM-NEXT: li a4, 132291; ILP32-ILP32F-FPELIM-NEXT: addi a5, a7, 6552292; ILP32-ILP32F-FPELIM-NEXT: addi a7, t0, 14752293; ILP32-ILP32F-FPELIM-NEXT: sw t1, 0(sp)2294; ILP32-ILP32F-FPELIM-NEXT: sw a7, 8(sp)2295; ILP32-ILP32F-FPELIM-NEXT: sw a5, 12(sp)2296; ILP32-ILP32F-FPELIM-NEXT: sw a6, 16(sp)2297; ILP32-ILP32F-FPELIM-NEXT: li a7, 42298; ILP32-ILP32F-FPELIM-NEXT: addi a5, t2, 4912299; ILP32-ILP32F-FPELIM-NEXT: addi t0, t3, -19672300; ILP32-ILP32F-FPELIM-NEXT: addi t1, t4, -3282301; ILP32-ILP32F-FPELIM-NEXT: addi t2, t5, 13112302; ILP32-ILP32F-FPELIM-NEXT: addi a6, t6, -20482303; ILP32-ILP32F-FPELIM-NEXT: sw t2, 32(sp)2304; ILP32-ILP32F-FPELIM-NEXT: sw t1, 36(sp)2305; ILP32-ILP32F-FPELIM-NEXT: sw t0, 40(sp)2306; ILP32-ILP32F-FPELIM-NEXT: sw a5, 44(sp)2307; ILP32-ILP32F-FPELIM-NEXT: call va5_aligned_stack_callee2308; ILP32-ILP32F-FPELIM-NEXT: lw ra, 60(sp) # 4-byte Folded Reload2309; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 642310; ILP32-ILP32F-FPELIM-NEXT: ret2311;2312; ILP32-ILP32F-WITHFP-LABEL: va5_aligned_stack_caller:2313; ILP32-ILP32F-WITHFP: # %bb.0:2314; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -642315; ILP32-ILP32F-WITHFP-NEXT: sw ra, 60(sp) # 4-byte Folded Spill2316; ILP32-ILP32F-WITHFP-NEXT: sw s0, 56(sp) # 4-byte Folded Spill2317; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 642318; ILP32-ILP32F-WITHFP-NEXT: li a4, 172319; ILP32-ILP32F-WITHFP-NEXT: li a5, 162320; ILP32-ILP32F-WITHFP-NEXT: li a6, 152321; ILP32-ILP32F-WITHFP-NEXT: lui a7, 2622362322; ILP32-ILP32F-WITHFP-NEXT: lui t0, 3774872323; ILP32-ILP32F-WITHFP-NEXT: li t1, 142324; ILP32-ILP32F-WITHFP-NEXT: lui t2, 2621532325; ILP32-ILP32F-WITHFP-NEXT: lui t3, 5452602326; ILP32-ILP32F-WITHFP-NEXT: lui t4, 9646902327; ILP32-ILP32F-WITHFP-NEXT: lui t5, 3355442328; ILP32-ILP32F-WITHFP-NEXT: lui t6, 6885092329; ILP32-ILP32F-WITHFP-NEXT: li a0, 12330; ILP32-ILP32F-WITHFP-NEXT: li a1, 112331; ILP32-ILP32F-WITHFP-NEXT: addi a2, s0, -322332; ILP32-ILP32F-WITHFP-NEXT: li a3, 122333; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(sp)2334; ILP32-ILP32F-WITHFP-NEXT: sw a4, 24(sp)2335; ILP32-ILP32F-WITHFP-NEXT: li a4, 132336; ILP32-ILP32F-WITHFP-NEXT: addi a5, a7, 6552337; ILP32-ILP32F-WITHFP-NEXT: addi a7, t0, 14752338; ILP32-ILP32F-WITHFP-NEXT: sw t1, 0(sp)2339; ILP32-ILP32F-WITHFP-NEXT: sw a7, 8(sp)2340; ILP32-ILP32F-WITHFP-NEXT: sw a5, 12(sp)2341; ILP32-ILP32F-WITHFP-NEXT: sw a6, 16(sp)2342; ILP32-ILP32F-WITHFP-NEXT: li a7, 42343; ILP32-ILP32F-WITHFP-NEXT: addi a5, t2, 4912344; ILP32-ILP32F-WITHFP-NEXT: addi t0, t3, -19672345; ILP32-ILP32F-WITHFP-NEXT: addi t1, t4, -3282346; ILP32-ILP32F-WITHFP-NEXT: addi t2, t5, 13112347; ILP32-ILP32F-WITHFP-NEXT: addi a6, t6, -20482348; ILP32-ILP32F-WITHFP-NEXT: sw t2, -32(s0)2349; ILP32-ILP32F-WITHFP-NEXT: sw t1, -28(s0)2350; ILP32-ILP32F-WITHFP-NEXT: sw t0, -24(s0)2351; ILP32-ILP32F-WITHFP-NEXT: sw a5, -20(s0)2352; ILP32-ILP32F-WITHFP-NEXT: call va5_aligned_stack_callee2353; ILP32-ILP32F-WITHFP-NEXT: lw ra, 60(sp) # 4-byte Folded Reload2354; ILP32-ILP32F-WITHFP-NEXT: lw s0, 56(sp) # 4-byte Folded Reload2355; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 642356; ILP32-ILP32F-WITHFP-NEXT: ret2357;2358; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va5_aligned_stack_caller:2359; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:2360; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -642361; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw ra, 60(sp) # 4-byte Folded Spill2362; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a5, 2622362363; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a6, 3774872364; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a4, 172365; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a7, 162366; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li t0, 152367; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li t1, 142368; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t2, 2621532369; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t3, 5452602370; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t4, 9646902371; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t5, 3355442372; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t6, 6885092373; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a0, 12374; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a1, 112375; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a2, sp, 322376; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a3, 122377; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 20(sp)2378; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 24(sp)2379; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a4, 132380; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a5, a5, 6552381; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a6, a6, 14752382; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw t1, 0(sp)2383; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 8(sp)2384; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 12(sp)2385; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw t0, 16(sp)2386; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: li a7, 42387; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a5, t2, 4912388; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi t0, t3, -19672389; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi t1, t4, -3282390; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi t2, t5, 13112391; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a6, t6, -20482392; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw t2, 32(sp)2393; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw t1, 36(sp)2394; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw t0, 40(sp)2395; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 44(sp)2396; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: call va5_aligned_stack_callee2397; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lw ra, 60(sp) # 4-byte Folded Reload2398; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 642399; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret2400;2401; ILP32E-FPELIM-LABEL: va5_aligned_stack_caller:2402; ILP32E-FPELIM: # %bb.0:2403; ILP32E-FPELIM-NEXT: addi sp, sp, -642404; ILP32E-FPELIM-NEXT: sw ra, 60(sp) # 4-byte Folded Spill2405; ILP32E-FPELIM-NEXT: sw s0, 56(sp) # 4-byte Folded Spill2406; ILP32E-FPELIM-NEXT: addi s0, sp, 642407; ILP32E-FPELIM-NEXT: andi sp, sp, -162408; ILP32E-FPELIM-NEXT: li a3, 172409; ILP32E-FPELIM-NEXT: li a4, 162410; ILP32E-FPELIM-NEXT: li a5, 152411; ILP32E-FPELIM-NEXT: lui a6, 2622362412; ILP32E-FPELIM-NEXT: lui a7, 3774872413; ILP32E-FPELIM-NEXT: li t0, 142414; ILP32E-FPELIM-NEXT: li t1, 42415; ILP32E-FPELIM-NEXT: lui t2, 2621532416; ILP32E-FPELIM-NEXT: lui t3, 5452602417; ILP32E-FPELIM-NEXT: lui t4, 9646902418; ILP32E-FPELIM-NEXT: lui t5, 3355442419; ILP32E-FPELIM-NEXT: lui t6, 6885092420; ILP32E-FPELIM-NEXT: li a0, 12421; ILP32E-FPELIM-NEXT: li a1, 112422; ILP32E-FPELIM-NEXT: addi a2, sp, 322423; ILP32E-FPELIM-NEXT: sw a5, 16(sp)2424; ILP32E-FPELIM-NEXT: sw a4, 20(sp)2425; ILP32E-FPELIM-NEXT: sw a3, 24(sp)2426; ILP32E-FPELIM-NEXT: li a3, 122427; ILP32E-FPELIM-NEXT: addi a4, a6, 6552428; ILP32E-FPELIM-NEXT: addi a5, a7, 14752429; ILP32E-FPELIM-NEXT: sw t1, 0(sp)2430; ILP32E-FPELIM-NEXT: sw t0, 4(sp)2431; ILP32E-FPELIM-NEXT: sw a5, 8(sp)2432; ILP32E-FPELIM-NEXT: sw a4, 12(sp)2433; ILP32E-FPELIM-NEXT: li a4, 132434; ILP32E-FPELIM-NEXT: addi a6, t2, 4912435; ILP32E-FPELIM-NEXT: addi a7, t3, -19672436; ILP32E-FPELIM-NEXT: addi t0, t4, -3282437; ILP32E-FPELIM-NEXT: addi t1, t5, 13112438; ILP32E-FPELIM-NEXT: addi a5, t6, -20482439; ILP32E-FPELIM-NEXT: sw t1, 32(sp)2440; ILP32E-FPELIM-NEXT: sw t0, 36(sp)2441; ILP32E-FPELIM-NEXT: sw a7, 40(sp)2442; ILP32E-FPELIM-NEXT: sw a6, 44(sp)2443; ILP32E-FPELIM-NEXT: call va5_aligned_stack_callee2444; ILP32E-FPELIM-NEXT: addi sp, s0, -642445; ILP32E-FPELIM-NEXT: lw ra, 60(sp) # 4-byte Folded Reload2446; ILP32E-FPELIM-NEXT: lw s0, 56(sp) # 4-byte Folded Reload2447; ILP32E-FPELIM-NEXT: addi sp, sp, 642448; ILP32E-FPELIM-NEXT: ret2449;2450; ILP32E-WITHFP-LABEL: va5_aligned_stack_caller:2451; ILP32E-WITHFP: # %bb.0:2452; ILP32E-WITHFP-NEXT: addi sp, sp, -642453; ILP32E-WITHFP-NEXT: sw ra, 60(sp) # 4-byte Folded Spill2454; ILP32E-WITHFP-NEXT: sw s0, 56(sp) # 4-byte Folded Spill2455; ILP32E-WITHFP-NEXT: addi s0, sp, 642456; ILP32E-WITHFP-NEXT: andi sp, sp, -162457; ILP32E-WITHFP-NEXT: li a3, 172458; ILP32E-WITHFP-NEXT: li a4, 162459; ILP32E-WITHFP-NEXT: li a5, 152460; ILP32E-WITHFP-NEXT: lui a6, 2622362461; ILP32E-WITHFP-NEXT: lui a7, 3774872462; ILP32E-WITHFP-NEXT: li t0, 142463; ILP32E-WITHFP-NEXT: li t1, 42464; ILP32E-WITHFP-NEXT: lui t2, 2621532465; ILP32E-WITHFP-NEXT: lui t3, 5452602466; ILP32E-WITHFP-NEXT: lui t4, 9646902467; ILP32E-WITHFP-NEXT: lui t5, 3355442468; ILP32E-WITHFP-NEXT: lui t6, 6885092469; ILP32E-WITHFP-NEXT: li a0, 12470; ILP32E-WITHFP-NEXT: li a1, 112471; ILP32E-WITHFP-NEXT: addi a2, sp, 322472; ILP32E-WITHFP-NEXT: sw a5, 16(sp)2473; ILP32E-WITHFP-NEXT: sw a4, 20(sp)2474; ILP32E-WITHFP-NEXT: sw a3, 24(sp)2475; ILP32E-WITHFP-NEXT: li a3, 122476; ILP32E-WITHFP-NEXT: addi a4, a6, 6552477; ILP32E-WITHFP-NEXT: addi a5, a7, 14752478; ILP32E-WITHFP-NEXT: sw t1, 0(sp)2479; ILP32E-WITHFP-NEXT: sw t0, 4(sp)2480; ILP32E-WITHFP-NEXT: sw a5, 8(sp)2481; ILP32E-WITHFP-NEXT: sw a4, 12(sp)2482; ILP32E-WITHFP-NEXT: li a4, 132483; ILP32E-WITHFP-NEXT: addi a6, t2, 4912484; ILP32E-WITHFP-NEXT: addi a7, t3, -19672485; ILP32E-WITHFP-NEXT: addi t0, t4, -3282486; ILP32E-WITHFP-NEXT: addi t1, t5, 13112487; ILP32E-WITHFP-NEXT: addi a5, t6, -20482488; ILP32E-WITHFP-NEXT: sw t1, 32(sp)2489; ILP32E-WITHFP-NEXT: sw t0, 36(sp)2490; ILP32E-WITHFP-NEXT: sw a7, 40(sp)2491; ILP32E-WITHFP-NEXT: sw a6, 44(sp)2492; ILP32E-WITHFP-NEXT: call va5_aligned_stack_callee2493; ILP32E-WITHFP-NEXT: addi sp, s0, -642494; ILP32E-WITHFP-NEXT: lw ra, 60(sp) # 4-byte Folded Reload2495; ILP32E-WITHFP-NEXT: lw s0, 56(sp) # 4-byte Folded Reload2496; ILP32E-WITHFP-NEXT: addi sp, sp, 642497; ILP32E-WITHFP-NEXT: ret2498;2499; LP64-LP64F-LP64D-FPELIM-LABEL: va5_aligned_stack_caller:2500; LP64-LP64F-LP64D-FPELIM: # %bb.0:2501; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -482502; LP64-LP64F-LP64D-FPELIM-NEXT: sd ra, 40(sp) # 8-byte Folded Spill2503; LP64-LP64F-LP64D-FPELIM-NEXT: li t0, 172504; LP64-LP64F-LP64D-FPELIM-NEXT: li t1, 162505; LP64-LP64F-LP64D-FPELIM-NEXT: li t2, 152506; LP64-LP64F-LP64D-FPELIM-NEXT: lui a2, %hi(.LCPI11_0)2507; LP64-LP64F-LP64D-FPELIM-NEXT: lui a3, %hi(.LCPI11_1)2508; LP64-LP64F-LP64D-FPELIM-NEXT: lui a6, %hi(.LCPI11_2)2509; LP64-LP64F-LP64D-FPELIM-NEXT: lui t3, 23842510; LP64-LP64F-LP64D-FPELIM-NEXT: li a0, 12511; LP64-LP64F-LP64D-FPELIM-NEXT: li a1, 112512; LP64-LP64F-LP64D-FPELIM-NEXT: li a4, 122513; LP64-LP64F-LP64D-FPELIM-NEXT: li a5, 132514; LP64-LP64F-LP64D-FPELIM-NEXT: li a7, 142515; LP64-LP64F-LP64D-FPELIM-NEXT: ld t4, %lo(.LCPI11_0)(a2)2516; LP64-LP64F-LP64D-FPELIM-NEXT: ld a2, %lo(.LCPI11_1)(a3)2517; LP64-LP64F-LP64D-FPELIM-NEXT: ld a3, %lo(.LCPI11_2)(a6)2518; LP64-LP64F-LP64D-FPELIM-NEXT: addi a6, t3, 7612519; LP64-LP64F-LP64D-FPELIM-NEXT: slli a6, a6, 112520; LP64-LP64F-LP64D-FPELIM-NEXT: sd t4, 0(sp)2521; LP64-LP64F-LP64D-FPELIM-NEXT: sd t2, 8(sp)2522; LP64-LP64F-LP64D-FPELIM-NEXT: sd t1, 16(sp)2523; LP64-LP64F-LP64D-FPELIM-NEXT: sd t0, 24(sp)2524; LP64-LP64F-LP64D-FPELIM-NEXT: call va5_aligned_stack_callee2525; LP64-LP64F-LP64D-FPELIM-NEXT: ld ra, 40(sp) # 8-byte Folded Reload2526; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 482527; LP64-LP64F-LP64D-FPELIM-NEXT: ret2528;2529; LP64-LP64F-LP64D-WITHFP-LABEL: va5_aligned_stack_caller:2530; LP64-LP64F-LP64D-WITHFP: # %bb.0:2531; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -482532; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 40(sp) # 8-byte Folded Spill2533; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 32(sp) # 8-byte Folded Spill2534; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 482535; LP64-LP64F-LP64D-WITHFP-NEXT: li t0, 172536; LP64-LP64F-LP64D-WITHFP-NEXT: li t1, 162537; LP64-LP64F-LP64D-WITHFP-NEXT: li t2, 152538; LP64-LP64F-LP64D-WITHFP-NEXT: lui a2, %hi(.LCPI11_0)2539; LP64-LP64F-LP64D-WITHFP-NEXT: lui a3, %hi(.LCPI11_1)2540; LP64-LP64F-LP64D-WITHFP-NEXT: lui a6, %hi(.LCPI11_2)2541; LP64-LP64F-LP64D-WITHFP-NEXT: lui t3, 23842542; LP64-LP64F-LP64D-WITHFP-NEXT: li a0, 12543; LP64-LP64F-LP64D-WITHFP-NEXT: li a1, 112544; LP64-LP64F-LP64D-WITHFP-NEXT: li a4, 122545; LP64-LP64F-LP64D-WITHFP-NEXT: li a5, 132546; LP64-LP64F-LP64D-WITHFP-NEXT: li a7, 142547; LP64-LP64F-LP64D-WITHFP-NEXT: ld t4, %lo(.LCPI11_0)(a2)2548; LP64-LP64F-LP64D-WITHFP-NEXT: ld a2, %lo(.LCPI11_1)(a3)2549; LP64-LP64F-LP64D-WITHFP-NEXT: ld a3, %lo(.LCPI11_2)(a6)2550; LP64-LP64F-LP64D-WITHFP-NEXT: addi a6, t3, 7612551; LP64-LP64F-LP64D-WITHFP-NEXT: slli a6, a6, 112552; LP64-LP64F-LP64D-WITHFP-NEXT: sd t4, 0(sp)2553; LP64-LP64F-LP64D-WITHFP-NEXT: sd t2, 8(sp)2554; LP64-LP64F-LP64D-WITHFP-NEXT: sd t1, 16(sp)2555; LP64-LP64F-LP64D-WITHFP-NEXT: sd t0, 24(sp)2556; LP64-LP64F-LP64D-WITHFP-NEXT: call va5_aligned_stack_callee2557; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 40(sp) # 8-byte Folded Reload2558; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 32(sp) # 8-byte Folded Reload2559; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 482560; LP64-LP64F-LP64D-WITHFP-NEXT: ret2561;2562; LP64E-FPELIM-LABEL: va5_aligned_stack_caller:2563; LP64E-FPELIM: # %bb.0:2564; LP64E-FPELIM-NEXT: addi sp, sp, -562565; LP64E-FPELIM-NEXT: sd ra, 48(sp) # 8-byte Folded Spill2566; LP64E-FPELIM-NEXT: li a2, 172567; LP64E-FPELIM-NEXT: li a3, 162568; LP64E-FPELIM-NEXT: li a6, 152569; LP64E-FPELIM-NEXT: lui a7, %hi(.LCPI11_0)2570; LP64E-FPELIM-NEXT: li t0, 142571; LP64E-FPELIM-NEXT: lui t1, 23842572; LP64E-FPELIM-NEXT: lui t2, %hi(.LCPI11_1)2573; LP64E-FPELIM-NEXT: lui t3, %hi(.LCPI11_2)2574; LP64E-FPELIM-NEXT: li a0, 12575; LP64E-FPELIM-NEXT: li a1, 112576; LP64E-FPELIM-NEXT: li a4, 122577; LP64E-FPELIM-NEXT: sd a3, 32(sp)2578; LP64E-FPELIM-NEXT: sd a2, 40(sp)2579; LP64E-FPELIM-NEXT: li a5, 132580; LP64E-FPELIM-NEXT: ld a7, %lo(.LCPI11_0)(a7)2581; LP64E-FPELIM-NEXT: addi t1, t1, 7612582; LP64E-FPELIM-NEXT: ld a2, %lo(.LCPI11_1)(t2)2583; LP64E-FPELIM-NEXT: ld a3, %lo(.LCPI11_2)(t3)2584; LP64E-FPELIM-NEXT: slli t1, t1, 112585; LP64E-FPELIM-NEXT: sd t1, 0(sp)2586; LP64E-FPELIM-NEXT: sd t0, 8(sp)2587; LP64E-FPELIM-NEXT: sd a7, 16(sp)2588; LP64E-FPELIM-NEXT: sd a6, 24(sp)2589; LP64E-FPELIM-NEXT: call va5_aligned_stack_callee2590; LP64E-FPELIM-NEXT: ld ra, 48(sp) # 8-byte Folded Reload2591; LP64E-FPELIM-NEXT: addi sp, sp, 562592; LP64E-FPELIM-NEXT: ret2593;2594; LP64E-WITHFP-LABEL: va5_aligned_stack_caller:2595; LP64E-WITHFP: # %bb.0:2596; LP64E-WITHFP-NEXT: addi sp, sp, -642597; LP64E-WITHFP-NEXT: sd ra, 56(sp) # 8-byte Folded Spill2598; LP64E-WITHFP-NEXT: sd s0, 48(sp) # 8-byte Folded Spill2599; LP64E-WITHFP-NEXT: addi s0, sp, 642600; LP64E-WITHFP-NEXT: li a2, 172601; LP64E-WITHFP-NEXT: li a3, 162602; LP64E-WITHFP-NEXT: li a6, 152603; LP64E-WITHFP-NEXT: lui a7, %hi(.LCPI11_0)2604; LP64E-WITHFP-NEXT: li t0, 142605; LP64E-WITHFP-NEXT: lui t1, 23842606; LP64E-WITHFP-NEXT: lui t2, %hi(.LCPI11_1)2607; LP64E-WITHFP-NEXT: lui t3, %hi(.LCPI11_2)2608; LP64E-WITHFP-NEXT: li a0, 12609; LP64E-WITHFP-NEXT: li a1, 112610; LP64E-WITHFP-NEXT: li a4, 122611; LP64E-WITHFP-NEXT: sd a3, 32(sp)2612; LP64E-WITHFP-NEXT: sd a2, 40(sp)2613; LP64E-WITHFP-NEXT: li a5, 132614; LP64E-WITHFP-NEXT: ld a7, %lo(.LCPI11_0)(a7)2615; LP64E-WITHFP-NEXT: addi t1, t1, 7612616; LP64E-WITHFP-NEXT: ld a2, %lo(.LCPI11_1)(t2)2617; LP64E-WITHFP-NEXT: ld a3, %lo(.LCPI11_2)(t3)2618; LP64E-WITHFP-NEXT: slli t1, t1, 112619; LP64E-WITHFP-NEXT: sd t1, 0(sp)2620; LP64E-WITHFP-NEXT: sd t0, 8(sp)2621; LP64E-WITHFP-NEXT: sd a7, 16(sp)2622; LP64E-WITHFP-NEXT: sd a6, 24(sp)2623; LP64E-WITHFP-NEXT: call va5_aligned_stack_callee2624; LP64E-WITHFP-NEXT: ld ra, 56(sp) # 8-byte Folded Reload2625; LP64E-WITHFP-NEXT: ld s0, 48(sp) # 8-byte Folded Reload2626; LP64E-WITHFP-NEXT: addi sp, sp, 642627; LP64E-WITHFP-NEXT: ret2628 %1 = call i32 (i32, ...) @va5_aligned_stack_callee(i32 1, i32 11,2629 fp128 0xLEB851EB851EB851F400091EB851EB851, i32 12, i32 13, i64 20000000000,2630 i32 14, double 2.720000e+00, i32 15, [2 x i32] [i32 16, i32 17])2631 ret void2632}2633 2634; A function with no fixed arguments is not valid C, but can be2635; specified in LLVM IR. We must ensure the vararg save area is2636; still set up correctly.2637 2638define i32 @va6_no_fixed_args(...) nounwind {2639; ILP32-ILP32F-FPELIM-LABEL: va6_no_fixed_args:2640; ILP32-ILP32F-FPELIM: # %bb.0:2641; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, -482642; ILP32-ILP32F-FPELIM-NEXT: sw a4, 32(sp)2643; ILP32-ILP32F-FPELIM-NEXT: sw a5, 36(sp)2644; ILP32-ILP32F-FPELIM-NEXT: sw a6, 40(sp)2645; ILP32-ILP32F-FPELIM-NEXT: sw a7, 44(sp)2646; ILP32-ILP32F-FPELIM-NEXT: sw a0, 16(sp)2647; ILP32-ILP32F-FPELIM-NEXT: sw a1, 20(sp)2648; ILP32-ILP32F-FPELIM-NEXT: sw a2, 24(sp)2649; ILP32-ILP32F-FPELIM-NEXT: sw a3, 28(sp)2650; ILP32-ILP32F-FPELIM-NEXT: addi a1, sp, 202651; ILP32-ILP32F-FPELIM-NEXT: sw a1, 12(sp)2652; ILP32-ILP32F-FPELIM-NEXT: addi sp, sp, 482653; ILP32-ILP32F-FPELIM-NEXT: ret2654;2655; ILP32-ILP32F-WITHFP-LABEL: va6_no_fixed_args:2656; ILP32-ILP32F-WITHFP: # %bb.0:2657; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -482658; ILP32-ILP32F-WITHFP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2659; ILP32-ILP32F-WITHFP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2660; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 162661; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)2662; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)2663; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)2664; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)2665; ILP32-ILP32F-WITHFP-NEXT: sw a0, 0(s0)2666; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)2667; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)2668; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)2669; ILP32-ILP32F-WITHFP-NEXT: addi a1, s0, 42670; ILP32-ILP32F-WITHFP-NEXT: sw a1, -12(s0)2671; ILP32-ILP32F-WITHFP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2672; ILP32-ILP32F-WITHFP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2673; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 482674; ILP32-ILP32F-WITHFP-NEXT: ret2675;2676; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va6_no_fixed_args:2677; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:2678; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, -482679; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 32(sp)2680; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 36(sp)2681; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 40(sp)2682; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 44(sp)2683; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a0, 16(sp)2684; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 20(sp)2685; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 24(sp)2686; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 28(sp)2687; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, sp, 202688; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 12(sp)2689; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi sp, sp, 482690; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret2691;2692; ILP32E-FPELIM-LABEL: va6_no_fixed_args:2693; ILP32E-FPELIM: # %bb.0:2694; ILP32E-FPELIM-NEXT: addi sp, sp, -282695; ILP32E-FPELIM-NEXT: sw a4, 20(sp)2696; ILP32E-FPELIM-NEXT: sw a5, 24(sp)2697; ILP32E-FPELIM-NEXT: sw a0, 4(sp)2698; ILP32E-FPELIM-NEXT: sw a1, 8(sp)2699; ILP32E-FPELIM-NEXT: sw a2, 12(sp)2700; ILP32E-FPELIM-NEXT: sw a3, 16(sp)2701; ILP32E-FPELIM-NEXT: addi a1, sp, 82702; ILP32E-FPELIM-NEXT: sw a1, 0(sp)2703; ILP32E-FPELIM-NEXT: addi sp, sp, 282704; ILP32E-FPELIM-NEXT: ret2705;2706; ILP32E-WITHFP-LABEL: va6_no_fixed_args:2707; ILP32E-WITHFP: # %bb.0:2708; ILP32E-WITHFP-NEXT: addi sp, sp, -362709; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill2710; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill2711; ILP32E-WITHFP-NEXT: addi s0, sp, 122712; ILP32E-WITHFP-NEXT: sw a4, 16(s0)2713; ILP32E-WITHFP-NEXT: sw a5, 20(s0)2714; ILP32E-WITHFP-NEXT: sw a0, 0(s0)2715; ILP32E-WITHFP-NEXT: sw a1, 4(s0)2716; ILP32E-WITHFP-NEXT: sw a2, 8(s0)2717; ILP32E-WITHFP-NEXT: sw a3, 12(s0)2718; ILP32E-WITHFP-NEXT: addi a1, s0, 42719; ILP32E-WITHFP-NEXT: sw a1, -12(s0)2720; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload2721; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload2722; ILP32E-WITHFP-NEXT: addi sp, sp, 362723; ILP32E-WITHFP-NEXT: ret2724;2725; LP64-LP64F-LP64D-FPELIM-LABEL: va6_no_fixed_args:2726; LP64-LP64F-LP64D-FPELIM: # %bb.0:2727; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, -802728; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 48(sp)2729; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 56(sp)2730; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 64(sp)2731; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 72(sp)2732; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, 16(sp)2733; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 24(sp)2734; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 32(sp)2735; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 40(sp)2736; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, sp, 242737; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 8(sp)2738; LP64-LP64F-LP64D-FPELIM-NEXT: addi sp, sp, 802739; LP64-LP64F-LP64D-FPELIM-NEXT: ret2740;2741; LP64-LP64F-LP64D-WITHFP-LABEL: va6_no_fixed_args:2742; LP64-LP64F-LP64D-WITHFP: # %bb.0:2743; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -962744; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill2745; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill2746; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 322747; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)2748; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)2749; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)2750; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)2751; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, 0(s0)2752; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)2753; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)2754; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)2755; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, s0, 82756; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, -24(s0)2757; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload2758; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload2759; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 962760; LP64-LP64F-LP64D-WITHFP-NEXT: ret2761;2762; LP64E-FPELIM-LABEL: va6_no_fixed_args:2763; LP64E-FPELIM: # %bb.0:2764; LP64E-FPELIM-NEXT: addi sp, sp, -562765; LP64E-FPELIM-NEXT: sd a4, 40(sp)2766; LP64E-FPELIM-NEXT: sd a5, 48(sp)2767; LP64E-FPELIM-NEXT: sd a0, 8(sp)2768; LP64E-FPELIM-NEXT: sd a1, 16(sp)2769; LP64E-FPELIM-NEXT: sd a2, 24(sp)2770; LP64E-FPELIM-NEXT: sd a3, 32(sp)2771; LP64E-FPELIM-NEXT: addi a1, sp, 162772; LP64E-FPELIM-NEXT: sd a1, 0(sp)2773; LP64E-FPELIM-NEXT: addi sp, sp, 562774; LP64E-FPELIM-NEXT: ret2775;2776; LP64E-WITHFP-LABEL: va6_no_fixed_args:2777; LP64E-WITHFP: # %bb.0:2778; LP64E-WITHFP-NEXT: addi sp, sp, -722779; LP64E-WITHFP-NEXT: sd ra, 16(sp) # 8-byte Folded Spill2780; LP64E-WITHFP-NEXT: sd s0, 8(sp) # 8-byte Folded Spill2781; LP64E-WITHFP-NEXT: addi s0, sp, 242782; LP64E-WITHFP-NEXT: sd a4, 32(s0)2783; LP64E-WITHFP-NEXT: sd a5, 40(s0)2784; LP64E-WITHFP-NEXT: sd a0, 0(s0)2785; LP64E-WITHFP-NEXT: sd a1, 8(s0)2786; LP64E-WITHFP-NEXT: sd a2, 16(s0)2787; LP64E-WITHFP-NEXT: sd a3, 24(s0)2788; LP64E-WITHFP-NEXT: addi a1, s0, 82789; LP64E-WITHFP-NEXT: sd a1, -24(s0)2790; LP64E-WITHFP-NEXT: ld ra, 16(sp) # 8-byte Folded Reload2791; LP64E-WITHFP-NEXT: ld s0, 8(sp) # 8-byte Folded Reload2792; LP64E-WITHFP-NEXT: addi sp, sp, 722793; LP64E-WITHFP-NEXT: ret2794 %va = alloca ptr2795 call void @llvm.va_start(ptr %va)2796 %1 = va_arg ptr %va, i322797 call void @llvm.va_end(ptr %va)2798 ret i32 %12799}2800 2801; TODO: improve constant materialization of stack addresses2802 2803define i32 @va_large_stack(ptr %fmt, ...) {2804; ILP32-ILP32F-FPELIM-LABEL: va_large_stack:2805; ILP32-ILP32F-FPELIM: # %bb.0:2806; ILP32-ILP32F-FPELIM-NEXT: lui a0, 244142807; ILP32-ILP32F-FPELIM-NEXT: addi a0, a0, 3042808; ILP32-ILP32F-FPELIM-NEXT: sub sp, sp, a02809; ILP32-ILP32F-FPELIM-NEXT: .cfi_def_cfa_offset 1000000482810; ILP32-ILP32F-FPELIM-NEXT: mv a0, a12811; ILP32-ILP32F-FPELIM-NEXT: lui t0, 244142812; ILP32-ILP32F-FPELIM-NEXT: add t0, sp, t02813; ILP32-ILP32F-FPELIM-NEXT: sw a5, 292(t0)2814; ILP32-ILP32F-FPELIM-NEXT: lui a5, 244142815; ILP32-ILP32F-FPELIM-NEXT: add a5, sp, a52816; ILP32-ILP32F-FPELIM-NEXT: sw a6, 296(a5)2817; ILP32-ILP32F-FPELIM-NEXT: lui a5, 244142818; ILP32-ILP32F-FPELIM-NEXT: add a5, sp, a52819; ILP32-ILP32F-FPELIM-NEXT: sw a7, 300(a5)2820; ILP32-ILP32F-FPELIM-NEXT: lui a5, 244142821; ILP32-ILP32F-FPELIM-NEXT: add a5, sp, a52822; ILP32-ILP32F-FPELIM-NEXT: sw a1, 276(a5)2823; ILP32-ILP32F-FPELIM-NEXT: lui a1, 244142824; ILP32-ILP32F-FPELIM-NEXT: add a1, sp, a12825; ILP32-ILP32F-FPELIM-NEXT: sw a2, 280(a1)2826; ILP32-ILP32F-FPELIM-NEXT: lui a1, 244142827; ILP32-ILP32F-FPELIM-NEXT: add a1, sp, a12828; ILP32-ILP32F-FPELIM-NEXT: sw a3, 284(a1)2829; ILP32-ILP32F-FPELIM-NEXT: lui a1, 244142830; ILP32-ILP32F-FPELIM-NEXT: add a1, sp, a12831; ILP32-ILP32F-FPELIM-NEXT: sw a4, 288(a1)2832; ILP32-ILP32F-FPELIM-NEXT: lui a1, 244142833; ILP32-ILP32F-FPELIM-NEXT: addi a1, a1, 2802834; ILP32-ILP32F-FPELIM-NEXT: add a1, sp, a12835; ILP32-ILP32F-FPELIM-NEXT: sw a1, 12(sp)2836; ILP32-ILP32F-FPELIM-NEXT: lui a1, 244142837; ILP32-ILP32F-FPELIM-NEXT: addi a1, a1, 3042838; ILP32-ILP32F-FPELIM-NEXT: add sp, sp, a12839; ILP32-ILP32F-FPELIM-NEXT: .cfi_def_cfa_offset 02840; ILP32-ILP32F-FPELIM-NEXT: ret2841;2842; ILP32-ILP32F-WITHFP-LABEL: va_large_stack:2843; ILP32-ILP32F-WITHFP: # %bb.0:2844; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, -20322845; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa_offset 20322846; ILP32-ILP32F-WITHFP-NEXT: sw ra, 1996(sp) # 4-byte Folded Spill2847; ILP32-ILP32F-WITHFP-NEXT: sw s0, 1992(sp) # 4-byte Folded Spill2848; ILP32-ILP32F-WITHFP-NEXT: .cfi_offset ra, -362849; ILP32-ILP32F-WITHFP-NEXT: .cfi_offset s0, -402850; ILP32-ILP32F-WITHFP-NEXT: addi s0, sp, 20002851; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa s0, 322852; ILP32-ILP32F-WITHFP-NEXT: lui a0, 244142853; ILP32-ILP32F-WITHFP-NEXT: addi a0, a0, -17282854; ILP32-ILP32F-WITHFP-NEXT: sub sp, sp, a02855; ILP32-ILP32F-WITHFP-NEXT: mv a0, a12856; ILP32-ILP32F-WITHFP-NEXT: sw a5, 20(s0)2857; ILP32-ILP32F-WITHFP-NEXT: sw a6, 24(s0)2858; ILP32-ILP32F-WITHFP-NEXT: sw a7, 28(s0)2859; ILP32-ILP32F-WITHFP-NEXT: sw a1, 4(s0)2860; ILP32-ILP32F-WITHFP-NEXT: sw a2, 8(s0)2861; ILP32-ILP32F-WITHFP-NEXT: sw a3, 12(s0)2862; ILP32-ILP32F-WITHFP-NEXT: sw a4, 16(s0)2863; ILP32-ILP32F-WITHFP-NEXT: addi a1, s0, 82864; ILP32-ILP32F-WITHFP-NEXT: lui a2, 244142865; ILP32-ILP32F-WITHFP-NEXT: sub a2, s0, a22866; ILP32-ILP32F-WITHFP-NEXT: sw a1, -272(a2)2867; ILP32-ILP32F-WITHFP-NEXT: lui a1, 244142868; ILP32-ILP32F-WITHFP-NEXT: addi a1, a1, -17282869; ILP32-ILP32F-WITHFP-NEXT: add sp, sp, a12870; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa sp, 20322871; ILP32-ILP32F-WITHFP-NEXT: lw ra, 1996(sp) # 4-byte Folded Reload2872; ILP32-ILP32F-WITHFP-NEXT: lw s0, 1992(sp) # 4-byte Folded Reload2873; ILP32-ILP32F-WITHFP-NEXT: .cfi_restore ra2874; ILP32-ILP32F-WITHFP-NEXT: .cfi_restore s02875; ILP32-ILP32F-WITHFP-NEXT: addi sp, sp, 20322876; ILP32-ILP32F-WITHFP-NEXT: .cfi_def_cfa_offset 02877; ILP32-ILP32F-WITHFP-NEXT: ret2878;2879; RV32D-ILP32-ILP32F-ILP32D-FPELIM-LABEL: va_large_stack:2880; RV32D-ILP32-ILP32F-ILP32D-FPELIM: # %bb.0:2881; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a0, 244142882; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a0, a0, 3042883; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sub sp, sp, a02884; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: .cfi_def_cfa_offset 1000000482885; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: mv a0, a12886; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui t0, 244142887; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add t0, sp, t02888; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a5, 292(t0)2889; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a5, 244142890; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a5, sp, a52891; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a6, 296(a5)2892; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a5, 244142893; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a5, sp, a52894; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a7, 300(a5)2895; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a5, 244142896; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a5, sp, a52897; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 276(a5)2898; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a1, 244142899; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, sp, a12900; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a2, 280(a1)2901; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a1, 244142902; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, sp, a12903; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a3, 284(a1)2904; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a1, 244142905; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, sp, a12906; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a4, 288(a1)2907; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a1, 244142908; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, a1, 2802909; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add a1, sp, a12910; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: sw a1, 12(sp)2911; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: lui a1, 244142912; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: addi a1, a1, 3042913; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: add sp, sp, a12914; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: .cfi_def_cfa_offset 02915; RV32D-ILP32-ILP32F-ILP32D-FPELIM-NEXT: ret2916;2917; ILP32E-FPELIM-LABEL: va_large_stack:2918; ILP32E-FPELIM: # %bb.0:2919; ILP32E-FPELIM-NEXT: lui a0, 244142920; ILP32E-FPELIM-NEXT: addi a0, a0, 2882921; ILP32E-FPELIM-NEXT: sub sp, sp, a02922; ILP32E-FPELIM-NEXT: .cfi_def_cfa_offset 1000000322923; ILP32E-FPELIM-NEXT: mv a0, a12924; ILP32E-FPELIM-NEXT: lui a6, 244142925; ILP32E-FPELIM-NEXT: add a6, sp, a62926; ILP32E-FPELIM-NEXT: sw a5, 284(a6)2927; ILP32E-FPELIM-NEXT: lui a5, 244142928; ILP32E-FPELIM-NEXT: add a5, sp, a52929; ILP32E-FPELIM-NEXT: sw a1, 268(a5)2930; ILP32E-FPELIM-NEXT: lui a1, 244142931; ILP32E-FPELIM-NEXT: add a1, sp, a12932; ILP32E-FPELIM-NEXT: sw a2, 272(a1)2933; ILP32E-FPELIM-NEXT: lui a1, 244142934; ILP32E-FPELIM-NEXT: add a1, sp, a12935; ILP32E-FPELIM-NEXT: sw a3, 276(a1)2936; ILP32E-FPELIM-NEXT: lui a1, 244142937; ILP32E-FPELIM-NEXT: add a1, sp, a12938; ILP32E-FPELIM-NEXT: sw a4, 280(a1)2939; ILP32E-FPELIM-NEXT: lui a1, 244142940; ILP32E-FPELIM-NEXT: addi a1, a1, 2722941; ILP32E-FPELIM-NEXT: add a1, sp, a12942; ILP32E-FPELIM-NEXT: sw a1, 4(sp)2943; ILP32E-FPELIM-NEXT: lui a1, 244142944; ILP32E-FPELIM-NEXT: addi a1, a1, 2882945; ILP32E-FPELIM-NEXT: add sp, sp, a12946; ILP32E-FPELIM-NEXT: .cfi_def_cfa_offset 02947; ILP32E-FPELIM-NEXT: ret2948;2949; ILP32E-WITHFP-LABEL: va_large_stack:2950; ILP32E-WITHFP: # %bb.0:2951; ILP32E-WITHFP-NEXT: addi sp, sp, -20442952; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 20442953; ILP32E-WITHFP-NEXT: sw ra, 2016(sp) # 4-byte Folded Spill2954; ILP32E-WITHFP-NEXT: sw s0, 2012(sp) # 4-byte Folded Spill2955; ILP32E-WITHFP-NEXT: .cfi_offset ra, -282956; ILP32E-WITHFP-NEXT: .cfi_offset s0, -322957; ILP32E-WITHFP-NEXT: addi s0, sp, 20202958; ILP32E-WITHFP-NEXT: .cfi_def_cfa s0, 242959; ILP32E-WITHFP-NEXT: lui a0, 244142960; ILP32E-WITHFP-NEXT: addi a0, a0, -17482961; ILP32E-WITHFP-NEXT: sub sp, sp, a02962; ILP32E-WITHFP-NEXT: mv a0, a12963; ILP32E-WITHFP-NEXT: sw a5, 20(s0)2964; ILP32E-WITHFP-NEXT: sw a1, 4(s0)2965; ILP32E-WITHFP-NEXT: sw a2, 8(s0)2966; ILP32E-WITHFP-NEXT: sw a3, 12(s0)2967; ILP32E-WITHFP-NEXT: sw a4, 16(s0)2968; ILP32E-WITHFP-NEXT: addi a1, s0, 82969; ILP32E-WITHFP-NEXT: lui a2, 244142970; ILP32E-WITHFP-NEXT: sub a2, s0, a22971; ILP32E-WITHFP-NEXT: sw a1, -272(a2)2972; ILP32E-WITHFP-NEXT: lui a1, 244142973; ILP32E-WITHFP-NEXT: addi a1, a1, -17482974; ILP32E-WITHFP-NEXT: add sp, sp, a12975; ILP32E-WITHFP-NEXT: .cfi_def_cfa sp, 20442976; ILP32E-WITHFP-NEXT: lw ra, 2016(sp) # 4-byte Folded Reload2977; ILP32E-WITHFP-NEXT: lw s0, 2012(sp) # 4-byte Folded Reload2978; ILP32E-WITHFP-NEXT: .cfi_restore ra2979; ILP32E-WITHFP-NEXT: .cfi_restore s02980; ILP32E-WITHFP-NEXT: addi sp, sp, 20442981; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 02982; ILP32E-WITHFP-NEXT: ret2983;2984; LP64-LP64F-LP64D-FPELIM-LABEL: va_large_stack:2985; LP64-LP64F-LP64D-FPELIM: # %bb.0:2986; LP64-LP64F-LP64D-FPELIM-NEXT: lui a0, 244142987; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, a0, 3362988; LP64-LP64F-LP64D-FPELIM-NEXT: sub sp, sp, a02989; LP64-LP64F-LP64D-FPELIM-NEXT: .cfi_def_cfa_offset 1000000802990; LP64-LP64F-LP64D-FPELIM-NEXT: lui a0, 244142991; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, sp, a02992; LP64-LP64F-LP64D-FPELIM-NEXT: sd a1, 280(a0)2993; LP64-LP64F-LP64D-FPELIM-NEXT: lui a0, 244142994; LP64-LP64F-LP64D-FPELIM-NEXT: addi a0, a0, 2842995; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, sp, a02996; LP64-LP64F-LP64D-FPELIM-NEXT: sd a0, 8(sp)2997; LP64-LP64F-LP64D-FPELIM-NEXT: lui a0, 244142998; LP64-LP64F-LP64D-FPELIM-NEXT: add a0, sp, a02999; LP64-LP64F-LP64D-FPELIM-NEXT: lw a0, 280(a0)3000; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143001; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13002; LP64-LP64F-LP64D-FPELIM-NEXT: sd a5, 312(a1)3003; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143004; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13005; LP64-LP64F-LP64D-FPELIM-NEXT: sd a6, 320(a1)3006; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143007; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13008; LP64-LP64F-LP64D-FPELIM-NEXT: sd a7, 328(a1)3009; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143010; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13011; LP64-LP64F-LP64D-FPELIM-NEXT: sd a2, 288(a1)3012; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143013; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13014; LP64-LP64F-LP64D-FPELIM-NEXT: sd a3, 296(a1)3015; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143016; LP64-LP64F-LP64D-FPELIM-NEXT: add a1, sp, a13017; LP64-LP64F-LP64D-FPELIM-NEXT: sd a4, 304(a1)3018; LP64-LP64F-LP64D-FPELIM-NEXT: lui a1, 244143019; LP64-LP64F-LP64D-FPELIM-NEXT: addi a1, a1, 3363020; LP64-LP64F-LP64D-FPELIM-NEXT: add sp, sp, a13021; LP64-LP64F-LP64D-FPELIM-NEXT: .cfi_def_cfa_offset 03022; LP64-LP64F-LP64D-FPELIM-NEXT: ret3023;3024; LP64-LP64F-LP64D-WITHFP-LABEL: va_large_stack:3025; LP64-LP64F-LP64D-WITHFP: # %bb.0:3026; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, -20323027; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa_offset 20323028; LP64-LP64F-LP64D-WITHFP-NEXT: sd ra, 1960(sp) # 8-byte Folded Spill3029; LP64-LP64F-LP64D-WITHFP-NEXT: sd s0, 1952(sp) # 8-byte Folded Spill3030; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_offset ra, -723031; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_offset s0, -803032; LP64-LP64F-LP64D-WITHFP-NEXT: addi s0, sp, 19683033; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa s0, 643034; LP64-LP64F-LP64D-WITHFP-NEXT: lui a0, 244143035; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, a0, -16803036; LP64-LP64F-LP64D-WITHFP-NEXT: sub sp, sp, a03037; LP64-LP64F-LP64D-WITHFP-NEXT: sd a1, 8(s0)3038; LP64-LP64F-LP64D-WITHFP-NEXT: addi a0, s0, 123039; LP64-LP64F-LP64D-WITHFP-NEXT: lui a1, 244143040; LP64-LP64F-LP64D-WITHFP-NEXT: sub a1, s0, a13041; LP64-LP64F-LP64D-WITHFP-NEXT: sd a0, -288(a1)3042; LP64-LP64F-LP64D-WITHFP-NEXT: lw a0, 8(s0)3043; LP64-LP64F-LP64D-WITHFP-NEXT: sd a5, 40(s0)3044; LP64-LP64F-LP64D-WITHFP-NEXT: sd a6, 48(s0)3045; LP64-LP64F-LP64D-WITHFP-NEXT: sd a7, 56(s0)3046; LP64-LP64F-LP64D-WITHFP-NEXT: sd a2, 16(s0)3047; LP64-LP64F-LP64D-WITHFP-NEXT: sd a3, 24(s0)3048; LP64-LP64F-LP64D-WITHFP-NEXT: sd a4, 32(s0)3049; LP64-LP64F-LP64D-WITHFP-NEXT: lui a1, 244143050; LP64-LP64F-LP64D-WITHFP-NEXT: addi a1, a1, -16803051; LP64-LP64F-LP64D-WITHFP-NEXT: add sp, sp, a13052; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa sp, 20323053; LP64-LP64F-LP64D-WITHFP-NEXT: ld ra, 1960(sp) # 8-byte Folded Reload3054; LP64-LP64F-LP64D-WITHFP-NEXT: ld s0, 1952(sp) # 8-byte Folded Reload3055; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_restore ra3056; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_restore s03057; LP64-LP64F-LP64D-WITHFP-NEXT: addi sp, sp, 20323058; LP64-LP64F-LP64D-WITHFP-NEXT: .cfi_def_cfa_offset 03059; LP64-LP64F-LP64D-WITHFP-NEXT: ret3060;3061; LP64E-FPELIM-LABEL: va_large_stack:3062; LP64E-FPELIM: # %bb.0:3063; LP64E-FPELIM-NEXT: lui a0, 244143064; LP64E-FPELIM-NEXT: addi a0, a0, 3203065; LP64E-FPELIM-NEXT: sub sp, sp, a03066; LP64E-FPELIM-NEXT: .cfi_def_cfa_offset 1000000643067; LP64E-FPELIM-NEXT: lui a0, 244143068; LP64E-FPELIM-NEXT: add a0, sp, a03069; LP64E-FPELIM-NEXT: sd a1, 280(a0)3070; LP64E-FPELIM-NEXT: lui a0, 244143071; LP64E-FPELIM-NEXT: addi a0, a0, 2843072; LP64E-FPELIM-NEXT: add a0, sp, a03073; LP64E-FPELIM-NEXT: sd a0, 8(sp)3074; LP64E-FPELIM-NEXT: lui a0, 244143075; LP64E-FPELIM-NEXT: add a0, sp, a03076; LP64E-FPELIM-NEXT: lw a0, 280(a0)3077; LP64E-FPELIM-NEXT: lui a1, 244143078; LP64E-FPELIM-NEXT: add a1, sp, a13079; LP64E-FPELIM-NEXT: sd a5, 312(a1)3080; LP64E-FPELIM-NEXT: lui a1, 244143081; LP64E-FPELIM-NEXT: add a1, sp, a13082; LP64E-FPELIM-NEXT: sd a2, 288(a1)3083; LP64E-FPELIM-NEXT: lui a1, 244143084; LP64E-FPELIM-NEXT: add a1, sp, a13085; LP64E-FPELIM-NEXT: sd a3, 296(a1)3086; LP64E-FPELIM-NEXT: lui a1, 244143087; LP64E-FPELIM-NEXT: add a1, sp, a13088; LP64E-FPELIM-NEXT: sd a4, 304(a1)3089; LP64E-FPELIM-NEXT: lui a1, 244143090; LP64E-FPELIM-NEXT: addi a1, a1, 3203091; LP64E-FPELIM-NEXT: add sp, sp, a13092; LP64E-FPELIM-NEXT: .cfi_def_cfa_offset 03093; LP64E-FPELIM-NEXT: ret3094;3095; LP64E-WITHFP-LABEL: va_large_stack:3096; LP64E-WITHFP: # %bb.0:3097; LP64E-WITHFP-NEXT: addi sp, sp, -20403098; LP64E-WITHFP-NEXT: .cfi_def_cfa_offset 20403099; LP64E-WITHFP-NEXT: sd ra, 1984(sp) # 8-byte Folded Spill3100; LP64E-WITHFP-NEXT: sd s0, 1976(sp) # 8-byte Folded Spill3101; LP64E-WITHFP-NEXT: .cfi_offset ra, -563102; LP64E-WITHFP-NEXT: .cfi_offset s0, -643103; LP64E-WITHFP-NEXT: addi s0, sp, 19923104; LP64E-WITHFP-NEXT: .cfi_def_cfa s0, 483105; LP64E-WITHFP-NEXT: lui a0, 244143106; LP64E-WITHFP-NEXT: addi a0, a0, -17043107; LP64E-WITHFP-NEXT: sub sp, sp, a03108; LP64E-WITHFP-NEXT: sd a1, 8(s0)3109; LP64E-WITHFP-NEXT: addi a0, s0, 123110; LP64E-WITHFP-NEXT: lui a1, 244143111; LP64E-WITHFP-NEXT: sub a1, s0, a13112; LP64E-WITHFP-NEXT: sd a0, -288(a1)3113; LP64E-WITHFP-NEXT: lw a0, 8(s0)3114; LP64E-WITHFP-NEXT: sd a5, 40(s0)3115; LP64E-WITHFP-NEXT: sd a2, 16(s0)3116; LP64E-WITHFP-NEXT: sd a3, 24(s0)3117; LP64E-WITHFP-NEXT: sd a4, 32(s0)3118; LP64E-WITHFP-NEXT: lui a1, 244143119; LP64E-WITHFP-NEXT: addi a1, a1, -17043120; LP64E-WITHFP-NEXT: add sp, sp, a13121; LP64E-WITHFP-NEXT: .cfi_def_cfa sp, 20403122; LP64E-WITHFP-NEXT: ld ra, 1984(sp) # 8-byte Folded Reload3123; LP64E-WITHFP-NEXT: ld s0, 1976(sp) # 8-byte Folded Reload3124; LP64E-WITHFP-NEXT: .cfi_restore ra3125; LP64E-WITHFP-NEXT: .cfi_restore s03126; LP64E-WITHFP-NEXT: addi sp, sp, 20403127; LP64E-WITHFP-NEXT: .cfi_def_cfa_offset 03128; LP64E-WITHFP-NEXT: ret3129 %large = alloca [ 100000000 x i8 ]3130 %va = alloca ptr3131 call void @llvm.va_start(ptr %va)3132 %argp.cur = load ptr, ptr %va, align 43133 %argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 43134 store ptr %argp.next, ptr %va, align 43135 %1 = load i32, ptr %argp.cur, align 43136 call void @llvm.va_end(ptr %va)3137 ret i32 %13138}3139