632 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s2;3; Note: Print verbose stackmaps using -debug-only=stackmaps.4 5; CHECK: .section .llvm_stackmaps6; CHECK-NEXT: __LLVM_StackMaps:7; Header8; CHECK-NEXT: .byte 39; CHECK-NEXT: .byte 010; CHECK-NEXT: .short 011; Num Functions12; CHECK-NEXT: .long 1613; Num LargeConstants14; CHECK-NEXT: .long 415; Num Callsites16; CHECK-NEXT: .long 2017 18; Functions and stack size19; CHECK-NEXT: .quad constantargs20; CHECK-NEXT: .quad 16021; CHECK-NEXT: .quad 122; CHECK-NEXT: .quad osrinline23; CHECK-NEXT: .quad 16024; CHECK-NEXT: .quad 125; CHECK-NEXT: .quad osrcold26; CHECK-NEXT: .quad 16027; CHECK-NEXT: .quad 128; CHECK-NEXT: .quad propertyRead29; CHECK-NEXT: .quad 16030; CHECK-NEXT: .quad 131; CHECK-NEXT: .quad propertyWrite32; CHECK-NEXT: .quad 16033; CHECK-NEXT: .quad 134; CHECK-NEXT: .quad jsVoidCall35; CHECK-NEXT: .quad 16036; CHECK-NEXT: .quad 137; CHECK-NEXT: .quad jsIntCall38; CHECK-NEXT: .quad 16039; CHECK-NEXT: .quad 140; CHECK-NEXT: .quad spilledValue41; CHECK-NEXT: .quad 16042; CHECK-NEXT: .quad 143; CHECK-NEXT: .quad spilledStackMapValue44; CHECK-NEXT: .quad 16045; CHECK-NEXT: .quad 146; CHECK-NEXT: .quad spillSubReg47; CHECK-NEXT: .quad 16848; CHECK-NEXT: .quad 149; CHECK-NEXT: .quad liveConstant50; CHECK-NEXT: .quad 16051; CHECK-NEXT: .quad 152; CHECK-NEXT: .quad directFrameIdx53; CHECK-NEXT: .quad 20054; CHECK-NEXT: .quad 255; CHECK-NEXT: .quad longid56; CHECK-NEXT: .quad 16057; CHECK-NEXT: .quad 458; CHECK-NEXT: .quad clobberScratch59; CHECK-NEXT: .quad 16860; CHECK-NEXT: .quad 161; CHECK-NEXT: .quad needsStackRealignment62; CHECK-NEXT: .quad -163; CHECK-NEXT: .quad 164; CHECK-NEXT: .quad floats65; CHECK-NEXT: .quad 17666; CHECK-NEXT: .quad 167 68; Large Constants69; CHECK-NEXT: .quad 214748364870; CHECK-NEXT: .quad 429496729571; CHECK-NEXT: .quad 429496729672; CHECK-NEXT: .quad 429496729773 74; Callsites75; Constant arguments76;77; CHECK-NEXT: .quad 178; CHECK-NEXT: .long .L{{.*}}-constantargs79; CHECK-NEXT: .short 080; CHECK-NEXT: .short 1481; SmallConstant82; CHECK-NEXT: .byte 483; CHECK-NEXT: .byte 084; CHECK-NEXT: .short 885; CHECK-NEXT: .short 086; CHECK-NEXT: .short 087; CHECK-NEXT: .long -188; SmallConstant89; CHECK-NEXT: .byte 490; CHECK-NEXT: .byte 091; CHECK-NEXT: .short 892; CHECK-NEXT: .short 093; CHECK-NEXT: .short 094; CHECK-NEXT: .long -195; SmallConstant96; CHECK-NEXT: .byte 497; CHECK-NEXT: .byte 098; CHECK-NEXT: .short 899; CHECK-NEXT: .short 0100; CHECK-NEXT: .short 0101; CHECK-NEXT: .long 65536102; SmallConstant103; CHECK-NEXT: .byte 4104; CHECK-NEXT: .byte 0105; CHECK-NEXT: .short 8106; CHECK-NEXT: .short 0107; CHECK-NEXT: .short 0108; CHECK-NEXT: .long 2000000000109; SmallConstant110; CHECK-NEXT: .byte 4111; CHECK-NEXT: .byte 0112; CHECK-NEXT: .short 8113; CHECK-NEXT: .short 0114; CHECK-NEXT: .short 0115; CHECK-NEXT: .long 2147483647116; SmallConstant117; CHECK-NEXT: .byte 4118; CHECK-NEXT: .byte 0119; CHECK-NEXT: .short 8120; CHECK-NEXT: .short 0121; CHECK-NEXT: .short 0122; CHECK-NEXT: .long -1123; SmallConstant124; CHECK-NEXT: .byte 4125; CHECK-NEXT: .byte 0126; CHECK-NEXT: .short 8127; CHECK-NEXT: .short 0128; CHECK-NEXT: .short 0129; CHECK-NEXT: .long -1130; SmallConstant131; CHECK-NEXT: .byte 4132; CHECK-NEXT: .byte 0133; CHECK-NEXT: .short 8134; CHECK-NEXT: .short 0135; CHECK-NEXT: .short 0136; CHECK-NEXT: .long 0137; LargeConstant at index 0138; CHECK-NEXT: .byte 5139; CHECK-NEXT: .byte 0140; CHECK-NEXT: .short 8141; CHECK-NEXT: .short 0142; CHECK-NEXT: .short 0143; CHECK-NEXT: .long 0144; LargeConstant at index 1145; CHECK-NEXT: .byte 5146; CHECK-NEXT: .byte 0147; CHECK-NEXT: .short 8148; CHECK-NEXT: .short 0149; CHECK-NEXT: .short 0150; CHECK-NEXT: .long 1151; LargeConstant at index 2152; CHECK-NEXT: .byte 5153; CHECK-NEXT: .byte 0154; CHECK-NEXT: .short 8155; CHECK-NEXT: .short 0156; CHECK-NEXT: .short 0157; CHECK-NEXT: .long 2158; SmallConstant159; CHECK-NEXT: .byte 4160; CHECK-NEXT: .byte 0161; CHECK-NEXT: .short 8162; CHECK-NEXT: .short 0163; CHECK-NEXT: .short 0164; CHECK-NEXT: .long -1165; SmallConstant166; CHECK-NEXT: .byte 4167; CHECK-NEXT: .byte 0168; CHECK-NEXT: .short 8169; CHECK-NEXT: .short 0170; CHECK-NEXT: .short 0171; CHECK-NEXT: .long 66172; LargeConstant at index 3173; CHECK-NEXT: .byte 5174; CHECK-NEXT: .byte 0175; CHECK-NEXT: .short 8176; CHECK-NEXT: .short 0177; CHECK-NEXT: .short 0178; CHECK-NEXT: .long 3179 180define void @constantargs() {181entry:182 %0 = inttoptr i64 12345 to ptr183 tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 14, ptr %0, i32 0, i16 65535, i16 -1, i32 65536, i32 2000000000, i32 2147483647, i32 -1, i32 4294967295, i32 4294967296, i64 2147483648, i64 4294967295, i64 4294967296, i64 -1, i128 66, i128 4294967297)184 ret void185}186 187; Inline OSR Exit188;189; CHECK: .long .L{{.*}}-osrinline190; CHECK-NEXT: .short 0191; CHECK-NEXT: .short 2192; CHECK-NEXT: .byte 1193; CHECK-NEXT: .byte 0194; CHECK-NEXT: .short 8195; CHECK-NEXT: .short {{[0-9]+}}196; CHECK-NEXT: .short 0197; CHECK-NEXT: .long 0198; CHECK-NEXT: .byte 1199; CHECK-NEXT: .byte 0200; CHECK-NEXT: .short 8201; CHECK-NEXT: .short {{[0-9]+}}202; CHECK-NEXT: .short 0203; CHECK-NEXT: .long 0204define void @osrinline(i64 %a, i64 %b) {205entry:206 ; Runtime void->void call.207 call void inttoptr (i64 -559038737 to ptr)()208 ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars.209 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b)210 ret void211}212 213; Cold OSR Exit214;215; 2 live variables in register.216;217; CHECK: .long .L{{.*}}-osrcold218; CHECK-NEXT: .short 0219; CHECK-NEXT: .short 2220; CHECK-NEXT: .byte 1221; CHECK-NEXT: .byte 0222; CHECK-NEXT: .short 8223; CHECK-NEXT: .short {{[0-9]+}}224; CHECK-NEXT: .short 0225; CHECK-NEXT: .long 0226; CHECK-NEXT: .byte 1227; CHECK-NEXT: .byte 0228; CHECK-NEXT: .short 8229; CHECK-NEXT: .short {{[0-9]+}}230; CHECK-NEXT: .short 0231; CHECK-NEXT: .long 0232define void @osrcold(i64 %a, i64 %b) {233entry:234 %test = icmp slt i64 %a, %b235 br i1 %test, label %ret, label %cold236cold:237 ; OSR patchpoint with 12-byte nop-slide and 2 live vars.238 %thunk = inttoptr i64 -559038737 to ptr239 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 14, ptr %thunk, i32 0, i64 %a, i64 %b)240 unreachable241ret:242 ret void243}244 245; Property Read246; CHECK: .long .L{{.*}}-propertyRead247; CHECK-NEXT: .short 0248; CHECK-NEXT: .short 2249; CHECK-NEXT: .byte 1250; CHECK-NEXT: .byte 0251; CHECK-NEXT: .short 8252; CHECK-NEXT: .short {{[0-9]+}}253; CHECK-NEXT: .short 0254; CHECK-NEXT: .long 0255; CHECK-NEXT: .byte 1256; CHECK-NEXT: .byte 0257; CHECK-NEXT: .short 8258; CHECK-NEXT: .short {{[0-9]+}}259; CHECK-NEXT: .short 0260; CHECK-NEXT: .long 0261define i64 @propertyRead(ptr %obj) {262entry:263 %resolveRead = inttoptr i64 -559038737 to ptr264 %result = call anyregcc i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 14, ptr %resolveRead, i32 1, ptr %obj)265 %add = add i64 %result, 3266 ret i64 %add267}268 269; Property Write270; CHECK: .long .L{{.*}}-propertyWrite271; CHECK-NEXT: .short 0272; CHECK-NEXT: .short 2273; CHECK-NEXT: .byte 1274; CHECK-NEXT: .byte 0275; CHECK-NEXT: .short 8276; CHECK-NEXT: .short {{[0-9]+}}277; CHECK-NEXT: .short 0278; CHECK-NEXT: .long 0279; CHECK-NEXT: .byte 1280; CHECK-NEXT: .byte 0281; CHECK-NEXT: .short 8282; CHECK-NEXT: .short {{[0-9]+}}283; CHECK-NEXT: .short 0284; CHECK-NEXT: .long 0285define void @propertyWrite(i64 %dummy1, ptr %obj, i64 %dummy2, i64 %a) {286entry:287 %resolveWrite = inttoptr i64 -559038737 to ptr288 call anyregcc void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 14, ptr %resolveWrite, i32 2, ptr %obj, i64 %a)289 ret void290}291 292; Void JS Call293;294; 2 live variables in registers.295;296; CHECK: .long .L{{.*}}-jsVoidCall297; CHECK-NEXT: .short 0298; CHECK-NEXT: .short 2299; CHECK-NEXT: .byte 1300; CHECK-NEXT: .byte 0301; CHECK-NEXT: .short 8302; CHECK-NEXT: .short {{[0-9]+}}303; CHECK-NEXT: .short 0304; CHECK-NEXT: .long 0305; CHECK-NEXT: .byte 1306; CHECK-NEXT: .byte 0307; CHECK-NEXT: .short 8308; CHECK-NEXT: .short {{[0-9]+}}309; CHECK-NEXT: .short 0310; CHECK-NEXT: .long 0311define void @jsVoidCall(i64 %dummy1, ptr %obj, i64 %arg, i64 %l1, i64 %l2) {312entry:313 %resolveCall = inttoptr i64 -559038737 to ptr314 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 14, ptr %resolveCall, i32 2, ptr %obj, i64 %arg, i64 %l1, i64 %l2)315 ret void316}317 318; i64 JS Call319;320; 2 live variables in registers.321;322; CHECK: .long .L{{.*}}-jsIntCall323; CHECK-NEXT: .short 0324; CHECK-NEXT: .short 2325; CHECK-NEXT: .byte 1326; CHECK-NEXT: .byte 0327; CHECK-NEXT: .short 8328; CHECK-NEXT: .short {{[0-9]+}}329; CHECK-NEXT: .short 0330; CHECK-NEXT: .long 0331; CHECK-NEXT: .byte 1332; CHECK-NEXT: .byte 0333; CHECK-NEXT: .short 8334; CHECK-NEXT: .short {{[0-9]+}}335; CHECK-NEXT: .short 0336; CHECK-NEXT: .long 0337define i64 @jsIntCall(i64 %dummy1, ptr %obj, i64 %arg, i64 %l1, i64 %l2) {338entry:339 %resolveCall = inttoptr i64 -559038737 to ptr340 %result = call i64 (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 14, ptr %resolveCall, i32 2, ptr %obj, i64 %arg, i64 %l1, i64 %l2)341 %add = add i64 %result, 3342 ret i64 %add343}344 345; Spilled stack map values.346;347; Verify 17 stack map entries.348;349; CHECK: .long .L{{.*}}-spilledValue350; CHECK-NEXT: .short 0351; CHECK-NEXT: .short 17352;353; Check that at least one is a spilled entry from the parameter area.354; Location: Indirect r15 + XX355; CHECK: .byte 3356; CHECK-NEXT: .byte 0357; CHECK-NEXT: .short 8358; CHECK-NEXT: .short 15359; CHECK-NEXT: .short 0360; CHECK-NEXT: .long361define 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) {362entry:363 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 14, 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)364 ret void365}366 367; Spilled stack map values.368;369; Verify 17 stack map entries.370;371; CHECK: .long .L{{.*}}-spilledStackMapValue372; CHECK-NEXT: .short 0373; CHECK-NEXT: .short 17374;375; Check that at least one is a spilled entry from the parameter area.376; Location: Indirect r15 + XX377; CHECK: .byte 3378; CHECK-NEXT: .byte 0379; CHECK-NEXT: .short 8380; CHECK-NEXT: .short 15381; CHECK-NEXT: .short 0382; CHECK-NEXT: .long383define void @spilledStackMapValue(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) {384entry:385 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 16, 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)386 ret void387}388 389; Spill a subregister stackmap operand.390;391; CHECK: .long .L{{.*}}-spillSubReg392; CHECK-NEXT: .short 0393; 4 locations394; CHECK-NEXT: .short 1395;396; Check that the subregister operand is a 4-byte spill.397; Location: Indirect, 4-byte, %r15 + 164398; CHECK: .byte 3399; CHECK-NEXT: .byte 0400; CHECK-NEXT: .short 4401; CHECK-NEXT: .short 15402; CHECK-NEXT: .short 0403; CHECK-NEXT: .long 164404define void @spillSubReg(i64 %arg) #0 {405bb:406 br i1 undef, label %bb1, label %bb2407 408bb1:409 unreachable410 411bb2:412 %tmp = load i64, ptr inttoptr (i64 140685446136880 to ptr)413 br i1 undef, label %bb16, label %bb17414 415bb16:416 unreachable417 418bb17:419 %tmp32 = trunc i64 %tmp to i32420 br i1 undef, label %bb60, label %bb61421 422bb60:423 tail call void asm sideeffect "nopr %r0", "~{r0},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14}"() nounwind424 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 13, i32 6, i32 %tmp32)425 unreachable426 427bb61:428 unreachable429}430 431; Map a constant value.432;433; CHECK: .long .L{{.*}}-liveConstant434; CHECK-NEXT: .short 0435; 1 location436; CHECK-NEXT: .short 1437; Loc 0: SmallConstant438; CHECK-NEXT: .byte 4439; CHECK-NEXT: .byte 0440; CHECK-NEXT: .short 8441; CHECK-NEXT: .short 0442; CHECK-NEXT: .short 0443; CHECK-NEXT: .long 33444 445define void @liveConstant() {446 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 6, i32 33)447 ret void448}449 450; Directly map an alloca's address.451;452; Callsite 16453; CHECK: .long .L{{.*}}-directFrameIdx454; CHECK-NEXT: .short 0455; 1 location456; CHECK-NEXT: .short 1457; Loc 0: Direct %r15 + ofs458; CHECK-NEXT: .byte 2459; CHECK-NEXT: .byte 0460; CHECK-NEXT: .short 8461; CHECK-NEXT: .short 15462; CHECK-NEXT: .short 0463; CHECK-NEXT: .long464 465; Callsite 17466; CHECK: .long .L{{.*}}-directFrameIdx467; CHECK-NEXT: .short 0468; 2 locations469; CHECK-NEXT: .short 2470; Loc 0: Direct %r15 + ofs471; CHECK-NEXT: .byte 2472; CHECK-NEXT: .byte 0473; CHECK-NEXT: .short 8474; CHECK-NEXT: .short 15475; CHECK-NEXT: .short 0476; CHECK-NEXT: .long477; Loc 1: Direct %r15 + ofs478; CHECK-NEXT: .byte 2479; CHECK-NEXT: .byte 0480; CHECK-NEXT: .short 8481; CHECK-NEXT: .short 15482; CHECK-NEXT: .short 0483; CHECK-NEXT: .long484define void @directFrameIdx() {485entry:486 %metadata1 = alloca i64, i32 3, align 8487 store i64 11, ptr %metadata1488 store i64 12, ptr %metadata1489 store i64 13, ptr %metadata1490 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, ptr %metadata1)491 %metadata2 = alloca i8, i32 4, align 8492 %metadata3 = alloca i16, i32 4, align 8493 call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 17, i32 6, ptr null, i32 0, ptr %metadata2, ptr %metadata3)494 ret void495}496 497; Test a 64-bit ID.498;499; CHECK: .quad 4294967295500; CHECK: .long .L{{.*}}-longid501; CHECK: .quad 4294967296502; CHECK: .long .L{{.*}}-longid503; CHECK: .quad 9223372036854775807504; CHECK: .long .L{{.*}}-longid505; CHECK: .quad -1506; CHECK: .long .L{{.*}}-longid507define void @longid() {508entry:509 tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967295, i32 0, ptr null, i32 0)510 tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967296, i32 0, ptr null, i32 0)511 tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 9223372036854775807, i32 0, ptr null, i32 0)512 tail call void (i64, i32, ptr, i32, ...) @llvm.experimental.patchpoint.void(i64 -1, i32 0, ptr null, i32 0)513 ret void514}515 516; Map a value when %r0 and %r1 are the only free registers.517; The scratch registers should not be used for a live stackmap value.518;519; CHECK: .long .L{{.*}}-clobberScratch520; CHECK-NEXT: .short 0521; 1 location522; CHECK-NEXT: .short 1523; Loc 0: Indirect %r15 + offset524; CHECK-NEXT: .byte 3525; CHECK-NEXT: .byte 0526; CHECK-NEXT: .short 4527; CHECK-NEXT: .short 15528; CHECK-NEXT: .short 0529; CHECK-NEXT: .long 164530define void @clobberScratch(i32 %a) {531 tail call void asm sideeffect "nopr %r0", "~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14}"() nounwind532 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 8, i32 %a)533 ret void534}535 536; A stack frame which needs to be realigned at runtime (to meet alignment537; criteria for values on the stack) does not have a fixed frame size.538; CHECK: .long .L{{.*}}-needsStackRealignment539; CHECK-NEXT: .short 0540; 0 locations541; CHECK-NEXT: .short 0542define void @needsStackRealignment() {543 %val = alloca i64, i32 3, align 128544 tail call void (...) @escape_values(ptr %val)545; Note: Adding any non-constant to the stackmap would fail because we546; expected to be able to address off the frame pointer. In a realigned547; frame, we must use the stack pointer instead. This is a separate bug.548 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0)549 ret void550}551declare void @escape_values(...)552 553; CHECK-LABEL: .long .L{{.*}}-floats554; CHECK-NEXT: .short 0555; Num Locations556; CHECK-NEXT: .short 9557; Loc 0: constant half stored to FP register558; CHECK-NEXT: .byte 1559; CHECK-NEXT: .byte 0560; CHECK-NEXT: .short 4561; CHECK-NEXT: .short {{.*}}562; CHECK-NEXT: .short 0563; CHECK-NEXT: .long 16564; Loc 0: constant float stored to FP register565; CHECK-NEXT: .byte 1566; CHECK-NEXT: .byte 0567; CHECK-NEXT: .short 4568; CHECK-NEXT: .short {{.*}}569; CHECK-NEXT: .short 0570; CHECK-NEXT: .long 32571; Loc 0: constant double stored to FP register572; CHECK-NEXT: .byte 1573; CHECK-NEXT: .byte 0574; CHECK-NEXT: .short 8575; CHECK-NEXT: .short {{.*}}576; CHECK-NEXT: .short 0577; CHECK-NEXT: .long 0578; Loc 1: half value in FP register579; CHECK-NEXT: .byte 1580; CHECK-NEXT: .byte 0581; CHECK-NEXT: .short 4582; CHECK-NEXT: .short {{.*}}583; CHECK-NEXT: .short 0584; CHECK-NEXT: .long 16585; Loc 1: float value in FP register586; CHECK-NEXT: .byte 1587; CHECK-NEXT: .byte 0588; CHECK-NEXT: .short 4589; CHECK-NEXT: .short {{.*}}590; CHECK-NEXT: .short 0591; CHECK-NEXT: .long 32592; Loc 2: double value in FP register593; CHECK-NEXT: .byte 1594; CHECK-NEXT: .byte 0595; CHECK-NEXT: .short 8596; CHECK-NEXT: .short {{.*}}597; CHECK-NEXT: .short 0598; CHECK-NEXT: .long 0599; Loc 3: half on stack600; CHECK-NEXT: .byte 2601; CHECK-NEXT: .byte 0602; CHECK-NEXT: .short 8603; CHECK-NEXT: .short {{.*}}604; CHECK-NEXT: .short 0605; CHECK-NEXT: .long {{.*}}606; Loc 3: float on stack607; CHECK-NEXT: .byte 2608; CHECK-NEXT: .byte 0609; CHECK-NEXT: .short 8610; CHECK-NEXT: .short {{.*}}611; CHECK-NEXT: .short 0612; CHECK-NEXT: .long {{.*}}613; Loc 4: double on stack614; CHECK-NEXT: .byte 2615; CHECK-NEXT: .byte 0616; CHECK-NEXT: .short 8617; CHECK-NEXT: .short {{.*}}618; CHECK-NEXT: .short 0619; CHECK-NEXT: .long {{.*}}620define void @floats(half %e, float %f, double %g) {621 %hh = alloca half622 %ff = alloca float623 %gg = alloca double624 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 888, i32 0, half 1.125,625 float 1.25, double 1.5, half %e, float %f, double %g, ptr %hh, ptr %ff, ptr %gg)626 ret void627}628 629declare void @llvm.experimental.stackmap(i64, i32, ...)630declare void @llvm.experimental.patchpoint.void(i64, i32, ptr, i32, ...)631declare i64 @llvm.experimental.patchpoint.i64(i64, i32, ptr, i32, ...)632