<div dir="ltr">If removing them, they still must be consistent. That is, for instance, for any execution path that reaches an @llvm.lifetime.end, all must go through a @llvm.lifetime.start (or none of them). I remember problem with loop versioning in Polly, which violated this. StackColoring was not expected to handle inconsistencies.<div><br></div><div>Michael</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Am Mi., 30. Sept. 2020 um 08:16 Uhr schrieb Johannes Doerfert via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">lifetime markers should always be OK to remove, as you noted.<br>
<br>
They restrict life ranges and removing them "just" makes the life ranges <br>
larger,<br>
regardless if the variables are used or not.<br>
<br>
That said, original code or the transformation you apply is probably<br>
the reason for the non-determinism, it's impossible to say from a snipped<br>
like this.<br>
<br>
~ Johannes<br>
<br>
<br>
On 9/30/20 4:28 AM, Abid Malik via llvm-dev wrote:<br>
> Hello,<br>
><br>
> What intrinsics "@llvm.lifetime.start/@llvm.lifetime.end" really do? As per<br>
> my knowledge, they define the live ranges of variables. In the following<br>
> code section, they seem redundant. However, when I remove them, the<br>
> behavior of the code becomes non-deterministic. The live ranges of the<br>
> variables defined by them are never used in the code.<br>
><br>
> Thanks,<br>
> ---------------<br>
> %37 = bitcast i32* %7 to i8*<br>
>    call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %37) #5<br>
>    store i32 0, i32* %7, align 4, !tbaa !4<br>
>    %38 = bitcast i32* %8 to i8*<br>
>    call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %38) #5<br>
>    store i32 99, i32* %8, align 4, !tbaa !4<br>
>    %39 = bitcast i32* %9 to i8*<br>
>    call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %39) #5<br>
>    store i32 1, i32* %9, align 4, !tbaa !4<br>
>    %40 = bitcast i32* %10 to i8*<br>
>    call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %40) #5<br>
>    store i32 0, i32* %10, align 4, !tbaa !4<br>
>    call void @__kmpc_for_static_init_4(%struct.ident_t* nonnull @0, i32 %23,<br>
> i32 34, i32* nonnull %10, i32* nonnull %7, i32* nonnull %8, i32* nonnull<br>
> %9, i32 1, i32 1) #5<br>
>    %41 = load i32, i32* %8, align 4, !tbaa !4<br>
>    %42 = icmp slt i32 %41, 99<br>
>    %43 = select i1 %42, i32 %41, i32 99<br>
>    store i32 %43, i32* %8, align 4, !tbaa !4<br>
>    %44 = load i32, i32* %7, align 4, !tbaa !4<br>
>    br label %45<br>
><br>
> 45:                                               ; preds = %49, %36<br>
>    %46 = phi i32 [ %44, %36 ], [ %52, %49 ]<br>
>    %47 = load i32, i32* %8, align 4, !tbaa !4<br>
>    %48 = icmp sgt i32 %46, %47<br>
>    br i1 %48, label %53, label %49<br>
><br>
> 49:                                               ; preds = %45<br>
>    %50 = shl nsw i32 %46, 1<br>
>    %51 = call i32 (i8*, ...) @printf(i8* nonnull dereferenceable(1)<br>
> getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i32<br>
> %50)<br>
>    %52 = add nsw i32 %46, 1<br>
>    br label %45<br>
><br>
> 53:                                               ; preds = %45<br>
>    call void @__kmpc_for_static_fini(%struct.ident_t* nonnull @0, i32 %23) #5<br>
>    call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %40) #5<br>
>    call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %39) #5<br>
>    call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %38) #5<br>
>    call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %37) #5<br>
>    call void @__kmpc_barrier(%struct.ident_t* nonnull @1, i32 %23) #5<br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>