blob: e5de3c4baddcccb9aea449912c009f60ff883e48 [file] [log] [blame]
/* We have encountered an issue that a "mov_s.ne" instruction *
* with an immediate value was put in the delay slot of a *
* branch: *
* *
* bne.d @.L1 # 33 [c=20 l=4] *branch_insn *
* mov_s.ne r0,7 # 35 [c=0 l=6] *movsi_ne/2 *
* *
* This is not sanctioned and must not happen. The test below *
* is a reduced version of the source code leading to the *
* problem. */
/* { dg-do compile } */
/* { dg-skip-if "" { ! { clmcpu } } } */
/* { dg-options "-mcpu=archs -Og" } */
typedef struct
{
struct
{
int length;
} table;
} room;
struct house
{
room *r;
};
int glob;
_Bool bar();
int func(struct house *h, int i, int whatever)
{
for (;;)
{
_Bool a;
if (h && h->r[i].table.length == glob)
{
if (whatever)
{
a = bar();
if (__builtin_expect(!a, 0))
return 7;
}
break;
}
}
return 0;
}
/* no 'mov_s.ne r,limm' in a delay slot */
/* { dg-final { scan-assembler-not "bne.d\.*\n\\s\+mov_s.ne\\s+r\[0-9\]+,7" } } */