| 1 | // |
| 2 | // Test various implies relations |
| 3 | // |
| 4 | .text |
| 5 | // User-supplied hint |
| 6 | .pred.rel.imply p1, p2 |
| 7 | (p1) mov r4 = 2 |
| 8 | (p2) br.cond.sptk L |
| 9 | mov r4 = 7 |
| 10 | rfi |
| 11 | |
| 12 | // Symmetric to previous example |
| 13 | .pred.rel.imply p1, p2 |
| 14 | mov r4 = 2 |
| 15 | (p2) br.cond.sptk L |
| 16 | (p1) mov r4 = 7 |
| 17 | rfi |
| 18 | |
| 19 | // Verify that the implies relationship caused by the unconditional compare |
| 20 | // prevents RAW on r4. |
| 21 | (p3) cmp.eq.unc p1, p2 = r1, r2;; // p1,p2 imply p3 |
| 22 | (p1) mov r4 = 2 |
| 23 | (p3) br.cond.sptk L |
| 24 | mov r4 = 7 |
| 25 | rfi |
| 26 | |
| 27 | // An instance of cmp.rel.or should not affect an implies relation. |
| 28 | (p3) cmp.eq.unc p1, p2 = r1, r2 // p1,p2 imply p3 |
| 29 | cmp.eq.or p3, p4 = r5, r6;; // doesn't affect implies rel |
| 30 | (p1) mov r4 = 2 |
| 31 | (p3) br.cond.sptk L |
| 32 | mov r4 = 7 |
| 33 | rfi |
| 34 | |
| 35 | // An instance of cmp.rel.and only affects imply targets |
| 36 | .pred.rel.imply p1,p3 |
| 37 | cmp.ne.and p1, p2 = r5, r6 // doesn't affect imply source |
| 38 | (p1) mov r4 = 2 |
| 39 | (p3) br.cond.sptk L |
| 40 | mov r4 = 7 |
| 41 | rfi |
| 42 | |
| 43 | // FIXME -- add tests for and.orcm and or.andcm |
| 44 | L: |