diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp
index c86341f..46788b1 100644
--- a/tools/llvm-ld/llvm-ld.cpp
+++ b/tools/llvm-ld/llvm-ld.cpp
@@ -11,7 +11,7 @@
 // system 'ld' conventions.  As such, the default output file is ./a.out.
 // Additionally, this program outputs a shell script that is used to invoke LLI
 // to execute the program.  In this manner, the generated executable (a.out for
-// example), is directly executable, whereas the bytecode file actually lives in
+// example), is directly executable, whereas the bitcode file actually lives in
 // the a.out.bc file generated by this program.  Also, Force is on by default.
 //
 // Note that if someone (or a script) deletes the executable program generated,
@@ -42,7 +42,7 @@
 
 // Input/Output Options
 static cl::list<std::string> InputFilenames(cl::Positional, cl::OneOrMore,
-  cl::desc("<input bytecode files>"));
+  cl::desc("<input bitcode files>"));
 
 static cl::opt<std::string> OutputFilename("o", cl::init("a.out"),
   cl::desc("Override output filename"),
@@ -203,11 +203,11 @@
   return;
 }
 
-/// GenerateBytecode - generates a bytecode file from the module provided
-void GenerateBytecode(Module* M, const std::string& FileName) {
+/// GenerateBitcode - generates a bitcode file from the module provided
+void GenerateBitcode(Module* M, const std::string& FileName) {
 
   if (Verbose)
-    cout << "Generating Bytecode To " << FileName << '\n';
+    cout << "Generating Bitcode To " << FileName << '\n';
 
   // Create the output file.
   std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
@@ -216,22 +216,22 @@
   if (!Out.good())
     PrintAndExit("error opening '" + FileName + "' for writing!");
 
-  // Ensure that the bytecode file gets removed from the disk if we get a
+  // Ensure that the bitcode file gets removed from the disk if we get a
   // terminating signal.
   sys::RemoveFileOnSignal(sys::Path(FileName));
 
   // Write it out
   WriteBitcodeToFile(M, Out);
 
-  // Close the bytecode file.
+  // Close the bitcode file.
   Out.close();
 }
 
 /// GenerateAssembly - generates a native assembly language source file from the
-/// specified bytecode file.
+/// specified bitcode file.
 ///
 /// Inputs:
-///  InputFilename  - The name of the input bytecode file.
+///  InputFilename  - The name of the input bitcode file.
 ///  OutputFilename - The name of the file to generate.
 ///  llc            - The pathname to use for LLC.
 ///  envp           - The environment to use when running LLC.
@@ -242,7 +242,7 @@
                             const std::string &InputFilename,
                             const sys::Path &llc,
                             std::string &ErrMsg ) {
-  // Run LLC to convert the bytecode file into assembly code.
+  // Run LLC to convert the bitcode file into assembly code.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
   args.push_back("-f");
@@ -259,12 +259,12 @@
   return sys::Program::ExecuteAndWait(llc, &args[0], 0, 0, 0, 0, &ErrMsg);
 }
 
-/// GenerateCFile - generates a C source file from the specified bytecode file.
+/// GenerateCFile - generates a C source file from the specified bitcode file.
 static int GenerateCFile(const std::string &OutputFile,
                          const std::string &InputFile,
                          const sys::Path &llc,
                          std::string& ErrMsg) {
-  // Run LLC to convert the bytecode file into C.
+  // Run LLC to convert the bitcode file into C.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
   args.push_back("-march=c");
@@ -283,10 +283,10 @@
 }
 
 /// GenerateNative - generates a native object file from the
-/// specified bytecode file.
+/// specified bitcode file.
 ///
 /// Inputs:
-///  InputFilename   - The name of the input bytecode file.
+///  InputFilename   - The name of the input bitcode file.
 ///  OutputFilename  - The name of the file to generate.
 ///  NativeLinkItems - The native libraries, files, code with which to link
 ///  LibPaths        - The list of directories in which to find libraries.
@@ -377,7 +377,7 @@
 }
 
 /// EmitShellScript - Output the wrapper file that invokes the JIT on the LLVM
-/// bytecode file for the program.
+/// bitcode file for the program.
 static void EmitShellScript(char **argv) {
   if (Verbose)
     cout << "Emitting Shell Script\n";
@@ -478,7 +478,7 @@
     // Construct a Linker (now that Verbose is set)
     Linker TheLinker(progname, OutputFilename, Verbose);
 
-    // Keep track of the native link items (versus the bytecode items)
+    // Keep track of the native link items (versus the bitcode items)
     Linker::ItemList NativeLinkItems;
 
     // Add library paths to the linker
@@ -517,10 +517,10 @@
     // Optimize the module
     Optimize(Composite.get());
 
-    // Generate the bytecode for the optimized module.
-    std::string RealBytecodeOutput = OutputFilename;
-    if (!LinkAsLibrary) RealBytecodeOutput += ".bc";
-    GenerateBytecode(Composite.get(), RealBytecodeOutput);
+    // Generate the bitcode for the optimized module.
+    std::string RealBitcodeOutput = OutputFilename;
+    if (!LinkAsLibrary) RealBitcodeOutput += ".bc";
+    GenerateBitcode(Composite.get(), RealBitcodeOutput);
 
     // If we are not linking a library, generate either a native executable
     // or a JIT shell script, depending upon what the user wants.
@@ -545,17 +545,17 @@
 
           const char* args[4];
           args[0] = I->c_str();
-          args[1] = RealBytecodeOutput.c_str();
+          args[1] = RealBitcodeOutput.c_str();
           args[2] = tmp_output.c_str();
           args[3] = 0;
           if (0 == sys::Program::ExecuteAndWait(prog, args, 0,0,0,0, &ErrMsg)) {
-            if (tmp_output.isBytecodeFile() || tmp_output.isBitcodeFile()) {
-              sys::Path target(RealBytecodeOutput);
+            if (tmp_output.isBitcodeFile() || tmp_output.isBitcodeFile()) {
+              sys::Path target(RealBitcodeOutput);
               target.eraseFromDisk();
               if (tmp_output.renamePathOnDisk(target, &ErrMsg))
                 PrintAndExit(ErrMsg, 2);
             } else
-              PrintAndExit("Post-link optimization output is not bytecode");
+              PrintAndExit("Post-link optimization output is not bitcode");
           } else {
             PrintAndExit(ErrMsg);
           }
@@ -563,9 +563,9 @@
       }
 
       // If the user wants to generate a native executable, compile it from the
-      // bytecode file.
+      // bitcode file.
       //
-      // Otherwise, create a script that will run the bytecode through the JIT.
+      // Otherwise, create a script that will run the bitcode through the JIT.
       if (Native) {
         // Name of the Assembly Language output file
         sys::Path AssemblyFile ( OutputFilename);
@@ -584,9 +584,9 @@
         if (gcc.isEmpty())
           PrintAndExit("Failed to find gcc");
 
-        // Generate an assembly language file for the bytecode.
+        // Generate an assembly language file for the bitcode.
         std::string ErrMsg;
-        if (0 != GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput,
+        if (0 != GenerateAssembly(AssemblyFile.toString(), RealBitcodeOutput,
             llc, ErrMsg))
           PrintAndExit(ErrMsg);
 
@@ -613,10 +613,10 @@
         if (gcc.isEmpty())
           PrintAndExit("Failed to find gcc");
 
-        // Generate an assembly language file for the bytecode.
+        // Generate an assembly language file for the bitcode.
         std::string ErrMsg;
         if (0 != GenerateCFile(
-            CFile.toString(), RealBytecodeOutput, llc, ErrMsg))
+            CFile.toString(), RealBitcodeOutput, llc, ErrMsg))
           PrintAndExit(ErrMsg);
 
         if (0 != GenerateNative(OutputFilename, CFile.toString(), 
@@ -635,11 +635,11 @@
       if (sys::Path(OutputFilename).makeExecutableOnDisk(&ErrMsg))
         PrintAndExit(ErrMsg);
 
-      // Make the bytecode file readable and directly executable in LLEE as well
-      if (sys::Path(RealBytecodeOutput).makeExecutableOnDisk(&ErrMsg))
+      // Make the bitcode file readable and directly executable in LLEE as well
+      if (sys::Path(RealBitcodeOutput).makeExecutableOnDisk(&ErrMsg))
         PrintAndExit(ErrMsg);
 
-      if (sys::Path(RealBytecodeOutput).makeReadableOnDisk(&ErrMsg))
+      if (sys::Path(RealBitcodeOutput).makeReadableOnDisk(&ErrMsg))
         PrintAndExit(ErrMsg);
     }
   } catch (const std::string& msg) {
