The imply relation is a relation defined between a pair of predicates. It means that the state of one predicate implies the state of another register.
For example, predicate p1 implies another predicate p2. When p1 is true, p2 is always true. When p1 is false, p2 can be either true or false. See the following code:
(p1) mov r4 = 2
(p2) br.cond L
mov r4 = 7
If p1 implies p2 then there is no write-after-write dependency violation because if p1 is true then p2 is also true and the branch is taken. If p1 is false then the first instruction is not executed and the third instruction executes safely.
In the following example, if p1 implies p2 then there is no write-after-write dependency violation.
mov
r4 = 2
(p2) br.cond L
(p1) mov r4 = 7
IAS creates imply relations in following cases:
unconditional compare instructions
In the following example, p1 implies p3 and p2 implies p3 because when p3 is false
then
both p1
and p2 are set
to false. In other words, p1
or p2 can be
true only when p3 is
also true.
(p3) cmp.eq.unc p1, p2 = r1, r2
relation definition "imply"
In the following code, the user annotation
pred.rel sets imply relations. The predicate p1
implies predicate p2.
.pred.rel "imply", p1, p2