#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 */
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, int *);
int main(void) {
  float refrigerantes[5], valor[6], troco;
  float saldo = 0;
  int TROCO[6], indice, moeda, cont;
  int caso = 1;
  refrigerantes[0] = 3.50;
  refrigerantes[1] = 5.80;
  refrigerantes[2] = 2.10;
  refrigerantes[3] = 1.90;
  refrigerantes[4] = 0.70;
  valor[0] = 0.01;
  valor[1] = 0.05;
  valor[2] = 0.10;
  valor[3] = 0.25;
  valor[4] = 0.50;
  valor[5] = 1.00;
  while (caso) {
    printf("\n\nSeu saldo e de: R$%.2f\n\n", saldo);
    printf("Escolha a opcao:\n\n");
    printf("0 - Sair\n");
    printf("1 - Depositar Moeda\n");
    printf("2 - Escolher refrigerante\n\n");
    printf("Opcao:");
    scanf("%i", &caso);
    switch (caso) {
    case 1:
      printf("\n\nDeposite a sua moeda\n\n");
      printf("0 - 1 Centavo\n");
      printf("1 - 5 Centavos\n");
      printf("2 - 10 Centavos\n");
      printf("3 - 25 Centavos\n");
      printf("4 - 50 Centavos\n");
      printf("5 - 1 Real\n");
      printf("Moeda:");
      scanf("%i", &moeda);
      saldo = saldo + valor[moeda];
      break;
    case 2:
      printf("\n\nEscolha o Refrigerante\n\n");
      printf("0 - Coca-Cola - R$3.50\n");
      printf("1 - Ice - R$5.80\n");
      printf("2 - Guarana - R$2.10\n");
      printf("3 - Suco - R$1.90\n");
      printf("4 - Cafe - R$0.70\n");
      printf("\nRefrigerante:");
      scanf("%i", &indice);
      if (saldo >= refrigerantes[indice]) {
        troco = saldo - refrigerantes[indice];
        cont = 5;
        while (cont >= 0) {
          TROCO[cont] = 0;
          while (troco >= valor[cont]) {
            TROCO[cont] = TROCO[cont] + 1;
            troco = troco - valor[cont];
          }
          cont = cont - 1;
        }
        cont = 0;
        printf("\n\nO seu troco e:\n\n");
        while (cont < 6) {
          printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
          cont++;
        }
        saldo = 0;
      } else {
        printf("\n\n====== Saldo Insuficiente ======");
      }
      break;
    }
    if (caso > 2) {
      printf("Opcao invalida!\n\n");
    }
  }
  if (saldo != 0) {
    cont = 5;
    while (cont >= 0) {
      TROCO[cont] = 0;
      while (saldo >= valor[cont]) {
        TROCO[cont] = TROCO[cont] + 1;
        saldo = saldo - valor[cont];
      }
      cont = cont - 1;
    }
    cont = 0;
    printf("\n\nO seu troco e\n\n");
    while (cont < 6) {
      printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
      cont++;
    }
    saldo = 0;
  }
  printf("\n\nObrigado! Volte sempre!\n\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x1,-0x70(%rbp)
movss  0xedf(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xece(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xebd(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xeac(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xe9b(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xe8a(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  0xe79(%rip),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  0xe68(%rip),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  0xe57(%rip),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  0xe46(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  0xe35(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
cmpl   $0x0,-0x70(%rbp)
je     149f <main+0x37f>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xe42(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xe4f(%rip),%rdi
xor    %eax,%eax
mov    %al,-0x75(%rbp)
call   1030 <printf@plt>
mov    -0x75(%rbp),%al
lea    0xe4e(%rip),%rdi
call   1030 <printf@plt>
mov    -0x75(%rbp),%al
lea    0xe49(%rip),%rdi
call   1030 <printf@plt>
mov    -0x75(%rbp),%al
lea    0xe4f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x75(%rbp),%al
lea    0xe5c(%rip),%rdi
call   1030 <printf@plt>
lea    0xe57(%rip),%rdi
lea    -0x70(%rbp),%rsi
call   1040 <scanf@plt>
mov    -0x70(%rbp),%eax
mov    %eax,-0x74(%rbp)
sub    $0x1,%eax
je     1273 <main+0x153>
jmp    1262 <main+0x142>
mov    -0x74(%rbp),%eax
sub    $0x2,%eax
je     130c <main+0x1ec>
jmp    1482 <main+0x362>
lea    0xe25(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe30(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe31(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe33(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe36(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe39(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe3c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe3a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xdb2(%rip),%rdi
lea    -0x68(%rbp),%rsi
call   1040 <scanf@plt>
movss  -0x48(%rbp),%xmm0
movslq -0x68(%rbp),%rax
addss  -0x40(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    1482 <main+0x362>
lea    0xe0a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe17(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe21(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe25(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe2d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe32(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe37(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd27(%rip),%rdi
lea    -0x64(%rbp),%rsi
call   1040 <scanf@plt>
movss  -0x48(%rbp),%xmm0
movslq -0x64(%rbp),%rax
ucomiss -0x20(%rbp,%rax,4),%xmm0
jb     146f <main+0x34f>
movss  -0x48(%rbp),%xmm0
movslq -0x64(%rbp),%rax
subss  -0x20(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x44(%rbp)
movl   $0x5,-0x6c(%rbp)
cmpl   $0x0,-0x6c(%rbp)
jl     1411 <main+0x2f1>
movslq -0x6c(%rbp),%rax
movl   $0x0,-0x60(%rbp,%rax,4)
movss  -0x44(%rbp),%xmm0
movslq -0x6c(%rbp),%rax
ucomiss -0x40(%rbp,%rax,4),%xmm0
jb     1403 <main+0x2e3>
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%ecx
add    $0x1,%ecx
movslq -0x6c(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
movss  -0x44(%rbp),%xmm0
movslq -0x6c(%rbp),%rax
subss  -0x40(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    13c3 <main+0x2a3>
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    13ad <main+0x28d>
movl   $0x0,-0x6c(%rbp)
lea    0xd8e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x6,-0x6c(%rbp)
jge    1462 <main+0x342>
movslq -0x6c(%rbp),%rax
movss  -0x40(%rbp,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%esi
lea    0xd73(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1426 <main+0x306>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    147d <main+0x35d>
lea    0xd60(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1482 <main+0x362>
cmpl   $0x2,-0x70(%rbp)
jle    149a <main+0x37a>
lea    0xd66(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11d0 <main+0xb0>
movss  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    14bb <main+0x39b>
jp     14bb <main+0x39b>
jmp    157f <main+0x45f>
movl   $0x5,-0x6c(%rbp)
cmpl   $0x0,-0x6c(%rbp)
jl     1526 <main+0x406>
movslq -0x6c(%rbp),%rax
movl   $0x0,-0x60(%rbp,%rax,4)
movss  -0x48(%rbp),%xmm0
movslq -0x6c(%rbp),%rax
ucomiss -0x40(%rbp,%rax,4),%xmm0
jb     1518 <main+0x3f8>
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%ecx
add    $0x1,%ecx
movslq -0x6c(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
movss  -0x48(%rbp),%xmm0
movslq -0x6c(%rbp),%rax
subss  -0x40(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    14d8 <main+0x3b8>
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    14c2 <main+0x3a2>
movl   $0x0,-0x6c(%rbp)
lea    0xcd7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x6,-0x6c(%rbp)
jge    1577 <main+0x457>
movslq -0x6c(%rbp),%rax
movss  -0x40(%rbp,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%esi
lea    0xc5e(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    153b <main+0x41b>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
lea    0xc97(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
movl   $0x1,0x18(%rsp)
movaps 0xeb3(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movl   $0x3f333333,0x70(%rsp)
3f
movaps 0xeaf(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movabs $0x3f8000003f000000,%rax
mov    %rax,0x40(%rsp)
movss  0x34(%rsp),%xmm0
movss  0x38(%rsp),%xmm1
movss  %xmm0,0x24(%rsp)
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x58(%rsp)
movss  %xmm1,0x20(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movsd  %xmm0,0x50(%rsp)
movss  0x3c(%rsp),%xmm0
movss  %xmm0,0x1c(%rsp)
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x48(%rsp)
xorps  %xmm2,%xmm2
movss  0xe5f(%rip),%xmm5
movss  0xe5b(%rip),%xmm4
movss  0xe57(%rip),%xmm3
lea    0xe7c(%rip),%rbx
lea    0xf15(%rip),%r14
lea    0xf20(%rip),%r15
lea    0xf22(%rip),%r13
lea    0xf2f(%rip),%r12
lea    0xe74(%rip),%rbp
jmp    1218 <main+0xe8>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   %eax,%eax
je     168b <main+0x55b>
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0xc(%rsp)
movss  %xmm3,0x10(%rsp)
movss  %xmm2,0x14(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r14,%rdi
call   1030 <puts@plt>
mov    %r15,%rdi
call   1030 <puts@plt>
mov    %r13,%rdi
call   1030 <puts@plt>
mov    %r12,%rdi
call   1030 <puts@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe08(%rip),%rdi
lea    0x18(%rsp),%rsi
call   1050 <scanf@plt>
mov    0x18(%rsp),%eax
cmp    $0x2,%eax
je     1320 <main+0x1f0>
cmp    $0x1,%eax
jne    13e0 <main+0x2b0>
lea    0xf47(%rip),%rdi
call   1030 <puts@plt>
lea    0xf53(%rip),%rdi
call   1030 <puts@plt>
lea    0xf55(%rip),%rdi
call   1030 <puts@plt>
lea    0xf58(%rip),%rdi
call   1030 <puts@plt>
lea    0xf5c(%rip),%rdi
call   1030 <puts@plt>
lea    0xf60(%rip),%rdi
call   1030 <puts@plt>
lea    0xf64(%rip),%rdi
call   1030 <puts@plt>
lea    0xd90(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd7f(%rip),%rdi
lea    0x28(%rsp),%rsi
call   1050 <scanf@plt>
movslq 0x28(%rsp),%rax
movss  0x14(%rsp),%xmm2
addss  0x30(%rsp,%rax,4),%xmm2
jmp    13b5 <main+0x285>
nopl   0x0(%rax,%rax,1)
lea    0xe1b(%rip),%rdi
call   1030 <puts@plt>
lea    0xe29(%rip),%rdi
call   1030 <puts@plt>
lea    0xe34(%rip),%rdi
call   1030 <puts@plt>
lea    0xe39(%rip),%rdi
call   1030 <puts@plt>
lea    0xe42(%rip),%rdi
call   1030 <puts@plt>
lea    0xe48(%rip),%rdi
call   1030 <puts@plt>
lea    0xd15(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xcfd(%rip),%rdi
lea    0x2c(%rsp),%rsi
call   1050 <scanf@plt>
movslq 0x2c(%rsp),%rax
movss  0x60(%rsp,%rax,4),%xmm0
movss  0x14(%rsp),%xmm2
ucomiss %xmm0,%xmm2
jae    141e <main+0x2ee>
lea    0xd01(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movss  0x14(%rsp),%xmm2
movss  0xc7f(%rip),%xmm1
movss  0x10(%rsp),%xmm3
movss  0xc(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
movss  0xc59(%rip),%xmm6
jmp    1619 <main+0x4e9>
nopl   0x0(%rax)
movss  0xc54(%rip),%xmm1
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
movss  0xc(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
movss  0xc28(%rip),%xmm6
movss  0xc24(%rip),%xmm7
cmp    $0x3,%eax
jl     1210 <main+0xe0>
jmp    162e <main+0x4fe>
subss  %xmm0,%xmm2
xor    %ebx,%ebx
movss  0xc04(%rip),%xmm6
ucomiss %xmm6,%xmm2
jae    1458 <main+0x328>
xor    %r13d,%r13d
movss  0xbe4(%rip),%xmm0
movss  0xbf8(%rip),%xmm1
movss  0x10(%rsp),%xmm3
movss  0xc(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
jmp    149d <main+0x36d>
xor    %r13d,%r13d
movss  0xbbd(%rip),%xmm0
movss  0xbd1(%rip),%xmm1
movss  0x10(%rsp),%xmm3
movss  0xc(%rsp),%xmm4
movss  0x8(%rsp),%xmm5
movss  0xbaf(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r13d
addss  %xmm7,%xmm2
ucomiss %xmm6,%xmm2
jae    1490 <main+0x360>
ucomiss %xmm0,%xmm2
jb     14bc <main+0x38c>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%ebx
subss  %xmm0,%xmm2
ucomiss %xmm0,%xmm2
jae    14b0 <main+0x380>
xor    %r15d,%r15d
xor    %ebp,%ebp
movss  0xb6f(%rip),%xmm0
ucomiss %xmm5,%xmm2
jb     14dc <main+0x3ac>
xchg   %ax,%ax
add    $0x1,%ebp
subss  %xmm5,%xmm2
ucomiss %xmm5,%xmm2
jae    14d0 <main+0x3a0>
ucomiss %xmm4,%xmm2
jb     14fd <main+0x3cd>
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r15d
subss  %xmm4,%xmm2
ucomiss %xmm4,%xmm2
jae    14f0 <main+0x3c0>
xor    %r14d,%r14d
xor    %r12d,%r12d
ucomiss %xmm3,%xmm2
jb     151d <main+0x3ed>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
subss  %xmm3,%xmm2
ucomiss %xmm3,%xmm2
jae    1510 <main+0x3e0>
ucomiss %xmm0,%xmm2
jb     153d <main+0x40d>
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r14d
addss  %xmm1,%xmm2
ucomiss %xmm0,%xmm2
jae    1530 <main+0x400>
lea    0xc8a(%rip),%rdi
call   1030 <puts@plt>
lea    0xb43(%rip),%rdi
movsd  0xaf0(%rip),%xmm0
mov    %r14d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xb2a(%rip),%r14
mov    %r14,%rdi
movsd  0x58(%rsp),%xmm0
mov    %r12d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r14,%rdi
movsd  0x50(%rsp),%xmm0
mov    %r15d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r14,%rdi
movsd  0x48(%rsp),%xmm0
mov    %ebp,%esi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r14,%rdi
movsd  0xa94(%rip),%xmm0
mov    %ebx,%esi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r14,%rdi
movsd  0xa90(%rip),%xmm0
mov    %r13d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0xa6a(%rip),%xmm1
xorps  %xmm2,%xmm2
movss  0x24(%rsp),%xmm3
movss  0x20(%rsp),%xmm4
movss  0x1c(%rsp),%xmm5
movss  0xa41(%rip),%xmm6
lea    0xa62(%rip),%rbx
lea    0xafb(%rip),%r14
lea    0xb06(%rip),%r15
lea    0xb08(%rip),%r13
lea    0xb15(%rip),%r12
lea    0xa5a(%rip),%rbp
movss  0xa13(%rip),%xmm7
mov    0x18(%rsp),%eax
cmp    $0x3,%eax
jl     1210 <main+0xe0>
lea    0xb88(%rip),%rdi
movss  %xmm2,0x14(%rsp)
movss  %xmm3,0x10(%rsp)
movss  %xmm4,0xc(%rsp)
movss  %xmm5,0x8(%rsp)
call   1030 <puts@plt>
movss  0x9da(%rip),%xmm7
movss  0x9ce(%rip),%xmm6
movss  0x8(%rsp),%xmm5
movss  0xc(%rsp),%xmm4
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm2
movss  0x9ba(%rip),%xmm1
mov    0x18(%rsp),%eax
jmp    1210 <main+0xe0>
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm2
jne    1699 <main+0x569>
jnp    1809 <main+0x6d9>
xor    %r15d,%r15d
xor    %r14d,%r14d
movss  0x979(%rip),%xmm0
ucomiss 0x982(%rip),%xmm2
jb     16bd <main+0x58d>
add    $0x1,%r14d
addss  %xmm7,%xmm2
ucomiss %xmm6,%xmm2
jae    16b0 <main+0x580>
ucomiss %xmm0,%xmm2
jb     16dd <main+0x5ad>
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r15d
subss  %xmm0,%xmm2
ucomiss %xmm0,%xmm2
jae    16d0 <main+0x5a0>
xor    %r13d,%r13d
xor    %r12d,%r12d
movss  0x94d(%rip),%xmm0
ucomiss %xmm5,%xmm2
jb     16fd <main+0x5cd>
add    $0x1,%r12d
subss  %xmm5,%xmm2
ucomiss %xmm5,%xmm2
jae    16f0 <main+0x5c0>
ucomiss %xmm4,%xmm2
jb     171d <main+0x5ed>
xor    %r13d,%r13d
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r13d
subss  %xmm4,%xmm2
ucomiss %xmm4,%xmm2
jae    1710 <main+0x5e0>
xor    %ebp,%ebp
xor    %ebx,%ebx
ucomiss %xmm3,%xmm2
jb     173c <main+0x60c>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%ebx
subss  %xmm3,%xmm2
ucomiss %xmm3,%xmm2
jae    1730 <main+0x600>
movss  %xmm5,0x8(%rsp)
movss  %xmm4,0xc(%rsp)
movss  %xmm3,0x10(%rsp)
ucomiss 0x8e3(%rip),%xmm2
jb     176c <main+0x63c>
xor    %ebp,%ebp
nopl   0x0(%rax)
add    $0x1,%ebp
addss  %xmm1,%xmm2
ucomiss %xmm0,%xmm2
jae    1760 <main+0x630>
lea    0x974(%rip),%rdi
call   1030 <puts@plt>
lea    0x914(%rip),%rdi
movsd  0x8c1(%rip),%xmm0
mov    %ebp,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x10(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0x8f2(%rip),%rbp
mov    %rbp,%rdi
mov    %ebx,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r13d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r12d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x83d(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r15d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x854(%rip),%xmm0
mov    %rbp,%rdi
mov    %r14d,%esi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x8bc(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [27 x i8] c"\0A\0ASeu saldo e de: R$%.2f\0A\0A\00"
@.str.1 = [19 x i8] c"Escolha a opcao:\0A\0A\00"
@.str.2 = [10 x i8] c"0 - Sair\0A\00"
@.str.3 = [21 x i8] c"1 - Depositar Moeda\0A\00"
@.str.4 = [28 x i8] c"2 - Escolher refrigerante\0A\0A\00"
@.str.5 = [7 x i8] c"Opcao:\00"
@.str.6 = [3 x i8] c"%i\00"
@.str.7 = [25 x i8] c"\0A\0ADeposite a sua moeda\0A\0A\00"
@.str.8 = [15 x i8] c"0 - 1 Centavo\0A\00"
@.str.9 = [16 x i8] c"1 - 5 Centavos\0A\00"
@.str.10 = [17 x i8] c"2 - 10 Centavos\0A\00"
@.str.11 = [17 x i8] c"3 - 25 Centavos\0A\00"
@.str.12 = [17 x i8] c"4 - 50 Centavos\0A\00"
@.str.13 = [12 x i8] c"5 - 1 Real\0A\00"
@.str.14 = [7 x i8] c"Moeda:\00"
@.str.15 = [27 x i8] c"\0A\0AEscolha o Refrigerante\0A\0A\00"
@.str.16 = [24 x i8] c"0 - Coca-Cola - R$3.50\0A\00"
@.str.17 = [18 x i8] c"1 - Ice - R$5.80\0A\00"
@.str.18 = [22 x i8] c"2 - Guarana - R$2.10\0A\00"
@.str.19 = [19 x i8] c"3 - Suco - R$1.90\0A\00"
@.str.20 = [19 x i8] c"4 - Cafe - R$0.70\0A\00"
@.str.21 = [15 x i8] c"\0ARefrigerante:\00"
@.str.22 = [19 x i8] c"\0A\0AO seu troco e:\0A\0A\00"
@.str.23 = [22 x i8] c"Moedas de R$%.2f: %i\0A\00"
@.str.24 = [35 x i8] c"\0A\0A====== Saldo Insuficiente ======\00"
@.str.25 = [18 x i8] c"Opcao invalida!\0A\0A\00"
@.str.26 = [18 x i8] c"\0A\0AO seu troco e\0A\0A\00"
@.str.27 = [28 x i8] c"\0A\0AObrigado! Volte sempre!\0A\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [5 x float]
%3 = alloca [6 x float]
%4 = alloca float
%5 = alloca float
%6 = alloca [6 x i32]
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %1
store float 0.000000e+00, float* %5
store i32 1, i32* %10
%11 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 0
store float 3.500000e+00, float* %11
%12 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 1
store float 0x4017333340000000, float* %12
%13 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 2
store float 0x4000CCCCC0000000, float* %13
%14 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 3
store float 0x3FFE666660000000, float* %14
%15 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 4
store float 0x3FE6666660000000, float* %15
%16 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 0
store float 0x3F847AE140000000, float* %16
%17 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 1
store float 0x3FA99999A0000000, float* %17
%18 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 2
store float 0x3FB99999A0000000, float* %18
%19 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 3
store float 2.500000e-01, float* %19
%20 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 4
store float 5.000000e-01, float* %20
%21 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 5
store float 1.000000e+00, float* %21
br label %22
22: ; preds = %133, %0
%23 = load i32, i32* %10
%24 = icmp ne i32 %23, 0
br i1 %24, label %25, label %134
25: ; preds = %22
%26 = load float, float* %5
%27 = fpext float %26 to double
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0), double %27)
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.1, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0))
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
%34 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %10)
%35 = load i32, i32* %10
switch i32 %35, label %128 [
i32 1, label %36
i32 2, label %52
]
36: ; preds = %25
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.7, i64 0, i64 0))
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0))
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.9, i64 0, i64 0))
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i64 0, i64 0))
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.11, i64 0, i64 0))
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0))
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.14, i64 0, i64 0))
%45 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %8)
%46 = load float, float* %5
%47 = load i32, i32* %8
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %48
%50 = load float, float* %49
%51 = fadd float %46, %50
store float %51, float* %5
br label %128
52: ; preds = %25
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.15, i64 0, i64 0))
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.16, i64 0, i64 0))
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.17, i64 0, i64 0))
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.18, i64 0, i64 0))
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.19, i64 0, i64 0))
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.20, i64 0, i64 0))
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0))
%60 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %7)
%61 = load float, float* %5
%62 = load i32, i32* %7
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 %63
%65 = load float, float* %64
%66 = fcmp oge float %61, %65
br i1 %66, label %67, label %125
67: ; preds = %52
%68 = load float, float* %5
%69 = load i32, i32* %7
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [5 x float], [5 x float]* %2, i64 0, i64 %70
%72 = load float, float* %71
%73 = fsub float %68, %72
store float %73, float* %4
store i32 5, i32* %9
br label %74
74: ; preds = %103, %67
%75 = load i32, i32* %9
%76 = icmp sge i32 %75, 0
br i1 %76, label %77, label %106
77: ; preds = %74
%78 = load i32, i32* %9
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %79
store i32 0, i32* %80
br label %81
81: ; preds = %88, %77
%82 = load float, float* %4
%83 = load i32, i32* %9
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %84
%86 = load float, float* %85
%87 = fcmp oge float %82, %86
br i1 %87, label %88, label %103
88: ; preds = %81
%89 = load i32, i32* %9
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %90
%92 = load i32, i32* %91
%93 = add nsw i32 %92, 1
%94 = load i32, i32* %9
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %95
store i32 %93, i32* %96
%97 = load float, float* %4
%98 = load i32, i32* %9
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %99
%101 = load float, float* %100
%102 = fsub float %97, %101
store float %102, float* %4
br label %81
103: ; preds = %81
%104 = load i32, i32* %9
%105 = sub nsw i32 %104, 1
store i32 %105, i32* %9
br label %74
106: ; preds = %74
store i32 0, i32* %9
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.22, i64 0, i64 0))
br label %108
108: ; preds = %111, %106
%109 = load i32, i32* %9
%110 = icmp slt i32 %109, 6
br i1 %110, label %111, label %124
111: ; preds = %108
%112 = load i32, i32* %9
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %113
%115 = load float, float* %114
%116 = fpext float %115 to double
%117 = load i32, i32* %9
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %118
%120 = load i32, i32* %119
%121 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %116, i32 %120)
%122 = load i32, i32* %9
%123 = add nsw i32 %122, 1
store i32 %123, i32* %9
br label %108
124: ; preds = %108
store float 0.000000e+00, float* %5
br label %127
125: ; preds = %52
%126 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.24, i64 0, i64 0))
br label %127
127: ; preds = %125, %124
br label %128
128: ; preds = %25, %127, %36
%129 = load i32, i32* %10
%130 = icmp sgt i32 %129, 2
br i1 %130, label %131, label %133
131: ; preds = %128
%132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.25, i64 0, i64 0))
br label %133
133: ; preds = %131, %128
br label %22
134: ; preds = %22
%135 = load float, float* %5
%136 = fcmp une float %135, 0.000000e+00
br i1 %136, label %137, label %189
137: ; preds = %134
store i32 5, i32* %9
br label %138
138: ; preds = %167, %137
%139 = load i32, i32* %9
%140 = icmp sge i32 %139, 0
br i1 %140, label %141, label %170
141: ; preds = %138
%142 = load i32, i32* %9
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %143
store i32 0, i32* %144
br label %145
145: ; preds = %152, %141
%146 = load float, float* %5
%147 = load i32, i32* %9
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %148
%150 = load float, float* %149
%151 = fcmp oge float %146, %150
br i1 %151, label %152, label %167
152: ; preds = %145
%153 = load i32, i32* %9
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %154
%156 = load i32, i32* %155
%157 = add nsw i32 %156, 1
%158 = load i32, i32* %9
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %159
store i32 %157, i32* %160
%161 = load float, float* %5
%162 = load i32, i32* %9
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %163
%165 = load float, float* %164
%166 = fsub float %161, %165
store float %166, float* %5
br label %145
167: ; preds = %145
%168 = load i32, i32* %9
%169 = sub nsw i32 %168, 1
store i32 %169, i32* %9
br label %138
170: ; preds = %138
store i32 0, i32* %9
%171 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.26, i64 0, i64 0))
br label %172
172: ; preds = %175, %170
%173 = load i32, i32* %9
%174 = icmp slt i32 %173, 6
br i1 %174, label %175, label %188
175: ; preds = %172
%176 = load i32, i32* %9
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds [6 x float], [6 x float]* %3, i64 0, i64 %177
%179 = load float, float* %178
%180 = fpext float %179 to double
%181 = load i32, i32* %9
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 %182
%184 = load i32, i32* %183
%185 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %180, i32 %184)
%186 = load i32, i32* %9
%187 = add nsw i32 %186, 1
store i32 %187, i32* %9
br label %172
188: ; preds = %172
store float 0.000000e+00, float* %5
br label %189
189: ; preds = %188, %134
%190 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.27, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str = [27 x i8] c"\0A\0ASeu saldo e de: R$%.2f\0A\0A\00"
@.str.5 = [7 x i8] c"Opcao:\00"
@.str.6 = [3 x i8] c"%i\00"
@.str.14 = [7 x i8] c"Moeda:\00"
@.str.21 = [15 x i8] c"\0ARefrigerante:\00"
@.str.23 = [22 x i8] c"Moedas de R$%.2f: %i\0A\00"
@.str.24 = [35 x i8] c"\0A\0A====== Saldo Insuficiente ======\00"
@str = [27 x i8] c"\0A\0AObrigado! Volte sempre!\0A\00"
@str.28 = [17 x i8] c"\0A\0AO seu troco e\0A\00"
@str.29 = [18 x i8] c"Escolha a opcao:\0A\00"
@str.30 = [9 x i8] c"0 - Sair\00"
@str.31 = [20 x i8] c"1 - Depositar Moeda\00"
@str.32 = [27 x i8] c"2 - Escolher refrigerante\0A\00"
@str.33 = [26 x i8] c"\0A\0AEscolha o Refrigerante\0A\00"
@str.34 = [23 x i8] c"0 - Coca-Cola - R$3.50\00"
@str.35 = [17 x i8] c"1 - Ice - R$5.80\00"
@str.36 = [21 x i8] c"2 - Guarana - R$2.10\00"
@str.37 = [18 x i8] c"3 - Suco - R$1.90\00"
@str.38 = [18 x i8] c"4 - Cafe - R$0.70\00"
@str.39 = [17 x i8] c"Opcao invalida!\0A\00"
@str.40 = [18 x i8] c"\0A\0AO seu troco e:\0A\00"
@str.41 = [24 x i8] c"\0A\0ADeposite a sua moeda\0A\00"
@str.42 = [14 x i8] c"0 - 1 Centavo\00"
@str.43 = [15 x i8] c"1 - 5 Centavos\00"
@str.44 = [16 x i8] c"2 - 10 Centavos\00"
@str.45 = [16 x i8] c"3 - 25 Centavos\00"
@str.46 = [16 x i8] c"4 - 50 Centavos\00"
@str.47 = [11 x i8] c"5 - 1 Real\00"
define i32 @main() {
%1 = alloca [5 x float]
%2 = alloca [6 x float]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = bitcast [5 x float]* %1 to i8*
%7 = bitcast [6 x float]* %2 to i8*
%8 = bitcast i32* %3 to i8*
%9 = bitcast i32* %4 to i8*
%10 = bitcast i32* %5 to i8*
store i32 1, i32* %5
%11 = bitcast [5 x float]* %1 to <4 x float>*
store <4 x float> <float 3.500000e+00, float 0x4017333340000000, float 0x4000CCCCC0000000, float 0x3FFE666660000000>, <4 x float>* %11
%12 = getelementptr inbounds [5 x float], [5 x float]* %1, i64 0, i64 4
store float 0x3FE6666660000000, float* %12
%13 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 1
%14 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 2
%15 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 3
%16 = bitcast [6 x float]* %2 to <4 x float>*
store <4 x float> <float 0x3F847AE140000000, float 0x3FA99999A0000000, float 0x3FB99999A0000000, float 2.500000e-01>, <4 x float>* %16
%17 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 4
store float 5.000000e-01, float* %17
%18 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 5
store float 1.000000e+00, float* %18
%19 = load float, float* %13
%20 = fpext float %19 to double
%21 = load float, float* %14
%22 = fpext float %21 to double
%23 = load float, float* %15
%24 = fpext float %23 to double
%25 = load float, float* %17
%26 = fpext float %25 to double
br label %27
27: ; preds = %0, %159
%28 = phi float [ %149, %159 ], [ 0x3FA99999A0000000, %0 ]
%29 = phi float [ %150, %159 ], [ 0x3FB99999A0000000, %0 ]
%30 = phi float [ %151, %159 ], [ 2.500000e-01, %0 ]
%31 = phi float [ %152, %159 ], [ 5.000000e-01, %0 ]
%32 = phi float [ %154, %159 ], [ 0.000000e+00, %0 ]
%33 = fpext float %32 to double
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0), double %33)
%35 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.29, i64 0, i64 0))
%36 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.30, i64 0, i64 0))
%37 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.31, i64 0, i64 0))
%38 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.32, i64 0, i64 0))
%39 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
%40 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %5)
%41 = load i32, i32* %5
switch i32 %41, label %148 [
i32 1, label %42
i32 2, label %57
]
42: ; preds = %27
%43 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.41, i64 0, i64 0))
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.42, i64 0, i64 0))
%45 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.43, i64 0, i64 0))
%46 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.44, i64 0, i64 0))
%47 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.45, i64 0, i64 0))
%48 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.46, i64 0, i64 0))
%49 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.47, i64 0, i64 0))
%50 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.14, i64 0, i64 0))
%51 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %4)
%52 = load i32, i32* %4
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [6 x float], [6 x float]* %2, i64 0, i64 %53
%55 = load float, float* %54
%56 = fadd float %32, %55
br label %141
57: ; preds = %27
%58 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.33, i64 0, i64 0))
%59 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.34, i64 0, i64 0))
%60 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.35, i64 0, i64 0))
%61 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.36, i64 0, i64 0))
%62 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.37, i64 0, i64 0))
%63 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.38, i64 0, i64 0))
%64 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0))
%65 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %3)
%66 = load i32, i32* %3
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds [5 x float], [5 x float]* %1, i64 0, i64 %67
%69 = load float, float* %68
%70 = fcmp ult float %32, %69
br i1 %70, label %139, label %71
71: ; preds = %57
%72 = fsub float %32, %69
%73 = fcmp ult float %72, 1.000000e+00
br i1 %73, label %80, label %74
74: ; preds = %71, %74
%75 = phi i32 [ %77, %74 ], [ 0, %71 ]
%76 = phi float [ %78, %74 ], [ %72, %71 ]
%77 = add nuw nsw i32 %75, 1
%78 = fadd float %76, -1.000000e+00
%79 = fcmp ult float %78, 1.000000e+00
br i1 %79, label %80, label %74
80: ; preds = %74, %71
%81 = phi i32 [ 0, %71 ], [ %77, %74 ]
%82 = phi float [ %72, %71 ], [ %78, %74 ]
%83 = fcmp ult float %82, %31
br i1 %83, label %90, label %84
84: ; preds = %80, %84
%85 = phi i32 [ %87, %84 ], [ 0, %80 ]
%86 = phi float [ %88, %84 ], [ %82, %80 ]
%87 = add nuw nsw i32 %85, 1
%88 = fsub float %86, %31
%89 = fcmp ult float %88, %31
br i1 %89, label %90, label %84
90: ; preds = %84, %80
%91 = phi i32 [ 0, %80 ], [ %87, %84 ]
%92 = phi float [ %82, %80 ], [ %88, %84 ]
%93 = fcmp ult float %92, %30
br i1 %93, label %100, label %94
94: ; preds = %90, %94
%95 = phi i32 [ %97, %94 ], [ 0, %90 ]
%96 = phi float [ %98, %94 ], [ %92, %90 ]
%97 = add nuw nsw i32 %95, 1
%98 = fsub float %96, %30
%99 = fcmp ult float %98, %30
br i1 %99, label %100, label %94
100: ; preds = %94, %90
%101 = phi i32 [ 0, %90 ], [ %97, %94 ]
%102 = phi float [ %92, %90 ], [ %98, %94 ]
%103 = fcmp ult float %102, %29
br i1 %103, label %110, label %104
104: ; preds = %100, %104
%105 = phi i32 [ %107, %104 ], [ 0, %100 ]
%106 = phi float [ %108, %104 ], [ %102, %100 ]
%107 = add nuw nsw i32 %105, 1
%108 = fsub float %106, %29
%109 = fcmp ult float %108, %29
br i1 %109, label %110, label %104
110: ; preds = %104, %100
%111 = phi i32 [ 0, %100 ], [ %107, %104 ]
%112 = phi float [ %102, %100 ], [ %108, %104 ]
%113 = fcmp ult float %112, %28
br i1 %113, label %120, label %114
114: ; preds = %110, %114
%115 = phi i32 [ %117, %114 ], [ 0, %110 ]
%116 = phi float [ %118, %114 ], [ %112, %110 ]
%117 = add nuw nsw i32 %115, 1
%118 = fsub float %116, %28
%119 = fcmp ult float %118, %28
br i1 %119, label %120, label %114
120: ; preds = %114, %110
%121 = phi i32 [ 0, %110 ], [ %117, %114 ]
%122 = phi float [ %112, %110 ], [ %118, %114 ]
%123 = fcmp ult float %122, 0x3F847AE140000000
br i1 %123, label %130, label %124
124: ; preds = %120, %124
%125 = phi i32 [ %127, %124 ], [ 0, %120 ]
%126 = phi float [ %128, %124 ], [ %122, %120 ]
%127 = add nuw nsw i32 %125, 1
%128 = fadd float %126, 0xBF847AE140000000
%129 = fcmp ult float %128, 0x3F847AE140000000
br i1 %129, label %130, label %124
130: ; preds = %124, %120
%131 = phi i32 [ 0, %120 ], [ %127, %124 ]
%132 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.40, i64 0, i64 0))
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double 0x3F847AE140000000, i32 %131)
%134 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %20, i32 %121)
%135 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %22, i32 %111)
%136 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %24, i32 %101)
%137 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %26, i32 %91)
%138 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double 1.000000e+00, i32 %81)
br label %141
139: ; preds = %57
%140 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.24, i64 0, i64 0))
br label %141
141: ; preds = %130, %42, %139
%142 = phi float [ %28, %42 ], [ %28, %139 ], [ %19, %130 ]
%143 = phi float [ %29, %42 ], [ %29, %139 ], [ %21, %130 ]
%144 = phi float [ %30, %42 ], [ %30, %139 ], [ %23, %130 ]
%145 = phi float [ %31, %42 ], [ %31, %139 ], [ %25, %130 ]
%146 = phi float [ %56, %42 ], [ %32, %139 ], [ 0.000000e+00, %130 ]
%147 = load i32, i32* %5
br label %148
148: ; preds = %141, %27
%149 = phi float [ %142, %141 ], [ %28, %27 ]
%150 = phi float [ %143, %141 ], [ %29, %27 ]
%151 = phi float [ %144, %141 ], [ %30, %27 ]
%152 = phi float [ %145, %141 ], [ %31, %27 ]
%153 = phi i32 [ %147, %141 ], [ %41, %27 ]
%154 = phi float [ %146, %141 ], [ %32, %27 ]
%155 = icmp sgt i32 %153, 2
br i1 %155, label %156, label %159
156: ; preds = %148
%157 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.39, i64 0, i64 0))
%158 = load i32, i32* %5
br label %159
159: ; preds = %156, %148
%160 = phi i32 [ %158, %156 ], [ %153, %148 ]
%161 = icmp eq i32 %160, 0
br i1 %161, label %162, label %27
162: ; preds = %159
%163 = fcmp une float %154, 0.000000e+00
br i1 %163, label %164, label %235
164: ; preds = %162
%165 = fcmp ult float %154, 1.000000e+00
br i1 %165, label %172, label %166
166: ; preds = %164, %166
%167 = phi i32 [ %169, %166 ], [ 0, %164 ]
%168 = phi float [ %170, %166 ], [ %154, %164 ]
%169 = add nuw nsw i32 %167, 1
%170 = fadd float %168, -1.000000e+00
%171 = fcmp ult float %170, 1.000000e+00
br i1 %171, label %172, label %166
172: ; preds = %166, %164
%173 = phi i32 [ 0, %164 ], [ %169, %166 ]
%174 = phi float [ %154, %164 ], [ %170, %166 ]
%175 = fcmp ult float %174, %152
br i1 %175, label %182, label %176
176: ; preds = %172, %176
%177 = phi i32 [ %179, %176 ], [ 0, %172 ]
%178 = phi float [ %180, %176 ], [ %174, %172 ]
%179 = add nuw nsw i32 %177, 1
%180 = fsub float %178, %152
%181 = fcmp ult float %180, %152
br i1 %181, label %182, label %176
182: ; preds = %176, %172
%183 = phi i32 [ 0, %172 ], [ %179, %176 ]
%184 = phi float [ %174, %172 ], [ %180, %176 ]
%185 = fcmp ult float %184, %151
br i1 %185, label %192, label %186
186: ; preds = %182, %186
%187 = phi i32 [ %189, %186 ], [ 0, %182 ]
%188 = phi float [ %190, %186 ], [ %184, %182 ]
%189 = add nuw nsw i32 %187, 1
%190 = fsub float %188, %151
%191 = fcmp ult float %190, %151
br i1 %191, label %192, label %186
192: ; preds = %186, %182
%193 = phi i32 [ 0, %182 ], [ %189, %186 ]
%194 = phi float [ %184, %182 ], [ %190, %186 ]
%195 = fcmp ult float %194, %150
br i1 %195, label %202, label %196
196: ; preds = %192, %196
%197 = phi i32 [ %199, %196 ], [ 0, %192 ]
%198 = phi float [ %200, %196 ], [ %194, %192 ]
%199 = add nuw nsw i32 %197, 1
%200 = fsub float %198, %150
%201 = fcmp ult float %200, %150
br i1 %201, label %202, label %196
202: ; preds = %196, %192
%203 = phi i32 [ 0, %192 ], [ %199, %196 ]
%204 = phi float [ %194, %192 ], [ %200, %196 ]
%205 = fcmp ult float %204, %149
br i1 %205, label %212, label %206
206: ; preds = %202, %206
%207 = phi i32 [ %209, %206 ], [ 0, %202 ]
%208 = phi float [ %210, %206 ], [ %204, %202 ]
%209 = add nuw nsw i32 %207, 1
%210 = fsub float %208, %149
%211 = fcmp ult float %210, %149
br i1 %211, label %212, label %206
212: ; preds = %206, %202
%213 = phi i32 [ 0, %202 ], [ %209, %206 ]
%214 = phi float [ %204, %202 ], [ %210, %206 ]
%215 = fcmp ult float %214, 0x3F847AE140000000
br i1 %215, label %222, label %216
216: ; preds = %212, %216
%217 = phi i32 [ %219, %216 ], [ 0, %212 ]
%218 = phi float [ %220, %216 ], [ %214, %212 ]
%219 = add nuw nsw i32 %217, 1
%220 = fadd float %218, 0xBF847AE140000000
%221 = fcmp ult float %220, 0x3F847AE140000000
br i1 %221, label %222, label %216
222: ; preds = %216, %212
%223 = phi i32 [ 0, %212 ], [ %219, %216 ]
%224 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.28, i64 0, i64 0))
%225 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double 0x3F847AE140000000, i32 %223)
%226 = fpext float %149 to double
%227 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %226, i32 %213)
%228 = fpext float %150 to double
%229 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %228, i32 %203)
%230 = fpext float %151 to double
%231 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %230, i32 %193)
%232 = fpext float %152 to double
%233 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double %232, i32 %183)
%234 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.23, i64 0, i64 0), double 1.000000e+00, i32 %173)
br label %235
235: ; preds = %222, %162
%236 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str, i64 0, i64 0))
ret i32 0
}