61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
| # RUN: llc -o - %s -mtriple=arm-- -run-pass prologepilog | FileCheck %s
 | |
| --- |
 | |
|   define swiftcc i8* @need_emergency_slot(i8 *swiftself %v) {
 | |
|     ; Just a dummy to add a swiftself bit. The real code is in the MI below.
 | |
|     unreachable
 | |
|   }  
 | |
| ...
 | |
| ---
 | |
| # CHECK-LABEL: name: need_emergency_slot
 | |
| # Make sure we do not just assume an unsaved/restored callee saved register
 | |
| # is free to use. Callee saved parameters may still be used if they were used
 | |
| # to pass arguments (as in swiftself).
 | |
| name: need_emergency_slot
 | |
| tracksRegLiveness: true
 | |
| stack:
 | |
|   - { id: 0, type: default, size: 8, alignment: 8 }
 | |
|   - { id: 1, type: default, size: 4096, alignment: 8 }
 | |
| body: |
 | |
|   bb.0:
 | |
|     liveins: $r10   ; swiftself parameter comes in as $r10
 | |
| 
 | |
|     ; Bring up register pressure to force emergency spilling, coax scavenging
 | |
|     ; to use $r10 as that one is not spilled/restored.
 | |
|     $r0 = IMPLICIT_DEF
 | |
|     $r1 = IMPLICIT_DEF
 | |
|     $r2 = IMPLICIT_DEF
 | |
|     $r3 = IMPLICIT_DEF
 | |
|     $r4 = IMPLICIT_DEF
 | |
|     $r5 = IMPLICIT_DEF
 | |
|     $r6 = IMPLICIT_DEF
 | |
|     $r7 = IMPLICIT_DEF
 | |
|     $r8 = IMPLICIT_DEF
 | |
|     $r9 = IMPLICIT_DEF
 | |
|     $r11 = IMPLICIT_DEF
 | |
|     $r12 = IMPLICIT_DEF
 | |
|     $lr = IMPLICIT_DEF
 | |
| 
 | |
|     ; Computing the large stack offset requires an extra register. We should
 | |
|     ; not just use $r10 for that.
 | |
|     ; CHECK-NOT: STRi12 %1,{{.*}}$r10
 | |
| 
 | |
|     STRi12 $r1, %stack.0, 0, 14, $noreg :: (store 4)
 | |
| 
 | |
|     ; use the swiftself parameter value.
 | |
|     KILL $r10
 | |
| 
 | |
|     KILL $r0
 | |
|     KILL $r1
 | |
|     KILL $r2
 | |
|     KILL $r3
 | |
|     KILL $r4
 | |
|     KILL $r5
 | |
|     KILL $r6
 | |
|     KILL $r7
 | |
|     KILL $r8
 | |
|     KILL $r9
 | |
|     KILL $r11
 | |
|     KILL $r12
 | |
|     KILL $lr  
 | |
| ...
 |