<div dir="ltr">Hi there, <div><br>
<div>I write two pass, a module pass, named "MP", and a FunctionPass, "FP".</div><div>Then I use this pass to print the scalar evolution information in two ways:</div><div>1.employ FP to process function directly</div>

<div>2.call MP, iterate on functions, then call FP on them</div><div><br></div><div>sample code is that:</div><div><b>MP:</b></div><div><i>bool runOnModule(Module &M)</i></div><div><i>{</i></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">

<div><div><p class=""><i><span class="">for</span>(Module::iterator itr = M.begin(); itr != M.end(); itr++)</i></p></div></div><div><div><p class=""><i>{</i></p></div></div><div><div><p class=""><i>    FP<span class=""> &t = </span><span class="">getAnalysis</span><span class=""><</span><span class=""> FP >(*itr);</span></i></p>

</div></div><div><div><p class=""><span class=""><i>    (t.SE)->print(errs());         // SE represent for scalar evolution pass.</i></span></p></div></div><div><div><i>}</i></div></div></blockquote><div><div><i>}</i></div>

<div><br></div><div><b>FP:</b></div><div><i>bool runOnFunction(Function &F)</i></div><div><i>{</i></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><i>SE = &getAnalysis<ScalarEvolution>();</i></div>

</div><div><div><i>SE->print(errs());</i></div></div></blockquote><div><div><i>}</i></div><div><br></div><div>But when processing 'getelementptr' instruction, these two ways return different result. </div><div>

<br></div><div><b>MP:</b></div><div>







<p class=""><i>  %lsr.iv1 = getelementptr inbounds [1024 x i32]* %lsr.iv, i64 0, i64 0</i></p><p class="">







</p><p class=""><i>  -->  {@A,+,sizeof(i32)}<%8><span class="">    </span><span class="">    </span>Exits: (((zext i32 (0 smax %N) to i64) * sizeof(i32)) + @A)</i></p><p class=""><br></p><p class=""><b>FP:</b></p><p class="">

<i>%lsr.iv1 = getelementptr inbounds [1024 x i32]* %lsr.iv, i64 0, i64 0</i></p><p class="">








</p><p class=""><i>  -->  {@A,+,4}<%8><span class="">      </span><span class="">    </span>Exits: ((4 * (zext i32 (0 smax %N) to i64)) + @A)</i></p><p class=""><br></p><p class=""><b>Then the problem comes:</b></p><p class="">

In MP, sizeof(i32) seems to be treated as a variable, not a constant. On the other hand, the constant 4 for sizeof(i32) in FP seems more friendly.</p><p class="">What can I do if I want to translate sizeof(i32) to 4?</p>
<p class="">
Any reply is appreciated. </p><p class=""><br></p><p class="">Regards.</p><p class=""><br></p></div></div></div>