mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	SchedulerDAGInstrs::buildSchedGraph ignores dependencies between FixedStack objects and byval parameters. So loading byval parameters from stack may be inserted *before* it will be stored, since these operations are treated as independent. Fix: Currently ARMTargetLowering::LowerFormalArguments saves byval registers with FixedStack MachinePointerInfo. To fix the problem we need to store byval registers with MachinePointerInfo referenced to first the "byval" parameter. Also commit adds two new fields to the InputArg structure: Function's argument index and InputArg's part offset in bytes relative to the start position of Function's argument. E.g.: If function's argument is 128 bit width and it was splitted onto 32 bit regs, then we got 4 InputArg structs with same arg index, but different offset values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165616 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			20 lines
		
	
	
		
			741 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			741 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi | FileCheck %s
 | 
						|
 | 
						|
@.str = private unnamed_addr constant [12 x i8] c"val.a = %f\0A\00"
 | 
						|
%struct_t = type { double, double, double }
 | 
						|
@static_val = constant %struct_t { double 1.0, double 2.0, double 3.0 }
 | 
						|
 | 
						|
declare i32 @printf(i8*, ...)
 | 
						|
 | 
						|
; CHECK:     test_byval_usage_scheduling:
 | 
						|
; CHECK:       str     r3, [sp, #12]
 | 
						|
; CHECK:       str     r2, [sp, #8]
 | 
						|
; CHECK:       vldr    d16, [sp, #8]
 | 
						|
define void @test_byval_usage_scheduling(i32 %n1, i32 %n2, %struct_t* byval %val) nounwind {
 | 
						|
entry:
 | 
						|
  %a = getelementptr inbounds %struct_t* %val, i32 0, i32 0
 | 
						|
  %0 = load double* %a
 | 
						|
  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.str, i32 0, i32 0), double %0)
 | 
						|
  ret void
 | 
						|
}
 |