Analysis of Combinations

In some cases, IAS can deduce relations based on combinations of known relations:

  If p1 implies p2 and p2 implies p3, then p1 implies p3.

 If p1 implies p2 and p2 is mutex with p3, then p1 is mutex with p3.

 However, in other cases, IAS’ analysis of complex relations is limited:

In the following example, IAS can not set p2 and p3 as mutex, because the last two compare instructions are predicated and relations are created on non-predicated regular compare instructions:

cmp.eq p1, p4 = r1, r2 ;;
(p1) cmp.ge p2, p3 = r1, r3

(p4) cmp.ge p2, p3 = r1, r4

IAS does not analyze the conditions of the compare instructions. In the following example, IAS does not set p1, p2, and p3 as mutex:

cmp.eq p1 = 0, r1
cmp.eq p2 = 1, r1
cmp.eq p3 = 2, r1

IAS does not calculate CFG and does not look for relations generated by more than one path. This means is that at any entry point, IAS starts from the initial point regarding the predicate relations, where the relation between all the predicates are unknown.

In the following example IAS does not set p1 and p2 as mutex after the label.

  cmp.eq p1, p2 = r1, r2 ;;
 
L:
  (p1) mov r4 = 2

  (p2) mov r4 = 5

  cmp.eq p1, p2 = r1, r2 ;;

  br.cond.sptk L ;;

An exception to this rule is the fallthrough case, as explained in “no control flow graph” and in the following example:

  cmp.eq p1,p2 = r1, r2 ;;
 
(p1) mov r4 = 2
  (p3) br.cond.sptk L

  (p2) mov r4 = 5

In this case, there is no write-after-write dependency violation on r4. IAS does not report a violation because the mutex relation still exists.