199 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=riscv64 -x mir -run-pass=prologepilog -verify-machineinstrs < %s \3# RUN: | FileCheck %s -check-prefixes=RV64I4# RUN: llc -mtriple=riscv32 -x mir -run-pass=prologepilog -verify-machineinstrs < %s \5# RUN: | FileCheck %s -check-prefixes=RV32I6--- |7 ; Function Attrs: uwtable8 define void @no_reserved_call_frame(i64 %n) #0 {9 entry:10 %v = alloca i32, i64 %n, align 411 call void @callee_stack_args(ptr %v, [518 x i64] poison)12 ret void13 }14 15 declare void @callee_stack_args(ptr, [518 x i64]) #116 17 attributes #0 = { uwtable "frame-pointer"="none" "probe-stack"="inline-asm" "target-features"="+m" }18 attributes #1 = { "target-features"="+m" }19...20---21name: no_reserved_call_frame22alignment: 423exposesReturnsTwice: false24legalized: false25regBankSelected: false26selected: false27failedISel: false28tracksRegLiveness: true29hasWinCFI: false30noPhis: true31isSSA: false32noVRegs: true33hasFakeUses: false34callsEHReturn: false35callsUnwindInit: false36hasEHContTarget: false37hasEHScopes: false38hasEHFunclets: false39isOutlined: false40debugInstrRef: false41failsVerification: false42tracksDebugUserValues: true43registers: []44liveins:45 - { reg: '$x10', virtual-reg: '' }46frameInfo:47 isFrameAddressTaken: false48 isReturnAddressTaken: false49 hasStackMap: false50 hasPatchPoint: false51 stackSize: 052 offsetAdjustment: 053 maxAlignment: 854 adjustsStack: true55 hasCalls: true56 stackProtector: ''57 functionContext: ''58 maxCallFrameSize: 429496729559 cvBytesOfCalleeSavedRegisters: 060 hasOpaqueSPAdjustment: false61 hasVAStart: false62 hasMustTailInVarArgFunc: false63 hasTailCall: false64 isCalleeSavedInfoValid: false65 localFrameSize: 066 savePoint: []67 restorePoint: []68fixedStack: []69stack:70 - { id: 0, name: v, type: variable-sized, offset: 0, alignment: 1, stack-id: default,71 callee-saved-register: '', callee-saved-restored: true, local-offset: 0,72 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }73entry_values: []74callSites: []75debugValueSubstitutions: []76constants: []77machineFunctionInfo:78 varArgsFrameIndex: 079 varArgsSaveSize: 080body: |81 ; RV64I-LABEL: name: no_reserved_call_frame82 ; RV64I: bb.0.entry:83 ; RV64I-NEXT: successors: %bb.1(0x80000000)84 ; RV64I-NEXT: liveins: $x10, $x185 ; RV64I-NEXT: {{ $}}86 ; RV64I-NEXT: $x2 = frame-setup ADDI $x2, -1687 ; RV64I-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 1688 ; RV64I-NEXT: frame-setup SD killed $x1, $x2, 8 :: (store (s64) into %stack.1)89 ; RV64I-NEXT: frame-setup SD killed $x8, $x2, 0 :: (store (s64) into %stack.2)90 ; RV64I-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -891 ; RV64I-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -1692 ; RV64I-NEXT: $x8 = frame-setup ADDI $x2, 1693 ; RV64I-NEXT: frame-setup CFI_INSTRUCTION def_cfa $x8, 094 ; RV64I-NEXT: renamable $x10 = SLLI killed renamable $x10, 295 ; RV64I-NEXT: renamable $x10 = nuw ADDI killed renamable $x10, 1596 ; RV64I-NEXT: renamable $x10 = ANDI killed renamable $x10, -1697 ; RV64I-NEXT: renamable $x10 = SUB $x2, killed renamable $x1098 ; RV64I-NEXT: renamable $x11 = LUI 199 ; RV64I-NEXT: {{ $}}100 ; RV64I-NEXT: bb.1.entry:101 ; RV64I-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)102 ; RV64I-NEXT: liveins: $x10, $x11103 ; RV64I-NEXT: {{ $}}104 ; RV64I-NEXT: $x2 = SUB $x2, renamable $x11105 ; RV64I-NEXT: SD $x0, $x2, 0106 ; RV64I-NEXT: BLT renamable $x10, $x2, %bb.1107 ; RV64I-NEXT: {{ $}}108 ; RV64I-NEXT: bb.2.entry:109 ; RV64I-NEXT: liveins: $x10110 ; RV64I-NEXT: {{ $}}111 ; RV64I-NEXT: $x2 = ADDI renamable $x10, 0112 ; RV64I-NEXT: $x11 = LUI 1113 ; RV64I-NEXT: $x2 = SUB $x2, killed $x11114 ; RV64I-NEXT: PseudoCALL target-flags(riscv-call) @callee_stack_args, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit undef $x11, implicit undef $x12, implicit undef $x13, implicit undef $x14, implicit undef $x15, implicit undef $x16, implicit undef $x17, implicit-def $x2115 ; RV64I-NEXT: $x10 = LUI 1116 ; RV64I-NEXT: $x2 = ADD $x2, killed $x10117 ; RV64I-NEXT: $x2 = frame-destroy ADDI $x8, -16118 ; RV64I-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $x2, 16119 ; RV64I-NEXT: $x1 = frame-destroy LD $x2, 8 :: (load (s64) from %stack.1)120 ; RV64I-NEXT: $x8 = frame-destroy LD $x2, 0 :: (load (s64) from %stack.2)121 ; RV64I-NEXT: frame-destroy CFI_INSTRUCTION restore $x1122 ; RV64I-NEXT: frame-destroy CFI_INSTRUCTION restore $x8123 ; RV64I-NEXT: $x2 = frame-destroy ADDI $x2, 16124 ; RV64I-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0125 ; RV64I-NEXT: PseudoRET126 ;127 ; RV32I-LABEL: name: no_reserved_call_frame128 ; RV32I: bb.0.entry:129 ; RV32I-NEXT: successors: %bb.1(0x80000000)130 ; RV32I-NEXT: liveins: $x10, $x1131 ; RV32I-NEXT: {{ $}}132 ; RV32I-NEXT: $x2 = frame-setup ADDI $x2, -16133 ; RV32I-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16134 ; RV32I-NEXT: frame-setup SW killed $x1, $x2, 12 :: (store (s32) into %stack.1)135 ; RV32I-NEXT: frame-setup SW killed $x8, $x2, 8 :: (store (s32) into %stack.2)136 ; RV32I-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -4137 ; RV32I-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8138 ; RV32I-NEXT: $x8 = frame-setup ADDI $x2, 16139 ; RV32I-NEXT: frame-setup CFI_INSTRUCTION def_cfa $x8, 0140 ; RV32I-NEXT: renamable $x10 = SLLI killed renamable $x10, 2141 ; RV32I-NEXT: renamable $x10 = nuw ADDI killed renamable $x10, 15142 ; RV32I-NEXT: renamable $x10 = ANDI killed renamable $x10, -16143 ; RV32I-NEXT: renamable $x10 = SUB $x2, killed renamable $x10144 ; RV32I-NEXT: renamable $x11 = LUI 1145 ; RV32I-NEXT: {{ $}}146 ; RV32I-NEXT: bb.1.entry:147 ; RV32I-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)148 ; RV32I-NEXT: liveins: $x10, $x11149 ; RV32I-NEXT: {{ $}}150 ; RV32I-NEXT: $x2 = SUB $x2, renamable $x11151 ; RV32I-NEXT: SD $x0, $x2, 0152 ; RV32I-NEXT: BLT renamable $x10, $x2, %bb.1153 ; RV32I-NEXT: {{ $}}154 ; RV32I-NEXT: bb.2.entry:155 ; RV32I-NEXT: liveins: $x10156 ; RV32I-NEXT: {{ $}}157 ; RV32I-NEXT: $x2 = ADDI renamable $x10, 0158 ; RV32I-NEXT: $x11 = LUI 1159 ; RV32I-NEXT: $x2 = SUB $x2, killed $x11160 ; RV32I-NEXT: PseudoCALL target-flags(riscv-call) @callee_stack_args, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit undef $x11, implicit undef $x12, implicit undef $x13, implicit undef $x14, implicit undef $x15, implicit undef $x16, implicit undef $x17, implicit-def $x2161 ; RV32I-NEXT: $x10 = LUI 1162 ; RV32I-NEXT: $x2 = ADD $x2, killed $x10163 ; RV32I-NEXT: $x2 = frame-destroy ADDI $x8, -16164 ; RV32I-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $x2, 16165 ; RV32I-NEXT: $x1 = frame-destroy LW $x2, 12 :: (load (s32) from %stack.1)166 ; RV32I-NEXT: $x8 = frame-destroy LW $x2, 8 :: (load (s32) from %stack.2)167 ; RV32I-NEXT: frame-destroy CFI_INSTRUCTION restore $x1168 ; RV32I-NEXT: frame-destroy CFI_INSTRUCTION restore $x8169 ; RV32I-NEXT: $x2 = frame-destroy ADDI $x2, 16170 ; RV32I-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0171 ; RV32I-NEXT: PseudoRET172 bb.0.entry:173 successors: %bb.1(0x80000000)174 liveins: $x10175 176 renamable $x10 = SLLI killed renamable $x10, 2177 renamable $x10 = nuw ADDI killed renamable $x10, 15178 renamable $x10 = ANDI killed renamable $x10, -16179 renamable $x10 = SUB $x2, killed renamable $x10180 renamable $x11 = LUI 1181 182 bb.1.entry:183 successors: %bb.2(0x40000000), %bb.1(0x40000000)184 liveins: $x10, $x11185 186 $x2 = SUB $x2, renamable $x11187 SD $x0, $x2, 0188 BLT renamable $x10, $x2, %bb.1189 190 bb.2.entry:191 liveins: $x10192 193 $x2 = ADDI renamable $x10, 0194 ADJCALLSTACKDOWN 4088, 0, implicit-def dead $x2, implicit $x2195 PseudoCALL target-flags(riscv-call) @callee_stack_args, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit undef $x11, implicit undef $x12, implicit undef $x13, implicit undef $x14, implicit undef $x15, implicit undef $x16, implicit undef $x17, implicit-def $x2196 ADJCALLSTACKUP 4088, 0, implicit-def dead $x2, implicit $x2197 PseudoRET198...199