mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Provide dynamic_stackalloc lowering for MSP430.
This fixes PR4769 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80001 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -95,6 +95,8 @@ MSP430TargetLowering::MSP430TargetLowering(MSP430TargetMachine &tm) : | ||||
|   setOperationAction(ISD::SELECT_CC,        MVT::i8,    Custom); | ||||
|   setOperationAction(ISD::SELECT_CC,        MVT::i16,   Custom); | ||||
|   setOperationAction(ISD::SIGN_EXTEND,      MVT::i16,   Custom); | ||||
|   setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i8, Expand); | ||||
|   setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i16, Expand); | ||||
|  | ||||
|   setOperationAction(ISD::CTTZ,             MVT::i8,    Expand); | ||||
|   setOperationAction(ISD::CTTZ,             MVT::i16,   Expand); | ||||
|   | ||||
| @@ -328,7 +328,16 @@ void MSP430RegisterInfo::emitEpilogue(MachineFunction &MF, | ||||
|   //  mergeSPUpdatesUp(MBB, MBBI, StackPtr, &NumBytes); | ||||
|  | ||||
|   if (MFI->hasVarSizedObjects()) { | ||||
|     llvm_unreachable("Not implemented yet!"); | ||||
|     BuildMI(MBB, MBBI, DL, | ||||
|             TII.get(MSP430::MOV16rr), MSP430::SPW).addReg(MSP430::FPW); | ||||
|     if (CSSize) { | ||||
|       MachineInstr *MI = | ||||
|         BuildMI(MBB, MBBI, DL, | ||||
|                 TII.get(MSP430::SUB16ri), MSP430::SPW) | ||||
|         .addReg(MSP430::SPW).addImm(CSSize); | ||||
|       // The SRW implicit def is dead. | ||||
|       MI->getOperand(3).setIsDead(); | ||||
|     } | ||||
|   } else { | ||||
|     // adjust stack pointer back: SPW += numbytes | ||||
|     if (NumBytes) { | ||||
|   | ||||
							
								
								
									
										30
									
								
								test/CodeGen/MSP430/2009-08-25-DynamicStackAlloc.ll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								test/CodeGen/MSP430/2009-08-25-DynamicStackAlloc.ll
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| ; RUN: llvm-as < %s | llc | ||||
| ; PR4769 | ||||
| target datalayout = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8" | ||||
| target triple = "msp430-generic-generic" | ||||
|  | ||||
| define i16 @foo() nounwind readnone { | ||||
| entry: | ||||
|   %result = alloca i16, align 1                   ; <i16*> [#uses=2] | ||||
|   volatile store i16 0, i16* %result | ||||
|   %tmp = volatile load i16* %result               ; <i16> [#uses=1] | ||||
|   ret i16 %tmp | ||||
| } | ||||
|  | ||||
| define i16 @main() nounwind { | ||||
| entry: | ||||
|   br label %while.cond | ||||
|  | ||||
| while.cond:                                       ; preds = %while.cond, %entry | ||||
|   %call = call i16 @bar() nounwind                ; <i16> [#uses=1] | ||||
|   %tobool = icmp eq i16 %call, 0                  ; <i1> [#uses=1] | ||||
|   br i1 %tobool, label %while.end, label %while.cond | ||||
|  | ||||
| while.end:                                        ; preds = %while.cond | ||||
|   %result.i = alloca i16, align 1                 ; <i16*> [#uses=2] | ||||
|   volatile store i16 0, i16* %result.i | ||||
|   %tmp.i = volatile load i16* %result.i           ; <i16> [#uses=0] | ||||
|   ret i16 0 | ||||
| } | ||||
|  | ||||
| declare i16 @bar() | ||||
		Reference in New Issue
	
	Block a user