@@ -250,6 +250,26 @@ define void @no_counters() {
250250 call void @bar ()
251251 ret void
252252}
253+
254+ ; Ensure "calls" to inline asm don't get callsite-instrumented.
255+ define void @inlineasm () {
256+ ; INSTRUMENT-LABEL: define void @inlineasm() {
257+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @inlineasm, i64 742261418966908927, i32 1, i32 0)
258+ ; INSTRUMENT-NEXT: call void asm "nop", ""()
259+ ; INSTRUMENT-NEXT: ret void
260+ ;
261+ ; LOWERING-LABEL: define void @inlineasm(
262+ ; LOWERING-SAME: ) !guid [[META6:![0-9]+]] {
263+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @inlineasm, i64 -3771893999295659109, i32 1, i32 0)
264+ ; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
265+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], -2
266+ ; LOWERING-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
267+ ; LOWERING-NEXT: call void asm "nop", ""()
268+ ; LOWERING-NEXT: ret void
269+ ;
270+ call void asm "nop" , "" ()
271+ ret void
272+ }
253273;.
254274; LOWERING: attributes #[[ATTR0:[0-9]+]] = { nounwind }
255275; LOWERING: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
@@ -262,4 +282,5 @@ define void @no_counters() {
262282; LOWERING: [[META3]] = !{i64 -3006003237940970099}
263283; LOWERING: [[META4]] = !{i64 5679753335911435902}
264284; LOWERING: [[META5]] = !{i64 5458232184388660970}
285+ ; LOWERING: [[META6]] = !{i64 -3771893999295659109}
265286;.
0 commit comments