1 # RUN: not llvm-mc -triple=hexagon < %s 2>&1 | \ 2 # RUN: FileCheck %s --check-prefix=CHECK-STRICT 3 # RUN: not llvm-mc -triple=hexagon -relax-nv-checks < %s 2>&1 | \ 4 # RUN: FileCheck %s --check-prefix=CHECK-RELAXED 5 6 # CHECK-STRICT: :12:1: error: register `R0' used with `.new' but not validly modified in the same packet 7 # CHECK-RELAXED: :12:1: error: register `R0' used with `.new' but not validly modified in the same packet 8 { 9 # invalid: r0 definition predicated on the opposite condition 10 if (p3) r0 = add(r1, r2) 11 if (!p3) memb(r20) = r0.new 12 } 13 14 # CHECK-STRICT: :20:1: error: register `R0' used with `.new' but not validly modified in the same packet 15 # CHECK-RELAXED: :20:1: error: register `R0' used with `.new' but not validly modified in the same packet 16 { 17 # invalid: new-value compare-and-jump cannot use floating point value 18 r0 = sfadd(r1, r2) 19 if (cmp.eq(r0.new, #0)) jump:nt . 20 } 21 22 # CHECK-STRICT: :29:1: error: register `R0' used with `.new' but not validly modified in the same packet 23 # CHECK-RELAXED: :29:1: error: register `R0' used with `.new' but not validly modified in the same packet 24 { 25 # invalid: definition of r0 should be unconditional (not explicitly docu- 26 # mented) 27 if (p0) r0 = r1 28 if (cmp.eq(r0.new, #0)) jump:nt . 29 } 30 31 32 # No errors from this point on with the relaxed checks. 33 # CHECK-RELAXED-NOT: error 34 35 # CHECK-STRICT: :41:1: error: register `R0' used with `.new' but not validly modified in the same packet 36 { 37 # valid (relaxed): p2 and p3 cannot be proven to violate the new-value 38 # requirements 39 if (p3) r0 = add(r1, r2) 40 if (p2) memb(r20) = r0.new 41 } 42 43 # CHECK-STRICT: :48:1: error: register `R0' used with `.new' but not validly modified in the same packet 44 { 45 # valid (relaxed): p3 could be always true 46 if (p3) r0 = add(r1, r2) 47 memb(r20) = r0.new 48 } 49 50 51 # No errors from this point on with the strict checks. 52 # CHECK-RELAXED-NOT: error 53 54 { 55 # valid: r0 defined unconditionally 56 r0 = add(r1, r2) 57 if (p2) memb(r20) = r0.new 58 } 59 60 { 61 # valid: r0 definition and use identically predicated 62 if (p3) r0 = add(r1, r2) 63 if (p3) memb(r20) = r0.new 64 } 65 66 { 67 # valid: r0 defined regardless of p0 68 if (p0) r0 = #0 69 if (!p0) r0 = #1 70 if (p0) memb(r20) = r0.new 71 } 72 73