Displaying 20 results from an estimated 100 matches similar to: "[RFC] Coroutine and pthread_self"
2016 Jul 15
2
RFC: Coroutine Optimization Passes
Hi all:
I've included below a brief description of coroutine related optimization
passes and some questions/thoughts related to them. Looking forward to your
feedback, comments and questions.
Thank you!
Roadmap:
========
1) Get agreement on coroutine representation and overall direction.
.. repeat 1) until happy
http://lists.llvm.org/pipermail/llvm-dev/2016-June/100838.html (Initial)
2016 Jun 09
2
[RFC] LLVM Coroutines
On Thu, Jun 9, 2016 at 1:49 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>> Right... but that doesn't mean the call to the suspend intrinsic has to be
>> the last non-terminator instruction in the basic block before you run
>> CoroSplit. You can split the basic block in CoroSplit so any instructions
>> after the suspend call are part of a different basic
2016 Jun 15
2
[RFC] LLVM Coroutines
Hi Sanjoy,
>> I'm not familiar with fiber-type APIs, but I assume fiber_fork is like
>> setjmp, in that it can "return twice"?
Yes, user-mode stack switching API are somewhat similar to setjmp. Here are
links to a doc page and implementation, just in case you are curious:
http://www.boost.org/doc/libs/1_59_0/libs/context/doc/html/context/context.html
2016 Jun 12
2
[RFC] LLVM Coroutines
Hi Eli:
>> Block1:
>> %0 = call i8 coro.suspend()
>> switch i8 %0, label suspend1 [i8 0 %return] ; or icmp + br i1
>> Suspend1:
>> switch i8 %0, label %resume1 [i8 1 %destroy1] ; or icmp + br i1
>>
>> This doesn't look right: intuitively the suspend happens after the return
>> block runs.
Perhaps, but, that is not the intended
2018 Feb 28
1
coro transformations insert unreachable in destroy fn?
I have this input IR in the final cleanup block of my coroutine:
// call the free function
call fastcc void %22(%Allocator* %20, %"[]u8"* byval %4), !dbg !244
// based on whether this is an early return or a normal return, we want to
// either return to the caller, or resume the handle of the awaiter
br i1 %19, label %Resume, label %Return, !dbg !244
Resume:
2018 Mar 29
0
workaround for CoroSplit not spilling alloca?
My frontend is emitting an array (here called
%error_return_trace_addresses). You can see we take the address of the
first element and store it
; Function Attrs: nobuiltin noinline nounwind optnone
define internal fastcc i8* @failing(%StackTrace* nonnull, %Allocator*,
i16*) unnamed_addr #3 !dbg !273 {
Entry:
%error_return_trace_addresses = alloca [1 x i64], align 8
%error_return_trace =
2016 Jun 09
2
Fwd: [RFC] LLVM Coroutines
Hi Eli:
Thank you very much for your comments!
>> If you need some sort of unusual control flow construct, make it a
>> proper terminator instruction
I would love to. I was going by the advice in "docs/ExtendingLLVM.rst":
"WARNING: Adding instructions changes the bitcode format, and it will
take some effort to maintain compatibility with the previous
2017 Apr 15
1
[PATCH] ringtest: fix an assert statement
There is an || vs && typo so the assert can never be triggered.
Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
diff --git a/tools/virtio/ringtest/main.c b/tools/virtio/ringtest/main.c
index 022ae95a06bd..453ca3c21193 100644
--- a/tools/virtio/ringtest/main.c
+++ b/tools/virtio/ringtest/main.c
@@ -87,7 +87,7 @@ void set_affinity(const char *arg)
cpu = strtol(arg,
2017 Apr 15
1
[PATCH] ringtest: fix an assert statement
There is an || vs && typo so the assert can never be triggered.
Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
diff --git a/tools/virtio/ringtest/main.c b/tools/virtio/ringtest/main.c
index 022ae95a06bd..453ca3c21193 100644
--- a/tools/virtio/ringtest/main.c
+++ b/tools/virtio/ringtest/main.c
@@ -87,7 +87,7 @@ void set_affinity(const char *arg)
cpu = strtol(arg,
2016 Jun 11
4
[RFC] LLVM Coroutines
On Fri, Jun 10, 2016 at 5:25 PM, Gor Nishanov <gornishanov at gmail.com> wrote:
> Hi Eli:
>
> >> Naively, you would expect that it would be legal to hoist the store...
> >> but that breaks your coroutine semantics because the global could be
> mutated
> >> between the first return and the resume.
>
> Hmmm... I don't see the problem. I think
2018 Feb 08
0
llvm.coro.size - why can't we call it from outside the coroutine?
http://llvm.org/docs/Coroutines.html#llvm-coro-size-intrinsic
The @llvm.coro.size intrinsic returns a value which lowers to a constant
representing the number of bytes needed for the coroutine frame of the
current function.
This would presumably be used to call malloc with the return value. I
noticed, however, that the example code does not check for the return value
of malloc being NULL. It is
2016 Jul 21
2
RFC: LLVM Coroutine Representation, Round 2
cc llvm-dev
On Thu, Jul 21, 2016 at 9:57 AM, Vadim Chugunov <vadimcn at gmail.com> wrote:
> Hi Gor,
> Does you design support resumption with parameter(s)? (such as Python's
> generator.send(x)). I suppose the "promise" could be used for passing data
> both ways, but if that's the plan, please mention this explicitly in the
> design doc.
> Also, how is
2010 Nov 21
0
StarCraft II, low CPU/GPU usage
Hi all,
I'm trying to properly understand why SC2 doesn't use CPU/GPU at 100%, sleeps all the time.
I've managed to instrument SleepEx function, and I found out that the game spawns a lot of threads which are put to sleep by themselves 95% of the time if not more.
This should definitely be on of the (if not main) reason why SC2 doesn't use the CPU/GPU at 100% and both are set to
2020 Apr 07
0
why virConnectDomainEventRegisterAny can't alway trigger the callback ,how can i get a stable callback ?
hi, all:
I create a vm with six nic, after the vm start, i delete tree nics.
all the three nic delete logic will happen in a thread , every nic delete has the following process:
int vnf_control_del_network(void *arg)
{
。。。。。
call_id = virConnectDomainEventRegisterAny(conn, dom, VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, VIR_DOMAIN_EVENT_CALLBACK(vnf_control_del_network_cb), cb_para,
2015 Apr 09
2
[LLVMdev] __sync_add_and_fetch in objc block for global variable on ARM
Hi Tim
----------------------------------------
> Date: Wed, 8 Apr 2015 06:53:44 -0700
> Subject: Re: [LLVMdev] __sync_add_and_fetch in objc block for global variable on ARM
> From: t.p.northover at gmail.com
> To: alexey.perevalov at hotmail.com
> CC: llvmdev at cs.uiuc.edu
>
>> in disas I see dmb ish instruction, but I don't know is it enough.
>
> There should
2016 Jun 12
2
[RFC] LLVM Coroutines
(Dropped llvm-dev by accident. Putting it back)
HI Eli:
>> coro.barrier() doesn't work: if the address of the alloca doesn't escape,
>> alias analysis will assume the barrier can't read or write the value of
>> the alloca, so the barrier doesn't actually block code movement.
Got it. I am new to this and learning a lot over the course
of this thread. Thank you
2020 Feb 06
2
Why is lldb telling me "variable not available"?
Hi all, I’m working on improving the debugging experience for C++20
coroutines when compiled with LLVM/Clang, and I could use some help
from someone who understands debug information and DWARF (knowledge of
coroutines isn't necessary, I don't think).
Specifically, I’m trying to improve lldb’s behavior when showing
variables in the current stack frame, when that frame corresponds to a
2001 Jul 11
1
Porting MS Structured Exception Handling to Linux.
Hello all,
I am trying to port some more code from windows 2000 to linux. The
specific functionality I would like to port is called "Structured
Exception Handling" and it works like so:
1. Define a function which based upons a signal throws an exceptoion.
For example:
void translateException(unsigned int u, EXCEPTION_POINTERS* pExp)
{
switch (u)
{
case (unsigned
2016 Jun 13
3
[RFC] LLVM Coroutines
Hi Sanjoy:
>> Now in the above CFG %val can be folded to 10, but in reality you need
>> a PHI of 10 and 20
Quick answer: folding %val to 10 is OK, but, I would prefer it to be 'undef'
or even catch it in the verifier as it is a programmer/frontend error.
Details are in the second half of my reply. I would like to start
with the thought experiment you suggested, as it might
2018 Mar 02
1
is it allowed to use musttail on llvm.coro.resume?
It makes sense that you would be able to do this:
%save1 = llvm.coro.save()
%unused = musttail call llvm.coro.resume(%some_handle)
%x = llvm.coro.suspend()
...
But the docs for musttail say:
> The call must immediately precede a ret instruction, or a pointer bitcast
followed by a ret instruction.
Should this be amended to allow a musttail to be followed by
llvm.coro.suspend() ?
Regards,