diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index b170270..4be9f13 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/tools/llvmc/CompilerDriver.cpp
@@ -65,9 +65,9 @@
   DumpAction(&cd->Linker);
 }
 
-static bool GetBytecodeDependentLibraries(const std::string &fname,
-                                          Module::LibraryListType& deplibs,
-                                          std::string* ErrMsg) {
+static bool GetBitcodeDependentLibraries(const std::string &fname,
+                                         Module::LibraryListType& deplibs,
+                                         std::string* ErrMsg) {
   ModuleProvider *MP = 0;
   if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(fname)) {
     MP = getBitcodeModuleProvider(Buffer);
@@ -558,8 +558,8 @@
   }
 
   /// This method processes a linkage item. The item could be a
-  /// Bytecode file needing translation to native code and that is
-  /// dependent on other bytecode libraries, or a native code
+  /// Bitcode file needing translation to native code and that is
+  /// dependent on other bitcode libraries, or a native code
   /// library that should just be linked into the program.
   bool ProcessLinkageItem(const llvm::sys::Path& link_item,
                           SetVector<sys::Path>& set,
@@ -586,11 +586,11 @@
     // If we got here fullpath is the path to the file, and its readable.
     set.insert(fullpath);
 
-    // If its an LLVM bytecode file ...
-    if (fullpath.isBytecodeFile()) {
+    // If its an LLVM bitcode file ...
+    if (fullpath.isBitcodeFile()) {
       // Process the dependent libraries recursively
       Module::LibraryListType modlibs;
-      if (GetBytecodeDependentLibraries(fullpath.toString(),modlibs, &err)) {
+      if (GetBitcodeDependentLibraries(fullpath.toString(),modlibs, &err)) {
         // Traverse the dependent libraries list
         Module::lib_iterator LI = modlibs.begin();
         Module::lib_iterator LE = modlibs.end();
@@ -675,7 +675,7 @@
         // Get the suffix of the file name
         const std::string& ftype = I->second;
 
-        // If its a library, bytecode file, or object file, save
+        // If its a library, bitcode file, or object file, save
         // it for linking below and short circuit the
         // pre-processing/translation/assembly phases
         if (ftype.empty() ||  ftype == "o" || ftype == "bc" || ftype=="a") {
@@ -771,7 +771,7 @@
             // ll -> bc Helper
             if (action.isSet(OUTPUT_IS_ASM_FLAG)) {
               /// The output of the translator is an LLVM Assembly program
-              /// We need to translate it to bytecode
+              /// We need to translate it to bitcode
               Action* action = new Action();
               action->program.set("llvm-as");
               action->args.push_back(InFile.toString());
@@ -816,7 +816,7 @@
               // ll -> bc Helper
               if (action.isSet(OUTPUT_IS_ASM_FLAG)) {
                 /// The output of the optimizer is an LLVM Assembly program
-                /// We need to translate it to bytecode with llvm-as
+                /// We need to translate it to bitcode with llvm-as
                 Action* action = new Action();
                 action->program.set("llvm-as");
                 action->args.push_back(InFile.toString());
diff --git a/tools/llvmc/CompilerDriver.h b/tools/llvmc/CompilerDriver.h
index 02ec0e9..f2be5cc 100644
--- a/tools/llvmc/CompilerDriver.h
+++ b/tools/llvmc/CompilerDriver.h
@@ -43,10 +43,10 @@
       /// @brief The phases of processing that llvmc understands
       enum Phases {
         PREPROCESSING, ///< Source language combining, filtering, substitution
-        TRANSLATION,   ///< Translate source -> LLVM bytecode/assembly
+        TRANSLATION,   ///< Translate source -> LLVM bitcode/assembly
         OPTIMIZATION,  ///< Optimize translation result
         ASSEMBLY,      ///< Convert program to executable
-        LINKING,       ///< Link bytecode and native code
+        LINKING,       ///< Link bitcode and native code
         NUM_PHASES     ///< Always last!
       };
 
@@ -129,7 +129,7 @@
         TIME_ACTIONS_FLAG    = 0x0010, ///< Time the actions as they execute
         SHOW_STATS_FLAG      = 0x0020, ///< Show pass statistics
         EMIT_NATIVE_FLAG     = 0x0040, ///< Emit native code instead of bc
-        EMIT_RAW_FLAG        = 0x0080, ///< Emit raw, unoptimized bytecode
+        EMIT_RAW_FLAG        = 0x0080, ///< Emit raw, unoptimized bitcode
         KEEP_TEMPS_FLAG      = 0x0100, ///< Don't delete temporary files
         STRIP_OUTPUT_FLAG    = 0x0200, ///< Strip symbols from linked output
         DRIVER_FLAGS_MASK    = 0x03FF  ///< Union of the above flags
diff --git a/tools/llvmc/ConfigLexer.h b/tools/llvmc/ConfigLexer.h
index 39960c8..9693b34 100644
--- a/tools/llvmc/ConfigLexer.h
+++ b/tools/llvmc/ConfigLexer.h
@@ -56,7 +56,7 @@
   BINDIR_SUBST,      ///< The substitution item %bindir%
   ASSEMBLY,          ///< The value "assembly" (and variants)
   ASSEMBLER,         ///< The name "assembler" (and variants)
-  BYTECODE,          ///< The value "bytecode" (and variants)
+  BITCODE,           ///< The value "bitcode" (and variants)
   COMMAND,           ///< The name "command" (and variants)
   DEFS_SUBST,        ///< The substitution item %defs%
   EQUALS,            ///< The equals sign, =
diff --git a/tools/llvmc/ConfigLexer.l b/tools/llvmc/ConfigLexer.l
index 34b9a17..6bd61c8 100644
--- a/tools/llvmc/ConfigLexer.l
+++ b/tools/llvmc/ConfigLexer.l
@@ -79,7 +79,7 @@
 COMMAND         command|Command|COMMAND
 LANG            lang|Lang|LANG
 LIBS            libs|Libs|LIBS
-LINKER		linker|Linker|LINKER
+LINKER          linker|Linker|LINKER
 NAME            name|Name|NAME
 OPT1            opt1|Opt1|OPT1
 OPT2            opt2|Opt2|OPT2
@@ -97,7 +97,7 @@
 
 True            true|True|TRUE|on|On|ON|yes|Yes|YES
 False           false|False|FALSE|off|Off|OFF|no|No|NO
-Bytecode        bc|BC|bytecode|Bytecode|BYTECODE
+Bitcode         bc|BC|bitcode|Bitcode|BITCODE
 Assembly        asm|ASM|assembly|Assembly|ASSEMBLY
 
 BadSubst        \%[a-zA-Z]*\%
@@ -186,7 +186,7 @@
 %WOpts%         { return handleSubstitution(WOPTS_SUBST); }
 
 {Assembly}      { return handleValueContext(ASSEMBLY); }
-{Bytecode}      { return handleValueContext(BYTECODE); }
+{Bitcode}       { return handleValueContext(BITCODE); }
 {True}          { return handleValueContext(TRUETOK); }
 {False}         { return handleValueContext(FALSETOK); }
 
diff --git a/tools/llvmc/Configuration.cpp b/tools/llvmc/Configuration.cpp
index 1364e9b..aafca79 100644
--- a/tools/llvmc/Configuration.cpp
+++ b/tools/llvmc/Configuration.cpp
@@ -291,8 +291,8 @@
           case ASSEMBLY:
             str += "assembly";
             break;
-          case BYTECODE:
-            str += "bytecode";
+          case BITCODE:
+            str += "bitcode";
             break;
           case TRUETOK:
             str += "true";
@@ -340,8 +340,8 @@
               case ASSEMBLY:
                 anOption += "assembly";
                 break;
-              case BYTECODE:
-                anOption += "bytecode";
+              case BITCODE:
+                anOption += "bitcode";
                 break;
               case TRUETOK:
                 anOption += "true";
@@ -392,7 +392,7 @@
           next();
         if (token == ASSEMBLY) {
           return true;
-        } else if (token == BYTECODE) {
+        } else if (token == BITCODE) {
           return false;
         } else {
           error("Expecting output type value");
diff --git a/tools/llvmc/llvmc.cpp b/tools/llvmc/llvmc.cpp
index 081ae45..c257a3e 100644
--- a/tools/llvmc/llvmc.cpp
+++ b/tools/llvmc/llvmc.cpp
@@ -143,7 +143,7 @@
   cl::desc("Specify a target machine"), cl::value_desc("machine"));
 
 static cl::opt<bool> Native("native", cl::init(false),
-  cl::desc("Generative native code instead of bytecode"));
+  cl::desc("Generative native code instead of bitcode"));
 
 static cl::opt<bool> DebugOutput("g", cl::init(false),
   cl::desc("Generate objects that include debug symbols"));
