[LLVMdev] Can simplifycfg kill llvm.lifetime intrinsics?
Krzysztof Parzyszek
kparzysz at codeaurora.org
Wed Dec 26 12:28:51 PST 2012
On 12/25/2012 1:31 PM, Alexey Samsonov wrote:
>
> Ok, suppose you have the following code:
> BB1:
> llvm.lifetime.start(%a)
> store to %a
> llvm.lifetime.end(%a)
> br %BB2
>
> BB2:
> <some code>
> br %BB1
>
> If you remove the first "llvm.lifetime.start", then when you enter
> %BB1 for the second time, your "store to %a" can be considered invalid,
> as you've already called llvm.lifetime.end for this variable.
The llvm.lifetime.end(%a) in your example is invalid, according to the
lang ref:
"This intrinsic indicates that after this point in the code, the value
of the memory pointed to by ptr is dead. This means that it is known to
never be used and has an undefined value. Any stores into the memory
object following this intrinsic may be removed as dead."
If you can re-enter the block with a still-defined value of %a, then
it's not "known to never be used".
-Krzysztof
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list