[llvm-bugs] [Bug 51946] New: opt fails with CGSCCPassManager.cpp:923: [...] Assertion `(E || !FunctionPass) [...]' failed.

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Oct 5 22:05:55 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51946

            Bug ID: 51946
           Summary: opt fails with CGSCCPassManager.cpp:923: [...]
                    Assertion `(E || !FunctionPass) [...]' failed.
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Interprocedural Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: mikael.holmen at ericsson.com
                CC: bjorn.a.pettersson at ericsson.com, chandlerc at gmail.com,
                    llvm-bugs at lists.llvm.org, mtrofin at google.com
                CC: bjorn.a.pettersson at ericsson.com
                CC: chandlerc at gmail.com, mtrofin at google.com
           Summary: opt fails with CGSCCPassManager.cpp:923: [...]
                    Assertion `(E || !FunctionPass) [...]' failed.

Created attachment 25284
  --> https://bugs.llvm.org/attachment.cgi?id=25284&action=edit
bbi-60603.ll reproducer

llvm commit: e7b169a8ae99

Reproduce with:
 opt -passes='cgscc(require<fam-proxy>),ipsccp,scc-oz-module-inliner' -o
/dev/null bbi-60603.ll

Result:
opt: ../lib/Analysis/CGSCCPassManager.cpp:923: LazyCallGraph::SCC
&updateCGAndAnalysisManagerForPass(llvm::LazyCallGraph &, LazyCallGraph::SCC &,
LazyCallGraph::Node &, llvm::CGSCCAnalysisManager &, llvm::CGSCCUpdateResult &,
llvm::FunctionAnalysisManager &, bool): Assertion `(E || !FunctionPass) && "No
function transformations should introduce *new* " "call edges! Any new calls
should be modeled as " "promoted existing ref edges!"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace.
Stack dump:
0.      Program arguments: ../../master-github/llvm/build-all/bin/opt
-passes=cgscc(require<fam-proxy>),ipsccp,scc-oz-module-inliner -o /dev/null
bbi-60603.ll
 #0 0x0000000002b4ed73 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
(../../master-github/llvm/build-all/bin/opt+0x2b4ed73)
 #1 0x0000000002b4c9ee llvm::sys::RunSignalHandlers()
(../../master-github/llvm/build-all/bin/opt+0x2b4c9ee)
 #2 0x0000000002b4f0f6 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f94cc294630 __restore_rt sigaction.c:0:0
 #4 0x00007f94c99c7387 raise (/lib64/libc.so.6+0x36387)
 #5 0x00007f94c99c8a78 abort (/lib64/libc.so.6+0x37a78)
 #6 0x00007f94c99c01a6 __assert_fail_base (/lib64/libc.so.6+0x2f1a6)
 #7 0x00007f94c99c0252 (/lib64/libc.so.6+0x2f252)
 #8 0x0000000001a03af5 updateCGAndAnalysisManagerForPass(llvm::LazyCallGraph&,
llvm::LazyCallGraph::SCC&, llvm::LazyCallGraph::Node&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::CGSCCUpdateResult&, llvm::AnalysisManager<llvm::Function>&, bool)
CGSCCPassManager.cpp:0:0
 #9 0x00000000019fec2d
llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&)
(../../master-github/llvm/build-all/bin/opt+0x19fec2d)
#10 0x0000000000ae7b1d llvm::detail::PassModel<llvm::LazyCallGraph::SCC,
llvm::CGSCCToFunctionPassAdaptor, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#11 0x00000000019f9168 llvm::PassManager<llvm::LazyCallGraph::SCC,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&)
(../../master-github/llvm/build-all/bin/opt+0x19f9168)
#12 0x000000000247432d llvm::detail::PassModel<llvm::LazyCallGraph::SCC,
llvm::PassManager<llvm::LazyCallGraph::SCC,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#13 0x00000000019fce59
llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&)
(../../master-github/llvm/build-all/bin/opt+0x19fce59)
#14 0x00000000024749fd llvm::detail::PassModel<llvm::LazyCallGraph::SCC,
llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&,
llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&,
llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) crtstuff.c:0:0
#15 0x00000000019fb403
llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(../../master-github/llvm/build-all/bin/opt+0x19fb403)
#16 0x00000000024747ad llvm::detail::PassModel<llvm::Module,
llvm::ModuleToPostOrderCGSCCPassAdaptor, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&) crtstuff.c:0:0
#17 0x0000000002305408 llvm::PassManager<llvm::Module,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(../../master-github/llvm/build-all/bin/opt+0x2305408)
#18 0x00000000024703a9 llvm::ModuleInlinerWrapperPass::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(../../master-github/llvm/build-all/bin/opt+0x24703a9)
#19 0x0000000002e2b6ed llvm::detail::PassModel<llvm::Module,
llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&) crtstuff.c:0:0
#20 0x0000000002305408 llvm::PassManager<llvm::Module,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(../../master-github/llvm/build-all/bin/opt+0x2305408)
#21 0x000000000079b7ac llvm::runPassPipeline(llvm::StringRef, llvm::Module&,
llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*,
llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef,
llvm::ArrayRef<llvm::StringRef>, llvm::opt_tool::OutputKind,
llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool)
(../../master-github/llvm/build-all/bin/opt+0x79b7ac)
#22 0x00000000007aeb96 main
(../../master-github/llvm/build-all/bin/opt+0x7aeb96)
#23 0x00007f94c99b3555 __libc_start_main (/lib64/libc.so.6+0x22555)
#24 0x0000000000796bec _start
(../../master-github/llvm/build-all/bin/opt+0x796bec)
Abort

--- Comment #1 from bjorn.a.pettersson at ericsson.com ---
The problem can also be seen with an even more reduced pipeline such as

  opt -passes='cgscc(no-op-cgscc),ipsccp,cgscc(function(sroa))' -o /dev/null
bbi-60603.ll

--- Comment #2 from Mikael Holmén <mikael.holmen at ericsson.com> ---
The same assert can also be seen with:
 opt
-passes="cgscc(devirt<4>(inline)),function(slp-vectorizer),cgscc(devirt<4>(function(sroa)))"
-o /dev/null bbi-53898_2.ll -aa-pipeline=default

In this case it starts happening with commit 78d4096d037:
    [LazyCallGraph] Add invalidate method.

    Summary: Add invalidate method in LazyCallGraph.

    Reviewers: chandlerc, silvas

    Subscribers: hiraditya, sanjoy.google, llvm-commits

    Tags: #llvm

    Differential Revision: https://reviews.llvm.org/D72817

In a later commit, 6699029b67b, -aa-pipeline=default was made the default, so
after that it can be reproduced with just
  opt
-passes="cgscc(devirt<4>(inline)),function(slp-vectorizer),cgscc(devirt<4>(function(sroa)))"
-o /dev/null bbi-53898_2.ll

--- Comment #3 from Mikael Holmén <mikael.holmen at ericsson.com> ---
Created attachment 25327
  --> https://bugs.llvm.org/attachment.cgi?id=25327&action=edit
bbi-53898_2.ll reproducer

--- Comment #4 from Mikael Holmén <mikael.holmen at ericsson.com> ---
Weird things happening. Both when I added the comment and attached the file I
got errors from bugzilla. I can see my comment though so the error didn't seem
that serious even if I have doubt whether email notifications where sent or
not.

--- Comment #5 from Mikael Holmén <mikael.holmen at ericsson.com> ---
I just realized the bbi-53898_2.ll reproducer does not result in the exact same
assert as the original reproducer but this one:

opt: ../lib/Analysis/CGSCCPassManager.cpp:959: auto
updateCGAndAnalysisManagerForPass(llvm::LazyCallGraph &, LazyCallGraph::SCC &,
LazyCallGraph::Node &, llvm::CGSCCAnalysisManager &, llvm::CGSCCUpdateResult &,
llvm::FunctionAnalysisManager &, bool)::(anonymous
class)::operator()(llvm::Function &) const: Assertion `(E || !FunctionPass) &&
"No function transformations should introduce *new* ref " "edges! Any new ref
edges would require IPO which " "function passes aren't allowed to do!"'
failed.

:(

Not sure if it's still likely to be the same problem or if I should create a
new PR for that?

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20211006/bed087f6/attachment-0001.html>


More information about the llvm-bugs mailing list