mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Also inflate register classes around inline asm.
Now that MI->getRegClassConstraint() can also handle inline assembly, don't bail when recomputing the register class of a virtual register used by inline asm. This fixes PR11078. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		@@ -364,3 +364,30 @@ entry:
 | 
			
		||||
"5":
 | 
			
		||||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; PR11078
 | 
			
		||||
;
 | 
			
		||||
; A virtual register used by the "foo" inline asm memory operand gets
 | 
			
		||||
; constrained to GR32_ABCD during coalescing.  This makes the inline asm
 | 
			
		||||
; impossible to allocate without splitting the live range and reinflating the
 | 
			
		||||
; register class around the inline asm.
 | 
			
		||||
;
 | 
			
		||||
; The constraint originally comes from the TEST8ri optimization of (icmp (and %t0, 1), 0).
 | 
			
		||||
 | 
			
		||||
@__force_order = external hidden global i32, align 4
 | 
			
		||||
define void @pr11078(i32* %pgd) nounwind {
 | 
			
		||||
entry:
 | 
			
		||||
  %t0 = load i32* %pgd, align 4
 | 
			
		||||
  %and2 = and i32 %t0, 1
 | 
			
		||||
  %tobool = icmp eq i32 %and2, 0
 | 
			
		||||
  br i1 %tobool, label %if.then, label %if.end
 | 
			
		||||
 | 
			
		||||
if.then:
 | 
			
		||||
  %t1 = tail call i32 asm sideeffect "bar", "=r,=*m,~{dirflag},~{fpsr},~{flags}"(i32* @__force_order) nounwind
 | 
			
		||||
  br label %if.end
 | 
			
		||||
 | 
			
		||||
if.end:
 | 
			
		||||
  %t6 = inttoptr i32 %t0 to i64*
 | 
			
		||||
  %t11 = tail call i64 asm sideeffect "foo", "=*m,=A,{bx},{cx},1,~{memory},~{dirflag},~{fpsr},~{flags}"(i64* %t6, i32 0, i32 0, i64 0) nounwind
 | 
			
		||||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user