1776889bcSSacha Coppey; RUN: llc -mtriple=riscv64 < %s | FileCheck %s 2776889bcSSacha Coppey 3776889bcSSacha Coppey; CHECK-LABEL: .section .llvm_stackmaps 4776889bcSSacha Coppey; CHECK-NEXT: __LLVM_StackMaps: 5776889bcSSacha Coppey; Header 6776889bcSSacha Coppey; CHECK-NEXT: .byte 3 7776889bcSSacha Coppey; CHECK-NEXT: .byte 0 8776889bcSSacha Coppey; CHECK-NEXT: .half 0 9776889bcSSacha Coppey; Num Functions 10776889bcSSacha Coppey; CHECK-NEXT: .word 12 11776889bcSSacha Coppey; Num LargeConstants 12776889bcSSacha Coppey; CHECK-NEXT: .word 2 13776889bcSSacha Coppey; Num Callsites 14776889bcSSacha Coppey; CHECK-NEXT: .word 16 15776889bcSSacha Coppey 16776889bcSSacha Coppey; Functions and stack size 17776889bcSSacha Coppey; CHECK-NEXT: .quad constantargs 18776889bcSSacha Coppey; CHECK-NEXT: .quad 0 19776889bcSSacha Coppey; CHECK-NEXT: .quad 1 20776889bcSSacha Coppey; CHECK-NEXT: .quad osrinline 21776889bcSSacha Coppey; CHECK-NEXT: .quad 32 22776889bcSSacha Coppey; CHECK-NEXT: .quad 1 23776889bcSSacha Coppey; CHECK-NEXT: .quad osrcold 24776889bcSSacha Coppey; CHECK-NEXT: .quad 0 25776889bcSSacha Coppey; CHECK-NEXT: .quad 1 26776889bcSSacha Coppey; CHECK-NEXT: .quad propertyRead 27776889bcSSacha Coppey; CHECK-NEXT: .quad 16 28776889bcSSacha Coppey; CHECK-NEXT: .quad 1 29776889bcSSacha Coppey; CHECK-NEXT: .quad propertyWrite 30776889bcSSacha Coppey; CHECK-NEXT: .quad 0 31776889bcSSacha Coppey; CHECK-NEXT: .quad 1 32776889bcSSacha Coppey; CHECK-NEXT: .quad jsVoidCall 33776889bcSSacha Coppey; CHECK-NEXT: .quad 0 34776889bcSSacha Coppey; CHECK-NEXT: .quad 1 35776889bcSSacha Coppey; CHECK-NEXT: .quad jsIntCall 36776889bcSSacha Coppey; CHECK-NEXT: .quad 0 37776889bcSSacha Coppey; CHECK-NEXT: .quad 1 38776889bcSSacha Coppey; CHECK-NEXT: .quad liveConstant 39776889bcSSacha Coppey; CHECK-NEXT: .quad 0 40776889bcSSacha Coppey; CHECK-NEXT: .quad 1 41776889bcSSacha Coppey; CHECK-NEXT: .quad spilledValue 42776889bcSSacha Coppey; CHECK-NEXT: .quad 144 43776889bcSSacha Coppey; CHECK-NEXT: .quad 1 44776889bcSSacha Coppey; CHECK-NEXT: .quad directFrameIdx 45776889bcSSacha Coppey; CHECK-NEXT: .quad 48 46776889bcSSacha Coppey; CHECK-NEXT: .quad 2 47776889bcSSacha Coppey; CHECK-NEXT: .quad longid 48776889bcSSacha Coppey; CHECK-NEXT: .quad 0 49776889bcSSacha Coppey; CHECK-NEXT: .quad 4 50776889bcSSacha Coppey; CHECK-NEXT: .quad needsStackRealignment 51776889bcSSacha Coppey; CHECK-NEXT: .quad -1 52776889bcSSacha Coppey; CHECK-NEXT: .quad 1 53776889bcSSacha Coppey 54776889bcSSacha Coppey; Num LargeConstants 55776889bcSSacha Coppey; CHECK-NEXT: .quad 4294967295 56776889bcSSacha Coppey; CHECK-NEXT: .quad 4294967296 57776889bcSSacha Coppey 58776889bcSSacha Coppey; Constant arguments 59776889bcSSacha Coppey; 60776889bcSSacha Coppey; CHECK-NEXT: .quad 1 61776889bcSSacha Coppey; CHECK-NEXT: .word .L{{.*}}-constantargs 62776889bcSSacha Coppey; CHECK-NEXT: .half 0 63776889bcSSacha Coppey; CHECK-NEXT: .half 4 64776889bcSSacha Coppey; SmallConstant 65776889bcSSacha Coppey; CHECK-NEXT: .byte 4 66776889bcSSacha Coppey; CHECK-NEXT: .byte 0 67776889bcSSacha Coppey; CHECK-NEXT: .half 8 68776889bcSSacha Coppey; CHECK-NEXT: .half 0 69776889bcSSacha Coppey; CHECK-NEXT: .half 0 70776889bcSSacha Coppey; CHECK-NEXT: .word 65535 71776889bcSSacha Coppey; SmallConstant 72776889bcSSacha Coppey; CHECK-NEXT: .byte 4 73776889bcSSacha Coppey; CHECK-NEXT: .byte 0 74776889bcSSacha Coppey; CHECK-NEXT: .half 8 75776889bcSSacha Coppey; CHECK-NEXT: .half 0 76776889bcSSacha Coppey; CHECK-NEXT: .half 0 77776889bcSSacha Coppey; CHECK-NEXT: .word 65536 78776889bcSSacha Coppey; SmallConstant 79776889bcSSacha Coppey; CHECK-NEXT: .byte 5 80776889bcSSacha Coppey; CHECK-NEXT: .byte 0 81776889bcSSacha Coppey; CHECK-NEXT: .half 8 82776889bcSSacha Coppey; CHECK-NEXT: .half 0 83776889bcSSacha Coppey; CHECK-NEXT: .half 0 84776889bcSSacha Coppey; CHECK-NEXT: .word 0 85776889bcSSacha Coppey; LargeConstant at index 0 86776889bcSSacha Coppey; CHECK-NEXT: .byte 5 87776889bcSSacha Coppey; CHECK-NEXT: .byte 0 88776889bcSSacha Coppey; CHECK-NEXT: .half 8 89776889bcSSacha Coppey; CHECK-NEXT: .half 0 90776889bcSSacha Coppey; CHECK-NEXT: .half 0 91776889bcSSacha Coppey; CHECK-NEXT: .word 1 92776889bcSSacha Coppey 93776889bcSSacha Coppeydefine void @constantargs() { 94776889bcSSacha Coppeyentry: 95*ff9af4c4SNikita Popov %0 = inttoptr i64 244837814094590 to ptr 96*ff9af4c4SNikita Popov tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 28, ptr %0, i32 0, i64 65535, i64 65536, i64 4294967295, i64 4294967296) 97776889bcSSacha Coppey ret void 98776889bcSSacha Coppey} 99776889bcSSacha Coppey 100776889bcSSacha Coppey; Inline OSR Exit 101776889bcSSacha Coppey; 102776889bcSSacha Coppey; CHECK: .word .L{{.*}}-osrinline 103776889bcSSacha Coppey; CHECK-NEXT: .half 0 104776889bcSSacha Coppey; CHECK-NEXT: .half 2 105776889bcSSacha Coppey; CHECK-NEXT: .byte 1 106776889bcSSacha Coppey; CHECK-NEXT: .byte 0 107776889bcSSacha Coppey; CHECK-NEXT: .half 8 108776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 109776889bcSSacha Coppey; CHECK-NEXT: .half 0 110776889bcSSacha Coppey; CHECK-NEXT: .word 0 111776889bcSSacha Coppey; CHECK-NEXT: .byte 1 112776889bcSSacha Coppey; CHECK-NEXT: .byte 0 113776889bcSSacha Coppey; CHECK-NEXT: .half 8 114776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 115776889bcSSacha Coppey; CHECK-NEXT: .half 0 116776889bcSSacha Coppey; CHECK-NEXT: .word 0 117776889bcSSacha Coppeydefine void @osrinline(i64 %a, i64 %b) { 118776889bcSSacha Coppeyentry: 119776889bcSSacha Coppey ; Runtime void->void call. 120*ff9af4c4SNikita Popov call void inttoptr (i64 244837814094590 to ptr)() 121776889bcSSacha Coppey ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars. 122776889bcSSacha Coppey call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b) 123776889bcSSacha Coppey ret void 124776889bcSSacha Coppey} 125776889bcSSacha Coppey 126776889bcSSacha Coppey; Cold OSR Exit 127776889bcSSacha Coppey; 128776889bcSSacha Coppey; 2 live variables in register. 129776889bcSSacha Coppey; 130776889bcSSacha Coppey; CHECK: .word .L{{.*}}-osrcold 131776889bcSSacha Coppey; CHECK-NEXT: .half 0 132776889bcSSacha Coppey; CHECK-NEXT: .half 2 133776889bcSSacha Coppey; CHECK-NEXT: .byte 1 134776889bcSSacha Coppey; CHECK-NEXT: .byte 0 135776889bcSSacha Coppey; CHECK-NEXT: .half 8 136776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 137776889bcSSacha Coppey; CHECK-NEXT: .half 0 138776889bcSSacha Coppey; CHECK-NEXT: .word 0 139776889bcSSacha Coppey; CHECK-NEXT: .byte 1 140776889bcSSacha Coppey; CHECK-NEXT: .byte 0 141776889bcSSacha Coppey; CHECK-NEXT: .half 8 142776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 143776889bcSSacha Coppey; CHECK-NEXT: .half 0 144776889bcSSacha Coppey; CHECK-NEXT: .word 0 145776889bcSSacha Coppeydefine void @osrcold(i64 %a, i64 %b) { 146776889bcSSacha Coppeyentry: 147776889bcSSacha Coppey %test = icmp slt i64 %a, %b 148776889bcSSacha Coppey br i1 %test, label %ret, label %cold 149776889bcSSacha Coppeycold: 150776889bcSSacha Coppey ; OSR patchpoint with 28-byte nop-slide and 2 live vars. 151*ff9af4c4SNikita Popov %thunk = inttoptr i64 244837814094590 to ptr 152*ff9af4c4SNikita Popov call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 28, ptr %thunk, i32 0, i64 %a, i64 %b) 153776889bcSSacha Coppey unreachable 154776889bcSSacha Coppeyret: 155776889bcSSacha Coppey ret void 156776889bcSSacha Coppey} 157776889bcSSacha Coppey 158776889bcSSacha Coppey; Property Read 159776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-propertyRead 160776889bcSSacha Coppey; CHECK-NEXT: .half 0 161776889bcSSacha Coppey; CHECK-NEXT: .half 2 162776889bcSSacha Coppey; CHECK-NEXT: .byte 1 163776889bcSSacha Coppey; CHECK-NEXT: .byte 0 164776889bcSSacha Coppey; CHECK-NEXT: .half 8 165776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 166776889bcSSacha Coppey; CHECK-NEXT: .half 0 167776889bcSSacha Coppey; CHECK-NEXT: .word 0 168776889bcSSacha Coppey; CHECK-NEXT: .byte 1 169776889bcSSacha Coppey; CHECK-NEXT: .byte 0 170776889bcSSacha Coppey; CHECK-NEXT: .half 8 171776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 172776889bcSSacha Coppey; CHECK-NEXT: .half 0 173776889bcSSacha Coppey; CHECK-NEXT: .word 0 174*ff9af4c4SNikita Popovdefine i64 @propertyRead(ptr %obj) { 175776889bcSSacha Coppeyentry: 176*ff9af4c4SNikita Popov %resolveRead = inttoptr i64 244837814094590 to ptr 177*ff9af4c4SNikita Popov %result = call anyregcc i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 28, ptr %resolveRead, i32 1, ptr %obj) 178776889bcSSacha Coppey %add = add i64 %result, 3 179776889bcSSacha Coppey ret i64 %add 180776889bcSSacha Coppey} 181776889bcSSacha Coppey 182776889bcSSacha Coppey; Property Write 183776889bcSSacha Coppey; CHECK: .word .L{{.*}}-propertyWrite 184776889bcSSacha Coppey; CHECK-NEXT: .half 0 185776889bcSSacha Coppey; CHECK-NEXT: .half 2 186776889bcSSacha Coppey; CHECK-NEXT: .byte 1 187776889bcSSacha Coppey; CHECK-NEXT: .byte 0 188776889bcSSacha Coppey; CHECK-NEXT: .half 8 189776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 190776889bcSSacha Coppey; CHECK-NEXT: .half 0 191776889bcSSacha Coppey; CHECK-NEXT: .word 0 192776889bcSSacha Coppey; CHECK-NEXT: .byte 1 193776889bcSSacha Coppey; CHECK-NEXT: .byte 0 194776889bcSSacha Coppey; CHECK-NEXT: .half 8 195776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 196776889bcSSacha Coppey; CHECK-NEXT: .half 0 197776889bcSSacha Coppey; CHECK-NEXT: .word 0 198*ff9af4c4SNikita Popovdefine void @propertyWrite(i64 %dummy1, ptr %obj, i64 %dummy2, i64 %a) { 199776889bcSSacha Coppeyentry: 200*ff9af4c4SNikita Popov %resolveWrite = inttoptr i64 244837814094590 to ptr 201*ff9af4c4SNikita Popov call anyregcc void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 28, ptr %resolveWrite, i32 2, ptr %obj, i64 %a) 202776889bcSSacha Coppey ret void 203776889bcSSacha Coppey} 204776889bcSSacha Coppey 205776889bcSSacha Coppey; Void JS Call 206776889bcSSacha Coppey; 207776889bcSSacha Coppey; 2 live variables in registers. 208776889bcSSacha Coppey; 209776889bcSSacha Coppey; CHECK: .word .L{{.*}}-jsVoidCall 210776889bcSSacha Coppey; CHECK-NEXT: .half 0 211776889bcSSacha Coppey; CHECK-NEXT: .half 2 212776889bcSSacha Coppey; CHECK-NEXT: .byte 1 213776889bcSSacha Coppey; CHECK-NEXT: .byte 0 214776889bcSSacha Coppey; CHECK-NEXT: .half 8 215776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 216776889bcSSacha Coppey; CHECK-NEXT: .half 0 217776889bcSSacha Coppey; CHECK-NEXT: .word 0 218776889bcSSacha Coppey; CHECK-NEXT: .byte 1 219776889bcSSacha Coppey; CHECK-NEXT: .byte 0 220776889bcSSacha Coppey; CHECK-NEXT: .half 8 221776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 222776889bcSSacha Coppey; CHECK-NEXT: .half 0 223776889bcSSacha Coppey; CHECK-NEXT: .word 0 224*ff9af4c4SNikita Popovdefine void @jsVoidCall(i64 %dummy1, ptr %obj, i64 %arg, i64 %l1, i64 %l2) { 225776889bcSSacha Coppeyentry: 226*ff9af4c4SNikita Popov %resolveCall = inttoptr i64 244837814094590 to ptr 227*ff9af4c4SNikita Popov call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 28, ptr %resolveCall, i32 2, ptr %obj, i64 %arg, i64 %l1, i64 %l2) 228776889bcSSacha Coppey ret void 229776889bcSSacha Coppey} 230776889bcSSacha Coppey 231776889bcSSacha Coppey; i64 JS Call 232776889bcSSacha Coppey; 233776889bcSSacha Coppey; 2 live variables in registers. 234776889bcSSacha Coppey; 235776889bcSSacha Coppey; CHECK: .word .L{{.*}}-jsIntCall 236776889bcSSacha Coppey; CHECK-NEXT: .half 0 237776889bcSSacha Coppey; CHECK-NEXT: .half 2 238776889bcSSacha Coppey; CHECK-NEXT: .byte 1 239776889bcSSacha Coppey; CHECK-NEXT: .byte 0 240776889bcSSacha Coppey; CHECK-NEXT: .half 8 241776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 242776889bcSSacha Coppey; CHECK-NEXT: .half 0 243776889bcSSacha Coppey; CHECK-NEXT: .word 0 244776889bcSSacha Coppey; CHECK-NEXT: .byte 1 245776889bcSSacha Coppey; CHECK-NEXT: .byte 0 246776889bcSSacha Coppey; CHECK-NEXT: .half 8 247776889bcSSacha Coppey; CHECK-NEXT: .half {{[0-9]+}} 248776889bcSSacha Coppey; CHECK-NEXT: .half 0 249776889bcSSacha Coppey; CHECK-NEXT: .word 0 250*ff9af4c4SNikita Popovdefine i64 @jsIntCall(i64 %dummy1, ptr %obj, i64 %arg, i64 %l1, i64 %l2) { 251776889bcSSacha Coppeyentry: 252*ff9af4c4SNikita Popov %resolveCall = inttoptr i64 244837814094590 to ptr 253*ff9af4c4SNikita Popov %result = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 28, ptr %resolveCall, i32 2, ptr %obj, i64 %arg, i64 %l1, i64 %l2) 254776889bcSSacha Coppey %add = add i64 %result, 3 255776889bcSSacha Coppey ret i64 %add 256776889bcSSacha Coppey} 257776889bcSSacha Coppey 258776889bcSSacha Coppey; Map a constant value. 259776889bcSSacha Coppey; 260776889bcSSacha Coppey; CHECK: .word .L{{.*}}-liveConstant 261776889bcSSacha Coppey; CHECK-NEXT: .half 0 262776889bcSSacha Coppey; 1 location 263776889bcSSacha Coppey; CHECK-NEXT: .half 1 264776889bcSSacha Coppey; Loc 0: SmallConstant 265776889bcSSacha Coppey; CHECK-NEXT: .byte 4 266776889bcSSacha Coppey; CHECK-NEXT: .byte 0 267776889bcSSacha Coppey; CHECK-NEXT: .half 8 268776889bcSSacha Coppey; CHECK-NEXT: .half 0 269776889bcSSacha Coppey; CHECK-NEXT: .half 0 270776889bcSSacha Coppey; CHECK-NEXT: .word 33 271776889bcSSacha Coppey 272776889bcSSacha Coppeydefine void @liveConstant() { 273776889bcSSacha Coppey tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 8, i32 33) 274776889bcSSacha Coppey ret void 275776889bcSSacha Coppey} 276776889bcSSacha Coppey 277776889bcSSacha Coppey; Spilled stack map values. 278776889bcSSacha Coppey; 279776889bcSSacha Coppey; Verify 28 stack map entries. 280776889bcSSacha Coppey; 281776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-spilledValue 282776889bcSSacha Coppey; CHECK-NEXT: .half 0 283776889bcSSacha Coppey; CHECK-NEXT: .half 28 284776889bcSSacha Coppey; 285776889bcSSacha Coppey; Check that at least one is a spilled entry from RBP. 286776889bcSSacha Coppey; Location: Indirect RBP + ... 287776889bcSSacha Coppey; CHECK: .byte 3 288776889bcSSacha Coppey; CHECK-NEXT: .byte 0 289776889bcSSacha Coppey; CHECK-NEXT: .half 8 290776889bcSSacha Coppey; CHECK-NEXT: .half 2 291776889bcSSacha Coppey; CHECK-NEXT: .half 0 292776889bcSSacha Coppey; CHECK-NEXT: .word 293776889bcSSacha Coppeydefine void @spilledValue(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27) { 294776889bcSSacha Coppeyentry: 295*ff9af4c4SNikita Popov call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 28, ptr null, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27) 296776889bcSSacha Coppey ret void 297776889bcSSacha Coppey} 298776889bcSSacha Coppey 299776889bcSSacha Coppey; Directly map an alloca's address. 300776889bcSSacha Coppey; 301776889bcSSacha Coppey; Callsite 16 302776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-directFrameIdx 303776889bcSSacha Coppey; CHECK-NEXT: .half 0 304776889bcSSacha Coppey; 1 location 305776889bcSSacha Coppey; CHECK-NEXT: .half 1 306776889bcSSacha Coppey; Loc 0: Direct RBP - ofs 307776889bcSSacha Coppey; CHECK-NEXT: .byte 2 308776889bcSSacha Coppey; CHECK-NEXT: .byte 0 309776889bcSSacha Coppey; CHECK-NEXT: .half 8 310776889bcSSacha Coppey; CHECK-NEXT: .half 2 311776889bcSSacha Coppey; CHECK-NEXT: .half 0 312776889bcSSacha Coppey; CHECK-NEXT: .word 313776889bcSSacha Coppey 314776889bcSSacha Coppey; Callsite 17 315776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-directFrameIdx 316776889bcSSacha Coppey; CHECK-NEXT: .half 0 317776889bcSSacha Coppey; 2 locations 318776889bcSSacha Coppey; CHECK-NEXT: .half 2 319776889bcSSacha Coppey; Loc 0: Direct RBP - ofs 320776889bcSSacha Coppey; CHECK-NEXT: .byte 2 321776889bcSSacha Coppey; CHECK-NEXT: .byte 0 322776889bcSSacha Coppey; CHECK-NEXT: .half 8 323776889bcSSacha Coppey; CHECK-NEXT: .half 2 324776889bcSSacha Coppey; CHECK-NEXT: .half 0 325776889bcSSacha Coppey; CHECK-NEXT: .word 326776889bcSSacha Coppey; Loc 1: Direct RBP - ofs 327776889bcSSacha Coppey; CHECK-NEXT: .byte 2 328776889bcSSacha Coppey; CHECK-NEXT: .byte 0 329776889bcSSacha Coppey; CHECK-NEXT: .half 8 330776889bcSSacha Coppey; CHECK-NEXT: .half 2 331776889bcSSacha Coppey; CHECK-NEXT: .half 0 332776889bcSSacha Coppey; CHECK-NEXT: .word 333776889bcSSacha Coppeydefine void @directFrameIdx() { 334776889bcSSacha Coppeyentry: 335776889bcSSacha Coppey %metadata1 = alloca i64, i32 3, align 8 336*ff9af4c4SNikita Popov store i64 11, ptr %metadata1 337*ff9af4c4SNikita Popov store i64 12, ptr %metadata1 338*ff9af4c4SNikita Popov store i64 13, ptr %metadata1 339*ff9af4c4SNikita Popov call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, ptr %metadata1) 340776889bcSSacha Coppey %metadata2 = alloca i8, i32 4, align 8 341776889bcSSacha Coppey %metadata3 = alloca i16, i32 4, align 8 342*ff9af4c4SNikita Popov call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 17, i32 4, ptr null, i32 0, ptr %metadata2, ptr %metadata3) 343776889bcSSacha Coppey ret void 344776889bcSSacha Coppey} 345776889bcSSacha Coppey 346776889bcSSacha Coppey; Test a 64-bit ID. 347776889bcSSacha Coppey; 348776889bcSSacha Coppey; CHECK: .quad 4294967295 349776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-longid 350776889bcSSacha Coppey; CHECK: .quad 4294967296 351776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-longid 352776889bcSSacha Coppey; CHECK: .quad 9223372036854775807 353776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-longid 354776889bcSSacha Coppey; CHECK: .quad -1 355776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-longid 356776889bcSSacha Coppeydefine void @longid() { 357776889bcSSacha Coppeyentry: 358*ff9af4c4SNikita Popov tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967295, i32 0, ptr null, i32 0) 359*ff9af4c4SNikita Popov tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967296, i32 0, ptr null, i32 0) 360*ff9af4c4SNikita Popov tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 9223372036854775807, i32 0, ptr null, i32 0) 361*ff9af4c4SNikita Popov tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 -1, i32 0, ptr null, i32 0) 362776889bcSSacha Coppey ret void 363776889bcSSacha Coppey} 364776889bcSSacha Coppey 365776889bcSSacha Coppey; A stack frame which needs to be realigned at runtime (to meet alignment 366776889bcSSacha Coppey; criteria for values on the stack) does not have a fixed frame size. 367776889bcSSacha Coppey; CHECK-LABEL: .word .L{{.*}}-needsStackRealignment 368776889bcSSacha Coppey; CHECK-NEXT: .half 0 369776889bcSSacha Coppey; 0 locations 370776889bcSSacha Coppey; CHECK-NEXT: .half 0 371776889bcSSacha Coppeydefine void @needsStackRealignment() { 372776889bcSSacha Coppey %val = alloca i64, i32 3, align 128 373*ff9af4c4SNikita Popov tail call void (...) @escape_values(ptr %val) 374776889bcSSacha Coppey; Note: Adding any non-constant to the stackmap would fail because we 375776889bcSSacha Coppey; expected to be able to address off the frame pointer. In a realigned 376776889bcSSacha Coppey; frame, we must use the stack pointer instead. This is a separate bug. 377776889bcSSacha Coppey tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0) 378776889bcSSacha Coppey ret void 379776889bcSSacha Coppey} 380776889bcSSacha Coppeydeclare void @escape_values(...) 381776889bcSSacha Coppey 382776889bcSSacha Coppeydeclare void @llvm.experimental.stackmap(i64, i32, ...) 383*ff9af4c4SNikita Popovdeclare void @llvm.experimental.patchpoint.void(i64, i32, ptr, i32, ...) 384*ff9af4c4SNikita Popovdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, ptr, i32, ...) 385