36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; RUN: llc -march=hexagon -enable-pipeliner -verify-machineinstrs < %s
 | 
						|
; REQUIRES: asserts
 | 
						|
 | 
						|
; This test fails in the machine verifier because the verifier thinks the
 | 
						|
; return register is undefined, and because there is a basic block that
 | 
						|
; ends with an unconditional branch that is not marked as a barrier.
 | 
						|
;
 | 
						|
; Enabling SWP exposes these bugs because the live variable analysis is
 | 
						|
; performed earlier than the process implicit def pass.  This ordering
 | 
						|
; causes the JMPR machine instruction to contain two R0 operands, one
 | 
						|
; with an undef and one with a kill flag.
 | 
						|
 | 
						|
@g0 = common global i32 0, align 4
 | 
						|
 | 
						|
; Function Attrs: nounwind
 | 
						|
define i32 @f0(i32 %a0) #0 {
 | 
						|
b0:
 | 
						|
  %v0 = icmp eq i32 %a0, 0
 | 
						|
  br i1 %v0, label %b2, label %b1
 | 
						|
 | 
						|
b1:                                               ; preds = %b0
 | 
						|
  %v1 = tail call i32 bitcast (i32 (...)* @f1 to i32 (i32)*)(i32 %a0) #0
 | 
						|
  br label %b3
 | 
						|
 | 
						|
b2:                                               ; preds = %b0
 | 
						|
  store i32 0, i32* @g0, align 4
 | 
						|
  br label %b3
 | 
						|
 | 
						|
b3:                                               ; preds = %b2, %b1
 | 
						|
  ret i32 undef
 | 
						|
}
 | 
						|
 | 
						|
declare i32 @f1(...)
 | 
						|
 | 
						|
attributes #0 = { nounwind }
 |