diff --git a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
index ddc0007..c2a0787 100644
--- a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
+++ b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
@@ -396,8 +396,8 @@
 
 /// OptimizeCmpExpression - sink the given CmpInst into user blocks to reduce 
 /// the number of virtual registers that must be created and coalesced.  This is
-/// a clear win except on targets with multiple condition code registers (powerPC),
-/// where it might lose; some adjustment may be wanted there.
+/// a clear win except on targets with multiple condition code registers
+///  (PowerPC), where it might lose; some adjustment may be wanted there.
 ///
 /// Return true if any changes are made.
 static bool OptimizeCmpExpression(CmpInst *CI){
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index bb1b31e..84ae264 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -7988,7 +7988,8 @@
                         &Args[0], Args.size(), Caller->getName(), Caller);
     cast<InvokeInst>(NC)->setCallingConv(II->getCallingConv());
   } else {
-    NC = new CallInst(Callee, Args.begin(), Args.end(), Caller->getName(), Caller);
+    NC = new CallInst(Callee, Args.begin(), Args.end(),
+                      Caller->getName(), Caller);
     if (cast<CallInst>(Caller)->isTailCall())
       cast<CallInst>(NC)->setTailCall();
    cast<CallInst>(NC)->setCallingConv(cast<CallInst>(Caller)->getCallingConv());
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
index 5bea783..fea3c42 100644
--- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
@@ -651,9 +651,10 @@
         Instruction *InsertPt = PN->getIncomingBlock(i)->getTerminator();
         Code = InsertCodeForBaseAtPosition(NewBase, Rewriter, InsertPt, L);
 
-        // Adjust the type back to match the PHI. Note that we can't use InsertPt
-        // here because the SCEVExpander may have inserted its instructions after
-        // that point, in its efforts to avoid inserting redundant expressions.
+        // Adjust the type back to match the PHI. Note that we can't use
+        // InsertPt here because the SCEVExpander may have inserted its
+        // instructions after that point, in its efforts to avoid inserting
+        // redundant expressions.
         if (isa<PointerType>(PN->getType())) {
           Code = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr,
                                               Code,
diff --git a/llvm/lib/Transforms/Scalar/LoopUnroll.cpp b/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
index babfc24..25a4c4a 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
@@ -41,7 +41,7 @@
 using namespace llvm;
 
 STATISTIC(NumCompletelyUnrolled, "Number of loops completely unrolled");
-STATISTIC(NumUnrolled,           "Number of loops unrolled (completely or otherwise)");
+STATISTIC(NumUnrolled,    "Number of loops unrolled (completely or otherwise)");
 
 namespace {
   cl::opt<unsigned>
diff --git a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
index 6b4d637..130db9f 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -425,7 +425,8 @@
   }
 }
 
-// CloneDomInfo - NewBB is cloned from Orig basic block. Now clone Dominator Info.
+// CloneDomInfo - NewBB is cloned from Orig basic block. Now clone Dominator
+// Info.
 //
 // If Orig block's immediate dominator is mapped in VM then use corresponding
 // immediate dominator from the map. Otherwise Orig block's dominator is also
@@ -1113,7 +1114,8 @@
     switch (I->getOpcode()) {
     case Instruction::Select:
       if (ConstantInt *CB = dyn_cast<ConstantInt>(I->getOperand(0))) {
-        ReplaceUsesOfWith(I, I->getOperand(!CB->getZExtValue()+1), Worklist, L, LPM);
+        ReplaceUsesOfWith(I, I->getOperand(!CB->getZExtValue()+1), Worklist, L,
+                          LPM);
         continue;
       }
       break;
diff --git a/llvm/lib/Transforms/Scalar/RedundantLoadElimination.cpp b/llvm/lib/Transforms/Scalar/RedundantLoadElimination.cpp
index 8d63a39..3b719df 100644
--- a/llvm/lib/Transforms/Scalar/RedundantLoadElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/RedundantLoadElimination.cpp
@@ -66,7 +66,8 @@
   bool MadeChange = false;
   
   // Do a top-down walk on the BB
-  for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); BBI != BBE; ++BBI) {
+  for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); 
+       BBI != BBE; ++BBI) {
     // If we find a store or a free...
     if (LoadInst* L = dyn_cast<LoadInst>(BBI)) {
       // We can't delete volatile loads
diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 52edcb6..98fc399 100644
--- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -50,7 +50,7 @@
     static char ID; // Pass identification, replacement for typeid
     explicit SROA(signed T = -1) : FunctionPass((intptr_t)&ID) {
       if (T == -1)
-        SRThreshold = 128;
+        SRThreshold = 512;
       else
         SRThreshold = T;
     }
