sgen_qsort (void * base, size_t nel, size_t width, int (*<Tf6d>) (const void *, const void *) compar)
{
  unsigned int width.0;
  int width.1;
  int D.19768;
  sizetype D.19769;
  bitsizetype D.19770;
  bitsizetype D.19771;
  unsigned char[0:D.19769] * pivot_tmp.2;
  unsigned int width.3;
  int width.4;
  int D.19775;
  sizetype D.19776;
  bitsizetype D.19777;
  bitsizetype D.19778;
  unsigned char[0:D.19776] * swap_tmp.5;
  unsigned char[0:D.19769] * D.19780;
  unsigned char[0:D.19776] * D.19781;
  void * saved_stack.6;
  unsigned char pivot_tmp[0:D.19769] [value-expr: *pivot_tmp.2];
  unsigned char swap_tmp[0:D.19776] [value-expr: *swap_tmp.5];

  saved_stack.6 = __builtin_stack_save ();
  try
    {
      width.0 = width;
      width.1 = (int) width.0;
      D.19768 = width.1 + -1;
      D.19769 = (sizetype) D.19768;
      D.19770 = (bitsizetype) width.0;
      D.19771 = D.19770 * 8;
      D.19770 = (bitsizetype) width.0;
      D.19771 = D.19770 * 8;
      pivot_tmp.2 = __builtin_alloca_with_align (width.0, 8);
      width.3 = width;
      width.4 = (int) width.3;
      D.19775 = width.4 + -1;
      D.19776 = (sizetype) D.19775;
      D.19777 = (bitsizetype) width.3;
      D.19778 = D.19777 * 8;
      D.19777 = (bitsizetype) width.3;
      D.19778 = D.19777 * 8;
      swap_tmp.5 = __builtin_alloca_with_align (width.3, 8);
      D.19780 = pivot_tmp.2;
      D.19781 = swap_tmp.5;
      qsort_rec (base, nel, width, compar, D.19780, D.19781);
    }
  finally
    {
      __builtin_stack_restore (saved_stack.6);
    }
}


qsort_rec (void * base, size_t nel, size_t width, int (*<Tf6d>) (const void *, const void *) compar, unsigned char * pivot_tmp, unsigned char * swap_tmp)
{
  unsigned int D.19787;
  unsigned int D.19788;
  void * D.19789;
  unsigned int D.19790;
  unsigned int D.19791;
  size_t pivot_idx;

  if (nel <= 1) goto <D.19783>; else goto <D.19784>;
  <D.19783>:
  return;
  <D.19784>:
  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.19785>; else goto <D.19786>;
  <D.19785>:
  D.19787 = pivot_idx + 1;
  D.19788 = D.19787 * width;
  D.19789 = base + D.19788;
  D.19790 = nel - pivot_idx;
  D.19791 = D.19790 + 4294967295;
  qsort_rec (D.19789, D.19791, width, compar, pivot_tmp, swap_tmp);
  <D.19786>:
}


partition (void * base, size_t nel, size_t width, int (*<Tf6d>) (const void *, const void *) compar, unsigned char * pivot_tmp, unsigned char * swap_tmp)
{
  unsigned int D.19793;
  unsigned char * D.19794;
  unsigned int D.19797;
  unsigned char * D.19798;
  unsigned int D.19799;
  unsigned char * D.19800;
  unsigned int D.19801;
  const void * D.19802;
  int D.19803;
  unsigned int D.19808;
  unsigned char * D.19809;
  unsigned int D.19810;
  unsigned char * D.19811;
  unsigned int D.19812;
  unsigned int D.19815;
  unsigned char * D.19816;
  unsigned int D.19817;
  unsigned char * D.19818;
  size_t D.19819;
  size_t pivot_idx;
  size_t s;
  size_t i;

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

    __i = pivot_idx;
    __j = nel + 4294967295;
    if (__i != __j) goto <D.19795>; else goto <D.19796>;
    <D.19795>:
    D.19797 = __i * width;
    D.19798 = base + D.19797;
    memcpy (swap_tmp, D.19798, width);
    D.19797 = __i * width;
    D.19798 = base + D.19797;
    D.19799 = __j * width;
    D.19800 = base + D.19799;
    memcpy (D.19798, D.19800, width);
    D.19799 = __j * width;
    D.19800 = base + D.19799;
    memcpy (D.19800, swap_tmp, width);
    <D.19796>:
  }
  s = 0;
  i = 0;
  goto <D.19738>;
  <D.19737>:
  D.19801 = i * width;
  D.19802 = base + D.19801;
  D.19803 = compar (D.19802, pivot_tmp);
  if (D.19803 <= 0) goto <D.19804>; else goto <D.19805>;
  <D.19804>:
  {
    size_t __i;
    size_t __j;

    __i = i;
    __j = s;
    if (__i != __j) goto <D.19806>; else goto <D.19807>;
    <D.19806>:
    D.19808 = __i * width;
    D.19809 = base + D.19808;
    memcpy (swap_tmp, D.19809, width);
    D.19808 = __i * width;
    D.19809 = base + D.19808;
    D.19810 = __j * width;
    D.19811 = base + D.19810;
    memcpy (D.19809, D.19811, width);
    D.19810 = __j * width;
    D.19811 = base + D.19810;
    memcpy (D.19811, swap_tmp, width);
    <D.19807>:
  }
  s = s + 1;
  <D.19805>:
  i = i + 1;
  <D.19738>:
  D.19812 = nel + 4294967295;
  if (D.19812 > i) goto <D.19737>; else goto <D.19739>;
  <D.19739>:
  {
    size_t __i;
    size_t __j;

    __i = s;
    __j = nel + 4294967295;
    if (__i != __j) goto <D.19813>; else goto <D.19814>;
    <D.19813>:
    D.19815 = __i * width;
    D.19816 = base + D.19815;
    memcpy (swap_tmp, D.19816, width);
    D.19815 = __i * width;
    D.19816 = base + D.19815;
    D.19817 = __j * width;
    D.19818 = base + D.19817;
    memcpy (D.19816, D.19818, width);
    D.19817 = __j * width;
    D.19818 = base + D.19817;
    memcpy (D.19818, swap_tmp, width);
    <D.19814>:
  }
  D.19819 = s;
  return D.19819;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.19821;
  unsigned int D.19822;

  D.19822 = __builtin_object_size (__dest, 0);
  D.19821 = __builtin___memcpy_chk (__dest, __src, __len, D.19822);
  return D.19821;
}


