The mutually exclusive (mutex) relation indicates that not more than one predicate in a group of predicates can be true simultaneously.
In the following example, if predicates p1, p2 and p3 are mutex, there is no write-after-write dependency violation because only one of these instructions actually executes.
(p1) mov r4 = 2
(p2) mov r4 = 5
(p3) mov r4 = 7
IAS creates mutex relations in the following cases:
non-predicated regular compare instructions
In the following code, the predicates
p1 and p2 are mutex only
when the qualifying
predicate (qp)
is p0.
(qp) cmp.eq p1, p2 = r1, r2
Regular compare instructions include
all the instructions that write to a pair of predicates:
cmp, fcmp, tbit, and tnat. Parallel compare
and compare unconditional instructions do
not belong in this category.
unconditional compare instructions
In the following code, the predicates
p1 and p2 are mutex (regardless
of the qualifying
predicate value).
(p3) cmp.eq.unc p1, p2 = r1, r2
relation definition “mutex“
In the following code, the user annotation
pred.rel sets mutex relations between predicates
p1, p2, and p3:
.pred.rel “mutex“, p1, p2, p3