int main() {
  void namex();
  int intwt();
  void itoa();
  char cname[10];
  char wname[10];
  int i;
  double Prhit = (0.85 * 0.95);
  double Pwhit = ((1 - 0.85) * 0.95 * (1 - 0.0526)) +
                 ((1 - 0.85) * (1 - 0.95) * (1 - 0.35));
  double Prdop = 0.85 * (1 - 0.95);
  double Pwbop = (1 - 0.85) * (1 - 0.95) * 0.35;
  double Pwthr = (1 - 0.85);
  double Pinvl = (1 - 0.85) * 0.95 * 0.0526;
  double Nrwht = 0.8075 * 15;
  double Nrdop = 0.0850 * 15;
  double Nwthr = 0.15 * 15;
  double Nwbop = 0.0003 * 15 * 100;
  double Ninvl = 0.015 * 15;
  double Srdop = (20.0);
  double Swthr = (25.0);
  double Swbop = (20.0);
  double Wrwht;
  double Wrdop;
  double Wwthr;
  double Wwbop;
  double Winvl;
  double Zrwht = 2.5;
  double Zrdop = 2.5;
  double Zwbop = 2.5;
  double Zinvl = 2.5;
  double Zwthr = 2.5;
  double Xcpu = 0.0;
  double Pcpu = 0.0;
  double Ubrd = 0.0;
  double Ubwr = 0.0;
  double Ubin = 0.0;
  double Ucht = 0.0;
  double Ucrd = 0.0;
  double Ucwr = 0.0;
  double Ucin = 0.0;
  int nodes;
  int streams;
  char *model = "ABC Model";
  PDQ_Init(model);
  nodes = PDQ_CreateNode("MBus", 4, 8);
  for (i = 0; i < 15; i++) {
    namex(i, "L2C", cname);
    nodes = PDQ_CreateNode(cname, 4, 8);
  }
  for (i = 0; i < intwt(Nrwht, &Wrwht); i++) {
    namex(i, "RWhit", wname);
    streams = PDQ_CreateClosed(wname, 11, Nrwht, Zrwht);
    namex(i, "L2C", cname);
    PDQ_SetDemand(cname, wname, 1.0);
    PDQ_SetDemand("MBus", wname, 0.0);
  }
  for (i = 0; i < intwt(Nrdop, &Wrdop); i++) {
    namex(i, "Read", wname);
    streams = PDQ_CreateClosed(wname, 11, Nrdop, Zrdop);
    namex(i, "L2C", cname);
    PDQ_SetDemand(cname, wname, 1.0);
    PDQ_SetDemand("MBus", wname, Srdop);
  }
  if (1) {
    for (i = 0; i < intwt(Nwbop, &Wwbop); i++) {
      namex(i, "Write", wname);
      streams = PDQ_CreateClosed(wname, 11, Nwbop, Zwbop);
      namex(i, "L2C", cname);
      PDQ_SetDemand(cname, wname, 1.0);
      PDQ_SetDemand("MBus", wname, Swbop);
    }
  } else {
    for (i = 0; i < intwt(Nwthr, &Wwthr); i++) {
      namex(i, "Write", wname);
      streams = PDQ_CreateClosed(wname, 11, Nwthr, Zwthr);
      namex(i, "L2C", cname);
      PDQ_SetDemand(cname, wname, 1.0);
      PDQ_SetDemand("MBus", wname, Swthr);
    }
  }
  if (1) {
    for (i = 0; i < intwt(Ninvl, &Winvl); i++) {
      namex(i, "Inval", wname);
      streams = PDQ_CreateClosed(wname, 11, Ninvl, Zinvl);
      namex(i, "L2C", cname);
      PDQ_SetDemand(cname, wname, 1.0);
      PDQ_SetDemand("MBus", wname, 1.0);
    }
  }
  PDQ_SetWUnit("Reqs");
  PDQ_SetTUnit("Cycs");
  PDQ_Solve(15);
  for (i = 0; i < intwt(Nrdop, &Wrdop); i++) {
    namex(i, "Read", wname);
    Ubrd += PDQ_GetUtilization("MBus", wname, 11);
  }
  Ubrd *= Wrdop;
  if (1) {
    for (i = 0; i < intwt(Nwbop, &Wwbop); i++) {
      namex(i, "Write", wname);
      Ubwr += PDQ_GetUtilization("MBus", wname, 11);
    }
    Ubwr *= Wwbop;
    for (i = 0; i < intwt(Ninvl, &Winvl); i++) {
      namex(i, "Inval", wname);
      Ubin += PDQ_GetUtilization("MBus", wname, 11);
    }
    Ubin *= Winvl;
  } else {
    for (i = 0; i < intwt(Nwthr, &Wwthr); i++) {
      namex(i, "Write", wname);
      Ubwr += PDQ_GetUtilization("MBus", wname, 11);
    }
    Ubwr *= Wwthr;
  }
  i = 0;
  namex(i, "L2C", cname);
  namex(i, "RWhit", wname);
  Xcpu = PDQ_GetThruput(11, wname) * Wrwht;
  Pcpu += Xcpu * Zrwht;
  Ucht = PDQ_GetUtilization(cname, wname, 11) * Wrwht;
  namex(i, "Read", wname);
  Xcpu = PDQ_GetThruput(11, wname) * Wrdop;
  Pcpu += Xcpu * Zrdop;
  Ucrd = PDQ_GetUtilization(cname, wname, 11) * Wrdop;
  Pcpu *= 1.88;
  if (1) {
    namex(i, "Write", wname);
    Ucwr = PDQ_GetUtilization(cname, wname, 11) * Wwbop;
    namex(i, "Inval", wname);
    Ucin = PDQ_GetUtilization(cname, wname, 11) * Winvl;
  } else {
    namex(i, "Write", wname);
    Ucwr = PDQ_GetUtilization(cname, wname, 11) * Wwthr;
  }
  printf("\n**** %s Results ****\n", model);
  printf("PDQ nodes: %d  PDQ streams: %d\n", nodes, streams);
  printf("Memory Mode: %s\n", 1 ? "WriteBack" : "WriteThru");
  printf("Ncpu:  %2d\n", 15);
  printf("Nrwht: %5.2f (N:%2d  W:%5.2f)\n", Nrwht, intwt(Nrwht, &Wrwht), Wrwht);
  printf("Nrdop: %5.2f (N:%2d  W:%5.2f)\n", Nrdop, intwt(Nrdop, &Wrdop), Wrdop);
  if (1) {
    printf("Nwbop: %5.2f (N:%2d  W:%5.2f)\n", Nwbop, intwt(Nwbop, &Wwbop),
           Wwbop);
    printf("Ninvl: %5.2f (N:%2d  W:%5.2f)\n", Ninvl, intwt(Ninvl, &Winvl),
           Winvl);
  } else {
    printf("Nwthr: %5.2f (N:%2d  W:%5.2f)\n", Nwthr, intwt(Nwthr, &Wwthr),
           Wwthr);
  }
  printf("\n");
  printf("Hit Ratio:   %5.2f %%\n", 0.95 * 100.0);
  printf("Read Miss:   %5.2f %%\n", 0.85 * (1 - 0.95) * 100.0);
  printf("WriteMiss:   %5.2f %%\n", (1 - 0.85) * (1 - 0.95) * 100.0);
  printf("Ucpu:        %5.2f %%\n", Pcpu * 100.0 / 15);
  printf("Pcpu:        %5.2f\n", Pcpu);
  printf("\n");
  printf("Ubus[reads]: %5.2f %%\n", Ubrd * 100.0);
  printf("Ubus[write]: %5.2f %%\n", Ubwr * 100.0);
  printf("Ubus[inval]: %5.2f %%\n", Ubin * 100.0);
  printf("Ubus[total]: %5.2f %%\n", (Ubrd + Ubwr + Ubin) * 100.0);
  printf("\n");
  printf("Uca%d[hits]:  %5.2f %%\n", i, Ucht * 100.0);
  printf("Uca%d[reads]: %5.2f %%\n", i, Ucrd * 100.0);
  printf("Uca%d[write]: %5.2f %%\n", i, Ucwr * 100.0);
  printf("Uca%d[inval]: %5.2f %%\n", i, Ucin * 100.0);
  printf("Uca%d[total]: %5.2f %%\n", i, (Ucht + Ucrd + Ucwr + Ucin) * 100.0);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
movl   $0x0,-0x4(%rbp)
movsd  0xe8e(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe79(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe64(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe4f(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe3a(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe25(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe10(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xdfb(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xde6(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xdd1(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xdbc(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xd9f(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd9a(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xd82(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xd6a(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xd5a(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xd4a(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xd3a(%rip),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xd2a(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
lea    0xd60(%rip),%rax
mov    %rax,-0x138(%rbp)
mov    -0x138(%rbp),%rdi
mov    $0x0,%al
call   10d0 <PDQ_Init@plt>
lea    0xd4e(%rip),%rdi
mov    $0x4,%esi
mov    $0x8,%edx
mov    $0x0,%al
call   1030 <PDQ_CreateNode@plt>
mov    %eax,-0x12c(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0xf,-0x1c(%rbp)
jge    13ca <main+0x20a>
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0xd1d(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
mov    $0x4,%esi
mov    $0x8,%edx
mov    $0x0,%al
call   1030 <PDQ_CreateNode@plt>
mov    %eax,-0x12c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1382 <main+0x1c2>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x13c(%rbp)
movsd  -0x58(%rbp),%xmm0
lea    -0x98(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x13c(%rbp),%eax
cmp    %ecx,%eax
jge    1484 <main+0x2c4>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0xcb0(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rdi
movsd  -0x58(%rbp),%xmm0
movsd  -0xc0(%rbp),%xmm1
ff
mov    $0xb,%esi
mov    $0x2,%al
call   1080 <PDQ_CreateClosed@plt>
mov    %eax,-0x130(%rbp)
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0xc74(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
movsd  0xc46(%rip),%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
lea    -0x18(%rbp),%rsi
lea    0xc46(%rip),%rdi
xorps  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13d1 <main+0x211>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x140(%rbp)
movsd  -0x60(%rbp),%xmm0
lea    -0xa0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x140(%rbp),%eax
cmp    %ecx,%eax
jge    1540 <main+0x380>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0xbfc(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rdi
movsd  -0x60(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm1
ff
mov    $0xb,%esi
mov    $0x2,%al
call   1080 <PDQ_CreateClosed@plt>
mov    %eax,-0x130(%rbp)
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0xbba(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
movsd  0xb8c(%rip),%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
lea    -0x18(%rbp),%rsi
movsd  -0x80(%rbp),%xmm0
lea    0xb87(%rip),%rdi
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    148b <main+0x2cb>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x144(%rbp)
movsd  -0x70(%rbp),%xmm0
lea    -0xb0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x144(%rbp),%eax
cmp    %ecx,%eax
jge    15ff <main+0x43f>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0xb45(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rdi
movsd  -0x70(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm1
ff
mov    $0xb,%esi
mov    $0x2,%al
call   1080 <PDQ_CreateClosed@plt>
mov    %eax,-0x130(%rbp)
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0xafe(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
movsd  0xad0(%rip),%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
lea    -0x18(%rbp),%rsi
movsd  -0x90(%rbp),%xmm0
ff
lea    0xac8(%rip),%rdi
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1547 <main+0x387>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x148(%rbp)
movsd  -0x78(%rbp),%xmm0
lea    -0xb8(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x148(%rbp),%eax
cmp    %ecx,%eax
jge    16be <main+0x4fe>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0xa8c(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rdi
movsd  -0x78(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm1
ff
mov    $0xb,%esi
mov    $0x2,%al
call   1080 <PDQ_CreateClosed@plt>
mov    %eax,-0x130(%rbp)
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0xa3f(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
movsd  0xa11(%rip),%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
lea    -0x18(%rbp),%rsi
lea    0xa11(%rip),%rdi
movsd  0x9f7(%rip),%xmm0
mov    $0x1,%al
call   1040 <PDQ_SetDemand@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1606 <main+0x446>
lea    0xa0d(%rip),%rdi
mov    $0x0,%al
call   10e0 <PDQ_SetWUnit@plt>
lea    0xa04(%rip),%rdi
mov    $0x0,%al
call   10a0 <PDQ_SetTUnit@plt>
mov    $0xf,%edi
mov    $0x0,%al
call   1050 <PDQ_Solve@plt>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x14c(%rbp)
movsd  -0x60(%rbp),%xmm0
lea    -0xa0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x14c(%rbp),%eax
cmp    %ecx,%eax
jge    1767 <main+0x5a7>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x99a(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rsi
lea    0x979(%rip),%rdi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
addsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    16ed <main+0x52d>
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x150(%rbp)
movsd  -0x70(%rbp),%xmm0
lea    -0xb0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x150(%rbp),%eax
cmp    %ecx,%eax
jge    1800 <main+0x640>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x906(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rsi
lea    0x8e0(%rip),%rdi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
addsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1786 <main+0x5c6>
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x154(%rbp)
movsd  -0x78(%rbp),%xmm0
lea    -0xb8(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
mov    %eax,%ecx
mov    -0x154(%rbp),%eax
cmp    %ecx,%eax
jge    1899 <main+0x6d9>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x873(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rsi
lea    0x847(%rip),%rdi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
addsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    181f <main+0x65f>
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%edi
lea    -0xe(%rbp),%rdx
lea    0x7f1(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x7e0(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rsi
mov    $0xb,%edi
mov    $0x0,%al
call   10c0 <PDQ_GetThruput@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x75d(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0x18(%rbp),%rsi
mov    $0xb,%edi
mov    $0x0,%al
call   10c0 <PDQ_GetThruput@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  0x6b1(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x6c1(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x1c(%rbp),%edi
lea    -0x18(%rbp),%rdx
lea    0x68a(%rip),%rsi
mov    $0x0,%al
call   1070 <namex@plt>
lea    -0xe(%rbp),%rdi
lea    -0x18(%rbp),%rsi
mov    $0xb,%edx
mov    $0x0,%al
call   10b0 <PDQ_GetUtilization@plt>
cvtsi2sd %eax,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x138(%rbp),%rsi
lea    0x65d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x12c(%rbp),%esi
mov    -0x130(%rbp),%edx
lea    0x65a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x66c(%rip),%rdi
lea    0x676(%rip),%rsi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x672(%rip),%rdi
mov    $0xf,%esi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
lea    -0x98(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
movsd  -0x178(%rbp),%xmm0
ff
mov    %eax,%esi
movsd  -0x98(%rbp),%xmm1
ff
lea    0x639(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
lea    -0xa0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
movsd  -0x170(%rbp),%xmm0
ff
mov    %eax,%esi
movsd  -0xa0(%rbp),%xmm1
ff
lea    0x618(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
lea    -0xb0(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
movsd  -0x168(%rbp),%xmm0
ff
mov    %eax,%esi
movsd  -0xb0(%rbp),%xmm1
ff
lea    0x5f7(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
lea    -0xb8(%rbp),%rdi
mov    $0x1,%al
call   1090 <intwt@plt>
movsd  -0x160(%rbp),%xmm0
ff
mov    %eax,%esi
movsd  -0xb8(%rbp),%xmm1
ff
lea    0x5d6(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
lea    0x641(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x5d9(%rip),%rdi
movsd  0x4ab(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
lea    0x5da(%rip),%rdi
movsd  0x48d(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
lea    0x5db(%rip),%rdi
movsd  0x46f(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
movsd  0x450(%rip),%xmm0
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  0x448(%rip),%xmm1
divsd  %xmm1,%xmm0
lea    0x5c0(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0xf0(%rbp),%xmm0
ff
lea    0x5c1(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
lea    0x5b1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  0x402(%rip),%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
lea    0x5a9(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  0x3e4(%rip),%xmm0
mulsd  -0x100(%rbp),%xmm0
ff
lea    0x5a2(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  0x3c6(%rip),%xmm0
mulsd  -0x108(%rbp),%xmm0
ff
lea    0x59b(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  0x390(%rip),%xmm1
mulsd  %xmm1,%xmm0
lea    0x580(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
lea    0x517(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x1c(%rbp),%esi
movsd  0x365(%rip),%xmm0
mulsd  -0x110(%rbp),%xmm0
ff
lea    0x568(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    -0x1c(%rbp),%esi
movsd  0x344(%rip),%xmm0
mulsd  -0x118(%rbp),%xmm0
ff
lea    0x55f(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    -0x1c(%rbp),%esi
movsd  0x323(%rip),%xmm0
mulsd  -0x120(%rbp),%xmm0
ff
lea    0x556(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    -0x1c(%rbp),%esi
movsd  0x302(%rip),%xmm0
mulsd  -0x128(%rbp),%xmm0
ff
lea    0x54d(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
mov    -0x1c(%rbp),%esi
movsd  -0x110(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
addsd  -0x120(%rbp),%xmm0
ff
addsd  -0x128(%rbp),%xmm0
ff
movsd  0x2c1(%rip),%xmm1
mulsd  %xmm1,%xmm0
lea    0x528(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
xor    %eax,%eax
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
lea    0xe88(%rip),%rdi
xor    %eax,%eax
call   10e0 <PDQ_Init@plt>
lea    0xe84(%rip),%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
lea    0xe71(%rip),%rbp
lea    0x5a(%rsp),%rbx
xor    %edi,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x1,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x2,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x3,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x4,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x5,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x6,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x7,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x8,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0x9,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0xa,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0xb,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0xc,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0xd,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    $0xe,%edi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <PDQ_CreateNode@plt>
mov    %eax,0x64(%rsp)
movsd  0xbaa(%rip),%xmm0
lea    0x50(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
test   %eax,%eax
jle    151f <main+0x34f>
lea    0x46(%rsp),%rbx
lea    0x5a(%rsp),%r13
lea    0xbff(%rip),%r14
lea    0x50(%rsp),%r15
xor    %r12d,%r12d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r12d,%edi
lea    0xbe9(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0xb,%esi
movsd  0xb4c(%rip),%xmm0
movsd  0xb4c(%rip),%xmm1
mov    $0x2,%al
call   1090 <PDQ_CreateClosed@plt>
mov    %eax,%ebp
mov    %r12d,%edi
lea    0xbb0(%rip),%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
movsd  0xb29(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
xorps  %xmm0,%xmm0
mov    %r14,%rdi
mov    %rbx,%rsi
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
add    $0x1,%r12d
movsd  0xaf6(%rip),%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%r12d
jl     1490 <main+0x2c0>
jmp    151f <main+0x34f>
movsd  0xaf1(%rip),%xmm0
lea    0x8(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
test   %eax,%eax
jle    15f2 <main+0x422>
lea    0x46(%rsp),%rbx
lea    0x5a(%rsp),%r13
lea    0xb2e(%rip),%r14
lea    0x8(%rsp),%r15
xor    %r12d,%r12d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r12d,%edi
lea    0xb1f(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0xb,%esi
movsd  0xa94(%rip),%xmm0
movsd  0xa7c(%rip),%xmm1
mov    $0x2,%al
call   1090 <PDQ_CreateClosed@plt>
mov    %eax,%ebp
mov    %r12d,%edi
lea    0xae0(%rip),%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
movsd  0xa59(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
movsd  0xa54(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
add    $0x1,%r12d
movsd  0xa39(%rip),%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%r12d
jl     1560 <main+0x390>
movsd  0xa2e(%rip),%xmm0
lea    0x30(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
test   %eax,%eax
jle    16c2 <main+0x4f2>
lea    0x46(%rsp),%rbx
lea    0x5a(%rsp),%r13
lea    0xa5b(%rip),%r14
lea    0x30(%rsp),%r15
xor    %r12d,%r12d
nopw   0x0(%rax,%rax,1)
mov    %r12d,%edi
lea    0xa54(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0xb,%esi
movsd  0x9d4(%rip),%xmm0
movsd  0x9ac(%rip),%xmm1
mov    $0x2,%al
call   1090 <PDQ_CreateClosed@plt>
mov    %eax,%ebp
mov    %r12d,%edi
lea    0xa10(%rip),%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
movsd  0x989(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
movsd  0x984(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
add    $0x1,%r12d
movsd  0x979(%rip),%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%r12d
jl     1630 <main+0x460>
movsd  0x966(%rip),%xmm0
lea    0x28(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
test   %eax,%eax
jle    1792 <main+0x5c2>
lea    0x46(%rsp),%rbx
lea    0x5a(%rsp),%r13
lea    0x98b(%rip),%r14
lea    0x28(%rsp),%r15
xor    %r12d,%r12d
nopw   0x0(%rax,%rax,1)
mov    %r12d,%edi
lea    0x98a(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %rbx,%rdi
mov    $0xb,%esi
movsd  0x90c(%rip),%xmm0
movsd  0x8dc(%rip),%xmm1
mov    $0x2,%al
call   1090 <PDQ_CreateClosed@plt>
mov    %eax,%ebp
mov    %r12d,%edi
lea    0x940(%rip),%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
movsd  0x8b9(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
movsd  0x8a4(%rip),%xmm0
mov    $0x1,%al
call   1050 <PDQ_SetDemand@plt>
add    $0x1,%r12d
movsd  0x8b1(%rip),%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%r12d
jl     1700 <main+0x530>
lea    0x901(%rip),%rdi
xor    %eax,%eax
call   10f0 <PDQ_SetWUnit@plt>
lea    0x8f8(%rip),%rdi
xor    %eax,%eax
call   10b0 <PDQ_SetTUnit@plt>
mov    $0xf,%edi
xor    %eax,%eax
call   1060 <PDQ_Solve@plt>
movsd  0x856(%rip),%xmm0
lea    0x8(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rsp)
test   %eax,%eax
jle    1851 <main+0x681>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rsp)
lea    0x89e(%rip),%r14
lea    0x46(%rsp),%r13
lea    0x883(%rip),%r15
lea    0x8(%rsp),%r12
xor    %ebx,%ebx
xchg   %ax,%ax
mov    %ebx,%edi
mov    %r14,%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r15,%rdi
mov    %r13,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
add    $0x1,%ebx
movsd  0x7d5(%rip),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%ebx
jl     1800 <main+0x630>
movsd  0x20(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x7bd(%rip),%xmm0
lea    0x30(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
test   %eax,%eax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
jle    1901 <main+0x731>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
lea    0x7fa(%rip),%r14
lea    0x46(%rsp),%r13
lea    0x7da(%rip),%r15
lea    0x30(%rsp),%r12
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    %ebx,%edi
mov    %r14,%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r15,%rdi
mov    %r13,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x18(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
add    $0x1,%ebx
movsd  0x735(%rip),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%ebx
jl     18b0 <main+0x6e0>
movsd  0x18(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x715(%rip),%xmm0
lea    0x28(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
test   %eax,%eax
jle    19b1 <main+0x7e1>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0x750(%rip),%r14
lea    0x46(%rsp),%r13
lea    0x72a(%rip),%r15
lea    0x28(%rsp),%r12
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    %ebx,%edi
mov    %r14,%rsi
mov    %r13,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r15,%rdi
mov    %r13,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
add    $0x1,%ebx
movsd  0x68d(%rip),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
cmp    %eax,%ebx
jl     1960 <main+0x790>
movsd  0x10(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0x6b5(%rip),%rsi
lea    0x5a(%rsp),%r15
xor    %edi,%edi
mov    %r15,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
lea    0x6a1(%rip),%rsi
lea    0x46(%rsp),%rbx
xor    %edi,%edi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    $0xb,%edi
mov    %rbx,%rsi
xor    %eax,%eax
call   10d0 <PDQ_GetThruput@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x50(%rsp),%xmm0
mulsd  0x5f1(%rip),%xmm0
addsd  0x649(%rip),%xmm0
movsd  %xmm0,0x38(%rsp)
mov    %r15,%rdi
mov    %rbx,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x80(%rsp)
lea    0x635(%rip),%rsi
xor    %edi,%edi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    $0xb,%edi
mov    %rbx,%rsi
xor    %eax,%eax
call   10d0 <PDQ_GetThruput@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  0x584(%rip),%xmm0
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
mov    %r15,%rdi
mov    %rbx,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x78(%rsp)
movsd  0x38(%rsp),%xmm0
mulsd  0x575(%rip),%xmm0
movsd  %xmm0,0x38(%rsp)
lea    0x5be(%rip),%rsi
xor    %edi,%edi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x70(%rsp)
lea    0x58c(%rip),%rsi
xor    %edi,%edi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <namex@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
mov    $0xb,%edx
xor    %eax,%eax
call   10c0 <PDQ_GetUtilization@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x68(%rsp)
lea    0x564(%rip),%rdi
lea    0x529(%rip),%rsi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x566(%rip),%rdi
mov    0x64(%rsp),%esi
mov    %ebp,%edx
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x572(%rip),%rdi
lea    0x57c(%rip),%rsi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x578(%rip),%rdi
mov    $0xf,%esi
xor    %eax,%eax
call   1070 <printf@plt>
movsd  0x46e(%rip),%xmm0
lea    0x50(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
movsd  0x50(%rsp),%xmm1
lea    0x557(%rip),%rdi
movsd  0x44d(%rip),%xmm0
mov    %eax,%esi
mov    $0x2,%al
call   1070 <printf@plt>
movsd  0x454(%rip),%xmm0
lea    0x8(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
movsd  0x8(%rsp),%xmm1
lea    0x544(%rip),%rdi
movsd  0x433(%rip),%xmm0
mov    %eax,%esi
mov    $0x2,%al
call   1070 <printf@plt>
movsd  0x432(%rip),%xmm0
lea    0x30(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
movsd  0x30(%rsp),%xmm1
lea    0x531(%rip),%rdi
movsd  0x411(%rip),%xmm0
mov    %eax,%esi
mov    $0x2,%al
call   1070 <printf@plt>
movsd  0x408(%rip),%xmm0
lea    0x28(%rsp),%rdi
mov    $0x1,%al
call   10a0 <intwt@plt>
movsd  0x28(%rsp),%xmm1
lea    0x51e(%rip),%rdi
movsd  0x3e7(%rip),%xmm0
mov    %eax,%esi
mov    $0x2,%al
call   1070 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x51b(%rip),%rdi
movsd  0x3d5(%rip),%xmm0
mov    $0x1,%al
call   1070 <printf@plt>
lea    0x51c(%rip),%rdi
movsd  0x3c7(%rip),%xmm0
mov    $0x1,%al
call   1070 <printf@plt>
lea    0x51d(%rip),%rdi
movsd  0x3b9(%rip),%xmm0
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x38(%rsp),%xmm0
mulsd  0x3ac(%rip),%xmm0
divsd  0x3ac(%rip),%xmm0
lea    0x508(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0x511(%rip),%rdi
movsd  0x38(%rsp),%xmm0
mov    $0x1,%al
call   1070 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movsd  0x20(%rsp),%xmm0
mulsd  0x36a(%rip),%xmm0
lea    0x4f9(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x18(%rsp),%xmm0
mulsd  0x34e(%rip),%xmm0
lea    0x4f4(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x10(%rsp),%xmm0
mulsd  0x332(%rip),%xmm0
lea    0x4ef(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x20(%rsp),%xmm0
addsd  0x18(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
mulsd  0x30a(%rip),%xmm0
lea    0x4de(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movsd  0x80(%rsp),%xmm0
mulsd  0x2e1(%rip),%xmm0
lea    0x4cc(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x78(%rsp),%xmm0
mulsd  0x2c3(%rip),%xmm0
lea    0x4c6(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x70(%rsp),%xmm0
mulsd  0x2a5(%rip),%xmm0
lea    0x4c0(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x68(%rsp),%xmm0
mulsd  0x287(%rip),%xmm0
lea    0x4ba(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1070 <printf@plt>
movsd  0x78(%rsp),%xmm0
addsd  0x80(%rsp),%xmm0
addsd  0x70(%rsp),%xmm0
addsd  0x68(%rsp),%xmm0
mulsd  0x254(%rip),%xmm0
lea    0x49f(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1070 <printf@plt>
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [10 x i8] c"ABC Model\00"
@.str.1 = [5 x i8] c"MBus\00"
@.str.2 = [4 x i8] c"L2C\00"
@.str.3 = [6 x i8] c"RWhit\00"
@.str.4 = [5 x i8] c"Read\00"
@.str.5 = [6 x i8] c"Write\00"
@.str.6 = [6 x i8] c"Inval\00"
@.str.7 = [5 x i8] c"Reqs\00"
@.str.8 = [5 x i8] c"Cycs\00"
@.str.9 = [23 x i8] c"\0A**** %s Results ****\0A\00"
@.str.10 = [32 x i8] c"PDQ nodes: %d PDQ streams: %d\0A\00"
@.str.11 = [17 x i8] c"Memory Mode: %s\0A\00"
@.str.12 = [10 x i8] c"WriteBack\00"
@.str.13 = [12 x i8] c"Ncpu: %2d\0A\00"
@.str.14 = [31 x i8] c"Nrwht: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.15 = [31 x i8] c"Nrdop: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.16 = [31 x i8] c"Nwbop: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.17 = [31 x i8] c"Ninvl: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.18 = [2 x i8] c"\0A\00"
@.str.19 = [23 x i8] c"Hit Ratio: %5.2f %%\0A\00"
@.str.20 = [23 x i8] c"Read Miss: %5.2f %%\0A\00"
@.str.21 = [23 x i8] c"WriteMiss: %5.2f %%\0A\00"
@.str.22 = [23 x i8] c"Ucpu: %5.2f %%\0A\00"
@.str.23 = [20 x i8] c"Pcpu: %5.2f\0A\00"
@.str.24 = [23 x i8] c"Ubus[reads]: %5.2f %%\0A\00"
@.str.25 = [23 x i8] c"Ubus[write]: %5.2f %%\0A\00"
@.str.26 = [23 x i8] c"Ubus[inval]: %5.2f %%\0A\00"
@.str.27 = [23 x i8] c"Ubus[total]: %5.2f %%\0A\00"
@.str.28 = [24 x i8] c"Uca%d[hits]: %5.2f %%\0A\00"
@.str.29 = [24 x i8] c"Uca%d[reads]: %5.2f %%\0A\00"
@.str.30 = [24 x i8] c"Uca%d[write]: %5.2f %%\0A\00"
@.str.31 = [24 x i8] c"Uca%d[inval]: %5.2f %%\0A\00"
@.str.32 = [24 x i8] c"Uca%d[total]: %5.2f %%\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10 x i8]
%3 = alloca [10 x i8]
%4 = alloca i32
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca i32
%39 = alloca i32
%40 = alloca i8*
store i32 0, i32* %1
store double 8.075000e-01, double* %5
store double 0x3FC1E7924AF0BF1C, double* %6
store double 0x3FA5C28F5C28F5C8, double* %7
store double 0x3F65810624DD2F20, double* %8
store double 0x3FC3333333333334, double* %9
store double 0x3F7EB399F5DFEB8F, double* %10
store double 1.211250e+01, double* %11
store double 0x3FF4666666666667, double* %12
store double 2.250000e+00, double* %13
store double 0x3FDCCCCCCCCCCCCC, double* %14
store double 0x3FCCCCCCCCCCCCCC, double* %15
store double 2.000000e+01, double* %16
store double 2.500000e+01, double* %17
store double 2.000000e+01, double* %18
store double 2.500000e+00, double* %24
store double 2.500000e+00, double* %25
store double 2.500000e+00, double* %26
store double 2.500000e+00, double* %27
store double 2.500000e+00, double* %28
store double 0.000000e+00, double* %29
store double 0.000000e+00, double* %30
store double 0.000000e+00, double* %31
store double 0.000000e+00, double* %32
store double 0.000000e+00, double* %33
store double 0.000000e+00, double* %34
store double 0.000000e+00, double* %35
store double 0.000000e+00, double* %36
store double 0.000000e+00, double* %37
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8** %40
%41 = load i8*, i8** %40
%42 = call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_Init to i32 (i8*, ...)*)(i8* %41)
%43 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 4, i32 8)
store i32 %43, i32* %38
store i32 0, i32* %4
br label %44
44: ; preds = %52, %0
%45 = load i32, i32* %4
%46 = icmp slt i32 %45, 15
br i1 %46, label %47, label %55
47: ; preds = %44
%48 = load i32, i32* %4
%49 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%50 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%51 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %50, i32 4, i32 8)
store i32 %51, i32* %38
br label %52
52: ; preds = %47
%53 = load i32, i32* %4
%54 = add nsw i32 %53, 1
store i32 %54, i32* %4
br label %44
55: ; preds = %44
store i32 0, i32* %4
br label %56
56: ; preds = %75, %55
%57 = load i32, i32* %4
%58 = load double, double* %11
%59 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %58, double* %19)
%60 = icmp slt i32 %57, %59
br i1 %60, label %61, label %78
61: ; preds = %56
%62 = load i32, i32* %4
%63 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%64 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%65 = load double, double* %11
%66 = load double, double* %24
%67 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %64, i32 11, double %65, double %66)
store i32 %67, i32* %39
%68 = load i32, i32* %4
%69 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%70 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%71 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%72 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %70, i8* %71, double 1.000000e+00)
%73 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%74 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %73, double 0.000000e+00)
br label %75
75: ; preds = %61
%76 = load i32, i32* %4
%77 = add nsw i32 %76, 1
store i32 %77, i32* %4
br label %56
78: ; preds = %56
store i32 0, i32* %4
br label %79
79: ; preds = %99, %78
%80 = load i32, i32* %4
%81 = load double, double* %12
%82 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %81, double* %20)
%83 = icmp slt i32 %80, %82
br i1 %83, label %84, label %102
84: ; preds = %79
%85 = load i32, i32* %4
%86 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%87 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%88 = load double, double* %12
%89 = load double, double* %25
%90 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %87, i32 11, double %88, double %89)
store i32 %90, i32* %39
%91 = load i32, i32* %4
%92 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%93 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%94 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%95 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %93, i8* %94, double 1.000000e+00)
%96 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%97 = load double, double* %16
%98 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %96, double %97)
br label %99
99: ; preds = %84
%100 = load i32, i32* %4
%101 = add nsw i32 %100, 1
store i32 %101, i32* %4
br label %79
102: ; preds = %79
store i32 0, i32* %4
br label %103
103: ; preds = %123, %102
%104 = load i32, i32* %4
%105 = load double, double* %14
%106 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %105, double* %22)
%107 = icmp slt i32 %104, %106
br i1 %107, label %108, label %126
108: ; preds = %103
%109 = load i32, i32* %4
%110 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%111 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%112 = load double, double* %14
%113 = load double, double* %26
%114 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %111, i32 11, double %112, double %113)
store i32 %114, i32* %39
%115 = load i32, i32* %4
%116 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%117 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%118 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%119 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %117, i8* %118, double 1.000000e+00)
%120 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%121 = load double, double* %18
%122 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %120, double %121)
br label %123
123: ; preds = %108
%124 = load i32, i32* %4
%125 = add nsw i32 %124, 1
store i32 %125, i32* %4
br label %103
126: ; preds = %103
store i32 0, i32* %4
br label %127
127: ; preds = %146, %126
%128 = load i32, i32* %4
%129 = load double, double* %15
%130 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %129, double* %23)
%131 = icmp slt i32 %128, %130
br i1 %131, label %132, label %149
132: ; preds = %127
%133 = load i32, i32* %4
%134 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%135 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%136 = load double, double* %15
%137 = load double, double* %27
%138 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %135, i32 11, double %136, double %137)
store i32 %138, i32* %39
%139 = load i32, i32* %4
%140 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%141 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%142 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%143 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %141, i8* %142, double 1.000000e+00)
%144 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%145 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %144, double 1.000000e+00)
br label %146
146: ; preds = %132
%147 = load i32, i32* %4
%148 = add nsw i32 %147, 1
store i32 %148, i32* %4
br label %127
149: ; preds = %127
%150 = call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_SetWUnit to i32 (i8*, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%151 = call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_SetTUnit to i32 (i8*, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%152 = call i32 (i32, ...) bitcast (i32 (...)* @PDQ_Solve to i32 (i32, ...)*)(i32 15)
store i32 0, i32* %4
br label %153
153: ; preds = %166, %149
%154 = load i32, i32* %4
%155 = load double, double* %12
%156 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %155, double* %20)
%157 = icmp slt i32 %154, %156
br i1 %157, label %158, label %169
158: ; preds = %153
%159 = load i32, i32* %4
%160 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%161 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%162 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %161, i32 11)
%163 = sitofp i32 %162 to double
%164 = load double, double* %31
%165 = fadd double %164, %163
store double %165, double* %31
br label %166
166: ; preds = %158
%167 = load i32, i32* %4
%168 = add nsw i32 %167, 1
store i32 %168, i32* %4
br label %153
169: ; preds = %153
%170 = load double, double* %20
%171 = load double, double* %31
%172 = fmul double %171, %170
store double %172, double* %31
store i32 0, i32* %4
br label %173
173: ; preds = %186, %169
%174 = load i32, i32* %4
%175 = load double, double* %14
%176 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %175, double* %22)
%177 = icmp slt i32 %174, %176
br i1 %177, label %178, label %189
178: ; preds = %173
%179 = load i32, i32* %4
%180 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%181 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%182 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %181, i32 11)
%183 = sitofp i32 %182 to double
%184 = load double, double* %32
%185 = fadd double %184, %183
store double %185, double* %32
br label %186
186: ; preds = %178
%187 = load i32, i32* %4
%188 = add nsw i32 %187, 1
store i32 %188, i32* %4
br label %173
189: ; preds = %173
%190 = load double, double* %22
%191 = load double, double* %32
%192 = fmul double %191, %190
store double %192, double* %32
store i32 0, i32* %4
br label %193
193: ; preds = %206, %189
%194 = load i32, i32* %4
%195 = load double, double* %15
%196 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %195, double* %23)
%197 = icmp slt i32 %194, %196
br i1 %197, label %198, label %209
198: ; preds = %193
%199 = load i32, i32* %4
%200 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%201 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%202 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %201, i32 11)
%203 = sitofp i32 %202 to double
%204 = load double, double* %33
%205 = fadd double %204, %203
store double %205, double* %33
br label %206
206: ; preds = %198
%207 = load i32, i32* %4
%208 = add nsw i32 %207, 1
store i32 %208, i32* %4
br label %193
209: ; preds = %193
%210 = load double, double* %23
%211 = load double, double* %33
%212 = fmul double %211, %210
store double %212, double* %33
store i32 0, i32* %4
%213 = load i32, i32* %4
%214 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%215 = load i32, i32* %4
%216 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%217 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%218 = call i32 (i32, i8*, ...) bitcast (i32 (...)* @PDQ_GetThruput to i32 (i32, i8*, ...)*)(i32 11, i8* %217)
%219 = sitofp i32 %218 to double
%220 = load double, double* %19
%221 = fmul double %219, %220
store double %221, double* %29
%222 = load double, double* %29
%223 = load double, double* %24
%224 = load double, double* %30
%225 = call double @llvm.fmuladd.f64(double %222, double %223, double %224)
store double %225, double* %30
%226 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%227 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%228 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %226, i8* %227, i32 11)
%229 = sitofp i32 %228 to double
%230 = load double, double* %19
%231 = fmul double %229, %230
store double %231, double* %34
%232 = load i32, i32* %4
%233 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%234 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%235 = call i32 (i32, i8*, ...) bitcast (i32 (...)* @PDQ_GetThruput to i32 (i32, i8*, ...)*)(i32 11, i8* %234)
%236 = sitofp i32 %235 to double
%237 = load double, double* %20
%238 = fmul double %236, %237
store double %238, double* %29
%239 = load double, double* %29
%240 = load double, double* %25
%241 = load double, double* %30
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %30
%243 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%244 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%245 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %243, i8* %244, i32 11)
%246 = sitofp i32 %245 to double
%247 = load double, double* %20
%248 = fmul double %246, %247
store double %248, double* %35
%249 = load double, double* %30
%250 = fmul double %249, 1.880000e+00
store double %250, double* %30
%251 = load i32, i32* %4
%252 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%253 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%254 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%255 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %253, i8* %254, i32 11)
%256 = sitofp i32 %255 to double
%257 = load double, double* %22
%258 = fmul double %256, %257
store double %258, double* %36
%259 = load i32, i32* %4
%260 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%261 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%262 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%263 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %261, i8* %262, i32 11)
%264 = sitofp i32 %263 to double
%265 = load double, double* %23
%266 = fmul double %264, %265
store double %266, double* %37
%267 = load i8*, i8** %40
%268 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.9, i64 0, i64 0), i8* %267)
%269 = load i32, i32* %38
%270 = load i32, i32* %39
%271 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.10, i64 0, i64 0), i32 %269, i32 %270)
%272 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0))
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i32 15)
%274 = load double, double* %11
%275 = load double, double* %11
%276 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %275, double* %19)
%277 = load double, double* %19
%278 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.14, i64 0, i64 0), double %274, i32 %276, double %277)
%279 = load double, double* %12
%280 = load double, double* %12
%281 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %280, double* %20)
%282 = load double, double* %20
%283 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.15, i64 0, i64 0), double %279, i32 %281, double %282)
%284 = load double, double* %14
%285 = load double, double* %14
%286 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %285, double* %22)
%287 = load double, double* %22
%288 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), double %284, i32 %286, double %287)
%289 = load double, double* %15
%290 = load double, double* %15
%291 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double %290, double* %23)
%292 = load double, double* %23
%293 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.17, i64 0, i64 0), double %289, i32 %291, double %292)
%294 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
%295 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.19, i64 0, i64 0), double 9.500000e+01)
%296 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.20, i64 0, i64 0), double 0x4011000000000004)
%297 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.21, i64 0, i64 0), double 0x3FE8000000000007)
%298 = load double, double* %30
%299 = fmul double %298, 1.000000e+02
%300 = fdiv double %299, 1.500000e+01
%301 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.22, i64 0, i64 0), double %300)
%302 = load double, double* %30
%303 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.23, i64 0, i64 0), double %302)
%304 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
%305 = load double, double* %31
%306 = fmul double %305, 1.000000e+02
%307 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.24, i64 0, i64 0), double %306)
%308 = load double, double* %32
%309 = fmul double %308, 1.000000e+02
%310 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.25, i64 0, i64 0), double %309)
%311 = load double, double* %33
%312 = fmul double %311, 1.000000e+02
%313 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.26, i64 0, i64 0), double %312)
%314 = load double, double* %31
%315 = load double, double* %32
%316 = fadd double %314, %315
%317 = load double, double* %33
%318 = fadd double %316, %317
%319 = fmul double %318, 1.000000e+02
%320 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.27, i64 0, i64 0), double %319)
%321 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
%322 = load i32, i32* %4
%323 = load double, double* %34
%324 = fmul double %323, 1.000000e+02
%325 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.28, i64 0, i64 0), i32 %322, double %324)
%326 = load i32, i32* %4
%327 = load double, double* %35
%328 = fmul double %327, 1.000000e+02
%329 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.29, i64 0, i64 0), i32 %326, double %328)
%330 = load i32, i32* %4
%331 = load double, double* %36
%332 = fmul double %331, 1.000000e+02
%333 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.30, i64 0, i64 0), i32 %330, double %332)
%334 = load i32, i32* %4
%335 = load double, double* %37
%336 = fmul double %335, 1.000000e+02
%337 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.31, i64 0, i64 0), i32 %334, double %336)
%338 = load i32, i32* %4
%339 = load double, double* %34
%340 = load double, double* %35
%341 = fadd double %339, %340
%342 = load double, double* %36
%343 = fadd double %341, %342
%344 = load double, double* %37
%345 = fadd double %343, %344
%346 = fmul double %345, 1.000000e+02
%347 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.32, i64 0, i64 0), i32 %338, double %346)
ret i32 0
}

LLVM IR (-O2):
@.str = [10 x i8] c"ABC Model\00"
@.str.1 = [5 x i8] c"MBus\00"
@.str.2 = [4 x i8] c"L2C\00"
@.str.3 = [6 x i8] c"RWhit\00"
@.str.4 = [5 x i8] c"Read\00"
@.str.5 = [6 x i8] c"Write\00"
@.str.6 = [6 x i8] c"Inval\00"
@.str.7 = [5 x i8] c"Reqs\00"
@.str.8 = [5 x i8] c"Cycs\00"
@.str.9 = [23 x i8] c"\0A**** %s Results ****\0A\00"
@.str.10 = [32 x i8] c"PDQ nodes: %d PDQ streams: %d\0A\00"
@.str.11 = [17 x i8] c"Memory Mode: %s\0A\00"
@.str.12 = [10 x i8] c"WriteBack\00"
@.str.13 = [12 x i8] c"Ncpu: %2d\0A\00"
@.str.14 = [31 x i8] c"Nrwht: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.15 = [31 x i8] c"Nrdop: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.16 = [31 x i8] c"Nwbop: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.17 = [31 x i8] c"Ninvl: %5.2f (N:%2d W:%5.2f)\0A\00"
@.str.19 = [23 x i8] c"Hit Ratio: %5.2f %%\0A\00"
@.str.20 = [23 x i8] c"Read Miss: %5.2f %%\0A\00"
@.str.21 = [23 x i8] c"WriteMiss: %5.2f %%\0A\00"
@.str.22 = [23 x i8] c"Ucpu: %5.2f %%\0A\00"
@.str.23 = [20 x i8] c"Pcpu: %5.2f\0A\00"
@.str.24 = [23 x i8] c"Ubus[reads]: %5.2f %%\0A\00"
@.str.25 = [23 x i8] c"Ubus[write]: %5.2f %%\0A\00"
@.str.26 = [23 x i8] c"Ubus[inval]: %5.2f %%\0A\00"
@.str.27 = [23 x i8] c"Ubus[total]: %5.2f %%\0A\00"
@.str.28 = [24 x i8] c"Uca%d[hits]: %5.2f %%\0A\00"
@.str.29 = [24 x i8] c"Uca%d[reads]: %5.2f %%\0A\00"
@.str.30 = [24 x i8] c"Uca%d[write]: %5.2f %%\0A\00"
@.str.31 = [24 x i8] c"Uca%d[inval]: %5.2f %%\0A\00"
@.str.32 = [24 x i8] c"Uca%d[total]: %5.2f %%\0A\00"
define i32 @main() {
%1 = alloca [10 x i8]
%2 = alloca [10 x i8]
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 0
%8 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%9 = bitcast double* %3 to i8*
%10 = bitcast double* %4 to i8*
%11 = bitcast double* %5 to i8*
%12 = bitcast double* %6 to i8*
%13 = tail call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_Init to i32 (i8*, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
%14 = tail call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 4, i32 8)
%15 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%16 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%17 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%18 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%19 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%20 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%21 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%22 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%23 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%24 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%25 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%26 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%27 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%28 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%29 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @PDQ_CreateNode to i32 (i8*, i32, i32, ...)*)(i8* %7, i32 4, i32 8)
%30 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 1.211250e+01, double* %3)
%31 = icmp sgt i32 %30, 0
br i1 %31, label %36, label %32
32: ; preds = %36, %0
%33 = phi i32 [ undef, %0 ], [ %38, %36 ]
%34 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FF4666666666667, double* %4)
%35 = icmp sgt i32 %34, 0
br i1 %35, label %48, label %44
36: ; preds = %0, %36
%37 = phi i32 [ %41, %36 ], [ 0, %0 ]
%38 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %8, i32 11, double 1.211250e+01, double 2.500000e+00)
%39 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %7, i8* %8, double 1.000000e+00)
%40 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, double 0.000000e+00)
%41 = add nuw nsw i32 %37, 1
%42 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 1.211250e+01, double* %3)
%43 = icmp slt i32 %41, %42
br i1 %43, label %36, label %32
44: ; preds = %48, %32
%45 = phi i32 [ %33, %32 ], [ %50, %48 ]
%46 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FDCCCCCCCCCCCCC, double* %5)
%47 = icmp sgt i32 %46, 0
br i1 %47, label %60, label %56
48: ; preds = %32, %48
%49 = phi i32 [ %53, %48 ], [ 0, %32 ]
%50 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %8, i32 11, double 0x3FF4666666666667, double 2.500000e+00)
%51 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %7, i8* %8, double 1.000000e+00)
%52 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, double 2.000000e+01)
%53 = add nuw nsw i32 %49, 1
%54 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FF4666666666667, double* %4)
%55 = icmp slt i32 %53, %54
br i1 %55, label %48, label %44
56: ; preds = %60, %44
%57 = phi i32 [ %45, %44 ], [ %62, %60 ]
%58 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FCCCCCCCCCCCCCC, double* %6)
%59 = icmp sgt i32 %58, 0
br i1 %59, label %68, label %76
60: ; preds = %44, %60
%61 = phi i32 [ %65, %60 ], [ 0, %44 ]
%62 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %8, i32 11, double 0x3FDCCCCCCCCCCCCC, double 2.500000e+00)
%63 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %7, i8* %8, double 1.000000e+00)
%64 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, double 2.000000e+01)
%65 = add nuw nsw i32 %61, 1
%66 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FDCCCCCCCCCCCCC, double* %5)
%67 = icmp slt i32 %65, %66
br i1 %67, label %60, label %56
68: ; preds = %56, %68
%69 = phi i32 [ %73, %68 ], [ 0, %56 ]
%70 = call i32 (i8*, i32, double, double, ...) bitcast (i32 (...)* @PDQ_CreateClosed to i32 (i8*, i32, double, double, ...)*)(i8* %8, i32 11, double 0x3FCCCCCCCCCCCCCC, double 2.500000e+00)
%71 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* %7, i8* %8, double 1.000000e+00)
%72 = call i32 (i8*, i8*, double, ...) bitcast (i32 (...)* @PDQ_SetDemand to i32 (i8*, i8*, double, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, double 1.000000e+00)
%73 = add nuw nsw i32 %69, 1
%74 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FCCCCCCCCCCCCCC, double* %6)
%75 = icmp slt i32 %73, %74
br i1 %75, label %68, label %76
76: ; preds = %68, %56
%77 = phi i32 [ %57, %56 ], [ %70, %68 ]
%78 = call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_SetWUnit to i32 (i8*, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%79 = call i32 (i8*, ...) bitcast (i32 (...)* @PDQ_SetTUnit to i32 (i8*, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%80 = call i32 (i32, ...) bitcast (i32 (...)* @PDQ_Solve to i32 (i32, ...)*)(i32 15)
%81 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FF4666666666667, double* %4)
%82 = icmp sgt i32 %81, 0
br i1 %82, label %83, label %92
83: ; preds = %76, %83
%84 = phi i32 [ %89, %83 ], [ 0, %76 ]
%85 = phi double [ %88, %83 ], [ 0.000000e+00, %76 ]
%86 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, i32 11)
%87 = sitofp i32 %86 to double
%88 = fadd double %85, %87
%89 = add nuw nsw i32 %84, 1
%90 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FF4666666666667, double* %4)
%91 = icmp slt i32 %89, %90
br i1 %91, label %83, label %92
92: ; preds = %83, %76
%93 = phi double [ 0.000000e+00, %76 ], [ %88, %83 ]
%94 = load double, double* %4
%95 = fmul double %93, %94
%96 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FDCCCCCCCCCCCCC, double* %5)
%97 = icmp sgt i32 %96, 0
br i1 %97, label %98, label %107
98: ; preds = %92, %98
%99 = phi i32 [ %104, %98 ], [ 0, %92 ]
%100 = phi double [ %103, %98 ], [ 0.000000e+00, %92 ]
%101 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, i32 11)
%102 = sitofp i32 %101 to double
%103 = fadd double %100, %102
%104 = add nuw nsw i32 %99, 1
%105 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FDCCCCCCCCCCCCC, double* %5)
%106 = icmp slt i32 %104, %105
br i1 %106, label %98, label %107
107: ; preds = %98, %92
%108 = phi double [ 0.000000e+00, %92 ], [ %103, %98 ]
%109 = load double, double* %5
%110 = fmul double %108, %109
%111 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FCCCCCCCCCCCCCC, double* %6)
%112 = icmp sgt i32 %111, 0
br i1 %112, label %113, label %122
113: ; preds = %107, %113
%114 = phi i32 [ %119, %113 ], [ 0, %107 ]
%115 = phi double [ %118, %113 ], [ 0.000000e+00, %107 ]
%116 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i8* %8, i32 11)
%117 = sitofp i32 %116 to double
%118 = fadd double %115, %117
%119 = add nuw nsw i32 %114, 1
%120 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FCCCCCCCCCCCCCC, double* %6)
%121 = icmp slt i32 %119, %120
br i1 %121, label %113, label %122
122: ; preds = %113, %107
%123 = phi double [ 0.000000e+00, %107 ], [ %118, %113 ]
%124 = load double, double* %6
%125 = fmul double %123, %124
%126 = call i32 (i32, i8*, ...) bitcast (i32 (...)* @PDQ_GetThruput to i32 (i32, i8*, ...)*)(i32 11, i8* %8)
%127 = sitofp i32 %126 to double
%128 = load double, double* %3
%129 = fmul double %128, %127
%130 = call double @llvm.fmuladd.f64(double %129, double 2.500000e+00, double 0.000000e+00)
%131 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %7, i8* %8, i32 11)
%132 = sitofp i32 %131 to double
%133 = load double, double* %3
%134 = fmul double %133, %132
%135 = call i32 (i32, i8*, ...) bitcast (i32 (...)* @PDQ_GetThruput to i32 (i32, i8*, ...)*)(i32 11, i8* %8)
%136 = sitofp i32 %135 to double
%137 = load double, double* %4
%138 = fmul double %137, %136
%139 = call double @llvm.fmuladd.f64(double %138, double 2.500000e+00, double %130)
%140 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %7, i8* %8, i32 11)
%141 = sitofp i32 %140 to double
%142 = load double, double* %4
%143 = fmul double %142, %141
%144 = fmul double %139, 1.880000e+00
%145 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %7, i8* %8, i32 11)
%146 = sitofp i32 %145 to double
%147 = load double, double* %5
%148 = fmul double %147, %146
%149 = call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @PDQ_GetUtilization to i32 (i8*, i8*, i32, ...)*)(i8* %7, i8* %8, i32 11)
%150 = sitofp i32 %149 to double
%151 = load double, double* %6
%152 = fmul double %151, %150
%153 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.9, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
%154 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.10, i64 0, i64 0), i32 %29, i32 %77)
%155 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0))
%156 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i32 15)
%157 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 1.211250e+01, double* %3)
%158 = load double, double* %3
%159 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.14, i64 0, i64 0), double 1.211250e+01, i32 %157, double %158)
%160 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FF4666666666667, double* %4)
%161 = load double, double* %4
%162 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.15, i64 0, i64 0), double 0x3FF4666666666667, i32 %160, double %161)
%163 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FDCCCCCCCCCCCCC, double* %5)
%164 = load double, double* %5
%165 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), double 0x3FDCCCCCCCCCCCCC, i32 %163, double %164)
%166 = call i32 (double, double*, ...) bitcast (i32 (...)* @intwt to i32 (double, double*, ...)*)(double 0x3FCCCCCCCCCCCCCC, double* %6)
%167 = load double, double* %6
%168 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.17, i64 0, i64 0), double 0x3FCCCCCCCCCCCCCC, i32 %166, double %167)
%169 = call i32 @putchar(i32 10)
%170 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.19, i64 0, i64 0), double 9.500000e+01)
%171 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.20, i64 0, i64 0), double 0x4011000000000004)
%172 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.21, i64 0, i64 0), double 0x3FE8000000000007)
%173 = fmul double %144, 1.000000e+02
%174 = fdiv double %173, 1.500000e+01
%175 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.22, i64 0, i64 0), double %174)
%176 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.23, i64 0, i64 0), double %144)
%177 = call i32 @putchar(i32 10)
%178 = fmul double %95, 1.000000e+02
%179 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.24, i64 0, i64 0), double %178)
%180 = fmul double %110, 1.000000e+02
%181 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.25, i64 0, i64 0), double %180)
%182 = fmul double %125, 1.000000e+02
%183 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.26, i64 0, i64 0), double %182)
%184 = fadd double %95, %110
%185 = fadd double %184, %125
%186 = fmul double %185, 1.000000e+02
%187 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.27, i64 0, i64 0), double %186)
%188 = call i32 @putchar(i32 10)
%189 = fmul double %134, 1.000000e+02
%190 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.28, i64 0, i64 0), i32 0, double %189)
%191 = fmul double %143, 1.000000e+02
%192 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.29, i64 0, i64 0), i32 0, double %191)
%193 = fmul double %148, 1.000000e+02
%194 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.30, i64 0, i64 0), i32 0, double %193)
%195 = fmul double %152, 1.000000e+02
%196 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.31, i64 0, i64 0), i32 0, double %195)
%197 = fadd double %134, %143
%198 = fadd double %197, %148
%199 = fadd double %198, %152
%200 = fmul double %199, 1.000000e+02
%201 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.32, i64 0, i64 0), i32 0, double %200)
ret i32 0
}