In some cases, IAS can deduce relations based on combinations of known relations:
chain of imply relations
If p1 implies p2 and p2 implies p3, then p1 implies p3.
combination of imply and mutex relations
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:
predicated compare instructions
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
condition analysis
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
CFG analysis
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.