73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| # RUN: not llvm-mc -triple=hexagon < %s 2>&1 | \
 | |
| # RUN:     FileCheck %s --check-prefix=CHECK-STRICT
 | |
| # RUN: not llvm-mc -triple=hexagon -relax-nv-checks < %s 2>&1 | \
 | |
| # RUN:     FileCheck %s --check-prefix=CHECK-RELAXED
 | |
| 
 | |
| # CHECK-STRICT: :12:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| # CHECK-RELAXED: :12:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| {
 | |
|   # invalid: r0 definition predicated on the opposite condition
 | |
|   if (p3) r0 = add(r1, r2)
 | |
|   if (!p3) memb(r20) = r0.new
 | |
| }
 | |
| 
 | |
| # CHECK-STRICT: :20:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| # CHECK-RELAXED: :20:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| {
 | |
|   # invalid: new-value compare-and-jump cannot use floating point value
 | |
|   r0 = sfadd(r1, r2)
 | |
|   if (cmp.eq(r0.new, #0)) jump:nt .
 | |
| }
 | |
| 
 | |
| # CHECK-STRICT: :29:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| # CHECK-RELAXED: :29:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| {
 | |
|   # invalid: definition of r0 should be unconditional (not explicitly docu-
 | |
|   # mented)
 | |
|   if (p0) r0 = r1
 | |
|   if (cmp.eq(r0.new, #0)) jump:nt .
 | |
| }
 | |
| 
 | |
| 
 | |
| # No errors from this point on with the relaxed checks.
 | |
| # CHECK-RELAXED-NOT: error
 | |
| 
 | |
| # CHECK-STRICT: :41:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| {
 | |
|   # valid (relaxed): p2 and p3 cannot be proven to violate the new-value
 | |
|   # requirements
 | |
|   if (p3) r0 = add(r1, r2)
 | |
|   if (p2) memb(r20) = r0.new
 | |
| }
 | |
| 
 | |
| # CHECK-STRICT: :48:1: error: register `R0' used with `.new' but not validly modified in the same packet
 | |
| {
 | |
|   # valid (relaxed): p3 could be always true
 | |
|   if (p3) r0 = add(r1, r2)
 | |
|   memb(r20) = r0.new
 | |
| }
 | |
| 
 | |
| 
 | |
| # No errors from this point on with the strict checks.
 | |
| # CHECK-RELAXED-NOT: error
 | |
| 
 | |
| {
 | |
|   # valid: r0 defined unconditionally
 | |
|   r0 = add(r1, r2)
 | |
|   if (p2) memb(r20) = r0.new
 | |
| }
 | |
| 
 | |
| {
 | |
|   # valid: r0 definition and use identically predicated
 | |
|   if (p3) r0 = add(r1, r2)
 | |
|   if (p3) memb(r20) = r0.new
 | |
| }
 | |
| 
 | |
| {
 | |
|   # valid: r0 defined regardless of p0
 | |
|   if (p0) r0 = #0
 | |
|   if (!p0) r0 = #1
 | |
|   if (p0) memb(r20) = r0.new
 | |
| }
 | |
| 
 |