mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	[WinEH] Minor bug fixes.
Fixed insert point for allocas created for demoted values. Clear the nested landing pad list after it has been processed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234433 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -499,6 +499,7 @@ bool WinEHPrepare::prepareExceptionHandlers( | |||||||
|   // cleans up references to outlined blocks that will be deleted. |   // cleans up references to outlined blocks that will be deleted. | ||||||
|   for (auto &LPadPair : NestedLPtoOriginalLP) |   for (auto &LPadPair : NestedLPtoOriginalLP) | ||||||
|     completeNestedLandingPad(&F, LPadPair.first, LPadPair.second, FrameVarInfo); |     completeNestedLandingPad(&F, LPadPair.first, LPadPair.second, FrameVarInfo); | ||||||
|  |   NestedLPtoOriginalLP.clear(); | ||||||
|  |  | ||||||
|   F.addFnAttr("wineh-parent", F.getName()); |   F.addFnAttr("wineh-parent", F.getName()); | ||||||
|  |  | ||||||
| @@ -554,10 +555,10 @@ bool WinEHPrepare::prepareExceptionHandlers( | |||||||
|           ++InsertPt; |           ++InsertPt; | ||||||
|           ParentAlloca = |           ParentAlloca = | ||||||
|               new AllocaInst(ParentInst->getType(), nullptr, |               new AllocaInst(ParentInst->getType(), nullptr, | ||||||
|                              ParentInst->getName() + ".reg2mem", InsertPt); |                              ParentInst->getName() + ".reg2mem", AllocaInsertPt); | ||||||
|           new StoreInst(ParentInst, ParentAlloca, InsertPt); |           new StoreInst(ParentInst, ParentAlloca, InsertPt); | ||||||
|         } else { |         } else { | ||||||
|           ParentAlloca = DemoteRegToStack(*ParentInst, true, ParentInst); |           ParentAlloca = DemoteRegToStack(*ParentInst, true, AllocaInsertPt); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -55,6 +55,8 @@ $"\01??_R0H@8" = comdat any | |||||||
| ; CHECK: entry: | ; CHECK: entry: | ||||||
| ; CHECK:   [[NUMEXCEPTIONS_REGMEM:\%.+]] = alloca i32 | ; CHECK:   [[NUMEXCEPTIONS_REGMEM:\%.+]] = alloca i32 | ||||||
| ; CHECK:   [[I_REGMEM:\%.+]] = alloca i32 | ; CHECK:   [[I_REGMEM:\%.+]] = alloca i32 | ||||||
|  | ; CHECK:   [[A_REGMEM:\%.+]] = alloca i32* | ||||||
|  | ; CHECK:   [[B_REGMEM:\%.+]] = alloca i32* | ||||||
| ; CHECK:   [[E_PTR:\%.+]] = alloca i32, align 4 | ; CHECK:   [[E_PTR:\%.+]] = alloca i32, align 4 | ||||||
| ; CHECK:   [[EXCEPTIONVAL:\%.+]] = alloca [10 x i32], align 16 | ; CHECK:   [[EXCEPTIONVAL:\%.+]] = alloca [10 x i32], align 16 | ||||||
| ; CHECK:   [[DATA_PTR:\%.+]] = alloca i64, align 8 | ; CHECK:   [[DATA_PTR:\%.+]] = alloca i64, align 8 | ||||||
| @@ -62,11 +64,9 @@ $"\01??_R0H@8" = comdat any | |||||||
| ; CHECK:   [[TMP:\%.+]] = bitcast [10 x i32]* [[EXCEPTIONVAL]] to i8* | ; CHECK:   [[TMP:\%.+]] = bitcast [10 x i32]* [[EXCEPTIONVAL]] to i8* | ||||||
| ; CHECK:   call void @llvm.lifetime.start(i64 40, i8* [[TMP]]) | ; CHECK:   call void @llvm.lifetime.start(i64 40, i8* [[TMP]]) | ||||||
| ; CHECK:   store i64 0, i64* [[DATA_PTR]], align 8 | ; CHECK:   store i64 0, i64* [[DATA_PTR]], align 8 | ||||||
| ; CHECK:   [[A_REGMEM:\%.+]] = alloca i32* |  | ||||||
| ; CHECK:   [[A_PTR:\%.+]] = bitcast i64* [[DATA_PTR]] to i32* | ; CHECK:   [[A_PTR:\%.+]] = bitcast i64* [[DATA_PTR]] to i32* | ||||||
| ; CHECK:   store i32* [[A_PTR]], i32** [[A_REGMEM]] | ; CHECK:   store i32* [[A_PTR]], i32** [[A_REGMEM]] | ||||||
| ; CHECK:   [[B_PTR:\%.+]] = getelementptr inbounds %struct.SomeData, %struct.SomeData* [[TMPCAST]], i64 0, i32 1 | ; CHECK:   [[B_PTR:\%.+]] = getelementptr inbounds %struct.SomeData, %struct.SomeData* [[TMPCAST]], i64 0, i32 1 | ||||||
| ; CHECK:   [[B_REGMEM:\%.+]] = alloca i32* |  | ||||||
| ; CHECK:   store i32* [[B_PTR]], i32** [[B_REGMEM]] | ; CHECK:   store i32* [[B_PTR]], i32** [[B_REGMEM]] | ||||||
| ; CHECK:   store i32 0, i32* [[NUMEXCEPTIONS_REGMEM]] | ; CHECK:   store i32 0, i32* [[NUMEXCEPTIONS_REGMEM]] | ||||||
| ; CHECK:   store i32 0, i32* [[I_REGMEM]] | ; CHECK:   store i32 0, i32* [[I_REGMEM]] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user