//===------ JITGCPass.cpp - Put GC information in functions compiled ---------//
//===----------------------- with llvm-gcc --------------------------------===//
//
//                     The VMKit project
//
// This file is distributed under the University of Illinois Open Source 
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//


#include "llvm/Intrinsics.h"
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/raw_ostream.h"

using namespace llvm;

namespace {

  class JITGCPass : public ModulePass {
  public:
    static char ID;
    
    JITGCPass() : ModulePass((intptr_t)&ID) {}

    virtual bool runOnModule(Module& M);

    /// getAnalysisUsage - We do not modify anything.
    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
      AU.setPreservesAll();
    } 

  };

  char JITGCPass::ID = 0;
  RegisterPass<JITGCPass> X("JITGCPass",
                      "Add GC information in files compiled with llvm-gcc");

bool JITGCPass::runOnModule(Module& M) {

  Function* F = M.getFunction("__llvm_gcroot");
  if (F) {
    Function *gcrootFun = Intrinsic::getDeclaration(&M, Intrinsic::gcroot);

    F->replaceAllUsesWith(gcrootFun);
    F->eraseFromParent();

    for (Value::use_iterator I = gcrootFun->use_begin(),
         E = gcrootFun->use_end(); I != E; ++I) {
      if (Instruction* II = dyn_cast<Instruction>(I)) {
        Function* F = II->getParent()->getParent();
        if (!F->hasGC()) F->setGC("vmkit");
      }
    }

    return true;
  }

  return false;
}

}
