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