<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 8, 2021 at 4:40 PM Xun Li <<a href="mailto:lxfind@gmail.com">lxfind@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Not sure if I fully understand the question. Do you have a full<br>
example of what you expect but doesn't work?<br>
Are you trying to compile C++ code that uses coroutines, or are you<br>
trying to use opt to compile an .ll file?<br></blockquote><div><br></div><div>I'm trying to compile IR (.ll or .bc) file: clang support IR as *input* as well.</div><div><br></div><div>So for example with the case you mention: </div><div><br></div><div>clang -emit-llvm  -c    -O3  -Xclang -disable-llvm-passes clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp -std=c++20 -o coro.bc<br></div><div><br></div><div>This gets me a nice coro.bc file, but I have no way to compile this with clang right now, it will always crash:</div><div><br></div><div>$ clang -c coro.bc <br>PLEASE submit a bug report to <a href="https://bugs.llvm.org/">https://bugs.llvm.org/</a> and include the crash backtrace, preprocessed source, and associated run script.<br>Stack dump:<br>0. Program arguments: clang -c coro.bc <br>1.        Code generation<br>2.     Running pass 'Function Pass Manager' on module 'coro.bc'.<br>3.   Running pass 'X86 DAG->DAG Instruction Selection' on function '@_Z3foov'<br>Segmentation fault<br></div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
There are some coroutine tests in Clang that you could also take a<br>
look for reference:<br>
<a href="https://github.com/llvm/llvm-project/blob/main/clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/blob/main/clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp</a><br>
<br>
On Thu, Jul 8, 2021 at 4:15 PM Mehdi AMINI <<a href="mailto:joker.eph@gmail.com" target="_blank">joker.eph@gmail.com</a>> wrote:<br>
><br>
><br>
><br>
><br>
> On Thu, Jul 8, 2021 at 3:55 PM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br>
>><br>
>> Guessing you might need to cc/to this to some folks who worked on/implemented the features - lots of folks don't read the -dev lists terribly much these days, unfortunately.<br>
><br>
><br>
> Good suggestion, adding a few folks here.<br>
><br>
>><br>
>><br>
>> My guess would be: It's difficult because we've essentially fragmented the IR and now we have before-coroutines-are-lowered IR and after-coroutines-are-lowered IR and no way to tell the difference & I guess the support for IR inputs in clang is currently (probably by accident) only supporting after-coroutines-are-lowered.<br>
><br>
><br>
> Right: but can you feed the IR post-lowering and reprocess it through the coroutine lowering passes? I would expect this to be idempotent somehow.<br>
><br>
> Even if it isn't the case, I assume that adding support for the -fcoroutines-ts option when processing IR files should be fine: the IR post-lowering can just not use the flag.<br>
><br>
> Thanks,<br>
><br>
> --<br>
> Mehdi<br>
><br>
>><br>
>><br>
>> On Thu, Jul 8, 2021 at 3:23 PM Mehdi AMINI via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
>>><br>
>>><br>
>>><br>
>>> On Fri, Jul 2, 2021 at 10:25 PM Mehdi AMINI <<a href="mailto:joker.eph@gmail.com" target="_blank">joker.eph@gmail.com</a>> wrote:<br>
>>>><br>
>>>> Hi all,<br>
>>>><br>
>>>> I'm trying to figure out how to use clang to compile some piece of IR in a .ll generated with coroutines.<br>
>>>><br>
>>>> I tried to use the `-fcoroutines-ts`, but it isn't even forwarded by the driver to CC1. And even if I use -Xclang to forward it manually it is then ignored because LLVM IR input is shortcut by CompilerInvocation::ParseLangArgs.<br>
>>>><br>
>>>> What's the best way here? I could add support in CompilerInvocation::ParseLangArgs:<br>
>>>><br>
>>>> @@ -3547,6 +3546,9 @@ bool CompilerInvocation::ParseLangArgs(L<br>
>>>>      parseSanitizerKinds("-fsanitize=", Args.getAllArgValues(OPT_fsanitize_EQ),<br>
>>>>                          Diags, Opts.Sanitize);<br>
>>>><br>
>>>> +    // Allows to use -fcoroutine-ts with IR input.<br>
>>>> +    Opts.Coroutines = Args.hasArg(OPT_fcoroutines_ts);<br>
>>>> +<br>
>>>>      return Diags.getNumErrors() == NumErrorsBefore;<br>
>>>>    }<br>
>>>><br>
>>>><br>
>>>> But I still need to figure out how to have the driver propagate the option to cc1, any pointer?<br>
>>>> Is it expected to silently discard it here by the way? It is quite surprising to me).<br>
>>><br>
>>><br>
>>> Ping on these questions? Anyone want to chime in?<br>
>>><br>
>>> Cheers,<br>
>>><br>
>>> --<br>
>>> Mehdi<br>
>>> _______________________________________________<br>
>>> cfe-dev mailing list<br>
>>> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
>>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
<br>
<br>
<br>
-- <br>
Xun<br>
</blockquote></div></div>