165 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -target-abi ilp32e -verify-machineinstrs < %s \3; RUN: | FileCheck -check-prefix=ILP32E %s4; RUN: llc -mtriple=riscv32 -target-abi ilp32e -frame-pointer=all -verify-machineinstrs < %s \5; RUN: | FileCheck -check-prefix=ILP32E-WITHFP %s6 7declare void @abort()8 9define i32 @caller(i32 %a) {10; ILP32E-LABEL: caller:11; ILP32E: # %bb.0: # %entry12; ILP32E-NEXT: addi sp, sp, -813; ILP32E-NEXT: .cfi_def_cfa_offset 814; ILP32E-NEXT: sw ra, 4(sp) # 4-byte Folded Spill15; ILP32E-NEXT: sw s0, 0(sp) # 4-byte Folded Spill16; ILP32E-NEXT: .cfi_offset ra, -417; ILP32E-NEXT: .cfi_offset s0, -818; ILP32E-NEXT: mv s0, a019; ILP32E-NEXT: li a0, 120; ILP32E-NEXT: lui a2, 26214421; ILP32E-NEXT: li a1, 022; ILP32E-NEXT: call va_double23; ILP32E-NEXT: mv a0, s024; ILP32E-NEXT: lw ra, 4(sp) # 4-byte Folded Reload25; ILP32E-NEXT: lw s0, 0(sp) # 4-byte Folded Reload26; ILP32E-NEXT: .cfi_restore ra27; ILP32E-NEXT: .cfi_restore s028; ILP32E-NEXT: addi sp, sp, 829; ILP32E-NEXT: .cfi_def_cfa_offset 030; ILP32E-NEXT: ret31;32; ILP32E-WITHFP-LABEL: caller:33; ILP32E-WITHFP: # %bb.0: # %entry34; ILP32E-WITHFP-NEXT: addi sp, sp, -1235; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 1236; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill37; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill38; ILP32E-WITHFP-NEXT: sw s1, 0(sp) # 4-byte Folded Spill39; ILP32E-WITHFP-NEXT: .cfi_offset ra, -440; ILP32E-WITHFP-NEXT: .cfi_offset s0, -841; ILP32E-WITHFP-NEXT: .cfi_offset s1, -1242; ILP32E-WITHFP-NEXT: addi s0, sp, 1243; ILP32E-WITHFP-NEXT: .cfi_def_cfa s0, 044; ILP32E-WITHFP-NEXT: mv s1, a045; ILP32E-WITHFP-NEXT: li a0, 146; ILP32E-WITHFP-NEXT: lui a2, 26214447; ILP32E-WITHFP-NEXT: li a1, 048; ILP32E-WITHFP-NEXT: call va_double49; ILP32E-WITHFP-NEXT: mv a0, s150; ILP32E-WITHFP-NEXT: .cfi_def_cfa sp, 1251; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload52; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload53; ILP32E-WITHFP-NEXT: lw s1, 0(sp) # 4-byte Folded Reload54; ILP32E-WITHFP-NEXT: .cfi_restore ra55; ILP32E-WITHFP-NEXT: .cfi_restore s056; ILP32E-WITHFP-NEXT: .cfi_restore s157; ILP32E-WITHFP-NEXT: addi sp, sp, 1258; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 059; ILP32E-WITHFP-NEXT: ret60entry:61 call void (i32, ...) @va_double(i32 1, double 2.000000e+00)62 ret i32 %a63}64 65define void @va_double(i32 %n, ...) {66; ILP32E-LABEL: va_double:67; ILP32E: # %bb.0: # %entry68; ILP32E-NEXT: addi sp, sp, -3269; ILP32E-NEXT: .cfi_def_cfa_offset 3270; ILP32E-NEXT: sw ra, 4(sp) # 4-byte Folded Spill71; ILP32E-NEXT: .cfi_offset ra, -2872; ILP32E-NEXT: .cfi_remember_state73; ILP32E-NEXT: sw a5, 28(sp)74; ILP32E-NEXT: sw a1, 12(sp)75; ILP32E-NEXT: sw a2, 16(sp)76; ILP32E-NEXT: sw a3, 20(sp)77; ILP32E-NEXT: sw a4, 24(sp)78; ILP32E-NEXT: addi a0, sp, 1279; ILP32E-NEXT: addi a1, sp, 1980; ILP32E-NEXT: sw a0, 0(sp)81; ILP32E-NEXT: andi a1, a1, -882; ILP32E-NEXT: addi a0, a1, 883; ILP32E-NEXT: sw a0, 0(sp)84; ILP32E-NEXT: lw a0, 0(a1)85; ILP32E-NEXT: lw a1, 4(a1)86; ILP32E-NEXT: lui a3, 26214487; ILP32E-NEXT: li a2, 088; ILP32E-NEXT: call __eqdf289; ILP32E-NEXT: bnez a0, .LBB1_290; ILP32E-NEXT: # %bb.1: # %if.end91; ILP32E-NEXT: lw ra, 4(sp) # 4-byte Folded Reload92; ILP32E-NEXT: .cfi_restore ra93; ILP32E-NEXT: addi sp, sp, 3294; ILP32E-NEXT: .cfi_def_cfa_offset 095; ILP32E-NEXT: ret96; ILP32E-NEXT: .LBB1_2: # %if.then97; ILP32E-NEXT: .cfi_restore_state98; ILP32E-NEXT: call abort99;100; ILP32E-WITHFP-LABEL: va_double:101; ILP32E-WITHFP: # %bb.0: # %entry102; ILP32E-WITHFP-NEXT: addi sp, sp, -36103; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 36104; ILP32E-WITHFP-NEXT: sw ra, 8(sp) # 4-byte Folded Spill105; ILP32E-WITHFP-NEXT: sw s0, 4(sp) # 4-byte Folded Spill106; ILP32E-WITHFP-NEXT: .cfi_offset ra, -28107; ILP32E-WITHFP-NEXT: .cfi_offset s0, -32108; ILP32E-WITHFP-NEXT: addi s0, sp, 12109; ILP32E-WITHFP-NEXT: .cfi_def_cfa s0, 24110; ILP32E-WITHFP-NEXT: .cfi_remember_state111; ILP32E-WITHFP-NEXT: sw a5, 20(s0)112; ILP32E-WITHFP-NEXT: sw a1, 4(s0)113; ILP32E-WITHFP-NEXT: sw a2, 8(s0)114; ILP32E-WITHFP-NEXT: sw a3, 12(s0)115; ILP32E-WITHFP-NEXT: sw a4, 16(s0)116; ILP32E-WITHFP-NEXT: addi a0, s0, 4117; ILP32E-WITHFP-NEXT: addi a1, s0, 11118; ILP32E-WITHFP-NEXT: sw a0, -12(s0)119; ILP32E-WITHFP-NEXT: andi a1, a1, -8120; ILP32E-WITHFP-NEXT: addi a0, a1, 8121; ILP32E-WITHFP-NEXT: sw a0, -12(s0)122; ILP32E-WITHFP-NEXT: lw a0, 0(a1)123; ILP32E-WITHFP-NEXT: lw a1, 4(a1)124; ILP32E-WITHFP-NEXT: lui a3, 262144125; ILP32E-WITHFP-NEXT: li a2, 0126; ILP32E-WITHFP-NEXT: call __eqdf2127; ILP32E-WITHFP-NEXT: bnez a0, .LBB1_2128; ILP32E-WITHFP-NEXT: # %bb.1: # %if.end129; ILP32E-WITHFP-NEXT: .cfi_def_cfa sp, 36130; ILP32E-WITHFP-NEXT: lw ra, 8(sp) # 4-byte Folded Reload131; ILP32E-WITHFP-NEXT: lw s0, 4(sp) # 4-byte Folded Reload132; ILP32E-WITHFP-NEXT: .cfi_restore ra133; ILP32E-WITHFP-NEXT: .cfi_restore s0134; ILP32E-WITHFP-NEXT: addi sp, sp, 36135; ILP32E-WITHFP-NEXT: .cfi_def_cfa_offset 0136; ILP32E-WITHFP-NEXT: ret137; ILP32E-WITHFP-NEXT: .LBB1_2: # %if.then138; ILP32E-WITHFP-NEXT: .cfi_restore_state139; ILP32E-WITHFP-NEXT: call abort140entry:141 %args = alloca ptr, align 4142 %args1 = bitcast ptr %args to ptr143 call void @llvm.va_start(ptr %args1)144 %argp.cur = load ptr, ptr %args, align 4145 %0 = ptrtoint ptr %argp.cur to i32146 %1 = add i32 %0, 7147 %2 = and i32 %1, -8148 %argp.cur.aligned = inttoptr i32 %2 to ptr149 %argp.next = getelementptr inbounds i8, ptr %argp.cur.aligned, i32 8150 store ptr %argp.next, ptr %args, align 4151 %3 = bitcast ptr %argp.cur.aligned to ptr152 %4 = load double, ptr %3, align 8153 %cmp = fcmp une double %4, 2.000000e+00154 br i1 %cmp, label %if.then, label %if.end155 156if.then:157 call void @abort()158 unreachable159 160if.end:161 %args2 = bitcast ptr %args to ptr162 call void @llvm.va_end(ptr %args2)163 ret void164}165