1b8cc3ba4SLei Wang; REQUIRES: x86_64-linux 2b8cc3ba4SLei Wang; RUN: opt < %s -passes=pseudo-probe -S -o - | FileCheck %s 3b8cc3ba4SLei Wang 4b8cc3ba4SLei Wangtarget datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 5b8cc3ba4SLei Wangtarget triple = "x86_64-unknown-linux-gnu" 6b8cc3ba4SLei Wang 7b8cc3ba4SLei Wang$__clang_call_terminate = comdat any 8b8cc3ba4SLei Wang 9b8cc3ba4SLei Wang@x = dso_local global i32 0, align 4, !dbg !0 10b8cc3ba4SLei Wang 11b8cc3ba4SLei Wang; Function Attrs: mustprogress noinline nounwind uwtable 12b8cc3ba4SLei Wangdefine dso_local void @_Z3barv() #0 personality ptr @__gxx_personality_v0 !dbg !14 { 13b8cc3ba4SLei Wangentry: 14b8cc3ba4SLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 1 15b8cc3ba4SLei Wang %0 = load volatile i32, ptr @x, align 4, !dbg !17, !tbaa !19 16b8cc3ba4SLei Wang %tobool = icmp ne i32 %0, 0, !dbg !17 17b8cc3ba4SLei Wang br i1 %tobool, label %if.then, label %if.else, !dbg !23 18b8cc3ba4SLei Wang 19b8cc3ba4SLei Wangif.then: ; preds = %entry 20b8cc3ba4SLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 2 21*5bbce06aSLei Wang; callsite probe 3 22b8cc3ba4SLei Wang invoke void @_Z3foov() 23b8cc3ba4SLei Wang to label %invoke.cont unwind label %terminate.lpad, !dbg !24 24b8cc3ba4SLei Wang 25b8cc3ba4SLei Wanginvoke.cont: ; preds = %if.then 26*5bbce06aSLei Wang; callsite probe 4 27b8cc3ba4SLei Wang; CHECK-NOT: call void @llvm.pseudoprobe(i64 -1069303473483922844, 28b8cc3ba4SLei Wang invoke void @_Z3bazv() 29b8cc3ba4SLei Wang to label %invoke.cont1 unwind label %terminate.lpad, !dbg !26 30b8cc3ba4SLei Wang 31b8cc3ba4SLei Wanginvoke.cont1: ; preds = %invoke.cont 32b8cc3ba4SLei Wang; CHECK-NOT: call void @llvm.pseudoprobe(i64 -1069303473483922844, 33b8cc3ba4SLei Wang br label %if.end, !dbg !27 34b8cc3ba4SLei Wang 35b8cc3ba4SLei Wangif.else: ; preds = %entry 36*5bbce06aSLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 5 37*5bbce06aSLei Wang; callsite probe 6 38b8cc3ba4SLei Wang invoke void @_Z3foov() 39b8cc3ba4SLei Wang to label %invoke.cont2 unwind label %terminate.lpad, !dbg !28 40b8cc3ba4SLei Wang 41b8cc3ba4SLei Wanginvoke.cont2: ; preds = %if.else 42b8cc3ba4SLei Wang; CHECK-NOT: call void @llvm.pseudoprobe(i64 -1069303473483922844, 43b8cc3ba4SLei Wang br label %if.end 44b8cc3ba4SLei Wang 45b8cc3ba4SLei Wangif.end: ; preds = %invoke.cont2, %invoke.cont1 46*5bbce06aSLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 7 47*5bbce06aSLei Wang; callsite probe 8 48b8cc3ba4SLei Wang invoke void @_Z3foov() 49b8cc3ba4SLei Wang to label %invoke.cont3 unwind label %terminate.lpad, !dbg !29 50b8cc3ba4SLei Wang 51b8cc3ba4SLei Wanginvoke.cont3: ; preds = %if.end 52b8cc3ba4SLei Wang; CHECK-NOT: call void @llvm.pseudoprobe(i64 -1069303473483922844, 53b8cc3ba4SLei Wang %1 = load volatile i32, ptr @x, align 4, !dbg !30, !tbaa !19 54b8cc3ba4SLei Wang %tobool4 = icmp ne i32 %1, 0, !dbg !30 55b8cc3ba4SLei Wang br i1 %tobool4, label %if.then5, label %if.end6, !dbg !32 56b8cc3ba4SLei Wang 57b8cc3ba4SLei Wangif.then5: ; preds = %invoke.cont3 58*5bbce06aSLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 9 59b8cc3ba4SLei Wang %2 = load volatile i32, ptr @x, align 4, !dbg !33, !tbaa !19 60b8cc3ba4SLei Wang %inc = add nsw i32 %2, 1, !dbg !33 61b8cc3ba4SLei Wang store volatile i32 %inc, ptr @x, align 4, !dbg !33, !tbaa !19 62b8cc3ba4SLei Wang br label %if.end6, !dbg !35 63b8cc3ba4SLei Wang 64b8cc3ba4SLei Wangif.end6: ; preds = %if.then5, %invoke.cont3 65*5bbce06aSLei Wang; CHECK: call void @llvm.pseudoprobe(i64 -1069303473483922844, i64 10 66b8cc3ba4SLei Wang ret void, !dbg !36 67b8cc3ba4SLei Wang 68b8cc3ba4SLei Wangterminate.lpad: ; preds = %if.end, %if.else, %invoke.cont, %if.then 69b8cc3ba4SLei Wang; CHECK-NOT: call void @llvm.pseudoprobe(i64 -1069303473483922844, 70b8cc3ba4SLei Wang %3 = landingpad { ptr, i32 } 71b8cc3ba4SLei Wang catch ptr null, !dbg !24 72b8cc3ba4SLei Wang %4 = extractvalue { ptr, i32 } %3, 0, !dbg !24 73b8cc3ba4SLei Wang call void @__clang_call_terminate(ptr %4) #3, !dbg !24 74b8cc3ba4SLei Wang unreachable, !dbg !24 75b8cc3ba4SLei Wang} 76b8cc3ba4SLei Wang 77b8cc3ba4SLei Wang; Function Attrs: mustprogress noinline nounwind uwtable 78b8cc3ba4SLei Wangdefine dso_local void @_Z3foov() #0 !dbg !37 { 79b8cc3ba4SLei Wangentry: 80b8cc3ba4SLei Wang ret void, !dbg !38 81b8cc3ba4SLei Wang} 82b8cc3ba4SLei Wang 83b8cc3ba4SLei Wangdeclare i32 @__gxx_personality_v0(...) 84b8cc3ba4SLei Wang 85b8cc3ba4SLei Wang; Function Attrs: noinline noreturn nounwind uwtable 86b8cc3ba4SLei Wangdefine linkonce_odr hidden void @__clang_call_terminate(ptr noundef %0) #1 comdat { 87b8cc3ba4SLei Wang %2 = call ptr @__cxa_begin_catch(ptr %0) #4 88b8cc3ba4SLei Wang call void @_ZSt9terminatev() #3 89b8cc3ba4SLei Wang unreachable 90b8cc3ba4SLei Wang} 91b8cc3ba4SLei Wang 92b8cc3ba4SLei Wangdeclare ptr @__cxa_begin_catch(ptr) 93b8cc3ba4SLei Wang 94b8cc3ba4SLei Wangdeclare void @_ZSt9terminatev() 95b8cc3ba4SLei Wang 96b8cc3ba4SLei Wang; Function Attrs: mustprogress noinline nounwind uwtable 97b8cc3ba4SLei Wangdefine dso_local void @_Z3bazv() #0 !dbg !39 { 98b8cc3ba4SLei Wangentry: 99b8cc3ba4SLei Wang ret void, !dbg !40 100b8cc3ba4SLei Wang} 101b8cc3ba4SLei Wang 102b8cc3ba4SLei Wang; CHECK: ![[#]] = !{i64 -3270123626113159616, i64 4294967295, !"_Z3bazv"} 103b8cc3ba4SLei Wang 104b8cc3ba4SLei Wangattributes #0 = { mustprogress noinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } 105b8cc3ba4SLei Wangattributes #1 = { noinline noreturn nounwind uwtable "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } 106b8cc3ba4SLei Wangattributes #2 = { mustprogress noinline norecurse nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } 107b8cc3ba4SLei Wangattributes #3 = { noreturn nounwind } 108b8cc3ba4SLei Wangattributes #4 = { nounwind } 109b8cc3ba4SLei Wang 110b8cc3ba4SLei Wang!llvm.dbg.cu = !{!2} 111b8cc3ba4SLei Wang!llvm.module.flags = !{!7, !8, !9, !10, !11, !12} 112b8cc3ba4SLei Wang!llvm.ident = !{!13} 113b8cc3ba4SLei Wang 114b8cc3ba4SLei Wang!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) 115b8cc3ba4SLei Wang!1 = distinct !DIGlobalVariable(name: "x", scope: !2, file: !3, line: 1, type: !5, isLocal: false, isDefinition: true) 116b8cc3ba4SLei Wang!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !3, producer: "clang version 19.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None) 117b8cc3ba4SLei Wang!3 = !DIFile(filename: "test.cpp", directory: "/home", checksumkind: CSK_MD5, checksum: "a4c7b0392f3fd9c8ebb85065159dbb02") 118b8cc3ba4SLei Wang!4 = !{!0} 119b8cc3ba4SLei Wang!5 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !6) 120b8cc3ba4SLei Wang!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 121b8cc3ba4SLei Wang!7 = !{i32 7, !"Dwarf Version", i32 5} 122b8cc3ba4SLei Wang!8 = !{i32 2, !"Debug Info Version", i32 3} 123b8cc3ba4SLei Wang!9 = !{i32 1, !"wchar_size", i32 4} 124b8cc3ba4SLei Wang!10 = !{i32 8, !"PIC Level", i32 2} 125b8cc3ba4SLei Wang!11 = !{i32 7, !"PIE Level", i32 2} 126b8cc3ba4SLei Wang!12 = !{i32 7, !"uwtable", i32 2} 127b8cc3ba4SLei Wang!13 = !{!"clang version 19.0.0"} 128b8cc3ba4SLei Wang!14 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !3, file: !3, line: 4, type: !15, scopeLine: 4, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2) 129b8cc3ba4SLei Wang!15 = !DISubroutineType(types: !16) 130b8cc3ba4SLei Wang!16 = !{null} 131b8cc3ba4SLei Wang!17 = !DILocation(line: 5, column: 6, scope: !18) 132b8cc3ba4SLei Wang!18 = distinct !DILexicalBlock(scope: !14, file: !3, line: 5, column: 6) 133b8cc3ba4SLei Wang!19 = !{!20, !20, i64 0} 134b8cc3ba4SLei Wang!20 = !{!"int", !21, i64 0} 135b8cc3ba4SLei Wang!21 = !{!"omnipotent char", !22, i64 0} 136b8cc3ba4SLei Wang!22 = !{!"Simple C++ TBAA"} 137b8cc3ba4SLei Wang!23 = !DILocation(line: 5, column: 6, scope: !14) 138b8cc3ba4SLei Wang!24 = !DILocation(line: 6, column: 5, scope: !25) 139b8cc3ba4SLei Wang!25 = distinct !DILexicalBlock(scope: !18, file: !3, line: 5, column: 9) 140b8cc3ba4SLei Wang!26 = !DILocation(line: 7, column: 5, scope: !25) 141b8cc3ba4SLei Wang!27 = !DILocation(line: 8, column: 3, scope: !25) 142b8cc3ba4SLei Wang!28 = !DILocation(line: 9, column: 5, scope: !18) 143b8cc3ba4SLei Wang!29 = !DILocation(line: 11, column: 3, scope: !14) 144b8cc3ba4SLei Wang!30 = !DILocation(line: 12, column: 6, scope: !31) 145b8cc3ba4SLei Wang!31 = distinct !DILexicalBlock(scope: !14, file: !3, line: 12, column: 6) 146b8cc3ba4SLei Wang!32 = !DILocation(line: 12, column: 6, scope: !14) 147b8cc3ba4SLei Wang!33 = !DILocation(line: 13, column: 5, scope: !34) 148b8cc3ba4SLei Wang!34 = distinct !DILexicalBlock(scope: !31, file: !3, line: 12, column: 9) 149b8cc3ba4SLei Wang!35 = !DILocation(line: 14, column: 5, scope: !34) 150b8cc3ba4SLei Wang!36 = !DILocation(line: 17, column: 1, scope: !14) 151b8cc3ba4SLei Wang!37 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !3, file: !3, line: 19, type: !15, scopeLine: 19, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2) 152b8cc3ba4SLei Wang!38 = !DILocation(line: 19, column: 13, scope: !37) 153b8cc3ba4SLei Wang!39 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope: !3, file: !3, line: 18, type: !15, scopeLine: 18, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2) 154b8cc3ba4SLei Wang!40 = !DILocation(line: 18, column: 13, scope: !39) 155b8cc3ba4SLei Wang!41 = distinct !DISubprogram(name: "main", scope: !3, file: !3, line: 22, type: !42, scopeLine: 22, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2) 156b8cc3ba4SLei Wang!42 = !DISubroutineType(types: !43) 157b8cc3ba4SLei Wang!43 = !{!6} 158b8cc3ba4SLei Wang!44 = !DILocation(line: 23, column: 3, scope: !41) 159b8cc3ba4SLei Wang!45 = !DILocation(line: 24, column: 1, scope: !41) 160