#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 */
char getchar();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ putchar(char);
int scanf(char *, double *);
int main(void) {
  char option;
  double apound, bpound, cpound, pound, temp;
  double total, ship, price;
  bool DISCOUNT_FLAG;
  apound = bpound = cpound = pound = total = ship = price = 0;
  printf(
      "**************The ABC Mail Order Grocery Order System*************\n");
  printf(
      "Enter the letter corresponding to the desired vegetable or action:\n");
  printf("a) Artichokes               b) Beets\n");
  printf("c) Carrots\n");
  printf("q) Quit ordering process\n");
  printf(
      "******************************************************************\n");
  while ((option = getchar()) == 'a' || option == 'b' || option == 'c') {
    switch (option) {
    case 'a':
      printf("Please enter pounds of artichokes (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        apound += temp;
        printf("More pounds of artichokes? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    case 'b':
      printf("Please enter pounds of beets (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        bpound += temp;
        printf("More pounds of beets? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    case 'c':
      printf("Please enter pounds of carrots (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        cpound += temp;
        printf("More pounds of carrots? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    }
    if ('q' == option)
      break;
    putchar('\n');
    printf(
        "**************The ABC Mail Order Grocery Order System*************\n");
    printf(
        "Enter the letter corresponding to the desired vegetable or action:\n");
    printf("a) Artichokes               b) Beets\n");
    printf("c) Carrots\n");
    printf("q) Quit ordering process\n");
    printf(
        "******************************************************************\n");
  }
  price = apound * 2.05 + bpound * 1.15 + cpound * 1.09;
  if (price > 100) {
    price *= (1 - 0.05);
    DISCOUNT_FLAG = true;
  } else
    DISCOUNT_FLAG = false;
  pound = apound + bpound + cpound;
  if (pound < 5)
    ship = 6.5;
  else if (pound < 20)
    ship = 14;
  else
    ship = 14 + (pound - 20) * 0.5;
  total = price + ship;
  printf("\n---------------------------------------------------------\n");
  printf("Artichokes: $%.2f/pound, you have ordered %.1f pound(s)\n", 2.05,
         apound);
  printf("Beets: $%.2f/pound, you have ordered %.1f pound(s)\n", 1.15, bpound);
  printf("Carrots: $%.2f/pound, you have ordered %.1f pound(s)\n", 1.09,
         cpound);
  printf("---------------------------------------------------------\n");
  printf("Summary:\n\n");
  printf("Artichokes: $%.2f\nBeets: $%.2f\nCarrots: $%.2f\n", 2.05 * apound,
         1.15 * bpound, 1.09 * cpound);
  printf("Total: $%.2f\n\n", price);
  if (DISCOUNT_FLAG)
    printf("Discount: -$%.2f\n",
           0.05 * (apound * 2.05 + bpound * 1.15 + cpound * 1.09));
  printf("Shipment: $%.2f\n", ship);
  printf("Grand Total Cost: $%.2f\n\n", total);
  printf("Thank you for purchasing!\nYour vegetables will arrive within 3 "
         "minutes:)\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    0xeca(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf00(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf36(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf4e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf4c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf58(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %al,-0x5(%rbp)
movsbl %al,%ecx
mov    $0x1,%al
cmp    $0x61,%ecx
mov    %al,-0x4d(%rbp)
je     1215 <main+0xd5>
movsbl -0x5(%rbp),%ecx
mov    $0x1,%al
cmp    $0x62,%ecx
mov    %al,-0x4d(%rbp)
je     1215 <main+0xd5>
movsbl -0x5(%rbp),%eax
cmp    $0x63,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    1225 <main+0xe5>
jmp    1416 <main+0x2d6>
movsbl -0x5(%rbp),%eax
mov    %eax,-0x54(%rbp)
sub    $0x61,%eax
je     125c <main+0x11c>
jmp    123a <main+0xfa>
mov    -0x54(%rbp),%eax
sub    $0x62,%eax
je     12c7 <main+0x187>
jmp    124b <main+0x10b>
mov    -0x54(%rbp),%eax
sub    $0x63,%eax
je     1332 <main+0x1f2>
jmp    139d <main+0x25d>
lea    0xf0d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xf31(%rip),%rdi
lea    -0x30(%rbp),%rsi
call   1060 <scanf@plt>
cmp    $0x1,%eax
jne    12a5 <main+0x165>
movsd  -0x30(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    0xf0d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    126a <main+0x12a>
jmp    12aa <main+0x16a>
mov    $0x0,%al
call   1050 <getchar@plt>
movsbl %al,%eax
cmp    $0xa,%eax
je     12c2 <main+0x182>
jmp    12aa <main+0x16a>
jmp    139d <main+0x25d>
lea    0xf02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xec6(%rip),%rdi
lea    -0x30(%rbp),%rsi
call   1060 <scanf@plt>
cmp    $0x1,%eax
jne    1310 <main+0x1d0>
movsd  -0x30(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
lea    0xef9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    12d5 <main+0x195>
jmp    1315 <main+0x1d5>
mov    $0x0,%al
call   1050 <getchar@plt>
movsbl %al,%eax
cmp    $0xa,%eax
je     132d <main+0x1ed>
jmp    1315 <main+0x1d5>
jmp    139d <main+0x25d>
lea    0xee9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe5b(%rip),%rdi
lea    -0x30(%rbp),%rsi
call   1060 <scanf@plt>
cmp    $0x1,%eax
jne    137b <main+0x23b>
movsd  -0x30(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    0xee2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1340 <main+0x200>
jmp    1380 <main+0x240>
mov    $0x0,%al
call   1050 <getchar@plt>
movsbl %al,%eax
cmp    $0xa,%eax
je     1398 <main+0x258>
jmp    1380 <main+0x240>
jmp    139d <main+0x25d>
movsbl -0x5(%rbp),%ecx
mov    $0x71,%eax
cmp    %ecx,%eax
jne    13b3 <main+0x273>
jmp    1416 <main+0x2d6>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xc94(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xcca(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd00(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd18(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd16(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd22(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    11db <main+0x9b>
movsd  -0x10(%rbp),%xmm1
movsd  0xbf5(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  0xbe0(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
movsd  0xbc3(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xba1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1487 <main+0x347>
movsd  0xbaf(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x4c(%rbp)
jmp    148e <main+0x34e>
movl   $0x0,-0x4c(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xb7e(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    14c7 <main+0x387>
movsd  0xb8b(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    151f <main+0x3df>
movsd  0xb61(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    14ec <main+0x3ac>
movsd  0xb5e(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    151a <main+0x3da>
movsd  -0x28(%rbp),%xmm0
movsd  0xb37(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xb33(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb2f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    151f <main+0x3df>
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
lea    0xd43(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  -0x10(%rbp),%xmm1
lea    0xd6c(%rip),%rdi
movsd  0xac0(%rip),%xmm0
mov    $0x2,%al
call   1040 <printf@plt>
movsd  -0x18(%rbp),%xmm1
lea    0xd8a(%rip),%rdi
movsd  0xaad(%rip),%xmm0
mov    $0x2,%al
call   1040 <printf@plt>
movsd  -0x20(%rbp),%xmm1
lea    0xda3(%rip),%rdi
movsd  0xa82(%rip),%xmm0
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xce5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdb5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  0xa5f(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  0xa5a(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0xa3d(%rip),%xmm2
mulsd  -0x20(%rbp),%xmm2
lea    0xd8b(%rip),%rdi
mov    $0x3,%al
call   1040 <printf@plt>
movsd  -0x48(%rbp),%xmm0
lea    0xda7(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
cmpl   $0x0,-0x4c(%rbp)
je     164c <main+0x50c>
movsd  -0x10(%rbp),%xmm0
movsd  0xa10(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0x9fb(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0x9de(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xa16(%rip),%xmm0
mulsd  %xmm1,%xmm0
lea    0xd5b(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x40(%rbp),%xmm0
lea    0xd5a(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x38(%rbp),%xmm0
lea    0xd58(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xd64(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
lea    0x10d9(%rip),%rdi
call   1040 <puts@plt>
lea    0x1110(%rip),%rdi
call   1040 <puts@plt>
lea    0x1147(%rip),%rdi
call   1040 <puts@plt>
lea    0x1160(%rip),%rdi
call   1040 <puts@plt>
lea    0x115f(%rip),%rdi
call   1040 <puts@plt>
lea    0x116c(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1060 <getchar@plt>
mov    %eax,%r14d
lea    -0x61(%r14),%eax
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
cmp    $0x2,%al
ja     13f0 <main+0x2a0>
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0xe75(%rip),%r15
lea    0x28(%rsp),%rbx
lea    0x1159(%rip),%r12
lea    0x11a4(%rip),%r13
lea    0x11f2(%rip),%rbp
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
jmp    1290 <main+0x140>
nopl   0x0(%rax,%rax,1)
cmp    $0x71,%r14b
je     13f0 <main+0x2a0>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1003(%rip),%rdi
call   1040 <puts@plt>
lea    0x103a(%rip),%rdi
call   1040 <puts@plt>
lea    0x1071(%rip),%rdi
call   1040 <puts@plt>
lea    0x108a(%rip),%rdi
call   1040 <puts@plt>
lea    0x1089(%rip),%rdi
call   1040 <puts@plt>
lea    0x1096(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1060 <getchar@plt>
mov    %eax,%r14d
add    $0x9f,%al
cmp    $0x3,%al
jae    13f0 <main+0x2a0>
cmp    $0x63,%r14b
je     1310 <main+0x1c0>
cmp    $0x62,%r14b
je     1380 <main+0x230>
cmp    $0x61,%r14b
jne    122a <main+0xda>
lea    0x1119(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
cmp    $0x1,%eax
movsd  0x8(%rsp),%xmm0
jne    12fa <main+0x1aa>
nopl   0x0(%rax,%rax,1)
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    %rbp,%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
movsd  0x8(%rsp),%xmm0
cmp    $0x1,%eax
je     12d0 <main+0x180>
movsd  %xmm0,0x8(%rsp)
xor    %eax,%eax
call   1060 <getchar@plt>
cmp    $0xa,%al
jne    1300 <main+0x1b0>
jmp    1220 <main+0xd0>
lea    0xef9(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
cmp    $0x1,%eax
movsd  0x10(%rsp),%xmm0
jne    136a <main+0x21a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
mov    %r12,%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
movsd  0x10(%rsp),%xmm0
cmp    $0x1,%eax
je     1340 <main+0x1f0>
movsd  %xmm0,0x10(%rsp)
xor    %eax,%eax
call   1060 <getchar@plt>
cmp    $0xa,%al
jne    1370 <main+0x220>
jmp    1220 <main+0xd0>
lea    0xfef(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
cmp    $0x1,%eax
movsd  0x18(%rsp),%xmm0
jne    13da <main+0x28a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
mov    %r13,%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1070 <scanf@plt>
movsd  0x18(%rsp),%xmm0
cmp    $0x1,%eax
je     13b0 <main+0x260>
movsd  %xmm0,0x18(%rsp)
xor    %eax,%eax
call   1060 <getchar@plt>
cmp    $0xa,%al
jne    13e0 <main+0x290>
jmp    1220 <main+0xd0>
movsd  0xc08(%rip),%xmm1
movsd  0x18(%rsp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0xbfe(%rip),%xmm0
movsd  0x8(%rsp),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm1,0x48(%rsp)
addsd  %xmm1,%xmm0
movsd  0xbea(%rip),%xmm5
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm5
addsd  %xmm0,%xmm5
movsd  0xbdc(%rip),%xmm0
mulsd  %xmm5,%xmm0
movsd  0xbd8(%rip),%xmm4
cmpltsd %xmm5,%xmm4
andpd  %xmm4,%xmm0
movapd %xmm5,0x50(%rsp)
andnpd %xmm5,%xmm4
orpd   %xmm0,%xmm4
movapd %xmm4,0x30(%rsp)
addsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0xbbb(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    148b <main+0x33b>
movsd  0xba5(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
jmp    14c7 <main+0x377>
movsd  0xbad(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    14a9 <main+0x359>
movsd  0xb97(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
jmp    14c7 <main+0x377>
addsd  0xb97(%rip),%xmm2
mulsd  0xb97(%rip),%xmm2
addsd  0xb77(%rip),%xmm2
movsd  %xmm2,0x20(%rsp)
lea    0xcb4(%rip),%rdi
call   1040 <puts@plt>
lea    0xb8a(%rip),%rdi
movsd  0xb26(%rip),%xmm0
movsd  0x8(%rsp),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xba7(%rip),%rdi
movsd  0xb02(%rip),%xmm0
movsd  0x18(%rsp),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xbbf(%rip),%rdi
movsd  0xaf6(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xc55(%rip),%rdi
call   1040 <puts@plt>
lea    0xc83(%rip),%rdi
call   1040 <puts@plt>
movsd  0x8(%rsp),%xmm0
mulsd  0xabb(%rip),%xmm0
movsd  0x10(%rsp),%xmm2
mulsd  0xab5(%rip),%xmm2
lea    0xba5(%rip),%rdi
movsd  0x48(%rsp),%xmm1
mov    $0x3,%al
call   1050 <printf@plt>
lea    0xbc0(%rip),%rdi
movaps 0x30(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
movapd 0x50(%rsp),%xmm0
ucomisd 0xa90(%rip),%xmm0
jbe    15a8 <main+0x458>
mulsd  0xabe(%rip),%xmm0
lea    0xba4(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movsd  0x20(%rsp),%xmm0
movapd 0x30(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,0x30(%rsp)
lea    0xb92(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
lea    0xb95(%rip),%rdi
movaps 0x30(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
lea    0xbe1(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [68 x i8] c"**************The ABC Mail Order Grocery Order System*************\0A\00"
@.str.1 = [68 x i8] c"Enter the letter corresponding to the desired vegetable or action:\0A\00"
@.str.2 = [38 x i8] c"a) Artichokes b) Beets\0A\00"
@.str.3 = [12 x i8] c"c) Carrots\0A\00"
@.str.4 = [26 x i8] c"q) Quit ordering process\0A\00"
@.str.5 = [68 x i8] c"******************************************************************\0A\00"
@.str.6 = [50 x i8] c"Please enter pounds of artichokes (q to finish):\0A\00"
@.str.7 = [4 x i8] c"%lf\00"
@.str.8 = [42 x i8] c"More pounds of artichokes? (q to finish)\0A\00"
@.str.9 = [45 x i8] c"Please enter pounds of beets (q to finish):\0A\00"
@.str.10 = [37 x i8] c"More pounds of beets? (q to finish)\0A\00"
@.str.11 = [47 x i8] c"Please enter pounds of carrots (q to finish):\0A\00"
@.str.12 = [39 x i8] c"More pounds of carrots? (q to finish)\0A\00"
@.str.13 = [60 x i8] c"\0A---------------------------------------------------------\0A\00"
@.str.14 = [57 x i8] c"Artichokes: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.15 = [52 x i8] c"Beets: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.16 = [54 x i8] c"Carrots: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.17 = [59 x i8] c"---------------------------------------------------------\0A\00"
@.str.18 = [11 x i8] c"Summary:\0A\0A\00"
@.str.19 = [47 x i8] c"Artichokes: $%.2f\0ABeets: $%.2f\0ACarrots: $%.2f\0A\00"
@.str.20 = [15 x i8] c"Total: $%.2f\0A\0A\00"
@.str.21 = [18 x i8] c"Discount: -$%.2f\0A\00"
@.str.22 = [17 x i8] c"Shipment: $%.2f\0A\00"
@.str.23 = [26 x i8] c"Grand Total Cost: $%.2f\0A\0A\00"
@.str.24 = [74 x i8] c"Thank you for purchasing!\0AYour vegetables will arrive within 3 minutes:)\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca i32
store i32 0, i32* %1
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %6
store double 0.000000e+00, double* %5
store double 0.000000e+00, double* %4
store double 0.000000e+00, double* %3
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.1, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.4, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.5, i64 0, i64 0))
br label %18
18: ; preds = %91, %0
%19 = call signext i8 (...) @getchar()
store i8 %19, i8* %2
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 97
br i1 %21, label %30, label %22
22: ; preds = %18
%23 = load i8, i8* %2
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 98
br i1 %25, label %30, label %26
26: ; preds = %22
%27 = load i8, i8* %2
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 99
br label %30
30: ; preds = %26, %22, %18
%31 = phi i1 [ true, %22 ], [ true, %18 ], [ %29, %26 ]
br i1 %31, label %32, label %99
32: ; preds = %30
%33 = load i8, i8* %2
%34 = sext i8 %33 to i32
switch i32 %34, label %86 [
i32 97, label %35
i32 98, label %52
i32 99, label %69
]
35: ; preds = %32
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.6, i64 0, i64 0))
br label %37
37: ; preds = %40, %35
%38 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %7)
%39 = icmp eq i32 %38, 1
br i1 %39, label %40, label %45
40: ; preds = %37
%41 = load double, double* %7
%42 = load double, double* %3
%43 = fadd double %42, %41
store double %43, double* %3
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.8, i64 0, i64 0))
br label %37
45: ; preds = %37
br label %46
46: ; preds = %50, %45
%47 = call signext i8 (...) @getchar()
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 10
br i1 %49, label %50, label %51
50: ; preds = %46
br label %46
51: ; preds = %46
br label %86
52: ; preds = %32
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.9, i64 0, i64 0))
br label %54
54: ; preds = %57, %52
%55 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %7)
%56 = icmp eq i32 %55, 1
br i1 %56, label %57, label %62
57: ; preds = %54
%58 = load double, double* %7
%59 = load double, double* %4
%60 = fadd double %59, %58
store double %60, double* %4
%61 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.10, i64 0, i64 0))
br label %54
62: ; preds = %54
br label %63
63: ; preds = %67, %62
%64 = call signext i8 (...) @getchar()
%65 = sext i8 %64 to i32
%66 = icmp ne i32 %65, 10
br i1 %66, label %67, label %68
67: ; preds = %63
br label %63
68: ; preds = %63
br label %86
69: ; preds = %32
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.11, i64 0, i64 0))
br label %71
71: ; preds = %74, %69
%72 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %7)
%73 = icmp eq i32 %72, 1
br i1 %73, label %74, label %79
74: ; preds = %71
%75 = load double, double* %7
%76 = load double, double* %5
%77 = fadd double %76, %75
store double %77, double* %5
%78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.12, i64 0, i64 0))
br label %71
79: ; preds = %71
br label %80
80: ; preds = %84, %79
%81 = call signext i8 (...) @getchar()
%82 = sext i8 %81 to i32
%83 = icmp ne i32 %82, 10
br i1 %83, label %84, label %85
84: ; preds = %80
br label %80
85: ; preds = %80
br label %86
86: ; preds = %32, %85, %68, %51
%87 = load i8, i8* %2
%88 = sext i8 %87 to i32
%89 = icmp eq i32 113, %88
br i1 %89, label %90, label %91
90: ; preds = %86
br label %99
91: ; preds = %86
%92 = call i32 @putchar(i8 signext 10)
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str, i64 0, i64 0))
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.1, i64 0, i64 0))
%95 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0))
%96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%97 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.4, i64 0, i64 0))
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.5, i64 0, i64 0))
br label %18
99: ; preds = %90, %30
%100 = load double, double* %3
%101 = load double, double* %4
%102 = fmul double %101, 1.150000e+00
%103 = call double @llvm.fmuladd.f64(double %100, double 2.050000e+00, double %102)
%104 = load double, double* %5
%105 = call double @llvm.fmuladd.f64(double %104, double 1.090000e+00, double %103)
store double %105, double* %10
%106 = load double, double* %10
%107 = fcmp ogt double %106, 1.000000e+02
br i1 %107, label %108, label %111
108: ; preds = %99
%109 = load double, double* %10
%110 = fmul double %109, 0x3FEE666666666666
store double %110, double* %10
store i32 1, i32* %11
br label %112
111: ; preds = %99
store i32 0, i32* %11
br label %112
112: ; preds = %111, %108
%113 = load double, double* %3
%114 = load double, double* %4
%115 = fadd double %113, %114
%116 = load double, double* %5
%117 = fadd double %115, %116
store double %117, double* %6
%118 = load double, double* %6
%119 = fcmp olt double %118, 5.000000e+00
br i1 %119, label %120, label %121
120: ; preds = %112
store double 6.500000e+00, double* %9
br label %130
121: ; preds = %112
%122 = load double, double* %6
%123 = fcmp olt double %122, 2.000000e+01
br i1 %123, label %124, label %125
124: ; preds = %121
store double 1.400000e+01, double* %9
br label %129
125: ; preds = %121
%126 = load double, double* %6
%127 = fsub double %126, 2.000000e+01
%128 = call double @llvm.fmuladd.f64(double %127, double 5.000000e-01, double 1.400000e+01)
store double %128, double* %9
br label %129
129: ; preds = %125, %124
br label %130
130: ; preds = %129, %120
%131 = load double, double* %10
%132 = load double, double* %9
%133 = fadd double %131, %132
store double %133, double* %8
%134 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.13, i64 0, i64 0))
%135 = load double, double* %3
%136 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.14, i64 0, i64 0), double 2.050000e+00, double %135)
%137 = load double, double* %4
%138 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.15, i64 0, i64 0), double 1.150000e+00, double %137)
%139 = load double, double* %5
%140 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.16, i64 0, i64 0), double 1.090000e+00, double %139)
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.17, i64 0, i64 0))
%142 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.18, i64 0, i64 0))
%143 = load double, double* %3
%144 = fmul double 2.050000e+00, %143
%145 = load double, double* %4
%146 = fmul double 1.150000e+00, %145
%147 = load double, double* %5
%148 = fmul double 1.090000e+00, %147
%149 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.19, i64 0, i64 0), double %144, double %146, double %148)
%150 = load double, double* %10
%151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.20, i64 0, i64 0), double %150)
%152 = load i32, i32* %11
%153 = icmp ne i32 %152, 0
br i1 %153, label %154, label %163
154: ; preds = %130
%155 = load double, double* %3
%156 = load double, double* %4
%157 = fmul double %156, 1.150000e+00
%158 = call double @llvm.fmuladd.f64(double %155, double 2.050000e+00, double %157)
%159 = load double, double* %5
%160 = call double @llvm.fmuladd.f64(double %159, double 1.090000e+00, double %158)
%161 = fmul double 5.000000e-02, %160
%162 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.21, i64 0, i64 0), double %161)
br label %163
163: ; preds = %154, %130
%164 = load double, double* %9
%165 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.22, i64 0, i64 0), double %164)
%166 = load double, double* %8
%167 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.23, i64 0, i64 0), double %166)
%168 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.24, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str.7 = [4 x i8] c"%lf\00"
@.str.14 = [57 x i8] c"Artichokes: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.15 = [52 x i8] c"Beets: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.16 = [54 x i8] c"Carrots: $%.2f/pound, you have ordered %.1f pound(s)\0A\00"
@.str.19 = [47 x i8] c"Artichokes: $%.2f\0ABeets: $%.2f\0ACarrots: $%.2f\0A\00"
@.str.20 = [15 x i8] c"Total: $%.2f\0A\0A\00"
@.str.21 = [18 x i8] c"Discount: -$%.2f\0A\00"
@.str.22 = [17 x i8] c"Shipment: $%.2f\0A\00"
@.str.23 = [26 x i8] c"Grand Total Cost: $%.2f\0A\0A\00"
@str.30 = [59 x i8] c"\0A---------------------------------------------------------\00"
@str.31 = [58 x i8] c"---------------------------------------------------------\00"
@str.32 = [10 x i8] c"Summary:\0A\00"
@str.33 = [73 x i8] c"Thank you for purchasing!\0AYour vegetables will arrive within 3 minutes:)\00"
@str.34 = [46 x i8] c"Please enter pounds of carrots (q to finish):\00"
@str.35 = [67 x i8] c"**************The ABC Mail Order Grocery Order System*************\00"
@str.36 = [67 x i8] c"Enter the letter corresponding to the desired vegetable or action:\00"
@str.37 = [37 x i8] c"a) Artichokes b) Beets\00"
@str.38 = [11 x i8] c"c) Carrots\00"
@str.39 = [25 x i8] c"q) Quit ordering process\00"
@str.40 = [67 x i8] c"******************************************************************\00"
@str.41 = [38 x i8] c"More pounds of carrots? (q to finish)\00"
@str.42 = [44 x i8] c"Please enter pounds of beets (q to finish):\00"
@str.43 = [36 x i8] c"More pounds of beets? (q to finish)\00"
@str.44 = [49 x i8] c"Please enter pounds of artichokes (q to finish):\00"
@str.45 = [41 x i8] c"More pounds of artichokes? (q to finish)\00"
define i32 @main() {
%1 = alloca double
%2 = bitcast double* %1 to i8*
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.35, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.36, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.37, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.38, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.39, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.40, i64 0, i64 0))
%9 = call signext i8 (...) @getchar()
%10 = add i8 %9, -97
%11 = icmp ult i8 %10, 3
br i1 %11, label %12, label %84
12: ; preds = %0, %70
%13 = phi i8 [ %81, %70 ], [ %9, %0 ]
%14 = phi double [ %71, %70 ], [ 0.000000e+00, %0 ]
%15 = phi double [ %72, %70 ], [ 0.000000e+00, %0 ]
%16 = phi double [ %73, %70 ], [ 0.000000e+00, %0 ]
switch i8 %13, label %70 [
i8 97, label %17
i8 98, label %33
i8 99, label %49
]
17: ; preds = %12
%18 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.44, i64 0, i64 0))
%19 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%20 = icmp eq i32 %19, 1
br i1 %20, label %23, label %21
21: ; preds = %23, %17
%22 = phi double [ %16, %17 ], [ %26, %23 ]
br label %30
23: ; preds = %17, %23
%24 = phi double [ %26, %23 ], [ %16, %17 ]
%25 = load double, double* %1
%26 = fadd double %24, %25
%27 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.45, i64 0, i64 0))
%28 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%29 = icmp eq i32 %28, 1
br i1 %29, label %23, label %21
30: ; preds = %21, %30
%31 = call signext i8 (...) @getchar()
%32 = icmp eq i8 %31, 10
br i1 %32, label %65, label %30
33: ; preds = %12
%34 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str.42, i64 0, i64 0))
%35 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%36 = icmp eq i32 %35, 1
br i1 %36, label %39, label %37
37: ; preds = %39, %33
%38 = phi double [ %15, %33 ], [ %42, %39 ]
br label %46
39: ; preds = %33, %39
%40 = phi double [ %42, %39 ], [ %15, %33 ]
%41 = load double, double* %1
%42 = fadd double %40, %41
%43 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.43, i64 0, i64 0))
%44 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%45 = icmp eq i32 %44, 1
br i1 %45, label %39, label %37
46: ; preds = %37, %46
%47 = call signext i8 (...) @getchar()
%48 = icmp eq i8 %47, 10
br i1 %48, label %65, label %46
49: ; preds = %12
%50 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.34, i64 0, i64 0))
%51 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%52 = icmp eq i32 %51, 1
br i1 %52, label %55, label %53
53: ; preds = %55, %49
%54 = phi double [ %14, %49 ], [ %58, %55 ]
br label %62
55: ; preds = %49, %55
%56 = phi double [ %58, %55 ], [ %14, %49 ]
%57 = load double, double* %1
%58 = fadd double %56, %57
%59 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.41, i64 0, i64 0))
%60 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), double* %1)
%61 = icmp eq i32 %60, 1
br i1 %61, label %55, label %53
62: ; preds = %53, %62
%63 = call signext i8 (...) @getchar()
%64 = icmp eq i8 %63, 10
br i1 %64, label %65, label %62
65: ; preds = %62, %46, %30
%66 = phi double [ %22, %30 ], [ %16, %46 ], [ %16, %62 ]
%67 = phi double [ %15, %30 ], [ %38, %46 ], [ %15, %62 ]
%68 = phi double [ %14, %30 ], [ %14, %46 ], [ %54, %62 ]
%69 = icmp eq i8 %13, 113
br i1 %69, label %84, label %70
70: ; preds = %12, %65
%71 = phi double [ %68, %65 ], [ %14, %12 ]
%72 = phi double [ %67, %65 ], [ %15, %12 ]
%73 = phi double [ %66, %65 ], [ %16, %12 ]
%74 = call i32 @putchar(i8 signext 10)
%75 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.35, i64 0, i64 0))
%76 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.36, i64 0, i64 0))
%77 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.37, i64 0, i64 0))
%78 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.38, i64 0, i64 0))
%79 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.39, i64 0, i64 0))
%80 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.40, i64 0, i64 0))
%81 = call signext i8 (...) @getchar()
%82 = add i8 %81, -97
%83 = icmp ult i8 %82, 3
br i1 %83, label %12, label %84
84: ; preds = %65, %70, %0
%85 = phi double [ 0.000000e+00, %0 ], [ %73, %70 ], [ %66, %65 ]
%86 = phi double [ 0.000000e+00, %0 ], [ %72, %70 ], [ %67, %65 ]
%87 = phi double [ 0.000000e+00, %0 ], [ %71, %70 ], [ %68, %65 ]
%88 = fmul double %86, 1.150000e+00
%89 = call double @llvm.fmuladd.f64(double %85, double 2.050000e+00, double %88)
%90 = call double @llvm.fmuladd.f64(double %87, double 1.090000e+00, double %89)
%91 = fcmp ogt double %90, 1.000000e+02
%92 = fmul double %90, 0x3FEE666666666666
%93 = select i1 %91, double %92, double %90
%94 = fadd double %85, %86
%95 = fadd double %94, %87
%96 = fcmp olt double %95, 5.000000e+00
br i1 %96, label %102, label %97
97: ; preds = %84
%98 = fcmp olt double %95, 2.000000e+01
br i1 %98, label %102, label %99
99: ; preds = %97
%100 = fadd double %95, -2.000000e+01
%101 = call double @llvm.fmuladd.f64(double %100, double 5.000000e-01, double 1.400000e+01)
br label %102
102: ; preds = %97, %84, %99
%103 = phi double [ %101, %99 ], [ 6.500000e+00, %84 ], [ 1.400000e+01, %97 ]
%104 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.30, i64 0, i64 0))
%105 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @.str.14, i64 0, i64 0), double 2.050000e+00, double %85)
%106 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @.str.15, i64 0, i64 0), double 1.150000e+00, double %86)
%107 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str.16, i64 0, i64 0), double 1.090000e+00, double %87)
%108 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.31, i64 0, i64 0))
%109 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.32, i64 0, i64 0))
%110 = fmul double %85, 2.050000e+00
%111 = fmul double %87, 1.090000e+00
%112 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.19, i64 0, i64 0), double %110, double %88, double %111)
%113 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.20, i64 0, i64 0), double %93)
br i1 %91, label %114, label %117
114: ; preds = %102
%115 = fmul double %90, 5.000000e-02
%116 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.21, i64 0, i64 0), double %115)
br label %117
117: ; preds = %114, %102
%118 = fadd double %93, %103
%119 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.22, i64 0, i64 0), double %103)
%120 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.23, i64 0, i64 0), double %118)
%121 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.33, i64 0, i64 0))
ret i32 0
}