/* APPLE LOCAL file 4382996 */
/* Verify that the result of a binary operator != 0 doesn't generate a
   redundant move instruction.  */

/* { dg-do compile { target arm*-*-darwin* } } */
/* { dg-options "-Os" } */
/* { dg-skip-if "Not valid with -mthumb" { *-*-* } { "-mthumb" } { "" } } */

int test_plus     (int a, int b) { return (a + b) != 0; }
int test_and      (int a, int b) { return (a & b) != 0; }
int test_minus    (int a, int b) { return (a - b) != 0; }
int test_mult     (int a, int b) { return (a * b) != 0; }
int test_ior      (int a, int b) { return (a | b) != 0; }
int test_xor      (int a, int b) { return (a ^ b) != 0; }
int test_ashift   (int a, int b) { return (a << b) != 0; }
int test_ashiftrt (int a, int b) { return (a >> b) != 0; }
unsigned int test_lshiftrt (unsigned int a, unsigned int b) { return (a >> b) != 0; }

/* { dg-final { scan-assembler-times "movne" 9 } } */
/* { dg-final { scan-assembler-not "moveq" } } */
