[LLVMdev] llvm metadata transformation pass

Alexandru Ionut Diaconescu alexandruionutdiaconescu at gmail.com
Fri Feb 8 04:07:37 PST 2013


Hello !

I have a toolchain of two passes. First one, is a transformation pass that
should add metadata to some structures (instructions/variables) and the
second pass is an analyzing pass which needs to access the added metadata.
The problem is with my adding metadata transformation pass. There might be
two problems(or both):

First, maybe I don't add correctly metadata.

        LLVMContext& C = myInstruction->getContext();
        MDNode* N = MDNode::get(C, MDString::get(C, "add info"));
        myInstruction->setMetadata("important", N);

 errs()<<"\n"<<cast<MDString>(myInstruction->getMetadata("important")->getOperand(0))->getString();

However, "add info" is printed after running the pass.

Second, it seems that the transformations are not applied on the .bc of the
target program.
The Test1.bc (clean) and Test2.bc (transformation applied) are the same. I
just have

    using namespace llvm;

    namespace {
      struct metadata : public FunctionPass {
        const Function *F;
        static char ID; // Pass identifcation, replacement for typeid
        metadata() : FunctionPass(ID) {
          //initializeMemDepPrinterPass(*PassRegistry::getPassRegistry());
        }
        virtual bool runOnFunction(Function &F);
        virtual void getAnalysisUsage(AnalysisUsage &AU) const {
          AU.setPreservesAll();
        }

       // virtual void releaseMemory() {
        //  F = 0;
       // }
      };
    }

    char metadata::ID = 0;

    static RegisterPass<metadata> X("my-metadata", "Adding metadata",
false, true);

at the beginning of my transformation pass. Please tell me how can I add
metadata persistently.

Thank you for your answers !
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130208/21ee5f7e/attachment.html>


More information about the llvm-dev mailing list