1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple riscv64 -mattr=+m,+v -run-pass=prologepilog -o - \ 3# RUN: -verify-machineinstrs %s | FileCheck %s 4--- | 5 target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n64-S128" 6 target triple = "riscv64" 7 8 define void @spillslot() { 9 ret void 10 } 11 12... 13--- 14name: spillslot 15alignment: 4 16tracksRegLiveness: true 17liveins: 18 - { reg: '$x12', virtual-reg: '' } 19frameInfo: 20 isFrameAddressTaken: false 21 isReturnAddressTaken: false 22 hasStackMap: false 23 hasPatchPoint: false 24 stackSize: 0 25 offsetAdjustment: 0 26 maxAlignment: 128 27 adjustsStack: false 28 hasCalls: false 29 stackProtector: '' 30 maxCallFrameSize: 4294967295 31 cvBytesOfCalleeSavedRegisters: 0 32 hasOpaqueSPAdjustment: false 33 hasVAStart: false 34 hasMustTailInVarArgFunc: false 35 hasTailCall: false 36 localFrameSize: 0 37 savePoint: '' 38 restorePoint: '' 39fixedStack: [] 40stack: 41 - { id: 0, name: '', type: default, offset: 0, size: 2048, alignment: 128, 42 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 43 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 44 - { id: 1, name: '', type: spill-slot, offset: 0, size: 8, alignment: 8, 45 stack-id: scalable-vector, callee-saved-register: '', callee-saved-restored: true, 46 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 47 - { id: 2, name: '', type: spill-slot, offset: 0, size: 400, alignment: 8, 48 stack-id: scalable-vector, callee-saved-register: '', callee-saved-restored: true, 49 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 50body: | 51 ; CHECK-LABEL: name: spillslot 52 ; CHECK: bb.0: 53 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 54 ; CHECK-NEXT: liveins: $x12, $x1, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27 55 ; CHECK-NEXT: {{ $}} 56 ; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -2032 57 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 2032 58 ; CHECK-NEXT: frame-setup SD killed $x1, $x2, 2024 :: (store (s64) into %stack.3) 59 ; CHECK-NEXT: frame-setup SD killed $x8, $x2, 2016 :: (store (s64) into %stack.4) 60 ; CHECK-NEXT: frame-setup SD killed $x18, $x2, 2008 :: (store (s64) into %stack.5) 61 ; CHECK-NEXT: frame-setup SD killed $x19, $x2, 2000 :: (store (s64) into %stack.6) 62 ; CHECK-NEXT: frame-setup SD killed $x20, $x2, 1992 :: (store (s64) into %stack.7) 63 ; CHECK-NEXT: frame-setup SD killed $x21, $x2, 1984 :: (store (s64) into %stack.8) 64 ; CHECK-NEXT: frame-setup SD killed $x22, $x2, 1976 :: (store (s64) into %stack.9) 65 ; CHECK-NEXT: frame-setup SD killed $x23, $x2, 1968 :: (store (s64) into %stack.10) 66 ; CHECK-NEXT: frame-setup SD killed $x24, $x2, 1960 :: (store (s64) into %stack.11) 67 ; CHECK-NEXT: frame-setup SD killed $x25, $x2, 1952 :: (store (s64) into %stack.12) 68 ; CHECK-NEXT: frame-setup SD killed $x26, $x2, 1944 :: (store (s64) into %stack.13) 69 ; CHECK-NEXT: frame-setup SD killed $x27, $x2, 1936 :: (store (s64) into %stack.14) 70 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8 71 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16 72 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -24 73 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x19, -32 74 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x20, -40 75 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x21, -48 76 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x22, -56 77 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x23, -64 78 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x24, -72 79 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x25, -80 80 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x26, -88 81 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x27, -96 82 ; CHECK-NEXT: $x8 = frame-setup ADDI $x2, 2032 83 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $x8, 0 84 ; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -272 85 ; CHECK-NEXT: $x10 = frame-setup PseudoReadVLENB 86 ; CHECK-NEXT: $x11 = frame-setup ADDI $x0, 51 87 ; CHECK-NEXT: $x10 = frame-setup MUL killed $x10, killed $x11 88 ; CHECK-NEXT: $x2 = frame-setup SUB $x2, killed $x10 89 ; CHECK-NEXT: $x2 = frame-setup ANDI $x2, -128 90 ; CHECK-NEXT: dead renamable $x15 = PseudoVSETIVLI 1, 72 /* e16, m1, ta, mu */, implicit-def $vl, implicit-def $vtype 91 ; CHECK-NEXT: renamable $v25 = PseudoVMV_V_X_M1 undef $v25, killed renamable $x12, $noreg, 4 /* e16 */, 0 /* tu, mu */, implicit $vl, implicit $vtype 92 ; CHECK-NEXT: $x10 = PseudoReadVLENB 93 ; CHECK-NEXT: $x11 = ADDI $x0, 50 94 ; CHECK-NEXT: $x10 = MUL killed $x10, killed $x11 95 ; CHECK-NEXT: $x10 = ADD $x2, killed $x10 96 ; CHECK-NEXT: $x10 = ADDI killed $x10, 2047 97 ; CHECK-NEXT: $x10 = ADDI killed $x10, 161 98 ; CHECK-NEXT: VS1R_V killed renamable $v25, killed $x10 :: (store unknown-size into %stack.1, align 8) 99 ; CHECK-NEXT: renamable $x1 = ADDI $x0, 255 100 ; CHECK-NEXT: renamable $x5 = nuw ADDI $x2, 384 101 ; CHECK-NEXT: renamable $x6 = ADDI $x2, 512 102 ; CHECK-NEXT: renamable $x7 = nuw ADDI $x2, 640 103 ; CHECK-NEXT: renamable $x10 = ADDI $x0, 128 104 ; CHECK-NEXT: renamable $x12 = nuw ADDI $x2, 256 105 ; CHECK-NEXT: renamable $x14 = COPY $x0 106 ; CHECK-NEXT: renamable $x17 = nuw ADDI $x2, 256 107 ; CHECK-NEXT: renamable $x18 = ADDI $x2, 1280 108 ; CHECK-NEXT: renamable $x19 = ADDI $x2, 1408 109 ; CHECK-NEXT: renamable $x20 = ADDI $x2, 1536 110 ; CHECK-NEXT: renamable $x21 = ADDI $x2, 1664 111 ; CHECK-NEXT: renamable $x22 = ADDI $x2, 1792 112 ; CHECK-NEXT: renamable $x23 = ADDI $x2, 1920 113 ; CHECK-NEXT: $x24 = ADDI $x2, 2047 114 ; CHECK-NEXT: $x24 = ADDI killed $x24, 1 115 ; CHECK-NEXT: renamable $x25 = ADDI $x2, 128 116 ; CHECK-NEXT: renamable $x26 = ADDI $x2, 128 117 ; CHECK-NEXT: renamable $x27 = ADDI $x0, 2 118 ; CHECK-NEXT: renamable $x28 = ADDI $x2, 768 119 ; CHECK-NEXT: renamable $x29 = ADDI $x2, 896 120 ; CHECK-NEXT: renamable $x30 = ADDI $x2, 1024 121 ; CHECK-NEXT: renamable $x31 = nuw ADDI $x2, 1152 122 ; CHECK-NEXT: renamable $x15 = ADDIW renamable $x14, 0 123 ; CHECK-NEXT: renamable $x11 = ANDI renamable $x15, 255 124 ; CHECK-NEXT: renamable $x13 = SLLI renamable $x11, 3 125 ; CHECK-NEXT: renamable $x13 = ADD renamable $x26, killed renamable $x13 126 ; CHECK-NEXT: renamable $x13 = LD killed renamable $x13, 0 :: (load (s64)) 127 ; CHECK-NEXT: renamable $x16 = SUB killed renamable $x13, renamable $x13 128 ; CHECK-NEXT: dead renamable $x13 = PseudoVSETIVLI 1, 64 /* e8, m1, ta, mu */, implicit-def $vl, implicit-def $vtype 129 ; CHECK-NEXT: renamable $x13 = nsw ADDI renamable $x16, -2 130 ; CHECK-NEXT: SD killed $x10, $x2, 8 :: (store (s64) into %stack.15) 131 ; CHECK-NEXT: $x10 = PseudoReadVLENB 132 ; CHECK-NEXT: SD killed $x12, $x2, 0 :: (store (s64) into %stack.16) 133 ; CHECK-NEXT: $x12 = ADDI $x0, 50 134 ; CHECK-NEXT: $x10 = MUL killed $x10, killed $x12 135 ; CHECK-NEXT: $x12 = LD $x2, 0 :: (load (s64) from %stack.16) 136 ; CHECK-NEXT: $x10 = ADD $x2, killed $x10 137 ; CHECK-NEXT: $x10 = ADDI killed $x10, 2047 138 ; CHECK-NEXT: $x10 = ADDI killed $x10, 161 139 ; CHECK-NEXT: renamable $v0 = VL1RE8_V killed $x10 :: (load unknown-size from %stack.1, align 8) 140 ; CHECK-NEXT: $x10 = LD $x2, 8 :: (load (s64) from %stack.15) 141 ; CHECK-NEXT: renamable $v0 = PseudoVSLIDEDOWN_VX_M1 undef renamable $v0, killed renamable $v0, killed renamable $x13, $noreg, 3 /* e8 */, 1 /* ta, mu */, implicit $vl, implicit $vtype 142 ; CHECK-NEXT: renamable $x13 = PseudoVMV_X_S killed renamable $v0, 3 /* e8 */, implicit $vl, implicit $vtype 143 ; CHECK-NEXT: BLT killed renamable $x16, renamable $x27, %bb.2 144 ; CHECK-NEXT: {{ $}} 145 ; CHECK-NEXT: bb.1: 146 ; CHECK-NEXT: successors: %bb.2(0x80000000) 147 ; CHECK-NEXT: liveins: $x1, $x5, $x6, $x7, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x17, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $x29, $x30, $x31 148 ; CHECK-NEXT: {{ $}} 149 ; CHECK-NEXT: renamable $x10 = COPY killed renamable $x13 150 ; CHECK-NEXT: PseudoBR %bb.2 151 ; CHECK-NEXT: {{ $}} 152 ; CHECK-NEXT: bb.2: 153 ; CHECK-NEXT: $x2 = frame-destroy ADDI $x8, -2032 154 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $x2, 2032 155 ; CHECK-NEXT: $x1 = frame-destroy LD $x2, 2024 :: (load (s64) from %stack.3) 156 ; CHECK-NEXT: $x8 = frame-destroy LD $x2, 2016 :: (load (s64) from %stack.4) 157 ; CHECK-NEXT: $x18 = frame-destroy LD $x2, 2008 :: (load (s64) from %stack.5) 158 ; CHECK-NEXT: $x19 = frame-destroy LD $x2, 2000 :: (load (s64) from %stack.6) 159 ; CHECK-NEXT: $x20 = frame-destroy LD $x2, 1992 :: (load (s64) from %stack.7) 160 ; CHECK-NEXT: $x21 = frame-destroy LD $x2, 1984 :: (load (s64) from %stack.8) 161 ; CHECK-NEXT: $x22 = frame-destroy LD $x2, 1976 :: (load (s64) from %stack.9) 162 ; CHECK-NEXT: $x23 = frame-destroy LD $x2, 1968 :: (load (s64) from %stack.10) 163 ; CHECK-NEXT: $x24 = frame-destroy LD $x2, 1960 :: (load (s64) from %stack.11) 164 ; CHECK-NEXT: $x25 = frame-destroy LD $x2, 1952 :: (load (s64) from %stack.12) 165 ; CHECK-NEXT: $x26 = frame-destroy LD $x2, 1944 :: (load (s64) from %stack.13) 166 ; CHECK-NEXT: $x27 = frame-destroy LD $x2, 1936 :: (load (s64) from %stack.14) 167 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x1 168 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x8 169 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x18 170 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x19 171 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x20 172 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x21 173 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x22 174 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x23 175 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x24 176 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x25 177 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x26 178 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x27 179 ; CHECK-NEXT: $x2 = frame-destroy ADDI $x2, 2032 180 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 181 ; CHECK-NEXT: PseudoRET 182 bb.0: 183 successors: %bb.1, %bb.2 184 liveins: $x12 185 186 dead renamable $x15 = PseudoVSETIVLI 1, 72, implicit-def $vl, implicit-def $vtype 187 renamable $v25 = PseudoVMV_V_X_M1 undef $v25, killed renamable $x12, $noreg, 4, 0, implicit $vl, implicit $vtype 188 VS1R_V killed renamable $v25, %stack.1 :: (store unknown-size into %stack.1, align 8) 189 renamable $x1 = ADDI $x0, 255 190 renamable $x5 = nuw ADDI %stack.0, 256 191 renamable $x6 = ADDI %stack.0, 384 192 renamable $x7 = nuw ADDI %stack.0, 512 193 renamable $x10 = ADDI $x0, 128 194 renamable $x12 = nuw ADDI %stack.0, 128 195 renamable $x14 = COPY $x0 196 renamable $x17 = nuw ADDI %stack.0, 128 197 renamable $x18 = ADDI %stack.0, 1152 198 renamable $x19 = ADDI %stack.0, 1280 199 renamable $x20 = ADDI %stack.0, 1408 200 renamable $x21 = ADDI %stack.0, 1536 201 renamable $x22 = ADDI %stack.0, 1664 202 renamable $x23 = ADDI %stack.0, 1792 203 renamable $x24 = ADDI %stack.0, 1920 204 renamable $x25 = ADDI %stack.0, 0 205 renamable $x26 = ADDI %stack.0, 0 206 renamable $x27 = ADDI $x0, 2 207 renamable $x28 = ADDI %stack.0, 640 208 renamable $x29 = ADDI %stack.0, 768 209 renamable $x30 = ADDI %stack.0, 896 210 renamable $x31 = nuw ADDI %stack.0, 1024 211 renamable $x15 = ADDIW renamable $x14, 0 212 renamable $x11 = ANDI renamable $x15, 255 213 renamable $x13 = SLLI renamable $x11, 3 214 renamable $x13 = ADD renamable $x26, killed renamable $x13 215 renamable $x13 = LD killed renamable $x13, 0 :: (load (s64)) 216 renamable $x16 = SUB killed renamable $x13, renamable $x13 217 dead renamable $x13 = PseudoVSETIVLI 1, 64, implicit-def $vl, implicit-def $vtype 218 renamable $x13 = nsw ADDI renamable $x16, -2 219 renamable $v0 = VL1RE8_V %stack.1 :: (load unknown-size from %stack.1, align 8) 220 renamable $v0 = PseudoVSLIDEDOWN_VX_M1 undef renamable $v0, killed renamable $v0, killed renamable $x13, $noreg, 3, 1, implicit $vl, implicit $vtype 221 renamable $x13 = PseudoVMV_X_S killed renamable $v0, 3, implicit $vl, implicit $vtype 222 BLT killed renamable $x16, renamable $x27, %bb.2 223 224 bb.1: 225 successors: %bb.2 226 liveins: $x1, $x5, $x6, $x7, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x17, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $x29, $x30, $x31 227 228 renamable $x10 = COPY killed renamable $x13 229 PseudoBR %bb.2 230 231 bb.2: 232 PseudoRET 233... 234