diff --git a/docs/AliasAnalysis.html b/docs/AliasAnalysis.html
index 10227fb..d137ffe 100644
--- a/docs/AliasAnalysis.html
+++ b/docs/AliasAnalysis.html
@@ -134,16 +134,18 @@
 important for correct Alias Analyses.  For example, consider this (silly, but
 possible) C code:</p>
 
+<div class="doc_code">
 <pre>
-  int i;
-  char C[2];
-  char A[10]; 
-  /* ... */
-  for (i = 0; i != 10; ++i) {
-    C[0] = A[i];          /* One byte store */
-    C[1] = A[9-i];        /* One byte store */
-  }
+int i;
+char C[2];
+char A[10]; 
+/* ... */
+for (i = 0; i != 10; ++i) {
+  C[0] = A[i];          /* One byte store */
+  C[1] = A[9-i];        /* One byte store */
+}
 </pre>
+</div>
 
 <p>In this case, the <tt>basicaa</tt> pass will disambiguate the stores to
 <tt>C[0]</tt> and <tt>C[1]</tt> because they are accesses to two distinct
@@ -151,16 +153,18 @@
 LICM pass can use store motion to remove the stores from the loop.  In
 constrast, the following code:</p>
 
+<div class="doc_code">
 <pre>
-  int i;
-  char C[2];
-  char A[10]; 
-  /* ... */
-  for (i = 0; i != 10; ++i) {
-    ((short*)C)[0] = A[i];  /* Two byte store! */
-    C[1] = A[9-i];          /* One byte store */
-  }
+int i;
+char C[2];
+char A[10]; 
+/* ... */
+for (i = 0; i != 10; ++i) {
+  ((short*)C)[0] = A[i];  /* Two byte store! */
+  C[1] = A[9-i];          /* One byte store */
+}
 </pre>
+</div>
 
 <p>In this case, the two stores to C do alias each other, because the access to
 the <tt>&amp;C[0]</tt> element is a two byte access.  If size information wasn't
@@ -361,25 +365,29 @@
 declaring any pass dependencies your pass has.  Thus you should have something
 like this:</p>
 
+<div class="doc_code">
 <pre>
-    void getAnalysisUsage(AnalysisUsage &amp;AU) const {
-      AliasAnalysis::getAnalysisUsage(AU);
-      <i>// declare your dependencies here.</i>
-    }
+void getAnalysisUsage(AnalysisUsage &amp;AU) const {
+  AliasAnalysis::getAnalysisUsage(AU);
+  <i>// declare your dependencies here.</i>
+}
 </pre>
+</div>
 
 <p>Additionally, your must invoke the <tt>InitializeAliasAnalysis</tt> method
 from your analysis run method (<tt>run</tt> for a <tt>Pass</tt>,
 <tt>runOnFunction</tt> for a <tt>FunctionPass</tt>, or <tt>InitializePass</tt>
 for an <tt>ImmutablePass</tt>).  For example (as part of a <tt>Pass</tt>):</p>
 
+<div class="doc_code">
 <pre>
-    bool run(Module &amp;M) {
-      InitializeAliasAnalysis(this);
-      <i>// Perform analysis here...</i>
-      return false;
-    }
+bool run(Module &amp;M) {
+  InitializeAliasAnalysis(this);
+  <i>// Perform analysis here...</i>
+  return false;
+}
 </pre>
+</div>
 
 </div>
 
@@ -419,17 +427,19 @@
 paths that return a conservative MayAlias or Mod/Ref result, simply return
 whatever the superclass computes.  For example:</p>
 
+<div class="doc_code">
 <pre>
-  AliasAnalysis::AliasResult alias(const Value *V1, unsigned V1Size,
-                                   const Value *V2, unsigned V2Size) {
-    if (...)
-      return NoAlias;
-    ...
+AliasAnalysis::AliasResult alias(const Value *V1, unsigned V1Size,
+                                 const Value *V2, unsigned V2Size) {
+  if (...)
+    return NoAlias;
+  ...
 
-    <i>// Couldn't determine a must or no-alias result.</i>
-    return AliasAnalysis::alias(V1, V1Size, V2, V2Size);
-  }
+  <i>// Couldn't determine a must or no-alias result.</i>
+  return AliasAnalysis::alias(V1, V1Size, V2, V2Size);
+}
 </pre>
+</div>
 
 <p>In addition to analysis queries, you must make sure to unconditionally pass
 LLVM <a href="#updating">update notification</a> methods to the superclass as
@@ -473,7 +483,6 @@
 any entries for the specified value, if they exist.
 </div>
 
-
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">The <tt>copyValue</tt> method</div>
 
@@ -485,7 +494,6 @@
 new value has exactly the same properties as the value being copied.
 </div>
 
-
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">The <tt>replaceWithNewValue</tt> method</div>
 
@@ -549,8 +557,8 @@
 
 <p>Many transformations need information about alias <b>sets</b> that are active
 in some scope, rather than information about pairwise aliasing.  The <tt><a
-href="/doxygen/classllvm_1_1AliasSetTracker.html">AliasSetTracker</a></tt> class is used
-to efficiently build these Alias Sets from the pairwise alias analysis
+href="/doxygen/classllvm_1_1AliasSetTracker.html">AliasSetTracker</a></tt> class
+is used to efficiently build these Alias Sets from the pairwise alias analysis
 information provided by the <tt>AliasAnalysis</tt> interface.</p>
 
 <p>First you initialize the AliasSetTracker by using the "<tt>add</tt>" methods
@@ -602,7 +610,6 @@
 
 </div>
 
-
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="direct">Using the <tt>AliasAnalysis</tt> interface directly</a>
@@ -662,7 +669,6 @@
 
 </div>
 
-
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">
   <a name="basic-aa">The <tt>-basicaa</tt> pass</a>
@@ -845,8 +851,8 @@
 </div>
 
 <div class="doc_text">
-<p>
-The <tt>-load-vn</tt> pass uses alias analysis to "<a href="#loadvn">value
+
+<p>The <tt>-load-vn</tt> pass uses alias analysis to "<a href="#loadvn">value
 number</a>" loads and pointers values, which is used by the GCSE pass to
 eliminate instructions.  The <tt>-load-vn</tt> pass relies on alias information
 and must-alias information.  This combination of passes can make the following
@@ -864,18 +870,19 @@
 
 </div>
 
-
-
-
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="aliasanalysis-debug">Clients for debugging and evaluation of implementations</a>
+  <a name="aliasanalysis-debug">Clients for debugging and evaluation of
+  implementations</a>
 </div>
 
-These passes are useful for evaluating the various alias analysis
-implementations.  You can use them with commands like '<tt>opt -anders-aa -ds-aa
--aa-eval foo.bc -disable-output -stats</tt>'.
+<div class="doc_text">
 
+<p>These passes are useful for evaluating the various alias analysis
+implementations.  You can use them with commands like '<tt>opt -anders-aa -ds-aa
+-aa-eval foo.bc -disable-output -stats</tt>'.</p>
+
+</div>
 
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">
@@ -900,17 +907,19 @@
 <div class="doc_text">
 
 <p>The <tt>-count-aa</tt> pass is useful to see how many queries a particular
-pass is making and what responses are returned by the alias analysis.  An
-example usage is:</p>
+pass is making and what responses are returned by the alias analysis.  As an
+example,</p>
 
+<div class="doc_code">
 <pre>
-  $ opt -basicaa -count-aa -ds-aa -count-aa -licm
+% opt -basicaa -count-aa -ds-aa -count-aa -licm
 </pre>
+</div>
 
-<p>Which will print out how many queries (and what responses are returned) by
-the <tt>-licm</tt> pass (of the <tt>-ds-aa</tt> pass) and how many queries are
-made of the <tt>-basicaa</tt> pass by the <tt>-ds-aa</tt> pass.  This can be
-useful when debugging a transformation or an alias analysis implementation.</p>
+<p>will print out how many queries (and what responses are returned) by the
+<tt>-licm</tt> pass (of the <tt>-ds-aa</tt> pass) and how many queries are made
+of the <tt>-basicaa</tt> pass by the <tt>-ds-aa</tt> pass.  This can be useful
+when debugging a transformation or an alias analysis implementation.</p>
 
 </div>
 
