[LLVMdev] Can simplifycfg kill llvm.lifetime intrinsics?

Krzysztof Parzyszek kparzysz at codeaurora.org
Wed Dec 26 14:37:48 PST 2012

On 12/26/2012 3:38 PM, Nick Lewycky wrote:
> Of course you can re-start memory that's been ended... if that isn't
> clear in the langref, please fix.

There are several things that aren't clear (at least when I read it).

Case 1:
   %a = phi i32* ..., [ %a.next, %block ]
   llvm.lifetime.begin(4, %a)
   llvm.lifetime.end(4, %a)  <-- (1)
   %a.next = getelementptr i32* %a, 1
   br %block

Does (1) mean the end of lifetime for the 4 bytes that %a happens to be 
pointing to in the current iteration?  My guess is "yes".

Case 2:
   %a = i32* ...
   llvm.lifetime.begin(4, %a)
   llvm.lifetime.end(4, %a)  <-- (2)
   %b = load i32 %ptr        <-- (3)

Is (2) a guarantee that *%ptr and *%a are not aliased?
If (2) and (3) were in the opposite order, would it be illegal to move 
(3) past (2)?


Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation

More information about the llvm-dev mailing list