We currently only run ipsccp at LTO time, which is silly. It subsumes
authorChris Lattner <sabre@nondot.org>
Sun, 1 Nov 2009 18:57:49 +0000 (18:57 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 1 Nov 2009 18:57:49 +0000 (18:57 +0000)
ipconstprop and doesn't take much time.  Just run it in its place.

This adds a testcase for it, which I plan to expand to cover other
"integration" cases, where we expect the optimizer to be able to
eliminate various things.  Due to phase order issues we've regressed
in a number of areas and integration tests are the only way I see to
prevent this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85729 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/StandardPasses.h
test/FrontendC++/integration-O2.cpp [new file with mode: 0644]

index e36f83d43fe7d3af3af535d544a94d0af9ffe18b..d7a3dc059f40e1b3f10c2f0b2a5b61525f90a78c 100644 (file)
@@ -100,8 +100,7 @@ namespace llvm {
     if (UnitAtATime) {
       PM->add(createGlobalOptimizerPass());     // Optimize out global vars
       PM->add(createGlobalDCEPass());           // Remove unused fns and globs
-      // IP Constant Propagation
-      PM->add(createIPConstantPropagationPass());
+      PM->add(createIPSCCPPass());              // IP SCCP
       PM->add(createDeadArgEliminationPass());  // Dead argument elimination
     }
     PM->add(createInstructionCombiningPass());  // Clean up after IPCP & DAE
diff --git a/test/FrontendC++/integration-O2.cpp b/test/FrontendC++/integration-O2.cpp
new file mode 100644 (file)
index 0000000..bb65ac2
--- /dev/null
@@ -0,0 +1,19 @@
+// RUN: %llvmgxx %s -O2 -S -o - | FileCheck %s
+
+// This test verifies that we get expected codegen out of the -O2 optimization
+// level from the full optimizer.
+
+
+
+// Verify that ipsccp is running and can eliminate globals.
+static int test1g = 42;
+void test1f1() {
+  if (test1g == 0) test1g = 0;
+}
+int test1f2() {
+  return test1g;
+}
+
+// CHECK: @_Z7test1f2v()
+// CHECK: entry:
+// CHECK-NEXT: ret i32 42