mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	This patch minimizes the number of nops that must be emitted on X86 to satisfy stackmap shadow constraints. To minimize the number of nops inserted, the X86AsmPrinter now records the size of the most recent stackmap's shadow in the StackMapShadowTracker class, and tracks the number of instruction bytes emitted since the that stackmap instruction was encountered. Padding is emitted (if it is required at all) immediately before the next stackmap/patchpoint instruction, or at the end of the basic block. This optimization should reduce code-size and improve performance for people using the llvm stackmap intrinsic on X86. <rdar://problem/14959522> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213892 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			21 lines
		
	
	
		
			705 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			21 lines
		
	
	
		
			705 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -disable-fp-elim | FileCheck %s
 | |
| 
 | |
| ; Check that the X86 stackmap shadow optimization is only outputting a 1-byte
 | |
| ; nop here. 8-bytes are requested, but 7 are covered by the code for the call to
 | |
| ; bar, the frame teardown and the return.
 | |
| define void @shadow_optimization_test() {
 | |
| entry:
 | |
| ; CHECK-LABEL:  shadow_optimization_test:
 | |
| ; CHECK:        callq   _bar
 | |
| ; CHECK-NOT:    nop
 | |
| ; CHECK:        callq   _bar
 | |
| ; CHECK:        retq
 | |
| ; CHECK:        nop
 | |
|   call void @bar()
 | |
|   tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 0, i32 8)
 | |
|   call void @bar()
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| declare void @llvm.experimental.stackmap(i64, i32, ...)
 | |
| declare void @bar() |