/* { dg-do compile } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ /* { dg-options "-march=rv64gc_xtheadfmemidx" { target { rv64 } } } */ /* { dg-options "-march=rv32gc_xtheadfmemidx" { target { rv32 } } } */ typedef union { double v; unsigned w; } my_t; double z; double foo (int i, int j) { if (j) { switch (i) { case 0: return 1; case 1: return 0; case 2: return 3.0; } } if (i == 1) { my_t u; u.v = z; u.w = 1; z = u.v; } return z; } /* { dg-final { scan-assembler-not "th.lrd\t" } } */