| /* { dg-do compile } */ |
| /* { dg-options "-Os -march=r2 -mcdx" } */ |
| |
| /* Check generation of R2 CDX br.n, beqz.n, bnez.n instructions. */ |
| |
| int f (int a, int b, int c) |
| { |
| if (a == 0) |
| return b; |
| else |
| return c; |
| } |
| |
| int g (int a, int b, int c) |
| { |
| if (a != 0) |
| return b; |
| else |
| return c; |
| } |
| |
| extern int i (int); |
| extern int j (int); |
| extern int k (int); |
| |
| int h (int a, int b) |
| { |
| int x; |
| |
| /* As well as the conditional branch for the "if", there has to be |
| an unconditional branch from one branch of the "if" to |
| the return statement. We compile this testcase with -Os to |
| avoid insertion of a duplicate epilogue in place of the branch. */ |
| if (a == b) |
| x = i (37); |
| else |
| x = j (42); |
| return x + a + k (x); |
| } |
| |
| /* { dg-final { scan-assembler "\tbeqz\\.n\t.*" } } */ |
| /* { dg-final { scan-assembler "\tbnez\\.n\t.*" } } */ |
| /* { dg-final { scan-assembler "\tbeq\t|\tbne\t" } } */ |
| /* { dg-final { scan-assembler "\tbr\\.n\t.*" } } */ |