__attribute__((visibility ("hidden")))
sgen_qsort (void * base, size_t nel, size_t width, int (*<T617>) (const void *, const void *) compar)
{
  long unsigned int width.0;
  long int width.1;
  long int D.17710;
  sizetype D.17711;
  bitsizetype D.17712;
  bitsizetype D.17713;
  unsigned char[0:D.17711] * pivot_tmp.2;
  long unsigned int width.3;
  long int width.4;
  long int D.17717;
  sizetype D.17718;
  bitsizetype D.17719;
  bitsizetype D.17720;
  unsigned char[0:D.17718] * swap_tmp.5;
  unsigned char[0:D.17711] * pivot_tmp.6;
  unsigned char[0:D.17718] * swap_tmp.7;
  void * saved_stack.8;
  unsigned char pivot_tmp[0:D.17711] [value-expr: *pivot_tmp.2];
  unsigned char swap_tmp[0:D.17718] [value-expr: *swap_tmp.5];

  saved_stack.8 = __builtin_stack_save ();
  try
    {
      width.0 = width;
      width.1 = (long int) width.0;
      D.17710 = width.1 + -1;
      D.17711 = (sizetype) D.17710;
      D.17712 = (bitsizetype) width.0;
      D.17713 = D.17712 * 8;
      D.17712 = (bitsizetype) width.0;
      D.17713 = D.17712 * 8;
      pivot_tmp.2 = __builtin_alloca_with_align (width.0, 8);
      width.3 = width;
      width.4 = (long int) width.3;
      D.17717 = width.4 + -1;
      D.17718 = (sizetype) D.17717;
      D.17719 = (bitsizetype) width.3;
      D.17720 = D.17719 * 8;
      D.17719 = (bitsizetype) width.3;
      D.17720 = D.17719 * 8;
      swap_tmp.5 = __builtin_alloca_with_align (width.3, 8);
      pivot_tmp.6 = pivot_tmp.2;
      swap_tmp.7 = swap_tmp.5;
      qsort_rec (base, nel, width, compar, pivot_tmp.6, swap_tmp.7);
    }
  finally
    {
      __builtin_stack_restore (saved_stack.8);
    }
}


qsort_rec (void * base, size_t nel, size_t width, int (*<T617>) (const void *, const void *) compar, unsigned char * pivot_tmp, unsigned char * swap_tmp)
{
  long unsigned int D.17729;
  long unsigned int D.17730;
  void * D.17731;
  long unsigned int D.17732;
  long unsigned int D.17733;
  size_t pivot_idx;

  if (nel <= 1) goto <D.17725>; else goto <D.17726>;
  <D.17725>:
  return;
  <D.17726>:
  pivot_idx = partition (base, nel, width, compar, pivot_tmp, swap_tmp);
  qsort_rec (base, pivot_idx, width, compar, pivot_tmp, swap_tmp);
  if (pivot_idx < nel) goto <D.17727>; else goto <D.17728>;
  <D.17727>:
  D.17729 = pivot_idx + 1;
  D.17730 = D.17729 * width;
  D.17731 = base + D.17730;
  D.17732 = nel - pivot_idx;
  D.17733 = D.17732 + 18446744073709551615;
  qsort_rec (D.17731, D.17733, width, compar, pivot_tmp, swap_tmp);
  <D.17728>:
}


partition (void * base, size_t nel, size_t width, int (*<T617>) (const void *, const void *) compar, unsigned char * pivot_tmp, unsigned char * swap_tmp)
{
  long unsigned int D.17735;
  const void * D.17736;
  long unsigned int D.17739;
  const void * D.17740;
  void * D.17741;
  long unsigned int D.17742;
  const void * D.17743;
  void * D.17744;
  long unsigned int D.17745;
  const void * D.17746;
  int D.17747;
  long unsigned int D.17752;
  const void * D.17753;
  void * D.17754;
  long unsigned int D.17755;
  const void * D.17756;
  void * D.17757;
  long unsigned int D.17758;
  long unsigned int D.17761;
  const void * D.17762;
  void * D.17763;
  long unsigned int D.17764;
  const void * D.17765;
  void * D.17766;
  size_t D.17767;
  size_t pivot_idx;
  size_t s;
  size_t i;

  pivot_idx = nel >> 1;
  D.17735 = pivot_idx * width;
  D.17736 = base + D.17735;
  memcpy (pivot_tmp, D.17736, width);
  {
    size_t __i;
    size_t __j;

    __i = pivot_idx;
    __j = nel + 18446744073709551615;
    if (__i != __j) goto <D.17737>; else goto <D.17738>;
    <D.17737>:
    D.17739 = __i * width;
    D.17740 = base + D.17739;
    memcpy (swap_tmp, D.17740, width);
    D.17739 = __i * width;
    D.17741 = base + D.17739;
    D.17742 = __j * width;
    D.17743 = base + D.17742;
    memcpy (D.17741, D.17743, width);
    D.17742 = __j * width;
    D.17744 = base + D.17742;
    memcpy (D.17744, swap_tmp, width);
    <D.17738>:
  }
  s = 0;
  i = 0;
  goto <D.17682>;
  <D.17681>:
  D.17745 = i * width;
  D.17746 = base + D.17745;
  D.17747 = compar (D.17746, pivot_tmp);
  if (D.17747 <= 0) goto <D.17748>; else goto <D.17749>;
  <D.17748>:
  {
    size_t __i;
    size_t __j;

    __i = i;
    __j = s;
    if (__i != __j) goto <D.17750>; else goto <D.17751>;
    <D.17750>:
    D.17752 = __i * width;
    D.17753 = base + D.17752;
    memcpy (swap_tmp, D.17753, width);
    D.17752 = __i * width;
    D.17754 = base + D.17752;
    D.17755 = __j * width;
    D.17756 = base + D.17755;
    memcpy (D.17754, D.17756, width);
    D.17755 = __j * width;
    D.17757 = base + D.17755;
    memcpy (D.17757, swap_tmp, width);
    <D.17751>:
  }
  s = s + 1;
  <D.17749>:
  i = i + 1;
  <D.17682>:
  D.17758 = nel + 18446744073709551615;
  if (D.17758 > i) goto <D.17681>; else goto <D.17683>;
  <D.17683>:
  {
    size_t __i;
    size_t __j;

    __i = s;
    __j = nel + 18446744073709551615;
    if (__i != __j) goto <D.17759>; else goto <D.17760>;
    <D.17759>:
    D.17761 = __i * width;
    D.17762 = base + D.17761;
    memcpy (swap_tmp, D.17762, width);
    D.17761 = __i * width;
    D.17763 = base + D.17761;
    D.17764 = __j * width;
    D.17765 = base + D.17764;
    memcpy (D.17763, D.17765, width);
    D.17764 = __j * width;
    D.17766 = base + D.17764;
    memcpy (D.17766, swap_tmp, width);
    <D.17760>:
  }
  D.17767 = s;
  return D.17767;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.17769;
  long unsigned int D.17770;

  D.17770 = __builtin_object_size (__dest, 0);
  D.17769 = __builtin___memcpy_chk (__dest, __src, __len, D.17770);
  return D.17769;
}


