/* Test LOOP generation for very short loops. */

/* { dg-do run } */
/* { dg-options "-O1 -mloop" } */

/* -O1 in the options is significant.  Without it do-loop will not be
   run.  */

extern void abort (void);

volatile unsigned int int_12345 = 12345;
volatile unsigned int int_0 = 0;
volatile unsigned int int_1 = 1;

unsigned int
test_loop_sum (unsigned int n)
{
	unsigned i;
	volatile unsigned int s = 0;
	for (i = 0; i < n; i++) {
		s++;
	}
	return s;
}

unsigned int
test_loop_shift20 (unsigned int n)
{
	unsigned i;
	for (i = 0; i < 10; i++) {
		n <<= 2;
	}
	return n;
}

int
main (int argc, char** argv)
{
  if (test_loop_sum (int_0) != 0)
    abort();
  if (test_loop_sum (int_1) != 1)
    abort();
  if (test_loop_sum (int_12345) != 12345)
    abort();

  if (test_loop_shift20 (int_0) != 0)
    abort();
  if (test_loop_shift20 (int_1) != (1u << 20))
    abort();

  return 0;
}