
Improve the information printed when -memprof-report-hinted-sizes is enabled. Now print the full context hash computed from the original profile, similar to what we do when reporting matching statistics. This will make it easier to correlate with the profile. Note that the full context hash must be computed at profile match time and saved in the metadata and summary, because we may trim the context during matching when it isn't needed for distinguishing hotness. Similarly, due to the context trimming, we may have more than one full context id and total size pair per MIB in the metadata and summary, which now get a list of these pairs. Remove the old aggregate size from the metadata and summary support. One other change from the prior support is that we no longer write the size information into the combined index for the LTO backends, which don't use this information, which reduces unnecessary bloat in distributed index files.
56 lines
1.8 KiB
LLVM
56 lines
1.8 KiB
LLVM
; Test that incorrect memprof and callsite metadata fail verification.
|
|
; RUN: not llvm-as -disable-output < %s 2>&1 | FileCheck %s
|
|
|
|
define ptr @test1() {
|
|
entry:
|
|
%call1 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40), !memprof !0
|
|
%call2 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40), !memprof !1
|
|
%call3 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40), !memprof !3
|
|
%call4 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40), !memprof !5
|
|
%call5 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40), !memprof !7, !callsite !9
|
|
ret ptr %call5
|
|
}
|
|
|
|
define ptr @test2() {
|
|
entry:
|
|
%call = call noundef ptr @test1(), !callsite !10
|
|
ret ptr %call
|
|
}
|
|
|
|
define ptr @test3() {
|
|
entry:
|
|
%call = call noundef ptr @test2(), !callsite !11
|
|
ret ptr %call
|
|
}
|
|
|
|
define void @wronginsttype() {
|
|
%1 = add i32 0, 1, !memprof !0, !callsite !9
|
|
ret void
|
|
}
|
|
|
|
declare dso_local noalias noundef ptr @malloc(i64 noundef)
|
|
|
|
; CHECK: !memprof annotations should have at least 1 metadata operand (MemInfoBlock)
|
|
!0 = !{}
|
|
!1 = !{!2}
|
|
; CHECK: !memprof MemInfoBlock first operand should not be null
|
|
!2 = !{null, !"cold"}
|
|
!3 = !{!4}
|
|
; CHECK: !memprof MemInfoBlock first operand should be an MDNode
|
|
!4 = !{i64 0, !"cold"}
|
|
!5 = !{!6}
|
|
; CHECK: Each !memprof MemInfoBlock should have at least 2 operands
|
|
!6 = !{i64 0}
|
|
!7 = !{!8}
|
|
; CHECK: call stack metadata should have at least 1 operand
|
|
; CHECK: Not all !memprof MemInfoBlock operands 2 to N are MDNode
|
|
!8 = !{!0, !"default", i64 0, i64 5}
|
|
!9 = !{i64 123}
|
|
; CHECK: call stack metadata operand should be constant integer
|
|
!10 = !{!"wrongtype"}
|
|
!11 = !{i64 789, i64 678}
|
|
|
|
; Errors from annotating incorrect instruction type in @wronginsttype.
|
|
; CHECK: !memprof metadata should only exist on calls
|
|
; CHECK: !callsite metadata should only exist on calls
|