16ccb06a7Slifengxiang1025;; Test to make sure that memprof works and do cloning right when exists direct recursion. 26ccb06a7Slifengxiang1025;; Original code looks like: 36ccb06a7Slifengxiang1025;; After modify alloc type, there are two direct recursion with hot and cold alloc type. 46ccb06a7Slifengxiang1025;; a.cpp 56ccb06a7Slifengxiang1025;; extern void foo(int); 66ccb06a7Slifengxiang1025;; int b = 10; 76ccb06a7Slifengxiang1025;; int* a; 86ccb06a7Slifengxiang1025;; int main(){ 96ccb06a7Slifengxiang1025;; foo(1); 106ccb06a7Slifengxiang1025;; b = 10; 116ccb06a7Slifengxiang1025;; foo(2); 126ccb06a7Slifengxiang1025;; return 0; 136ccb06a7Slifengxiang1025;; } 146ccb06a7Slifengxiang1025;; b.cpp 156ccb06a7Slifengxiang1025;; extern int b; 166ccb06a7Slifengxiang1025;; extern int *a; 176ccb06a7Slifengxiang1025;; void foo(int c){ 186ccb06a7Slifengxiang1025;; a = new int[1]; 196ccb06a7Slifengxiang1025;; if (c&1) { 206ccb06a7Slifengxiang1025;; for (int i = 0; i < 100; ++i) 216ccb06a7Slifengxiang1025;; a[0] = 1; 226ccb06a7Slifengxiang1025;; } 236ccb06a7Slifengxiang1025;; --b; 246ccb06a7Slifengxiang1025;; if (b) { 256ccb06a7Slifengxiang1025;; foo(c); 266ccb06a7Slifengxiang1025;; } 276ccb06a7Slifengxiang1025;; } 286ccb06a7Slifengxiang1025 296ccb06a7Slifengxiang1025; RUN: split-file %s %t 306ccb06a7Slifengxiang1025; RUN: opt -thinlto-bc %t/b.ll >%t/b.o 316ccb06a7Slifengxiang1025; RUN: opt -thinlto-bc %t/a.ll >%t/a.o 326ccb06a7Slifengxiang1025 336ccb06a7Slifengxiang1025; RUN: llvm-lto2 run %t/b.o %t/a.o -enable-memprof-context-disambiguation \ 346ccb06a7Slifengxiang1025; RUN: -supports-hot-cold-new \ 356ccb06a7Slifengxiang1025; RUN: -thinlto-distributed-indexes \ 366ccb06a7Slifengxiang1025; RUN: -r=%t/b.o,_Z3fooi,plx \ 37*6a214ec1STeresa Johnson; RUN: -r=%t/b.o,aliasee,plx \ 386ccb06a7Slifengxiang1025; RUN: -r=%t/b.o,a \ 396ccb06a7Slifengxiang1025; RUN: -r=%t/b.o,b \ 406ccb06a7Slifengxiang1025; RUN: -r=%t/b.o,_Znam \ 416ccb06a7Slifengxiang1025; RUN: -r=%t/a.o,main,plx \ 426ccb06a7Slifengxiang1025; RUN: -r=%t/a.o,_Z3fooi \ 436ccb06a7Slifengxiang1025; RUN: -r=%t/a.o,a,plx \ 446ccb06a7Slifengxiang1025; RUN: -r=%t/a.o,b,plx \ 456ccb06a7Slifengxiang1025; RUN: -memprof-dump-ccg \ 466ccb06a7Slifengxiang1025; RUN: -o %t2.out 2>&1 476ccb06a7Slifengxiang1025 486ccb06a7Slifengxiang1025; RUN: llvm-dis %t/b.o.thinlto.bc -o - | FileCheck %s --check-prefix=SUMMARY 496ccb06a7Slifengxiang1025 506ccb06a7Slifengxiang1025;; Test direct recursion don't cause assert failed and do cloning right. 516ccb06a7Slifengxiang1025; RUN: opt -passes=memprof-context-disambiguation \ 526ccb06a7Slifengxiang1025; RUN: -memprof-import-summary=%t/b.o.thinlto.bc \ 536ccb06a7Slifengxiang1025; RUN: %t/b.o -S | FileCheck %s --check-prefix=IR 546ccb06a7Slifengxiang1025 556ccb06a7Slifengxiang1025; SUMMARY: stackIds: (1985258834072910425, 2841526434899864997) 566ccb06a7Slifengxiang1025; SUMMARY-NOT: stackIds: (1985258834072910425, 1985258834072910425, 2841526434899864997) 576ccb06a7Slifengxiang1025 586ccb06a7Slifengxiang1025; IR: _Z3fooi 596ccb06a7Slifengxiang1025; IR: _Z3fooi.memprof.1 606ccb06a7Slifengxiang1025; IR: "memprof"="notcold" 616ccb06a7Slifengxiang1025; IR: "memprof"="cold" 626ccb06a7Slifengxiang1025 636ccb06a7Slifengxiang1025;--- b.ll 646ccb06a7Slifengxiang1025; ModuleID = 'b.cpp' 656ccb06a7Slifengxiang1025source_filename = "b.cpp" 666ccb06a7Slifengxiang1025target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 676ccb06a7Slifengxiang1025target triple = "x86_64-unknown-linux-gnu" 686ccb06a7Slifengxiang1025 69*6a214ec1STeresa Johnson;; Make sure the distributed summary bitcode writing succeeds when the memprof 70*6a214ec1STeresa Johnson;; metadata is in an aliasee. 71*6a214ec1STeresa Johnson@_Z3fooi = alias void (), ptr @aliasee 72*6a214ec1STeresa Johnson 736ccb06a7Slifengxiang1025@a = external local_unnamed_addr global ptr, align 8 746ccb06a7Slifengxiang1025@b = external local_unnamed_addr global i32, align 4 756ccb06a7Slifengxiang1025 766ccb06a7Slifengxiang1025; Function Attrs: mustprogress uwtable 77*6a214ec1STeresa Johnsondefine dso_local void @aliasee(i32 noundef %0) local_unnamed_addr #0 !dbg !9 { 786ccb06a7Slifengxiang1025 br label %2, !dbg !12 796ccb06a7Slifengxiang1025 806ccb06a7Slifengxiang10252: ; preds = %7, %1 816ccb06a7Slifengxiang1025 %3 = tail call noalias noundef nonnull dereferenceable(4) ptr @_Znam(i64 noundef 4) #2, !dbg !13, !memprof !14, !callsite !55 826ccb06a7Slifengxiang1025 store ptr %3, ptr @a, align 8, !dbg !56, !tbaa !57 836ccb06a7Slifengxiang1025 %4 = and i32 %0, 1, !dbg !61 846ccb06a7Slifengxiang1025 %5 = icmp eq i32 %4, 0, !dbg !62 856ccb06a7Slifengxiang1025 br i1 %5, label %7, label %6, !dbg !62 866ccb06a7Slifengxiang1025 876ccb06a7Slifengxiang10256: ; preds = %2 886ccb06a7Slifengxiang1025 store i32 1, ptr %3, align 4, !tbaa !63 896ccb06a7Slifengxiang1025 br label %7, !dbg !65 906ccb06a7Slifengxiang1025 916ccb06a7Slifengxiang10257: ; preds = %6, %2 926ccb06a7Slifengxiang1025 %8 = load i32, ptr @b, align 4, !dbg !65, !tbaa !63 936ccb06a7Slifengxiang1025 %9 = add nsw i32 %8, -1, !dbg !65 946ccb06a7Slifengxiang1025 store i32 %9, ptr @b, align 4, !dbg !65, !tbaa !63 956ccb06a7Slifengxiang1025 %10 = icmp eq i32 %9, 0, !dbg !66 966ccb06a7Slifengxiang1025 br i1 %10, label %11, label %2, !dbg !66 976ccb06a7Slifengxiang1025 986ccb06a7Slifengxiang102511: ; preds = %7 996ccb06a7Slifengxiang1025 ret void, !dbg !67 1006ccb06a7Slifengxiang1025} 1016ccb06a7Slifengxiang1025 1026ccb06a7Slifengxiang1025; Function Attrs: nobuiltin allocsize(0) 1036ccb06a7Slifengxiang1025declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #1 1046ccb06a7Slifengxiang1025 1056ccb06a7Slifengxiang1025attributes #0 = { mustprogress 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" } 1066ccb06a7Slifengxiang1025attributes #1 = { nobuiltin allocsize(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" } 1076ccb06a7Slifengxiang1025attributes #2 = { builtin allocsize(0) } 1086ccb06a7Slifengxiang1025 1096ccb06a7Slifengxiang1025!llvm.dbg.cu = !{!0} 1106ccb06a7Slifengxiang1025!llvm.module.flags = !{!2, !3, !4, !5, !6, !7} 1116ccb06a7Slifengxiang1025!llvm.ident = !{!8} 1126ccb06a7Slifengxiang1025 1136ccb06a7Slifengxiang1025!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 18.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None) 1146ccb06a7Slifengxiang1025!1 = !DIFile(filename: "b.cpp", directory: "/", checksumkind: CSK_MD5, checksum: "8fa6c585f9d2c35f1a82b920e64bbda2") 1156ccb06a7Slifengxiang1025!2 = !{i32 7, !"Dwarf Version", i32 5} 1166ccb06a7Slifengxiang1025!3 = !{i32 2, !"Debug Info Version", i32 3} 1176ccb06a7Slifengxiang1025!4 = !{i32 1, !"wchar_size", i32 4} 1186ccb06a7Slifengxiang1025!5 = !{i32 8, !"PIC Level", i32 2} 1196ccb06a7Slifengxiang1025!6 = !{i32 7, !"PIE Level", i32 2} 1206ccb06a7Slifengxiang1025!7 = !{i32 7, !"uwtable", i32 2} 1216ccb06a7Slifengxiang1025!8 = !{!"clang version 18.0.0"} 1226ccb06a7Slifengxiang1025!9 = distinct !DISubprogram(name: "foo", linkageName: "_Z3fooi", scope: !1, file: !1, line: 4, type: !10, scopeLine: 4, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0) 1236ccb06a7Slifengxiang1025!10 = !DISubroutineType(types: !11) 1246ccb06a7Slifengxiang1025!11 = !{} 1256ccb06a7Slifengxiang1025!12 = !DILocation(line: 12, column: 9, scope: !9) 1266ccb06a7Slifengxiang1025!13 = !DILocation(line: 5, column: 9, scope: !9) 1276ccb06a7Slifengxiang1025!14 = !{!15, !17, !19, !21, !23, !25, !27, !29, !31, !33, !35, !37, !39, !41, !43, !45, !47, !49, !51, !53} 1286ccb06a7Slifengxiang1025!15 = !{!16, !"hot"} 1296ccb06a7Slifengxiang1025!16 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1306ccb06a7Slifengxiang1025!17 = !{!18, !"cold"} 1316ccb06a7Slifengxiang1025!18 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1326ccb06a7Slifengxiang1025!19 = !{!20, !"hot"} 1336ccb06a7Slifengxiang1025!20 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1346ccb06a7Slifengxiang1025!21 = !{!22, !"cold"} 1356ccb06a7Slifengxiang1025!22 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1366ccb06a7Slifengxiang1025!23 = !{!24, !"hot"} 1376ccb06a7Slifengxiang1025!24 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1386ccb06a7Slifengxiang1025!25 = !{!26, !"cold"} 1396ccb06a7Slifengxiang1025!26 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1406ccb06a7Slifengxiang1025!27 = !{!28, !"hot"} 1416ccb06a7Slifengxiang1025!28 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1426ccb06a7Slifengxiang1025!29 = !{!30, !"cold"} 1436ccb06a7Slifengxiang1025!30 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1446ccb06a7Slifengxiang1025!31 = !{!32, !"hot"} 1456ccb06a7Slifengxiang1025!32 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1466ccb06a7Slifengxiang1025!33 = !{!34, !"cold"} 1476ccb06a7Slifengxiang1025!34 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1486ccb06a7Slifengxiang1025!35 = !{!36, !"hot"} 1496ccb06a7Slifengxiang1025!36 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1506ccb06a7Slifengxiang1025!37 = !{!38, !"cold"} 1516ccb06a7Slifengxiang1025!38 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1526ccb06a7Slifengxiang1025!39 = !{!40, !"hot"} 1536ccb06a7Slifengxiang1025!40 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1546ccb06a7Slifengxiang1025!41 = !{!42, !"cold"} 1556ccb06a7Slifengxiang1025!42 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1566ccb06a7Slifengxiang1025!43 = !{!44, !"hot"} 1576ccb06a7Slifengxiang1025!44 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 2841526434899864997} 1586ccb06a7Slifengxiang1025!45 = !{!46, !"cold"} 1596ccb06a7Slifengxiang1025!46 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 1985258834072910425, i64 8256520048276991898} 1606ccb06a7Slifengxiang1025!47 = !{!48, !"hot"} 1616ccb06a7Slifengxiang1025!48 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 2841526434899864997} 1626ccb06a7Slifengxiang1025!49 = !{!50, !"cold"} 1636ccb06a7Slifengxiang1025!50 = !{i64 -1057479539165743997, i64 1985258834072910425, i64 8256520048276991898} 1646ccb06a7Slifengxiang1025!51 = !{!52, !"hot"} 1656ccb06a7Slifengxiang1025!52 = !{i64 -1057479539165743997, i64 2841526434899864997} 1666ccb06a7Slifengxiang1025!53 = !{!54, !"cold"} 1676ccb06a7Slifengxiang1025!54 = !{i64 -1057479539165743997, i64 8256520048276991898} 1686ccb06a7Slifengxiang1025!55 = !{i64 -1057479539165743997} 1696ccb06a7Slifengxiang1025!56 = !DILocation(line: 5, column: 7, scope: !9) 1706ccb06a7Slifengxiang1025!57 = !{!58, !58, i64 0} 1716ccb06a7Slifengxiang1025!58 = !{!"any pointer", !59, i64 0} 1726ccb06a7Slifengxiang1025!59 = !{!"omnipotent char", !60, i64 0} 1736ccb06a7Slifengxiang1025!60 = !{!"Simple C++ TBAA"} 1746ccb06a7Slifengxiang1025!61 = !DILocation(line: 6, column: 10, scope: !9) 1756ccb06a7Slifengxiang1025!62 = !DILocation(line: 6, column: 9, scope: !9) 1766ccb06a7Slifengxiang1025!63 = !{!64, !64, i64 0} 1776ccb06a7Slifengxiang1025!64 = !{!"int", !59, i64 0} 1786ccb06a7Slifengxiang1025!65 = !DILocation(line: 10, column: 5, scope: !9) 1796ccb06a7Slifengxiang1025!66 = !DILocation(line: 11, column: 9, scope: !9) 1806ccb06a7Slifengxiang1025!67 = !DILocation(line: 14, column: 1, scope: !9) 1816ccb06a7Slifengxiang1025 1826ccb06a7Slifengxiang1025;--- a.ll 1836ccb06a7Slifengxiang1025; ModuleID = 'a.cpp' 1846ccb06a7Slifengxiang1025source_filename = "a.cpp" 1856ccb06a7Slifengxiang1025target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 1866ccb06a7Slifengxiang1025target triple = "x86_64-unknown-linux-gnu" 1876ccb06a7Slifengxiang1025 1886ccb06a7Slifengxiang1025@b = dso_local local_unnamed_addr global i32 10, align 4 1896ccb06a7Slifengxiang1025@a = dso_local local_unnamed_addr global ptr null, align 8 1906ccb06a7Slifengxiang1025 1916ccb06a7Slifengxiang1025; Function Attrs: mustprogress norecurse uwtable 1926ccb06a7Slifengxiang1025define dso_local noundef i32 @main() local_unnamed_addr #0 !dbg !9 { 1936ccb06a7Slifengxiang1025 tail call void @_Z3fooi(i32 noundef 1), !dbg !12, !callsite !13 1946ccb06a7Slifengxiang1025 store i32 10, ptr @b, align 4, !dbg !14, !tbaa !15 1956ccb06a7Slifengxiang1025 tail call void @_Z3fooi(i32 noundef 2), !dbg !19, !callsite !20 1966ccb06a7Slifengxiang1025 ret i32 0, !dbg !21 1976ccb06a7Slifengxiang1025} 1986ccb06a7Slifengxiang1025 1996ccb06a7Slifengxiang1025declare !dbg !22 void @_Z3fooi(i32 noundef) local_unnamed_addr #1 2006ccb06a7Slifengxiang1025 2016ccb06a7Slifengxiang1025attributes #0 = { mustprogress norecurse 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" } 2026ccb06a7Slifengxiang1025attributes #1 = { "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" } 2036ccb06a7Slifengxiang1025 2046ccb06a7Slifengxiang1025!llvm.dbg.cu = !{!0} 2056ccb06a7Slifengxiang1025!llvm.module.flags = !{!2, !3, !4, !5, !6, !7} 2066ccb06a7Slifengxiang1025!llvm.ident = !{!8} 2076ccb06a7Slifengxiang1025 2086ccb06a7Slifengxiang1025!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 18.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None) 2096ccb06a7Slifengxiang1025!1 = !DIFile(filename: "a.cpp", directory: "/", checksumkind: CSK_MD5, checksum: "16ecbfa723a07d69c0374cfc704a7c44") 2106ccb06a7Slifengxiang1025!2 = !{i32 7, !"Dwarf Version", i32 5} 2116ccb06a7Slifengxiang1025!3 = !{i32 2, !"Debug Info Version", i32 3} 2126ccb06a7Slifengxiang1025!4 = !{i32 1, !"wchar_size", i32 4} 2136ccb06a7Slifengxiang1025!5 = !{i32 8, !"PIC Level", i32 2} 2146ccb06a7Slifengxiang1025!6 = !{i32 7, !"PIE Level", i32 2} 2156ccb06a7Slifengxiang1025!7 = !{i32 7, !"uwtable", i32 2} 2166ccb06a7Slifengxiang1025!8 = !{!"clang version 18.0.0"} 2176ccb06a7Slifengxiang1025!9 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 4, type: !10, scopeLine: 4, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0) 2186ccb06a7Slifengxiang1025!10 = !DISubroutineType(types: !11) 2196ccb06a7Slifengxiang1025!11 = !{} 2206ccb06a7Slifengxiang1025!12 = !DILocation(line: 5, column: 5, scope: !9) 2216ccb06a7Slifengxiang1025!13 = !{i64 2841526434899864997} 2226ccb06a7Slifengxiang1025!14 = !DILocation(line: 6, column: 7, scope: !9) 2236ccb06a7Slifengxiang1025!15 = !{!16, !16, i64 0} 2246ccb06a7Slifengxiang1025!16 = !{!"int", !17, i64 0} 2256ccb06a7Slifengxiang1025!17 = !{!"omnipotent char", !18, i64 0} 2266ccb06a7Slifengxiang1025!18 = !{!"Simple C++ TBAA"} 2276ccb06a7Slifengxiang1025!19 = !DILocation(line: 7, column: 5, scope: !9) 2286ccb06a7Slifengxiang1025!20 = !{i64 8256520048276991898} 2296ccb06a7Slifengxiang1025!21 = !DILocation(line: 8, column: 5, scope: !9) 2306ccb06a7Slifengxiang1025!22 = !DISubprogram(name: "foo", linkageName: "_Z3fooi", scope: !1, file: !1, line: 1, type: !10, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) 231