[cfe-dev] Compile .ll file with coroutines intrinsics

John McCall via cfe-dev cfe-dev at lists.llvm.org
Thu Jul 8 18:55:57 PDT 2021

On 8 Jul 2021, at 20:13, Mehdi AMINI wrote:
> On Thu, Jul 8, 2021 at 4:40 PM Xun Li <lxfind at gmail.com> wrote:
>> Not sure if I fully understand the question. Do you have a full
>> example of what you expect but doesn't work?
>> Are you trying to compile C++ code that uses coroutines, or are you
>> trying to use opt to compile an .ll file?
> I'm trying to compile IR (.ll or .bc) file: clang support IR as *input* as
> well.
> So for example with the case you mention:
> clang -emit-llvm  -c    -O3  -Xclang -disable-llvm-passes
> clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp -std=c++20 -o
> coro.bc
> This gets me a nice coro.bc file, but I have no way to compile this with
> clang right now, it will always crash:
> $ clang -c coro.bc
> PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
> backtrace, preprocessed source, and associated run script.
> Stack dump:
> 0. Program arguments: clang -c coro.bc
> 1. Code generation
> 2. Running pass 'Function Pass Manager' on module 'coro.bc'.
> 3. Running pass 'X86 DAG->DAG Instruction Selection' on function '@_Z3foov'
> Segmentation fault

Coroutines do push the boundaries of LLVM IR in the sense that
(1) there’s a mandatory lowering sequence and (2) because of the
complexity of that lowering, the IR prior to that sequence is
much more of an internal representation than a stable format.
With that said, I don’t know of any inherent reason why running
the coroutine passes multiple times would be a problem.  It’s
probably just some bit of coroutine bookkeeping (the attribute?)
that we fail to remove after lowering.

Also, the exact form of the crash is surprising; I don’t know
why running lowering multiple times would add new things that
ISel wouldn’t recognize.


More information about the cfe-dev mailing list