<font color="#000000"><font face="verdana,sans-serif">Hello,</font></font><div><font color="#000000"><font face="verdana,sans-serif"><br></font></font></div><div><font color="#000000"><font face="verdana,sans-serif">I am duplicating few instructions in a basic block and splitting it. The following is an example.</font></font></div>

<div><font color="#000000"><font face="verdana,sans-serif"><br></font></font></div><div><font face="verdana,sans-serif"><div style="color: rgb(51, 51, 255); ">bb:                                               ; preds = %bb1</div>

<div style="color: rgb(51, 51, 255); ">  %0 = load i32* %i, align 4</div><div style="color: rgb(51, 51, 255); ">  %1 = getelementptr inbounds [100 x i32]* %a, i32 0, i32 %0</div><div style="color: rgb(51, 51, 255); ">  store i32 0, i32* %1, align 4</div>

<div style="color: rgb(51, 51, 255); ">  %2 = load i32* %i, align 4</div><div style="color: rgb(51, 51, 255); ">  %3 = getelementptr inbounds [100 x i32]* %last_added, i32 0, i32 %2</div><div style="color: rgb(51, 51, 255); ">

  store i32 -1, i32* %3, align 4</div><div style="color: rgb(51, 51, 255); ">  %4 = load i32* %i, align 4</div><div style="color: rgb(51, 51, 255); ">  %5 = add nsw i32 %4, 1</div><div style="color: rgb(51, 51, 255); ">  store i32 %5, i32* %i, align 4</div>

<div style="color: rgb(51, 51, 255); ">  br label %bb1</div><div style="color: rgb(51, 51, 255); "><br></div><div style="color: rgb(51, 51, 255); ">==></div><div style="color: rgb(51, 51, 255); "><br></div><div><div><font class="Apple-style-span" color="#3333ff">  </font><font class="Apple-style-span" color="#333333">%0 = load i32* %i, align 4</font></div>

<div><font class="Apple-style-span" color="#333333">  %HV14_ = getelementptr inbounds [100 x i32]* %a, i32 0, i32 %0</font></div><div><font class="Apple-style-span" color="#333333">  %1 = getelementptr inbounds [100 x i32]* %a, i32 0, i32 %0</font></div>

<div><font class="Apple-style-span" color="#333333">  %HVCmp7 = icmp ne i32* %1, %HV14_</font></div><div><font class="Apple-style-span" color="#333333">  br i1 %HVCmp7, label %relExit, label %bb.split</font></div></div><div>

<font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333">So that HV14_ is a new instruction and I am inserting a comparison to jump to a newly created basic block. Somehow the code generation for arm removes the duplicated instruction and cmp instruction in arm assembly looks as follows.</font></div>

<div><font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333">cmp r0, r0 </font></div><div><font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333">This defeats the purpose of doing the duplication in the first place. Does anyone have any insight on this? Can anyone suggest some starting points to debug this?</font></div>

<div><font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333">Thanks a lot.</font></div><div>

<font class="Apple-style-span" color="#333333">Daya</font></div><div><font class="Apple-style-span" color="#333333"><br></font></div><div><font class="Apple-style-span" color="#333333"> </font></div></font></div>