diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp
index f4c1ccd..9954926 100644
--- a/tools/llvm-objdump/llvm-objdump.cpp
+++ b/tools/llvm-objdump/llvm-objdump.cpp
@@ -27,6 +27,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/Format.h"
+#include "llvm/Support/GraphWriter.h"
 #include "llvm/Support/Host.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -280,12 +281,28 @@
         Out << "digraph " << f.getName() << " {\n";
         Out << "graph [ rankdir = \"LR\" ];\n";
         for (MCFunction::iterator i = f.begin(), e = f.end(); i != e; ++i) {
+          bool hasPreds = false;
+          // Only print blocks that have predecessors.
+          // FIXME: Slow.
+          for (MCFunction::iterator pi = f.begin(), pe = f.end(); pi != pe;
+               ++pi)
+            for (pi->second->contains(&i->second)) {
+              hasPreds = true;
+              break;
+            }
+
+          if (!hasPreds && i != f.begin())
+            continue;
+
           Out << '"' << (uintptr_t)&i->second << "\" [ label=\"<a>";
           // Print instructions.
           for (unsigned ii = 0, ie = i->second.getInsts().size(); ii != ie;
                ++ii) {
-            IP->printInst(&i->second.getInsts()[ii].Inst, Out);
-            Out << '|';
+            // Escape special chars and print the instruction in mnemonic form.
+            std::string Str;
+            raw_string_ostream OS(Str);
+            IP->printInst(&i->second.getInsts()[ii].Inst, OS);
+            Out << DOT::EscapeString(OS.str()) << '|';
           }
           Out << "<o>\" shape=\"record\" ];\n";
 
