Skip to content

Commit d245974

Browse files
vext01TNorthover
authored andcommitted
Test stackmap support for floating point types.
It appears that float support is complete, or at least, the stackmap records emitted are not inconceivable (I must admit that I don't know about many of the architectures under test here). One curiosity, the SystemZ tests highlight an undocumented (or maybe incorrect) quirk of the stackmap format: in the case of a Register record, the Offset or SmallConstant field can encode a sub-register index! I've only ever seen this field zero for Register entries up until now.
1 parent a5cf17f commit d245974

File tree

5 files changed

+298
-10
lines changed

5 files changed

+298
-10
lines changed

llvm/test/CodeGen/AArch64/arm64-stackmap.ll

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
1414
; CHECK-NEXT: .byte 0
1515
; CHECK-NEXT: .short 0
1616
; Num Functions
17-
; CHECK-NEXT: .long 11
17+
; CHECK-NEXT: .long 12
1818
; Num LargeConstants
1919
; CHECK-NEXT: .long 3
2020
; Num Callsites
21-
; CHECK-NEXT: .long 11
21+
; CHECK-NEXT: .long 12
2222

2323
; Functions and stack size
2424
; CHECK-NEXT: .quad _constantargs
@@ -54,6 +54,9 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
5454
; CHECK-NEXT: .quad _clobberLR
5555
; CHECK-NEXT: .quad 112
5656
; CHECK-NEXT: .quad 1
57+
; CHECK-NEXT: .quad _floats
58+
; CHECK-NEXT: .quad 32
59+
; CHECK-NEXT: .quad 1
5760

5861
; Num LargeConstants
5962
; CHECK-NEXT: .quad 4294967295
@@ -348,6 +351,60 @@ define void @clobberLR(i32 %a) {
348351
ret void
349352
}
350353

354+
; CHECK-LABEL: .long L{{.*}}-_floats
355+
; CHECK-NEXT: .short 0
356+
; Num Locations
357+
; CHECK-NEXT: .short 6
358+
; Loc 0: constant float stored to FP register
359+
; CHECK-NEXT: .byte 1
360+
; CHECK-NEXT: .byte 0
361+
; CHECK-NEXT: .short 4
362+
; CHECK-NEXT: .short {{.*}}
363+
; CHECK-NEXT: .short 0
364+
; CHECK-NEXT: .long 0
365+
; Loc 0: constant double stored to FP register
366+
; CHECK-NEXT: .byte 1
367+
; CHECK-NEXT: .byte 0
368+
; CHECK-NEXT: .short 8
369+
; CHECK-NEXT: .short {{.*}}
370+
; CHECK-NEXT: .short 0
371+
; CHECK-NEXT: .long 0
372+
; Loc 1: float value in FP register
373+
; CHECK-NEXT: .byte 1
374+
; CHECK-NEXT: .byte 0
375+
; CHECK-NEXT: .short 4
376+
; CHECK-NEXT: .short {{.*}}
377+
; CHECK-NEXT: .short 0
378+
; CHECK-NEXT: .long 0
379+
; Loc 2: double value in FP register
380+
; CHECK-NEXT: .byte 1
381+
; CHECK-NEXT: .byte 0
382+
; CHECK-NEXT: .short 8
383+
; CHECK-NEXT: .short {{.*}}
384+
; CHECK-NEXT: .short 0
385+
; CHECK-NEXT: .long 0
386+
; Loc 3: float on stack
387+
; CHECK-NEXT: .byte 2
388+
; CHECK-NEXT: .byte 0
389+
; CHECK-NEXT: .short 8
390+
; CHECK-NEXT: .short {{.*}}
391+
; CHECK-NEXT: .short 0
392+
; CHECK-NEXT: .long -{{.*}}
393+
; Loc 4: double on stack
394+
; CHECK-NEXT: .byte 2
395+
; CHECK-NEXT: .byte 0
396+
; CHECK-NEXT: .short 8
397+
; CHECK-NEXT: .short {{.*}}
398+
; CHECK-NEXT: .short 0
399+
; CHECK-NEXT: .long -{{.*}}
400+
define void @floats(float %f, double %g) {
401+
%ff = alloca float
402+
%gg = alloca double
403+
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 888, i32 0, float 1.25,
404+
double 1.5, float %f, double %g, float* %ff, double* %gg)
405+
ret void
406+
}
407+
351408
declare void @llvm.experimental.stackmap(i64, i32, ...)
352409
declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
353410
declare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)

llvm/test/CodeGen/AArch64/stackmap.ll

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
; CHECK-NEXT: .byte 0
1010
; CHECK-NEXT: .hword 0
1111
; Num Functions
12-
; CHECK-NEXT: .word 14
12+
; CHECK-NEXT: .word 15
1313
; Num LargeConstants
1414
; CHECK-NEXT: .word 4
1515
; Num Callsites
16-
; CHECK-NEXT: .word 18
16+
; CHECK-NEXT: .word 19
1717

1818
; Functions and stack size
1919
; CHECK-NEXT: .xword constantargs
@@ -58,6 +58,9 @@
5858
; CHECK-NEXT: .xword needsStackRealignment
5959
; CHECK-NEXT: .xword -1
6060
; CHECK-NEXT: .xword 1
61+
; CHECK-NEXT: .xword floats
62+
; CHECK-NEXT: .xword 32
63+
; CHECK-NEXT: .xword 1
6164

6265
; Large Constants
6366
; CHECK-NEXT: .xword 2147483648
@@ -502,6 +505,60 @@ define void @needsStackRealignment() {
502505
}
503506
declare void @escape_values(...)
504507

508+
; CHECK-LABEL: .word .L{{.*}}-floats
509+
; CHECK-NEXT: .hword 0
510+
; Num Locations
511+
; CHECK-NEXT: .hword 6
512+
; Loc 0: constant float stored to FP register
513+
; CHECK-NEXT: .byte 1
514+
; CHECK-NEXT: .byte 0
515+
; CHECK-NEXT: .hword 4
516+
; CHECK-NEXT: .hword {{.*}}
517+
; CHECK-NEXT: .hword 0
518+
; CHECK-NEXT: .word 0
519+
; Loc 0: constant double stored to FP register
520+
; CHECK-NEXT: .byte 1
521+
; CHECK-NEXT: .byte 0
522+
; CHECK-NEXT: .hword 8
523+
; CHECK-NEXT: .hword {{.*}}
524+
; CHECK-NEXT: .hword 0
525+
; CHECK-NEXT: .word 0
526+
; Loc 1: float value in FP register
527+
; CHECK-NEXT: .byte 1
528+
; CHECK-NEXT: .byte 0
529+
; CHECK-NEXT: .hword 4
530+
; CHECK-NEXT: .hword {{.*}}
531+
; CHECK-NEXT: .hword 0
532+
; CHECK-NEXT: .word 0
533+
; Loc 2: double value in FP register
534+
; CHECK-NEXT: .byte 1
535+
; CHECK-NEXT: .byte 0
536+
; CHECK-NEXT: .hword 8
537+
; CHECK-NEXT: .hword {{.*}}
538+
; CHECK-NEXT: .hword 0
539+
; CHECK-NEXT: .word 0
540+
; Loc 3: float on stack
541+
; CHECK-NEXT: .byte 2
542+
; CHECK-NEXT: .byte 0
543+
; CHECK-NEXT: .hword 8
544+
; CHECK-NEXT: .hword {{.*}}
545+
; CHECK-NEXT: .hword 0
546+
; CHECK-NEXT: .word -{{.*}}
547+
; Loc 4: double on stack
548+
; CHECK-NEXT: .byte 2
549+
; CHECK-NEXT: .byte 0
550+
; CHECK-NEXT: .hword 8
551+
; CHECK-NEXT: .hword {{.*}}
552+
; CHECK-NEXT: .hword 0
553+
; CHECK-NEXT: .word -{{.*}}
554+
define void @floats(float %f, double %g) {
555+
%ff = alloca float
556+
%gg = alloca double
557+
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 888, i32 0, float 1.25,
558+
double 1.5, float %f, double %g, float* %ff, double* %gg)
559+
ret void
560+
}
561+
505562
declare void @llvm.experimental.stackmap(i64, i32, ...)
506563
declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
507564
declare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)

llvm/test/CodeGen/PowerPC/ppc64-stackmap.ll

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ target triple = "powerpc64-unknown-linux-gnu"
4040
; CHECK-LABEL: clobberLR:
4141
; CHECK: {{^}}.L[[clobberLR_BEGIN:.*]]:{{$}}
4242

43+
; CHECK-LABEL: floats:
44+
; CHECK: {{^}}.L[[floats_BEGIN:.*]]:{{$}}
45+
4346

4447
; CHECK-LABEL: .section .llvm_stackmaps
4548
; CHECK-NEXT: __LLVM_StackMaps:
@@ -48,11 +51,11 @@ target triple = "powerpc64-unknown-linux-gnu"
4851
; CHECK-NEXT: .byte 0
4952
; CHECK-NEXT: .short 0
5053
; Num Functions
51-
; CHECK-NEXT: .long 11
54+
; CHECK-NEXT: .long 12
5255
; Num LargeConstants
5356
; CHECK-NEXT: .long 3
5457
; Num Callsites
55-
; CHECK-NEXT: .long 11
58+
; CHECK-NEXT: .long 12
5659

5760
; Functions and stack size
5861
; CHECK-NEXT: .quad constantargs
@@ -88,6 +91,9 @@ target triple = "powerpc64-unknown-linux-gnu"
8891
; CHECK-NEXT: .quad clobberLR
8992
; CHECK-NEXT: .quad 208
9093
; CHECK-NEXT: .quad 1
94+
; CHECK-NEXT: .quad floats
95+
; CHECK-NEXT: .quad 80
96+
; CHECK-NEXT: .quad 1
9197

9298
; Num LargeConstants
9399
; CHECK-NEXT: .quad 4294967295
@@ -382,6 +388,60 @@ define void @clobberLR(i32 %a) {
382388
ret void
383389
}
384390

391+
; CHECK: .long .L{{.*}}-.L[[floats_BEGIN]]
392+
; CHECK-NEXT: .short 0
393+
; Num Locations
394+
; CHECK-NEXT: .short 6
395+
; Loc 0: constant float stored to FP register
396+
; CHECK-NEXT: .byte 1
397+
; CHECK-NEXT: .byte 0
398+
; CHECK-NEXT: .short 8
399+
; CHECK-NEXT: .short {{.*}}
400+
; CHECK-NEXT: .short 0
401+
; CHECK-NEXT: .long 0
402+
; Loc 0: constant double stored to FP register
403+
; CHECK-NEXT: .byte 1
404+
; CHECK-NEXT: .byte 0
405+
; CHECK-NEXT: .short 8
406+
; CHECK-NEXT: .short {{.*}}
407+
; CHECK-NEXT: .short 0
408+
; CHECK-NEXT: .long 0
409+
; Loc 1: float value in FP register
410+
; CHECK-NEXT: .byte 1
411+
; CHECK-NEXT: .byte 0
412+
; CHECK-NEXT: .short 8
413+
; CHECK-NEXT: .short {{.*}}
414+
; CHECK-NEXT: .short 0
415+
; CHECK-NEXT: .long 0
416+
; Loc 2: double value in FP register
417+
; CHECK-NEXT: .byte 1
418+
; CHECK-NEXT: .byte 0
419+
; CHECK-NEXT: .short 8
420+
; CHECK-NEXT: .short {{.*}}
421+
; CHECK-NEXT: .short 0
422+
; CHECK-NEXT: .long 0
423+
; Loc 3: float on stack
424+
; CHECK-NEXT: .byte 2
425+
; CHECK-NEXT: .byte 0
426+
; CHECK-NEXT: .short 8
427+
; CHECK-NEXT: .short {{.*}}
428+
; CHECK-NEXT: .short 0
429+
; CHECK-NEXT: .long {{.*}}
430+
; Loc 4: double on stack
431+
; CHECK-NEXT: .byte 2
432+
; CHECK-NEXT: .byte 0
433+
; CHECK-NEXT: .short 8
434+
; CHECK-NEXT: .short {{.*}}
435+
; CHECK-NEXT: .short 0
436+
; CHECK-NEXT: .long {{.*}}
437+
define void @floats(float %f, double %g) {
438+
%ff = alloca float
439+
%gg = alloca double
440+
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 888, i32 0, float 1.25,
441+
double 1.5, float %f, double %g, float* %ff, double* %gg)
442+
ret void
443+
}
444+
385445
declare void @llvm.experimental.stackmap(i64, i32, ...)
386446
declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
387447
declare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)

llvm/test/CodeGen/SystemZ/stackmap.ll

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
; CHECK-NEXT: .byte 0
1010
; CHECK-NEXT: .short 0
1111
; Num Functions
12-
; CHECK-NEXT: .long 15
12+
; CHECK-NEXT: .long 16
1313
; Num LargeConstants
1414
; CHECK-NEXT: .long 4
1515
; Num Callsites
16-
; CHECK-NEXT: .long 19
16+
; CHECK-NEXT: .long 20
1717

1818
; Functions and stack size
1919
; CHECK-NEXT: .quad constantargs
@@ -61,6 +61,9 @@
6161
; CHECK-NEXT: .quad needsStackRealignment
6262
; CHECK-NEXT: .quad -1
6363
; CHECK-NEXT: .quad 1
64+
; CHECK-NEXT: .quad floats
65+
; CHECK-NEXT: .quad 176
66+
; CHECK-NEXT: .quad 1
6467

6568
; Large Constants
6669
; CHECK-NEXT: .quad 2147483648
@@ -547,6 +550,60 @@ define void @needsStackRealignment() {
547550
}
548551
declare void @escape_values(...)
549552

553+
; CHECK-LABEL: .long .L{{.*}}-floats
554+
; CHECK-NEXT: .short 0
555+
; Num Locations
556+
; CHECK-NEXT: .short 6
557+
; Loc 0: constant float stored to FP register
558+
; CHECK-NEXT: .byte 1
559+
; CHECK-NEXT: .byte 0
560+
; CHECK-NEXT: .short 4
561+
; CHECK-NEXT: .short {{.*}}
562+
; CHECK-NEXT: .short 0
563+
; CHECK-NEXT: .long 32
564+
; Loc 0: constant double stored to FP register
565+
; CHECK-NEXT: .byte 1
566+
; CHECK-NEXT: .byte 0
567+
; CHECK-NEXT: .short 8
568+
; CHECK-NEXT: .short {{.*}}
569+
; CHECK-NEXT: .short 0
570+
; CHECK-NEXT: .long 0
571+
; Loc 1: float value in FP register
572+
; CHECK-NEXT: .byte 1
573+
; CHECK-NEXT: .byte 0
574+
; CHECK-NEXT: .short 4
575+
; CHECK-NEXT: .short {{.*}}
576+
; CHECK-NEXT: .short 0
577+
; CHECK-NEXT: .long 32
578+
; Loc 2: double value in FP register
579+
; CHECK-NEXT: .byte 1
580+
; CHECK-NEXT: .byte 0
581+
; CHECK-NEXT: .short 8
582+
; CHECK-NEXT: .short {{.*}}
583+
; CHECK-NEXT: .short 0
584+
; CHECK-NEXT: .long 0
585+
; Loc 3: float on stack
586+
; CHECK-NEXT: .byte 2
587+
; CHECK-NEXT: .byte 0
588+
; CHECK-NEXT: .short 8
589+
; CHECK-NEXT: .short {{.*}}
590+
; CHECK-NEXT: .short 0
591+
; CHECK-NEXT: .long {{.*}}
592+
; Loc 4: double on stack
593+
; CHECK-NEXT: .byte 2
594+
; CHECK-NEXT: .byte 0
595+
; CHECK-NEXT: .short 8
596+
; CHECK-NEXT: .short {{.*}}
597+
; CHECK-NEXT: .short 0
598+
; CHECK-NEXT: .long {{.*}}
599+
define void @floats(float %f, double %g) {
600+
%ff = alloca float
601+
%gg = alloca double
602+
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 888, i32 0, float 1.25,
603+
double 1.5, float %f, double %g, float* %ff, double* %gg)
604+
ret void
605+
}
606+
550607
declare void @llvm.experimental.stackmap(i64, i32, ...)
551608
declare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
552609
declare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)

0 commit comments

Comments
 (0)