<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><p style="margin: 0;"><br></p><div style="margin: 0;">I understand it's <span style="font-family: arial; white-space: pre-wrap;"> equivalent.But I don't know the benefit. And I don't understand why this statement changed to</span></div><div style="margin: 0;"><span style="font-family: arial; white-space: pre-wrap;">not eq in the last either.</span></div><div style="margin: 0;"><span style="font-family: arial; white-space: pre-wrap;">,,,</span></div><div style="margin: 0;"><font face="arial"><span style="white-space: pre-wrap;">  %exitcond = icmp ne i32 %inc, 129</span></font></div><p style="margin: 0;">,,,</p><p style="margin: 0;"><br></p><div style="margin: 0;">Thanks</div><div style="margin: 0;">Rock</div><div style="position:relative;zoom:1"></div><div id="divNeteaseMailCard"></div><p style="margin: 0;"><br></p><pre><br>At 2021-08-10 19:23:59, "Dimitry Andric" <dimitry@andric.com> wrote:
>On 10 Aug 2021, at 13:16, zbh via llvm-dev <llvm-dev@lists.llvm.org> wrote:
>> 
>> I find the value 128 chaned to 129. So I want to know what's the purpose to changed the form?Can you give some example?
>
>(icmp reference: <https://llvm.org/docs/LangRef.html#id303f>)
>
>Before, it uses "icmp sle" which is "signed <=", so effectively "<= 128".
>
>After, it uses "icmp ult" which is "unsigned <", so effectively "< 129".
>
>These are equivalent.
>
<div>>-Dimitry</div><div><br></div><div>-------------------------------------------------------------</div><div><br></div><div><div style="font-family: Arial; white-space: normal; margin: 0px;">Hi all:</div><div style="font-family: Arial; white-space: normal; margin: 0px;"><br></div><div style="font-family: Arial; white-space: normal; margin: 0px;">I write C code like this:</div><div style="font-family: Arial; white-space: normal; margin: 0px;"><br></div><div style="font-family: Arial; white-space: normal; margin: 0px;">```</div><div style="font-family: Arial; white-space: normal; margin: 0px;">for (int i =0; i< 128; i++) {</div><div style="font-family: Arial; white-space: normal; margin: 0px;"> printf("hello");</div><div style="font-family: Arial; white-space: normal; margin: 0px;">}</div><div style="font-family: Arial; white-space: normal; margin: 0px;">```</div><div style="font-family: Arial; white-space: normal; margin: 0px;">I use this command to compile the above code.</div><div style="font-family: Arial; white-space: normal; margin: 0px;">``</div><div style="font-family: Arial; white-space: normal; margin: 0px;"><div style="margin: 0px;">clang -Xclang -disable-O0-optnone -O0  -emit-llvm -S main.c</div><div style="margin: 0px;">opt -O2  --print-after-all main.ll -S -o  main.mid.ll</div></div><div style="font-family: Arial; white-space: normal; margin: 0px;">``</div><div style="font-family: Arial; white-space: normal; margin: 0px;">And I find the LLVM IR have this changed after instCombine optimization.</div><div style="font-family: Arial; white-space: normal; margin: 0px;"><br></div><div style="font-family: Arial; white-space: normal; margin: 0px;">```</div><div style="font-family: Arial; white-space: normal; margin: 0px;"><div style="margin: 0px;">*** IR Dump After Dead Argument Elimination ***</div><div style="margin: 0px;">; Function Attrs: noinline nounwind uwtable</div><div style="margin: 0px;">define dso_local i32 @main(i32 %argc, i8** %argv) local_unnamed_addr #0 {</div><div style="margin: 0px;">entry:</div><div style="margin: 0px;">  br label %for.cond</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.cond:                                         ; preds = %for.body, %entry</div><div style="margin: 0px;">  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]</div><div style="margin: 0px;">  %cmp =<b> icmp sle i32 %i.0, 128</b></div><div style="margin: 0px;">  br i1 %cmp, label %for.body, label %for.end</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.body:                                         ; preds = %for.cond</div><div style="margin: 0px;">  %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))</div><div style="margin: 0px;">  %inc = add nsw i32 %i.0, 1</div><div style="margin: 0px;">  br label %for.cond</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.end:                                          ; preds = %for.cond</div><div style="margin: 0px;">  ret i32 0</div><div style="margin: 0px;">}</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">*** IR Dump After Combine redundant instructions ***</div><div style="margin: 0px;">; Function Attrs: noinline nounwind uwtable</div><div style="margin: 0px;">define dso_local i32 @main(i32 %argc, i8** %argv) local_unnamed_addr #0 {</div><div style="margin: 0px;">entry:</div><div style="margin: 0px;">  br label %for.cond</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.cond:                                         ; preds = %for.body, %entry</div><div style="margin: 0px;">  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]</div><div style="margin: 0px;">  %cmp = <b>icmp ult i32 %i.0, 129</b></div><div style="margin: 0px;">  br i1 %cmp, label %for.body, label %for.end</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.body:                                         ; preds = %for.cond</div><div style="margin: 0px;">  %call = call i32 (i8*, ...) @printf(i8* nonnull dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))</div><div style="margin: 0px;">  %inc = add nuw nsw i32 %i.0, 1</div><div style="margin: 0px;">  br label %for.cond</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">for.end:                                          ; preds = %for.cond</div><div style="margin: 0px;">  ret i32 0</div><div style="margin: 0px;">}</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">,,,</div><div style="margin: 0px;">I find the value 128 chaned to 129. So I want to know what's the purpose to changed the form?Can you give some example?</div><div style="margin: 0px;"><br></div><div style="margin: 0px;">Thanks</div><div style="margin: 0px;">Rock</div></div></div><div><br></div></pre></div><br><br><span title="neteasefooter"><p> </p></span>