You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			289 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc -O0 -fast-isel -mtriple=aarch64-apple-ios -o - %s | FileCheck %s
 | |
| ; RUN: not llc -O0 -mtriple=aarch64-apple-ios -o /dev/null -fast-isel -fast-isel-abort=3 %s 2> %t
 | |
| ; RUN: FileCheck %s --check-prefix=CHECK-ERRORS < %t
 | |
| 
 | |
| ; The issue here is that FastISel cannot emit an ADDrr where one of the inputs
 | |
| ; is SP. This only ever crops up with function calls, and then only if the
 | |
| ; argument is at an offset > 2^12 * size from SP.
 | |
| 
 | |
| ; If FastISel ever starts coping with this and emits an "add xD, sp, xM" it's
 | |
| ; critical to check the encoding as well as the textual assembly. An ADDXrs with
 | |
| ; SP as an operand will still print with SP, but will actually mean XZR.
 | |
| 
 | |
| ; CHECK-ERRORS: LLVM ERROR: FastISel missed call
 | |
| 
 | |
| ; CHECK-LABEL: foo:
 | |
| ; CHECK-DAG: mov x[[SP:[0-9]+]], sp
 | |
| ; CHECK-DAG: mov [[TMP:w[0-9]+]], #4104
 | |
| ; CHECK: mov w[[OFFSET:[0-9]+]], [[TMP]]
 | |
| ; CHECK: strb w0, [x[[SP]], x[[OFFSET]]]
 | |
| 
 | |
| define void @foo(i8 %in) {
 | |
|   call void @bar(i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; All regs gone.
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 32
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 64
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 128
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 256
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 512
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 1024
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 2048
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef,
 | |
|                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 4096
 | |
|                  i64 undef, ; sp + 4104 (i.e. not uimm12 or uimm12 << 12).
 | |
|                  i8 %in)
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| declare void @bar(i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; All regs gone.
 | |
|                   i64, i64, i64, i64, ; sp + 32
 | |
|                   i64, i64, i64, i64, ; sp + 64
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 128
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 256
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 512
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 1024
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 2048
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64,
 | |
|                   i64, i64, i64, i64, ; sp + 4096
 | |
|                   i64,
 | |
|                   i8)
 |