Imply Relation

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:

  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

  In the following code, the user annotation pred.rel sets imply relations. The predicate p1
  implies predicate p2.

  .pred.rel “imply“, p1, p2