mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Bugfix for 229954
Before calling Function::getGC to test for enablement, we need to make sure there's actually a GC at all via Function::hasGC. Otherwise, we'd crash on functions without a GC. Thankfully, this only mattered if you manually scheduled the pass, but still, oops. :( git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230040 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -1911,8 +1911,11 @@ 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 | ||||
|   if (F.hasGC()) { | ||||
|     const std::string StatepointExampleName("statepoint-example"); | ||||
|     return StatepointExampleName == F.getGC(); | ||||
|   } else | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| bool RewriteStatepointsForGC::runOnFunction(Function &F) { | ||||
|   | ||||
| @@ -74,4 +74,15 @@ merge: | ||||
|   ret i8 addrspace(1)* %obj | ||||
| } | ||||
|  | ||||
| ; When run over a function which doesn't opt in, should do nothing! | ||||
| define i8 addrspace(1)* @test5(i8 addrspace(1)* %obj) { | ||||
| ; CHECK-LABEL: @test5 | ||||
| ; CHECK-LABEL: entry: | ||||
| ; CHECK-NEXT: gc.statepoint | ||||
| ; CHECK-NOT: %obj.relocated = call coldcc i8 addrspace(1)* | ||||
| entry: | ||||
|   call i32 (void ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_isVoidf(void ()* @foo, i32 0, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0) | ||||
|   ret i8 addrspace(1)* %obj | ||||
| } | ||||
|  | ||||
| declare i32 @llvm.experimental.gc.statepoint.p0f_isVoidf(void ()*, i32, i32, ...) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user