Reorder passes a bit.  In particular, it makes sense to run globaldce IMMEDIATELY after funcresolve.  Also, run the mem2reg pass _early_ so that IPCP and DAE actually do stuff.
Run instcombine and simplify cfg after this to cleanup the intraprocedural messes we create.

llvm-svn: 10134
diff --git a/llvm/tools/gccas/gccas.cpp b/llvm/tools/gccas/gccas.cpp
index 0ed58b9..7d44d00 100644
--- a/llvm/tools/gccas/gccas.cpp
+++ b/llvm/tools/gccas/gccas.cpp
@@ -58,11 +58,13 @@
   PM.add(createVerifierPass());                  // Verify that input is correct
   addPass(PM, createLowerSetJmpPass());          // Lower llvm.setjmp/.longjmp
   addPass(PM, createFunctionResolvingPass());    // Resolve (...) functions
-  addPass(PM, createCFGSimplificationPass());    // Clean up disgusting code
-  addPass(PM, createRaiseAllocationsPass());     // call %malloc -> malloc inst
   addPass(PM, createGlobalDCEPass());            // Remove unused globals
+  addPass(PM, createRaiseAllocationsPass());     // call %malloc -> malloc inst
+  addPass(PM, createPromoteMemoryToRegister());  // "Construct SSA form"
   addPass(PM, createIPConstantPropagationPass());// IP Constant Propagation
   addPass(PM, createDeadArgEliminationPass());   // Dead argument elimination
+  addPass(PM, createInstructionCombiningPass()); // Cleanup after IPCP & DAE
+  addPass(PM, createCFGSimplificationPass());    // Clean up disgusting code
 
   addPass(PM, createPruneEHPass());              // Remove dead EH info