[MemProf] Disable cloning of callsites in recursive cycles by default (#122354)
This disables the support added in PR121985 by default while we investigate a compile time crash.
This commit is contained in:
@@ -122,9 +122,9 @@ static cl::opt<unsigned>
|
||||
cl::desc("Max depth to recursively search for missing "
|
||||
"frames through tail calls."));
|
||||
|
||||
// By default enable cloning of callsites involved with recursive cycles
|
||||
// Optionally enable cloning of callsites involved with recursive cycles
|
||||
static cl::opt<bool> AllowRecursiveCallsites(
|
||||
"memprof-allow-recursive-callsites", cl::init(true), cl::Hidden,
|
||||
"memprof-allow-recursive-callsites", cl::init(false), cl::Hidden,
|
||||
cl::desc("Allow cloning of callsites involved in recursive cycles"));
|
||||
|
||||
// When disabled, try to detect and prevent cloning of recursive contexts.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
; RUN: opt -thinlto-bc %s >%t.o
|
||||
|
||||
;; By default we should enable cloning of contexts involved with recursive
|
||||
;; Check behavior when we enable cloning of contexts involved with recursive
|
||||
;; cycles, but not through the cycle itself. I.e. until full support for
|
||||
;; recursion is added, the cloned recursive call from C back to B (line 12) will
|
||||
;; not be updated to call a clone.
|
||||
@@ -18,6 +18,7 @@
|
||||
; RUN: -r=%t.o,_Znam, \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: -memprof-allow-recursive-callsites=true \
|
||||
; RUN: -o %t.out 2>&1 | FileCheck %s \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
; RUN: --check-prefix=ALLOW-RECUR-CALLSITES --check-prefix=ALLOW-RECUR-CONTEXTS
|
||||
@@ -38,6 +39,21 @@
|
||||
; RUN: --implicit-check-not="created clone" \
|
||||
; RUN: --implicit-check-not="marked with memprof allocation attribute cold"
|
||||
|
||||
;; Check the default behavior (disabled recursive callsites).
|
||||
; RUN: llvm-lto2 run %t.o -enable-memprof-context-disambiguation \
|
||||
; RUN: -supports-hot-cold-new \
|
||||
; RUN: -r=%t.o,_Z1Dv,plx \
|
||||
; RUN: -r=%t.o,_Z1Ci,plx \
|
||||
; RUN: -r=%t.o,_Z1Bi,plx \
|
||||
; RUN: -r=%t.o,main,plx \
|
||||
; RUN: -r=%t.o,_Znam, \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: -o %t.out 2>&1 | FileCheck %s --allow-empty \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
; RUN: --implicit-check-not="created clone" \
|
||||
; RUN: --implicit-check-not="marked with memprof allocation attribute cold"
|
||||
|
||||
;; Skipping recursive contexts should prevent spurious call to cloned version of
|
||||
;; B from the context starting at memprof_recursive.cc:19:13, which is actually
|
||||
;; recursive (until that support is added).
|
||||
@@ -50,6 +66,7 @@
|
||||
; RUN: -r=%t.o,_Znam, \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: -memprof-allow-recursive-callsites=true \
|
||||
; RUN: -memprof-allow-recursive-contexts=false \
|
||||
; RUN: -o %t.out 2>&1 | FileCheck %s \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
|
||||
@@ -34,13 +34,14 @@
|
||||
;;
|
||||
;; The IR was then reduced using llvm-reduce with the expected FileCheck input.
|
||||
|
||||
;; By default we should enable cloning of contexts involved with recursive
|
||||
;; Check behavior when we enable cloning of contexts involved with recursive
|
||||
;; cycles, but not through the cycle itself. I.e. until full support for
|
||||
;; recursion is added, the cloned recursive call from C back to B (line 12) will
|
||||
;; not be updated to call a clone.
|
||||
; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: -memprof-allow-recursive-callsites=true \
|
||||
; RUN: %s -S 2>&1 | FileCheck %s \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
; RUN: --check-prefix=ALL --check-prefix=ALLOW-RECUR-CALLSITES --check-prefix=ALLOW-RECUR-CONTEXTS
|
||||
@@ -56,12 +57,23 @@
|
||||
; RUN: --implicit-check-not="marked with memprof allocation attribute cold" \
|
||||
; RUN: --check-prefix=ALL
|
||||
|
||||
;; Check the default behavior (disabled recursive callsites).
|
||||
; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: %s -S 2>&1 | FileCheck %s \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
; RUN: --implicit-check-not="created clone" \
|
||||
; RUN: --implicit-check-not="marked with memprof allocation attribute cold" \
|
||||
; RUN: --check-prefix=ALL
|
||||
|
||||
;; Skipping recursive contexts should prevent spurious call to cloned version of
|
||||
;; B from the context starting at memprof_recursive.cc:19:13, which is actually
|
||||
;; recursive (until that support is added).
|
||||
; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
|
||||
; RUN: -memprof-verify-ccg -memprof-verify-nodes \
|
||||
; RUN: -pass-remarks=memprof-context-disambiguation \
|
||||
; RUN: -memprof-allow-recursive-callsites=true \
|
||||
; RUN: -memprof-allow-recursive-contexts=false \
|
||||
; RUN: %s -S 2>&1 | FileCheck %s \
|
||||
; RUN: --implicit-check-not "memprof_recursive3.cc:12:10: call in clone _Z1Ci.memprof.1 assigned" \
|
||||
|
||||
Reference in New Issue
Block a user