brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.4 KiB · f414ea3 Raw
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