Mercurial > hg > CbC > CbC_llvm
view test/MC/Hexagon/new-value-check.s @ 121:803732b1fca8
LLVM 5.0
author | kono |
---|---|
date | Fri, 27 Oct 2017 17:07:41 +0900 |
parents | 1172e4bd9c6f |
children | 3a76565eade5 |
line wrap: on
line source
# 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 }