CC Y
2013-Oct-31 04:22 UTC
[LLVMdev] Get Different Result for ScalarEvolution through ModulePass and FunctionPass
Hi there, I write two pass, a module pass, named "MP", and a FunctionPass, "FP". Then I use this pass to print the scalar evolution information in two ways: 1.employ FP to process function directly 2.call MP, iterate on functions, then call FP on them sample code is that: *MP:* *bool runOnModule(Module &M)* *{* *for(Module::iterator itr = M.begin(); itr != M.end(); itr++)* *{* * FP &t = getAnalysis< FP >(*itr);* * (t.SE)->print(errs()); // SE represent for scalar evolution pass.* *}* *}* *FP:* *bool runOnFunction(Function &F)* *{* *SE = &getAnalysis<ScalarEvolution>();* *SE->print(errs());* *}* But when processing 'getelementptr' instruction, these two ways return different result. *MP:* * %lsr.iv1 = getelementptr inbounds [1024 x i32]* %lsr.iv, i64 0, i64 0* * --> {@A,+,sizeof(i32)}<%8> Exits: (((zext i32 (0 smax %N) to i64) * sizeof(i32)) + @A)* *FP:* *%lsr.iv1 = getelementptr inbounds [1024 x i32]* %lsr.iv, i64 0, i64 0* * --> {@A,+,4}<%8> Exits: ((4 * (zext i32 (0 smax %N) to i64)) + @A)* *Then the problem comes:* 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. What can I do if I want to translate sizeof(i32) to 4? Any reply is appreciated. Regards. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131031/e34dbd0b/attachment.html>