[LLVMdev] opt -O2/-O3 does not Initialize pass?

Anthony Danalis adanalis at eecs.utk.edu
Wed Mar 11 12:43:24 PDT 2009


oops, I copy pasted a code older than my output.  Here is the correct  
snippet:

     virtual bool runOnFunction(Function &func) {
         if( !someF ){
             cerr << "--- Error: someF is NULL ---" << std::endl;
         }else{
             cerr << "--- Success ---" << std::endl;
         }
         return false;
     }


On Mar 11, 2009, at 3:03 PM, Anthony Danalis wrote:

> Hello,
>
> I'm writing a pass that adds a function prototype to the module during
> doInitialization() and stores the pointer in a global variable.  If I
> run opt with "-O1" or less, everything works fine.  However, If I call
> opt with "-O2" or "-O3" then as soon as runOnFunction() is called, the
> pointer seems to be NULL.  Here is a code that shows the problem:
>
> namespace {
>   struct InitTest : public FunctionPass {
>     Constant *someF;
>     public:
>     static char ID; // Pass identification, replacement for typeid
>     InitTest() : FunctionPass(&ID) {}
>
>     virtual bool doInitialization(Module &mdl) {
>         someF = mdl.getOrInsertFunction("test",
>                   /* return type */     Type::VoidTy,
>                   /* actual 1 type */   IntegerType::get(32),
>                                         NULL);
>         if( !someF ){
>             cerr << "### Error: someF is NULL ###" << std::endl;
>         }
>         return true;
>     }
>
>     virtual bool runOnFunction(Function &func) {
>         if( !someF ){
>             cerr << "--- Error: someF is NULL ---" << std::endl;
>         }
>         return false;
>     }
>   };
> }
>
> char InitTest::ID = 0;
> static RegisterPass<InitTest> IT("inittest", "Initialization Testing
> Pass");
>
>
> and here is the output of some runs:
>
> $ opt  -load Test.so -inittest < test.bc > /dev/null
> --- Success ---
> $ opt -O1 -load Test.so -inittest < test.bc > /dev/null
> --- Success ---
> $ opt -O2 -load Test.so -inittest < test.bc > /dev/null
> --- Error: someF is NULL ---
> $ opt -O3 -load Test.so -inittest < test.bc > /dev/null
> --- Error: someF is NULL ---
>
>
> Is this normal?  What can I do to preserve my "test" function  
> prototype?
>
> thanks,
> Anthony
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list