#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
long cpuid(char *, int, int, int /*<<< orphan*/, int /*<<< orphan*/);
scalar_t__ strcmp(char *, char *);
char *__gmpn_cpu(int *vector) {
  char vendor_string[13];
  char features[12];
  long fms;
  int family, model, stepping, feat;
  char *modelstr = 0;
  cpuid(vendor_string, 0, 1, 0, 0);
  vendor_string[12] = 0;
  fms = cpuid(features, 1, 1, 0, 0);
  family = ((fms >> 8) & 15) + ((fms >> 20) & 0xff);
  model = ((fms >> 4) & 15) + ((fms >> 12) & 0xf0);
  stepping = fms & 15;
  modelstr = "i486";
  if (strcmp(vendor_string, "GenuineIntel") == 0) {
    switch (family) {
    case 5:
      if (model <= 2)
        modelstr = "pentium";
      if (model >= 4)
        modelstr = "pentiummmx";
      break;
    case 6:
      if (model == 1) {
        modelstr = "pentiumpro";
        break;
      }
      if (model <= 6) {
        modelstr = "pentium2";
        break;
      }
      if (model <= 13) {
        modelstr = "pentium3";
        break;
      }
      if (model == 14) {
        modelstr = "core";
        break;
      }
      if (model == 16) {
        modelstr = "core";
        break;
      }
      if (model == 15) {
        modelstr = "core2";
        break;
      }
      if (model == 17) {
        modelstr = "penryn";
        break;
      }
      if (model == 22) {
        modelstr = "core2";
        break;
      }
      if (model == 23) {
        modelstr = "penryn";
        break;
      }
      if (model == 25) {
        modelstr = "westmere";
        break;
      }
      if (model == 26) {
        modelstr = "nehalem";
        break;
      }
      if (model == 28) {
        modelstr = "atom";
        break;
      }
      if (model == 29) {
        modelstr = "penryn";
        break;
      }
      if (model == 30) {
        modelstr = "nehalem";
        break;
      }
      if (model == 31) {
        modelstr = "nehalem";
        break;
      }
      if (model == 37) {
        modelstr = "westmere";
        break;
      }
      if (model == 38) {
        modelstr = "atom";
        break;
      }
      if (model == 39) {
        modelstr = "atom";
        break;
      }
      if (model == 42) {
        feat = ((int *)features)[2];
        if (feat & 0x10000000) {
          modelstr = "sandybridge";
          break;
        } else {
          modelstr = "westmere";
          break;
        }
      }
      if (model == 43) {
        modelstr = "sandybridge";
        break;
      }
      if (model == 44) {
        modelstr = "westmere";
        break;
      }
      if (model == 45) {
        modelstr = "sandybridge";
        break;
      }
      if (model == 46) {
        modelstr = "nehalem";
        break;
      }
      if (model == 47) {
        modelstr = "westmere";
        break;
      }
      if (model == 54) {
        modelstr = "atom";
        break;
      }
      if (model == 55) {
        modelstr = "atom";
        break;
      }
      if (model == 58) {
        modelstr = "ivybridge";
        break;
      }
      if (model == 60) {
        modelstr = "haswell";
        break;
      }
      if (model == 62) {
        modelstr = "ivybridge";
        break;
      }
      break;
    case 15:
      if (model <= 6) {
        modelstr = "pentium4";
        break;
      }
      feat = ((int *)features)[2];
      if (feat & 1) {
        modelstr = "prescott";
        break;
      }
      break;
    }
  } else if (strcmp(vendor_string, "AuthenticAMD") == 0) {
    switch (family) {
    case 5:
      if (model <= 3) {
        modelstr = "k5";
        break;
      }
      if (model <= 7) {
        modelstr = "k6";
        break;
      }
      if (model <= 8) {
        modelstr = "k62";
        break;
      }
      if (model <= 9) {
        modelstr = "k63";
        break;
      }
      break;
    case 6:
      modelstr = "k7";
      break;
    case 15:
      modelstr = "k8";
      break;
    case 16:
      if (model == 2) {
        modelstr = "k10";
        break;
      }
      if (model == 4) {
        modelstr = "k102";
        break;
      }
      if (model == 5) {
        modelstr = "k102";
        break;
      }
      if (model == 6) {
        modelstr = "k102";
        break;
      }
      if (model == 8) {
        modelstr = "k102";
        break;
      }
      if (model == 9) {
        modelstr = "k102";
        break;
      }
      if (model == 10) {
        modelstr = "k102";
        break;
      }
      break;
    case 17:
      modelstr = "k8";
      break;
    case 18:
      modelstr = "k103";
      break;
    case 20:
      modelstr = "bobcat";
      break;
    case 21:
      if (model == 1) {
        modelstr = "bulldozer";
        break;
      }
      if (model == 2) {
        modelstr = "piledriver";
        break;
      }
      if (model == 3) {
        modelstr = "piledriver";
        break;
      }
      if (model == 16) {
        modelstr = "piledriver";
        break;
      }
      if (model == 18) {
        modelstr = "piledriver";
        break;
      }
      if (model == 19) {
        modelstr = "piledriver";
        break;
      }
      break;
    }
  } else if (strcmp(vendor_string, "CentaurHauls") == 0) {
    switch (family) {
    case 6:
      if (model == 15) {
        modelstr = "nano";
        break;
      }
      if (model < 9) {
        modelstr = "viac3";
        break;
      }
      modelstr = "viac32";
      break;
    }
  }
  return modelstr;
}


x86 assembly (clang, -O0):
<__gmpn_cpu>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
movq   $0x0,-0x48(%rbp)
lea    -0x15(%rbp),%rdi
xor    %r8d,%r8d
mov    $0x1,%edx
mov    %r8d,%esi
mov    %r8d,%ecx
call   1040 <cpuid@plt>
movb   $0x0,-0x9(%rbp)
lea    -0x21(%rbp),%rdi
mov    $0x1,%edx
xor    %r8d,%r8d
mov    %edx,%esi
mov    %r8d,%ecx
call   1040 <cpuid@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
sar    $0x8,%rax
and    $0xf,%rax
mov    -0x30(%rbp),%rcx
sar    $0x14,%rcx
and    $0xff,%rcx
add    %rcx,%rax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%rax
sar    $0x4,%rax
and    $0xf,%rax
mov    -0x30(%rbp),%rcx
sar    $0xc,%rcx
and    $0xf0,%rcx
add    %rcx,%rax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
and    $0xf,%rax
mov    %eax,-0x3c(%rbp)
lea    0xe87(%rip),%rax
mov    %rax,-0x48(%rbp)
lea    -0x15(%rbp),%rdi
lea    0xe7d(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    15a7 <__gmpn_cpu+0x487>
mov    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
sub    $0x5,%eax
je     1211 <__gmpn_cpu+0xf1>
jmp    11ef <__gmpn_cpu+0xcf>
mov    -0x4c(%rbp),%eax
sub    $0x6,%eax
je     1240 <__gmpn_cpu+0x120>
jmp    1200 <__gmpn_cpu+0xe0>
mov    -0x4c(%rbp),%eax
sub    $0xf,%eax
je     155e <__gmpn_cpu+0x43e>
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2,-0x38(%rbp)
jg     1226 <__gmpn_cpu+0x106>
lea    0xe34(%rip),%rax
mov    %rax,-0x48(%rbp)
cmpl   $0x4,-0x38(%rbp)
jl     123b <__gmpn_cpu+0x11b>
lea    0xe27(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1,-0x38(%rbp)
jne    125a <__gmpn_cpu+0x13a>
lea    0xe18(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x6,-0x38(%rbp)
jg     1274 <__gmpn_cpu+0x154>
lea    0xe09(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0xd,-0x38(%rbp)
jg     128e <__gmpn_cpu+0x16e>
lea    0xdf8(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0xe,-0x38(%rbp)
jne    12a8 <__gmpn_cpu+0x188>
lea    0xde7(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x10,-0x38(%rbp)
jne    12c2 <__gmpn_cpu+0x1a2>
lea    0xdcd(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0xf,-0x38(%rbp)
jne    12dc <__gmpn_cpu+0x1bc>
lea    0xdb8(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x11,-0x38(%rbp)
jne    12f6 <__gmpn_cpu+0x1d6>
lea    0xda4(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x16,-0x38(%rbp)
jne    1310 <__gmpn_cpu+0x1f0>
lea    0xd84(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x17,-0x38(%rbp)
jne    132a <__gmpn_cpu+0x20a>
lea    0xd70(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x19,-0x38(%rbp)
jne    1344 <__gmpn_cpu+0x224>
lea    0xd5d(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1a,-0x38(%rbp)
jne    135e <__gmpn_cpu+0x23e>
lea    0xd4c(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1c,-0x38(%rbp)
jne    1378 <__gmpn_cpu+0x258>
lea    0xd3a(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1d,-0x38(%rbp)
jne    1392 <__gmpn_cpu+0x272>
lea    0xd08(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1e,-0x38(%rbp)
jne    13ac <__gmpn_cpu+0x28c>
lea    0xcfe(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x1f,-0x38(%rbp)
jne    13c6 <__gmpn_cpu+0x2a6>
lea    0xce4(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x25,-0x38(%rbp)
jne    13e0 <__gmpn_cpu+0x2c0>
lea    0xcc1(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x26,-0x38(%rbp)
jne    13fa <__gmpn_cpu+0x2da>
lea    0xcb8(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x27,-0x38(%rbp)
jne    1414 <__gmpn_cpu+0x2f4>
lea    0xc9e(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2a,-0x38(%rbp)
jne    1455 <__gmpn_cpu+0x335>
mov    -0x19(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
and    $0x10000000,%eax
cmp    $0x0,%eax
je     1445 <__gmpn_cpu+0x325>
lea    0xc72(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
lea    0xc4c(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2b,-0x38(%rbp)
jne    146f <__gmpn_cpu+0x34f>
lea    0xc48(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2c,-0x38(%rbp)
jne    1489 <__gmpn_cpu+0x369>
lea    0xc18(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2d,-0x38(%rbp)
jne    14a3 <__gmpn_cpu+0x383>
lea    0xc14(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2e,-0x38(%rbp)
jne    14bd <__gmpn_cpu+0x39d>
lea    0xbed(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x2f,-0x38(%rbp)
jne    14d7 <__gmpn_cpu+0x3b7>
lea    0xbca(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x36,-0x38(%rbp)
jne    14f1 <__gmpn_cpu+0x3d1>
lea    0xbc1(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x37,-0x38(%rbp)
jne    150b <__gmpn_cpu+0x3eb>
lea    0xba7(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x3a,-0x38(%rbp)
jne    1525 <__gmpn_cpu+0x405>
lea    0xb9e(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x3c,-0x38(%rbp)
jne    153f <__gmpn_cpu+0x41f>
lea    0xb8e(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x3e,-0x38(%rbp)
jne    1559 <__gmpn_cpu+0x439>
lea    0xb6a(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
jmp    15a2 <__gmpn_cpu+0x482>
cmpl   $0x6,-0x38(%rbp)
jg     1578 <__gmpn_cpu+0x458>
lea    0xb5d(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
mov    -0x19(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     159d <__gmpn_cpu+0x47d>
lea    0xb41(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    15a2 <__gmpn_cpu+0x482>
jmp    15a2 <__gmpn_cpu+0x482>
jmp    1881 <__gmpn_cpu+0x761>
lea    -0x15(%rbp),%rdi
lea    0xb2c(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    1808 <__gmpn_cpu+0x6e8>
mov    -0x34(%rbp),%eax
add    $0xfffffffb,%eax
mov    %eax,%ecx
mov    %rcx,-0x58(%rbp)
sub    $0x10,%eax
ja     1803 <__gmpn_cpu+0x6e3>
mov    -0x58(%rbp),%rax
lea    0xa1f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0x3,-0x38(%rbp)
jg     1604 <__gmpn_cpu+0x4e4>
lea    0xaf0(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x7,-0x38(%rbp)
jg     161e <__gmpn_cpu+0x4fe>
lea    0xad9(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x8,-0x38(%rbp)
jg     1638 <__gmpn_cpu+0x518>
lea    0xac2(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x9,-0x38(%rbp)
jg     1652 <__gmpn_cpu+0x532>
lea    0xaac(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
jmp    1803 <__gmpn_cpu+0x6e3>
lea    0xa9b(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
lea    0xa8e(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x2,-0x38(%rbp)
jne    1691 <__gmpn_cpu+0x571>
lea    0xa77(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x4,-0x38(%rbp)
jne    16ab <__gmpn_cpu+0x58b>
lea    0xa61(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x5,-0x38(%rbp)
jne    16c5 <__gmpn_cpu+0x5a5>
lea    0xa47(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x6,-0x38(%rbp)
jne    16df <__gmpn_cpu+0x5bf>
lea    0xa2d(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x8,-0x38(%rbp)
jne    16f9 <__gmpn_cpu+0x5d9>
lea    0xa13(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x9,-0x38(%rbp)
jne    1713 <__gmpn_cpu+0x5f3>
lea    0x9f9(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0xa,-0x38(%rbp)
jne    172d <__gmpn_cpu+0x60d>
lea    0x9df(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
jmp    1803 <__gmpn_cpu+0x6e3>
lea    0x9c3(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
lea    0x9bf(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
lea    0x9b4(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x1,-0x38(%rbp)
jne    177c <__gmpn_cpu+0x65c>
lea    0x9a1(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x2,-0x38(%rbp)
jne    1796 <__gmpn_cpu+0x676>
lea    0x991(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x3,-0x38(%rbp)
jne    17b0 <__gmpn_cpu+0x690>
lea    0x977(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x10,-0x38(%rbp)
jne    17ca <__gmpn_cpu+0x6aa>
lea    0x95d(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x12,-0x38(%rbp)
jne    17e4 <__gmpn_cpu+0x6c4>
lea    0x943(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
cmpl   $0x13,-0x38(%rbp)
jne    17fe <__gmpn_cpu+0x6de>
lea    0x929(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1803 <__gmpn_cpu+0x6e3>
jmp    1803 <__gmpn_cpu+0x6e3>
jmp    187c <__gmpn_cpu+0x75c>
lea    -0x15(%rbp),%rdi
lea    0x916(%rip),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%rax
jne    1877 <__gmpn_cpu+0x757>
mov    -0x34(%rbp),%eax
sub    $0x6,%eax
jne    1872 <__gmpn_cpu+0x752>
jmp    1833 <__gmpn_cpu+0x713>
cmpl   $0xf,-0x38(%rbp)
jne    184d <__gmpn_cpu+0x72d>
lea    0x8f2(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1872 <__gmpn_cpu+0x752>
cmpl   $0x9,-0x38(%rbp)
jge    1867 <__gmpn_cpu+0x747>
lea    0x8dd(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1872 <__gmpn_cpu+0x752>
lea    0x8d3(%rip),%rax
mov    %rax,-0x48(%rbp)
jmp    1877 <__gmpn_cpu+0x757>
jmp    187c <__gmpn_cpu+0x75c>
jmp    1881 <__gmpn_cpu+0x761>
mov    -0x48(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<__gmpn_cpu>:
push   %r15
push   %r14
push   %rbx
sub    $0x20,%rsp
lea    0x7(%rsp),%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
xor    %r8d,%r8d
call   1040 <cpuid@plt>
movb   $0x0,0x13(%rsp)
lea    0x14(%rsp),%rdi
mov    $0x1,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
xor    %r8d,%r8d
call   1040 <cpuid@plt>
mov    %rax,%rbx
shr    $0x8,%eax
and    $0xf,%eax
mov    %ebx,%ecx
shr    $0x14,%ecx
movzbl %cl,%r15d
add    %eax,%r15d
mov    %ebx,%eax
shr    $0x4,%eax
and    $0xf,%eax
shr    $0xc,%rbx
and    $0xf0,%ebx
or     %rax,%rbx
lea    0xfec(%rip),%rsi
mov    %r14,%rdi
call   1030 <strcmp@plt>
test   %rax,%rax
je     11fb <__gmpn_cpu+0xdb>
lea    0x106d(%rip),%rsi
lea    0x7(%rsp),%rdi
call   1030 <strcmp@plt>
test   %rax,%rax
je     1248 <__gmpn_cpu+0x128>
lea    0x109e(%rip),%rsi
lea    0x7(%rsp),%rdi
call   1030 <strcmp@plt>
mov    %rax,%rcx
lea    0xfa5(%rip),%rax
test   %rcx,%rcx
jne    13b7 <__gmpn_cpu+0x297>
cmp    $0x6,%r15d
jne    13b7 <__gmpn_cpu+0x297>
cmp    $0xf,%ebx
jne    127c <__gmpn_cpu+0x15c>
lea    0x1074(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0xf,%r15d
je     1296 <__gmpn_cpu+0x176>
lea    0xf6c(%rip),%rcx
cmp    $0x6,%r15d
je     12a7 <__gmpn_cpu+0x187>
mov    %rcx,%rax
cmp    $0x5,%r15d
jne    13b7 <__gmpn_cpu+0x297>
cmp    $0x3,%ebx
lea    0xf5d(%rip),%rax
lea    0xf44(%rip),%rcx
cmovb  %rax,%rcx
lea    0xf53(%rip),%rax
cmovbe %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xf29(%rip),%rcx
add    $0xfffffffb,%r15d
cmp    $0x10,%r15d
ja     13b4 <__gmpn_cpu+0x294>
lea    0xd9c(%rip),%rax
movslq (%rax,%r15,4),%rdx
add    %rax,%rdx
mov    %rcx,%rax
jmp    *%rdx
lea    0xfb9(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x9,%ebx
lea    0xfe9(%rip),%rcx
lea    0xfe8(%rip),%rax
cmovb  %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x7,%ebx
jae    12b8 <__gmpn_cpu+0x198>
lea    0xf5e(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x1,%ebx
jne    12d4 <__gmpn_cpu+0x1b4>
lea    0xeea(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
testb  $0x1,0x1c(%rsp)
lea    0xeb4(%rip),%rcx
lea    0xf3e(%rip),%rax
cmove  %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x7,%ebx
jae    136d <__gmpn_cpu+0x24d>
lea    0xec4(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x4,%ebx
jae    137b <__gmpn_cpu+0x25b>
lea    0xf26(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xf28(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
add    $0xfe,%bl
mov    %rcx,%rax
cmp    $0x9,%bl
jae    13b7 <__gmpn_cpu+0x297>
movsbq %bl,%rax
lea    0xe30(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xf05(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xf01(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
add    $0xff,%bl
cmp    $0x12,%bl
ja     13b4 <__gmpn_cpu+0x294>
lea    0xef7(%rip),%rax
movzbl %bl,%edx
lea    0xce9(%rip),%rsi
movslq (%rsi,%rdx,4),%rdx
add    %rsi,%rdx
jmp    *%rdx
lea    0xee7(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0xe,%ebx
jae    1389 <__gmpn_cpu+0x269>
lea    0xe38(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0x8,%ebx
jae    13c1 <__gmpn_cpu+0x2a1>
lea    0xe9b(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
add    $0xf2,%bl
cmp    $0x30,%bl
ja     13b4 <__gmpn_cpu+0x294>
lea    0xe22(%rip),%rax
movzbl %bl,%edx
lea    0xcee(%rip),%rsi
movslq (%rsi,%rdx,4),%rdx
add    %rsi,%rdx
jmp    *%rdx
lea    0xe2b(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
mov    %rcx,%rax
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
jne    13cc <__gmpn_cpu+0x2ac>
lea    0xe5b(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
cmp    $0xa,%ebx
lea    0xe53(%rip),%rcx
lea    0xd9b(%rip),%rax
cmovb  %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xde2(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xde2(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xdc9(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xdba(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xdd4(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xdd7(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>
testb  $0x10,0x1f(%rsp)
lea    0xda7(%rip),%rcx
lea    0xdb6(%rip),%rax
cmove  %rcx,%rax
jmp    13b7 <__gmpn_cpu+0x297>
lea    0xdbf(%rip),%rax
jmp    13b7 <__gmpn_cpu+0x297>

LLVM IR (-O0):
@.str = [5 x i8] c"i486\00"
@.str.1 = [13 x i8] c"GenuineIntel\00"
@.str.2 = [8 x i8] c"pentium\00"
@.str.3 = [11 x i8] c"pentiummmx\00"
@.str.4 = [11 x i8] c"pentiumpro\00"
@.str.5 = [9 x i8] c"pentium2\00"
@.str.6 = [9 x i8] c"pentium3\00"
@.str.7 = [5 x i8] c"core\00"
@.str.8 = [6 x i8] c"core2\00"
@.str.9 = [7 x i8] c"penryn\00"
@.str.10 = [9 x i8] c"westmere\00"
@.str.11 = [8 x i8] c"nehalem\00"
@.str.12 = [5 x i8] c"atom\00"
@.str.13 = [12 x i8] c"sandybridge\00"
@.str.14 = [10 x i8] c"ivybridge\00"
@.str.15 = [8 x i8] c"haswell\00"
@.str.16 = [9 x i8] c"pentium4\00"
@.str.17 = [9 x i8] c"prescott\00"
@.str.18 = [13 x i8] c"AuthenticAMD\00"
@.str.19 = [3 x i8] c"k5\00"
@.str.20 = [3 x i8] c"k6\00"
@.str.21 = [4 x i8] c"k62\00"
@.str.22 = [4 x i8] c"k63\00"
@.str.23 = [3 x i8] c"k7\00"
@.str.24 = [3 x i8] c"k8\00"
@.str.25 = [4 x i8] c"k10\00"
@.str.26 = [5 x i8] c"k102\00"
@.str.27 = [5 x i8] c"k103\00"
@.str.28 = [7 x i8] c"bobcat\00"
@.str.29 = [10 x i8] c"bulldozer\00"
@.str.30 = [11 x i8] c"piledriver\00"
@.str.31 = [13 x i8] c"CentaurHauls\00"
@.str.32 = [5 x i8] c"nano\00"
@.str.33 = [6 x i8] c"viac3\00"
@.str.34 = [7 x i8] c"viac32\00"
define i8* @__gmpn_cpu(i32* %0) {
%2 = alloca i32*
%3 = alloca [13 x i8]
%4 = alloca [12 x i8]
%5 = alloca i64
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
store i32* %0, i32** %2
store i8* null, i8** %10
%11 = getelementptr inbounds [13 x i8], [13 x i8]* %3, i64 0, i64 0
%12 = call i64 @cpuid(i8* %11, i32 0, i32 1, i32 0, i32 0)
%13 = getelementptr inbounds [13 x i8], [13 x i8]* %3, i64 0, i64 12
store i8 0, i8* %13
%14 = getelementptr inbounds [12 x i8], [12 x i8]* %4, i64 0, i64 0
%15 = call i64 @cpuid(i8* %14, i32 1, i32 1, i32 0, i32 0)
store i64 %15, i64* %5
%16 = load i64, i64* %5
%17 = ashr i64 %16, 8
%18 = and i64 %17, 15
%19 = load i64, i64* %5
%20 = ashr i64 %19, 20
%21 = and i64 %20, 255
%22 = add nsw i64 %18, %21
%23 = trunc i64 %22 to i32
store i32 %23, i32* %6
%24 = load i64, i64* %5
%25 = ashr i64 %24, 4
%26 = and i64 %25, 15
%27 = load i64, i64* %5
%28 = ashr i64 %27, 12
%29 = and i64 %28, 240
%30 = add nsw i64 %26, %29
%31 = trunc i64 %30 to i32
store i32 %31, i32* %7
%32 = load i64, i64* %5
%33 = and i64 %32, 15
%34 = trunc i64 %33 to i32
store i32 %34, i32* %8
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8** %10
%35 = getelementptr inbounds [13 x i8], [13 x i8]* %3, i64 0, i64 0
%36 = call i64 @strcmp(i8* %35, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %190
38: ; preds = %1
%39 = load i32, i32* %6
switch i32 %39, label %189 [
i32 5, label %40
i32 6, label %49
i32 15, label %175
]
40: ; preds = %38
%41 = load i32, i32* %7
%42 = icmp sle i32 %41, 2
br i1 %42, label %43, label %44
43: ; preds = %40
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8** %10
br label %44
44: ; preds = %43, %40
%45 = load i32, i32* %7
%46 = icmp sge i32 %45, 4
br i1 %46, label %47, label %48
47: ; preds = %44
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), i8** %10
br label %48
48: ; preds = %47, %44
br label %189
49: ; preds = %38
%50 = load i32, i32* %7
%51 = icmp eq i32 %50, 1
br i1 %51, label %52, label %53
52: ; preds = %49
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0), i8** %10
br label %189
53: ; preds = %49
%54 = load i32, i32* %7
%55 = icmp sle i32 %54, 6
br i1 %55, label %56, label %57
56: ; preds = %53
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), i8** %10
br label %189
57: ; preds = %53
%58 = load i32, i32* %7
%59 = icmp sle i32 %58, 13
br i1 %59, label %60, label %61
60: ; preds = %57
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.6, i64 0, i64 0), i8** %10
br label %189
61: ; preds = %57
%62 = load i32, i32* %7
%63 = icmp eq i32 %62, 14
br i1 %63, label %64, label %65
64: ; preds = %61
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8** %10
br label %189
65: ; preds = %61
%66 = load i32, i32* %7
%67 = icmp eq i32 %66, 16
br i1 %67, label %68, label %69
68: ; preds = %65
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8** %10
br label %189
69: ; preds = %65
%70 = load i32, i32* %7
%71 = icmp eq i32 %70, 15
br i1 %71, label %72, label %73
72: ; preds = %69
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), i8** %10
br label %189
73: ; preds = %69
%74 = load i32, i32* %7
%75 = icmp eq i32 %74, 17
br i1 %75, label %76, label %77
76: ; preds = %73
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i8** %10
br label %189
77: ; preds = %73
%78 = load i32, i32* %7
%79 = icmp eq i32 %78, 22
br i1 %79, label %80, label %81
80: ; preds = %77
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), i8** %10
br label %189
81: ; preds = %77
%82 = load i32, i32* %7
%83 = icmp eq i32 %82, 23
br i1 %83, label %84, label %85
84: ; preds = %81
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i8** %10
br label %189
85: ; preds = %81
%86 = load i32, i32* %7
%87 = icmp eq i32 %86, 25
br i1 %87, label %88, label %89
88: ; preds = %85
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8** %10
br label %189
89: ; preds = %85
%90 = load i32, i32* %7
%91 = icmp eq i32 %90, 26
br i1 %91, label %92, label %93
92: ; preds = %89
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8** %10
br label %189
93: ; preds = %89
%94 = load i32, i32* %7
%95 = icmp eq i32 %94, 28
br i1 %95, label %96, label %97
96: ; preds = %93
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), i8** %10
br label %189
97: ; preds = %93
%98 = load i32, i32* %7
%99 = icmp eq i32 %98, 29
br i1 %99, label %100, label %101
100: ; preds = %97
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i8** %10
br label %189
101: ; preds = %97
%102 = load i32, i32* %7
%103 = icmp eq i32 %102, 30
br i1 %103, label %104, label %105
104: ; preds = %101
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8** %10
br label %189
105: ; preds = %101
%106 = load i32, i32* %7
%107 = icmp eq i32 %106, 31
br i1 %107, label %108, label %109
108: ; preds = %105
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8** %10
br label %189
109: ; preds = %105
%110 = load i32, i32* %7
%111 = icmp eq i32 %110, 37
br i1 %111, label %112, label %113
112: ; preds = %109
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8** %10
br label %189
113: ; preds = %109
%114 = load i32, i32* %7
%115 = icmp eq i32 %114, 38
br i1 %115, label %116, label %117
116: ; preds = %113
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), i8** %10
br label %189
117: ; preds = %113
%118 = load i32, i32* %7
%119 = icmp eq i32 %118, 39
br i1 %119, label %120, label %121
120: ; preds = %117
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), i8** %10
br label %189
121: ; preds = %117
%122 = load i32, i32* %7
%123 = icmp eq i32 %122, 42
br i1 %123, label %124, label %134
124: ; preds = %121
%125 = getelementptr inbounds [12 x i8], [12 x i8]* %4, i64 0, i64 0
%126 = bitcast i8* %125 to i32*
%127 = getelementptr inbounds i32, i32* %126, i64 2
%128 = load i32, i32* %127
store i32 %128, i32* %9
%129 = load i32, i32* %9
%130 = and i32 %129, 268435456
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %133
132: ; preds = %124
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8** %10
br label %189
133: ; preds = %124
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8** %10
br label %189
134: ; preds = %121
%135 = load i32, i32* %7
%136 = icmp eq i32 %135, 43
br i1 %136, label %137, label %138
137: ; preds = %134
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8** %10
br label %189
138: ; preds = %134
%139 = load i32, i32* %7
%140 = icmp eq i32 %139, 44
br i1 %140, label %141, label %142
141: ; preds = %138
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8** %10
br label %189
142: ; preds = %138
%143 = load i32, i32* %7
%144 = icmp eq i32 %143, 45
br i1 %144, label %145, label %146
145: ; preds = %142
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8** %10
br label %189
146: ; preds = %142
%147 = load i32, i32* %7
%148 = icmp eq i32 %147, 46
br i1 %148, label %149, label %150
149: ; preds = %146
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i8** %10
br label %189
150: ; preds = %146
%151 = load i32, i32* %7
%152 = icmp eq i32 %151, 47
br i1 %152, label %153, label %154
153: ; preds = %150
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8** %10
br label %189
154: ; preds = %150
%155 = load i32, i32* %7
%156 = icmp eq i32 %155, 54
br i1 %156, label %157, label %158
157: ; preds = %154
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), i8** %10
br label %189
158: ; preds = %154
%159 = load i32, i32* %7
%160 = icmp eq i32 %159, 55
br i1 %160, label %161, label %162
161: ; preds = %158
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), i8** %10
br label %189
162: ; preds = %158
%163 = load i32, i32* %7
%164 = icmp eq i32 %163, 58
br i1 %164, label %165, label %166
165: ; preds = %162
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), i8** %10
br label %189
166: ; preds = %162
%167 = load i32, i32* %7
%168 = icmp eq i32 %167, 60
br i1 %168, label %169, label %170
169: ; preds = %166
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), i8** %10
br label %189
170: ; preds = %166
%171 = load i32, i32* %7
%172 = icmp eq i32 %171, 62
br i1 %172, label %173, label %174
173: ; preds = %170
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), i8** %10
br label %189
174: ; preds = %170
br label %189
175: ; preds = %38
%176 = load i32, i32* %7
%177 = icmp sle i32 %176, 6
br i1 %177, label %178, label %179
178: ; preds = %175
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), i8** %10
br label %189
179: ; preds = %175
%180 = getelementptr inbounds [12 x i8], [12 x i8]* %4, i64 0, i64 0
%181 = bitcast i8* %180 to i32*
%182 = getelementptr inbounds i32, i32* %181, i64 2
%183 = load i32, i32* %182
store i32 %183, i32* %9
%184 = load i32, i32* %9
%185 = and i32 %184, 1
%186 = icmp ne i32 %185, 0
br i1 %186, label %187, label %188
187: ; preds = %179
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.17, i64 0, i64 0), i8** %10
br label %189
188: ; preds = %179
br label %189
189: ; preds = %38, %188, %187, %178, %174, %173, %169, %165, %161, %157, %153, %149, %145, %141, %137, %133, %132, %120, %116, %112, %108, %104, %100, %96, %92, %88, %84, %80, %76, %72, %68, %64, %60, %56, %52, %48
br label %291
190: ; preds = %1
%191 = getelementptr inbounds [13 x i8], [13 x i8]* %3, i64 0, i64 0
%192 = call i64 @strcmp(i8* %191, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.18, i64 0, i64 0))
%193 = icmp eq i64 %192, 0
br i1 %193, label %194, label %273
194: ; preds = %190
%195 = load i32, i32* %6
switch i32 %195, label %272 [
i32 5, label %196
i32 6, label %213
i32 15, label %214
i32 16, label %215
i32 17, label %244
i32 18, label %245
i32 20, label %246
i32 21, label %247
]
196: ; preds = %194
%197 = load i32, i32* %7
%198 = icmp sle i32 %197, 3
br i1 %198, label %199, label %200
199: ; preds = %196
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i8** %10
br label %272
200: ; preds = %196
%201 = load i32, i32* %7
%202 = icmp sle i32 %201, 7
br i1 %202, label %203, label %204
203: ; preds = %200
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i8** %10
br label %272
204: ; preds = %200
%205 = load i32, i32* %7
%206 = icmp sle i32 %205, 8
br i1 %206, label %207, label %208
207: ; preds = %204
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i8** %10
br label %272
208: ; preds = %204
%209 = load i32, i32* %7
%210 = icmp sle i32 %209, 9
br i1 %210, label %211, label %212
211: ; preds = %208
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0), i8** %10
br label %272
212: ; preds = %208
br label %272
213: ; preds = %194
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.23, i64 0, i64 0), i8** %10
br label %272
214: ; preds = %194
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), i8** %10
br label %272
215: ; preds = %194
%216 = load i32, i32* %7
%217 = icmp eq i32 %216, 2
br i1 %217, label %218, label %219
218: ; preds = %215
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i64 0, i64 0), i8** %10
br label %272
219: ; preds = %215
%220 = load i32, i32* %7
%221 = icmp eq i32 %220, 4
br i1 %221, label %222, label %223
222: ; preds = %219
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
223: ; preds = %219
%224 = load i32, i32* %7
%225 = icmp eq i32 %224, 5
br i1 %225, label %226, label %227
226: ; preds = %223
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
227: ; preds = %223
%228 = load i32, i32* %7
%229 = icmp eq i32 %228, 6
br i1 %229, label %230, label %231
230: ; preds = %227
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
231: ; preds = %227
%232 = load i32, i32* %7
%233 = icmp eq i32 %232, 8
br i1 %233, label %234, label %235
234: ; preds = %231
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
235: ; preds = %231
%236 = load i32, i32* %7
%237 = icmp eq i32 %236, 9
br i1 %237, label %238, label %239
238: ; preds = %235
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
239: ; preds = %235
%240 = load i32, i32* %7
%241 = icmp eq i32 %240, 10
br i1 %241, label %242, label %243
242: ; preds = %239
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0), i8** %10
br label %272
243: ; preds = %239
br label %272
244: ; preds = %194
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), i8** %10
br label %272
245: ; preds = %194
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8** %10
br label %272
246: ; preds = %194
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0), i8** %10
br label %272
247: ; preds = %194
%248 = load i32, i32* %7
%249 = icmp eq i32 %248, 1
br i1 %249, label %250, label %251
250: ; preds = %247
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.29, i64 0, i64 0), i8** %10
br label %272
251: ; preds = %247
%252 = load i32, i32* %7
%253 = icmp eq i32 %252, 2
br i1 %253, label %254, label %255
254: ; preds = %251
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8** %10
br label %272
255: ; preds = %251
%256 = load i32, i32* %7
%257 = icmp eq i32 %256, 3
br i1 %257, label %258, label %259
258: ; preds = %255
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8** %10
br label %272
259: ; preds = %255
%260 = load i32, i32* %7
%261 = icmp eq i32 %260, 16
br i1 %261, label %262, label %263
262: ; preds = %259
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8** %10
br label %272
263: ; preds = %259
%264 = load i32, i32* %7
%265 = icmp eq i32 %264, 18
br i1 %265, label %266, label %267
266: ; preds = %263
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8** %10
br label %272
267: ; preds = %263
%268 = load i32, i32* %7
%269 = icmp eq i32 %268, 19
br i1 %269, label %270, label %271
270: ; preds = %267
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), i8** %10
br label %272
271: ; preds = %267
br label %272
272: ; preds = %194, %271, %270, %266, %262, %258, %254, %250, %246, %245, %244, %243, %242, %238, %234, %230, %226, %222, %218, %214, %213, %212, %211, %207, %203, %199
br label %290
273: ; preds = %190
%274 = getelementptr inbounds [13 x i8], [13 x i8]* %3, i64 0, i64 0
%275 = call i64 @strcmp(i8* %274, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.31, i64 0, i64 0))
%276 = icmp eq i64 %275, 0
br i1 %276, label %277, label %289
277: ; preds = %273
%278 = load i32, i32* %6
switch i32 %278, label %288 [
i32 6, label %279
]
279: ; preds = %277
%280 = load i32, i32* %7
%281 = icmp eq i32 %280, 15
br i1 %281, label %282, label %283
282: ; preds = %279
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.32, i64 0, i64 0), i8** %10
br label %288
283: ; preds = %279
%284 = load i32, i32* %7
%285 = icmp slt i32 %284, 9
br i1 %285, label %286, label %287
286: ; preds = %283
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.33, i64 0, i64 0), i8** %10
br label %288
287: ; preds = %283
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.34, i64 0, i64 0), i8** %10
br label %288
288: ; preds = %277, %287, %286, %282
br label %289
289: ; preds = %288, %273
br label %290
290: ; preds = %289, %272
br label %291
291: ; preds = %290, %189
%292 = load i8*, i8** %10
ret i8* %292
}

LLVM IR (-O2):
@.str = [5 x i8] c"i486\00"
@.str.1 = [13 x i8] c"GenuineIntel\00"
@.str.2 = [8 x i8] c"pentium\00"
@.str.3 = [11 x i8] c"pentiummmx\00"
@.str.4 = [11 x i8] c"pentiumpro\00"
@.str.5 = [9 x i8] c"pentium2\00"
@.str.6 = [9 x i8] c"pentium3\00"
@.str.7 = [5 x i8] c"core\00"
@.str.8 = [6 x i8] c"core2\00"
@.str.9 = [7 x i8] c"penryn\00"
@.str.10 = [9 x i8] c"westmere\00"
@.str.11 = [8 x i8] c"nehalem\00"
@.str.12 = [5 x i8] c"atom\00"
@.str.13 = [12 x i8] c"sandybridge\00"
@.str.14 = [10 x i8] c"ivybridge\00"
@.str.15 = [8 x i8] c"haswell\00"
@.str.16 = [9 x i8] c"pentium4\00"
@.str.17 = [9 x i8] c"prescott\00"
@.str.18 = [13 x i8] c"AuthenticAMD\00"
@.str.19 = [3 x i8] c"k5\00"
@.str.20 = [3 x i8] c"k6\00"
@.str.21 = [4 x i8] c"k62\00"
@.str.22 = [4 x i8] c"k63\00"
@.str.23 = [3 x i8] c"k7\00"
@.str.24 = [3 x i8] c"k8\00"
@.str.25 = [4 x i8] c"k10\00"
@.str.26 = [5 x i8] c"k102\00"
@.str.27 = [5 x i8] c"k103\00"
@.str.28 = [7 x i8] c"bobcat\00"
@.str.29 = [10 x i8] c"bulldozer\00"
@.str.30 = [11 x i8] c"piledriver\00"
@.str.31 = [13 x i8] c"CentaurHauls\00"
@.str.32 = [5 x i8] c"nano\00"
@.str.33 = [6 x i8] c"viac3\00"
@.str.34 = [7 x i8] c"viac32\00"
@reltable.__gmpn_cpu = [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.25 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.26 to i64), i64 ptrtoint ([9 x i32]* @reltable.__gmpn_cpu to i64)) to i32)]
define i8* @__gmpn_cpu(i32* nocapture readnone %0) {
%2 = alloca [13 x i8]
%3 = alloca [12 x i8]
%4 = getelementptr inbounds [13 x i8], [13 x i8]* %2, i64 0, i64 0
%5 = getelementptr inbounds [12 x i8], [12 x i8]* %3, i64 0, i64 0
%6 = call i64 @cpuid(i8* %4, i32 0, i32 1, i32 0, i32 0)
%7 = getelementptr inbounds [13 x i8], [13 x i8]* %2, i64 0, i64 12
store i8 0, i8* %7
%8 = call i64 @cpuid(i8* %5, i32 1, i32 1, i32 0, i32 0)
%9 = lshr i64 %8, 8
%10 = and i64 %9, 15
%11 = lshr i64 %8, 20
%12 = and i64 %11, 255
%13 = add nuw nsw i64 %10, %12
%14 = trunc i64 %13 to i32
%15 = lshr i64 %8, 4
%16 = and i64 %15, 15
%17 = lshr i64 %8, 12
%18 = and i64 %17, 240
%19 = or i64 %16, %18
%20 = trunc i64 %19 to i32
%21 = call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%22 = icmp eq i64 %21, 0
br i1 %22, label %23, label %76
23: ; preds = %1
switch i32 %14, label %121 [
i32 5, label %24
i32 6, label %29
i32 15, label %67
]
24: ; preds = %23
%25 = icmp ult i32 %20, 3
%26 = select i1 %25, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0)
%27 = icmp ugt i32 %20, 3
%28 = select i1 %27, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), i8* %26
br label %121
29: ; preds = %23
%30 = icmp eq i32 %20, 1
br i1 %30, label %121, label %31
31: ; preds = %29
%32 = icmp ult i32 %20, 7
br i1 %32, label %121, label %33
33: ; preds = %31
%34 = icmp ult i32 %20, 14
br i1 %34, label %121, label %35
35: ; preds = %33
%36 = trunc i64 %19 to i8
switch i8 %36, label %115 [
i8 14, label %121
i8 16, label %121
i8 15, label %37
i8 17, label %38
i8 22, label %39
i8 23, label %40
i8 25, label %41
i8 26, label %42
i8 28, label %43
i8 29, label %44
i8 30, label %45
i8 31, label %46
i8 37, label %47
i8 38, label %48
i8 39, label %49
i8 42, label %50
i8 43, label %57
i8 44, label %58
i8 45, label %59
i8 46, label %60
i8 47, label %61
i8 54, label %62
i8 55, label %63
i8 58, label %64
i8 60, label %65
i8 62, label %66
]
37: ; preds = %35
br label %121
38: ; preds = %35
br label %121
39: ; preds = %35
br label %121
40: ; preds = %35
br label %121
41: ; preds = %35
br label %121
42: ; preds = %35
br label %121
43: ; preds = %35
br label %121
44: ; preds = %35
br label %121
45: ; preds = %35
br label %121
46: ; preds = %35
br label %121
47: ; preds = %35
br label %121
48: ; preds = %35
br label %121
49: ; preds = %35
br label %121
50: ; preds = %35
%51 = getelementptr inbounds [12 x i8], [12 x i8]* %3, i64 0, i64 8
%52 = bitcast i8* %51 to i32*
%53 = load i32, i32* %52
%54 = and i32 %53, 268435456
%55 = icmp eq i32 %54, 0
%56 = select i1 %55, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0)
br label %121
57: ; preds = %35
br label %121
58: ; preds = %35
br label %121
59: ; preds = %35
br label %121
60: ; preds = %35
br label %121
61: ; preds = %35
br label %121
62: ; preds = %35
br label %121
63: ; preds = %35
br label %121
64: ; preds = %35
br label %121
65: ; preds = %35
br label %121
66: ; preds = %35
br label %121
67: ; preds = %23
%68 = icmp ult i32 %20, 7
br i1 %68, label %121, label %69
69: ; preds = %67
%70 = getelementptr inbounds [12 x i8], [12 x i8]* %3, i64 0, i64 8
%71 = bitcast i8* %70 to i32*
%72 = load i32, i32* %71
%73 = and i32 %72, 1
%74 = icmp eq i32 %73, 0
%75 = select i1 %74, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.17, i64 0, i64 0)
br label %121
76: ; preds = %1
%77 = call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.18, i64 0, i64 0))
%78 = icmp eq i64 %77, 0
br i1 %78, label %79, label %105
79: ; preds = %76
switch i32 %14, label %121 [
i32 5, label %80
i32 6, label %89
i32 15, label %90
i32 16, label %91
i32 17, label %95
i32 18, label %96
i32 20, label %97
i32 21, label %98
]
80: ; preds = %79
%81 = icmp ult i32 %20, 4
br i1 %81, label %121, label %82
82: ; preds = %80
%83 = icmp ult i32 %20, 8
br i1 %83, label %121, label %84
84: ; preds = %82
%85 = icmp eq i32 %20, 8
br i1 %85, label %121, label %86
86: ; preds = %84
%87 = icmp ult i32 %20, 10
%88 = select i1 %87, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0)
br label %121
89: ; preds = %79
br label %121
90: ; preds = %79
br label %121
91: ; preds = %79
%92 = trunc i64 %19 to i8
%93 = add i8 %92, -2
%94 = icmp ult i8 %93, 9
br i1 %94, label %117, label %121
95: ; preds = %79
br label %121
96: ; preds = %79
br label %121
97: ; preds = %79
br label %121
98: ; preds = %79
%99 = trunc i64 %19 to i8
switch i8 %99, label %116 [
i8 1, label %121
i8 2, label %100
i8 3, label %101
i8 16, label %102
i8 18, label %103
i8 19, label %104
]
100: ; preds = %98
br label %121
101: ; preds = %98
br label %121
102: ; preds = %98
br label %121
103: ; preds = %98
br label %121
104: ; preds = %98
br label %121
105: ; preds = %76
%106 = call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.31, i64 0, i64 0))
%107 = icmp eq i64 %106, 0
%108 = icmp eq i32 %14, 6
%109 = select i1 %107, i1 %108, i1 false
br i1 %109, label %110, label %121
110: ; preds = %105
%111 = icmp eq i32 %20, 15
br i1 %111, label %121, label %112
112: ; preds = %110
%113 = icmp ult i32 %20, 9
%114 = select i1 %113, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.33, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.34, i64 0, i64 0)
br label %121
115: ; preds = %35
br label %121
116: ; preds = %98
br label %121
117: ; preds = %91
%118 = sext i8 %93 to i64
%119 = shl i64 %118, 2
%120 = call i8* @llvm.load.relative.i64(i8* bitcast ([9 x i32]* @reltable.__gmpn_cpu to i8*), i64 %119)
br label %121
121: ; preds = %91, %117, %24, %86, %69, %112, %110, %98, %116, %84, %82, %80, %67, %35, %35, %115, %50, %33, %31, %29, %79, %104, %103, %102, %101, %100, %97, %96, %95, %90, %89, %105, %37, %38, %39, %40, %41, %42, %43, %44, %45, %46, %47, %48, %49, %57, %58, %59, %60, %61, %62, %63, %64, %65, %66, %23
%122 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %23 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), %37 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), %38 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), %39 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), %40 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), %41 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), %42 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), %43 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), %44 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), %45 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), %46 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), %47 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), %48 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), %49 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), %57 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), %58 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), %59 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), %60 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0), %61 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), %62 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0), %63 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), %64 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), %65 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), %66 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %79 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), %100 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), %101 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), %102 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), %103 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0), %104 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0), %97 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), %96 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), %95 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), %90 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.23, i64 0, i64 0), %89 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %105 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0), %29 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), %31 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.6, i64 0, i64 0), %33 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), %35 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), %35 ], [ %56, %50 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %115 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), %67 ], [ %75, %69 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), %80 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), %82 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), %84 ], [ %88, %86 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.29, i64 0, i64 0), %98 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %116 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.32, i64 0, i64 0), %110 ], [ %114, %112 ], [ %28, %24 ], [ %120, %117 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), %91 ]
ret i8* %122
}