-static void insertTraceCodeFor(Module &M) {
- PassManager Passes;
-
- // Insert trace code in all functions in the module
- switch (TraceValues) {
- case TraceBasicBlocks:
- Passes.add(createTraceValuesPassForBasicBlocks());
- break;
- case TraceFunctions:
- Passes.add(createTraceValuesPassForFunction());
- break;
- default:
- assert(0 && "Bad value for TraceValues!");
- abort();
- }
-
- // Eliminate duplication in constant pool
- Passes.add(createConstantMergePass());
-
- // Run passes to insert and clean up trace code...
- Passes.run(M);
-
- std::string ErrorMessage;
-
- // Load the module that contains the runtime helper routines neccesary for
- // pointer hashing and stuff... link this module into the program if possible
- //
- Module *TraceModule = ParseBytecodeFile(TraceLibPath+"libinstr.bc");
-
- // Ok, the TraceLibPath didn't contain a valid module. Try to load the module
- // from the current LLVM-GCC install directory. This is kindof a hack, but
- // allows people to not HAVE to have built the library.
- //
- if (TraceModule == 0)
- TraceModule = ParseBytecodeFile("/home/vadve/lattner/cvs/gcc_install/lib/"
- "gcc-lib/llvm/3.1/libinstr.bc");
-
- // If we still didn't get it, cancel trying to link it in...
- if (TraceModule == 0) {
- cerr << "Warning, could not load trace routines to link into program!\n";
- } else {
-
- // Link in the trace routines... if the link fails, don't panic, because the
- // compile should still succeed, just the native linker will probably fail.
- //
- std::auto_ptr<Module> TraceRoutines(TraceModule);
- if (LinkModules(&M, TraceRoutines.get(), &ErrorMessage))
- cerr << "Warning: Error linking in trace routines: "
- << ErrorMessage << "\n";
- }
-
-
- // Write out the module with tracing code just before code generation
- if (InputFilename != "-") {
- string TraceFilename = GetFileNameRoot(InputFilename) + ".trace.bc";
-
- std::ofstream Out(TraceFilename.c_str());
- if (!Out.good()) {
- cerr << "Error opening '" << TraceFilename
- << "'!: Skipping output of trace code as bytecode\n";
- } else {
- cerr << "Emitting trace code to '" << TraceFilename
- << "' for comparison...\n";
- WriteBytecodeToFile(&M, Out);
- }
- }
-
-}
-
-
-//===---------------------------------------------------------------------===//
-// Function main()
-//
-// Entry point for the llc compiler.
-//===---------------------------------------------------------------------===//