From e807289468c0201287bea058f95061ba3d2c6241 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Fri, 20 Feb 2015 02:34:49 +0000 Subject: [PATCH] Adjust enablement of RewriteStatepointsForGC When back merging the changes in 229945 I noticed that I forgot to mark the test cases with the appropriate GC. We want the rewriting to be off by default (even when manually added to the pass order), not on-by default. To keep the current test working, mark them as using the statepoint-example GC and whitelist that GC. Longer term, we need a better selection mechanism here for both actual usage and testing. As I migrate more tests to the in tree version of this pass, I will probably need to update the enable/disable logic as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229954 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/RewriteStatepointsForGC.cpp | 3 ++- test/Transforms/RewriteStatepointsForGC/basics.ll | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp b/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp index 71c79309df8..2fa5d0cef29 100644 --- a/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp +++ b/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp @@ -1900,7 +1900,8 @@ static bool insertParsePoints(Function &F, DominatorTree &DT, Pass *P, /// point of this function is as an extension point for custom logic. static bool shouldRewriteStatepointsIn(Function &F) { // TODO: This should check the GCStrategy - return true; + const std::string StatepointExampleName("statepoint-example"); + return StatepointExampleName == F.getGC(); } bool RewriteStatepointsForGC::runOnFunction(Function &F) { diff --git a/test/Transforms/RewriteStatepointsForGC/basics.ll b/test/Transforms/RewriteStatepointsForGC/basics.ll index bf914423dd9..7454ea1d403 100644 --- a/test/Transforms/RewriteStatepointsForGC/basics.ll +++ b/test/Transforms/RewriteStatepointsForGC/basics.ll @@ -4,7 +4,7 @@ declare void @foo() ; Trivial relocation over a single call -define i8 addrspace(1)* @test1(i8 addrspace(1)* %obj) { +define i8 addrspace(1)* @test1(i8 addrspace(1)* %obj) gc "statepoint-example" { ; CHECK-LABEL: @test1 ; CHECK-LABEL: entry: ; CHECK-NEXT: gc.statepoint @@ -15,7 +15,7 @@ entry: } ; Two safepoints in a row (i.e. consistent liveness) -define i8 addrspace(1)* @test2(i8 addrspace(1)* %obj) { +define i8 addrspace(1)* @test2(i8 addrspace(1)* %obj) gc "statepoint-example" { ; CHECK-LABEL: @test2 ; CHECK-LABEL: entry: ; CHECK-NEXT: gc.statepoint @@ -29,7 +29,7 @@ entry: } ; A simple derived pointer -define i8 @test3(i8 addrspace(1)* %obj) { +define i8 @test3(i8 addrspace(1)* %obj) gc "statepoint-example" { ; CHECK-LABEL: entry: ; CHECK-NEXT: getelementptr ; CHECK-NEXT: gc.statepoint @@ -49,7 +49,7 @@ entry: ; Tests to make sure we visit both the taken and untaken predeccessor ; of merge. This was a bug in the dataflow liveness at one point. -define i8 addrspace(1)* @test4(i1 %cmp, i8 addrspace(1)* %obj) { +define i8 addrspace(1)* @test4(i1 %cmp, i8 addrspace(1)* %obj) gc "statepoint-example" { entry: br i1 %cmp, label %taken, label %untaken