#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*/ plot_hexline(char *, int, float, float, float, float);
void plot_hexagon(char *scaled_hexagon, int hexagon_size) {
  int line, i;
  char ink;
  float x_offset[6];
  float y_offset[6];
  float start_x, start_y;
  float end_x, end_y;
  x_offset[0] = 0.0;
  x_offset[1] = 0.86;
  x_offset[2] = 0.86;
  x_offset[3] = 0.0;
  x_offset[4] = -0.86;
  x_offset[5] = -0.86;
  y_offset[0] = 1.0;
  y_offset[1] = 0.5;
  y_offset[2] = -0.5;
  y_offset[3] = -1.0;
  y_offset[4] = -0.5;
  y_offset[5] = 0.5;
  for (line = 0; line < 5; line++) {
    start_x = ((float)hexagon_size / 2.0) +
              (((float)hexagon_size / 2.0) * x_offset[line]);
    start_y = ((float)hexagon_size / 2.0) +
              (((float)hexagon_size / 2.0) * y_offset[line]);
    end_x = ((float)hexagon_size / 2.0) +
            (((float)hexagon_size / 2.0) * x_offset[line + 1]);
    end_y = ((float)hexagon_size / 2.0) +
            (((float)hexagon_size / 2.0) * y_offset[line + 1]);
    plot_hexline(scaled_hexagon, hexagon_size, start_x, start_y, end_x, end_y);
  }
  start_x = ((float)hexagon_size / 2.0) +
            (((float)hexagon_size / 2.0) * x_offset[line]);
  start_y = ((float)hexagon_size / 2.0) +
            (((float)hexagon_size / 2.0) * y_offset[line]);
  end_x =
      ((float)hexagon_size / 2.0) + (((float)hexagon_size / 2.0) * x_offset[0]);
  end_y =
      ((float)hexagon_size / 2.0) + (((float)hexagon_size / 2.0) * y_offset[0]);
  plot_hexline(scaled_hexagon, hexagon_size, start_x, start_y, end_x, end_y);
  for (line = 0; line < hexagon_size; line++) {
    ink = '0';
    for (i = 0; i < hexagon_size; i++) {
      if (scaled_hexagon[(hexagon_size * line) + i] == '1') {
        if (i < (hexagon_size / 2)) {
          ink = '1';
        } else {
          ink = '0';
        }
      }
      if (ink == '1') {
        scaled_hexagon[(hexagon_size * line) + i] = ink;
      }
    }
  }
}


x86 assembly (clang, -O0):
<plot_hexagon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  0xee5(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xed8(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xebf(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xeb2(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xea1(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  0xe88(%rip),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  0xe7f(%rip),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  0xe76(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  0xe65(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  0xe54(%rip),%xmm0
movss  %xmm0,-0x3c(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x5,-0x10(%rbp)
jge    131c <plot_hexagon+0x20c>
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe45(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe30(%rip),%xmm2
divsd  %xmm2,%xmm0
movslq -0x10(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdfc(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xde7(%rip),%xmm2
divsd  %xmm2,%xmm0
movslq -0x10(%rbp),%rax
movss  -0x50(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdb3(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd9e(%rip),%xmm2
divsd  %xmm2,%xmm0
mov    -0x10(%rbp),%eax
add    $0x1,%eax
cltq
movss  -0x30(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd66(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd51(%rip),%xmm2
divsd  %xmm2,%xmm0
mov    -0x10(%rbp),%eax
add    $0x1,%eax
cltq
movss  -0x50(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
movss  -0x54(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  -0x5c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm3
call   1030 <plot_hexline@plt>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    11b8 <plot_hexagon+0xa8>
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xceb(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcd6(%rip),%xmm2
divsd  %xmm2,%xmm0
movslq -0x10(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xca2(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc8d(%rip),%xmm2
divsd  %xmm2,%xmm0
movslq -0x10(%rbp),%rax
movss  -0x50(%rbp,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc59(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc44(%rip),%xmm2
divsd  %xmm2,%xmm0
movss  -0x30(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc15(%rip),%xmm0
divsd  %xmm0,%xmm1
cvtsi2ssl -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc00(%rip),%xmm2
divsd  %xmm2,%xmm0
movss  -0x50(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
movss  -0x54(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  -0x5c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm3
call   1030 <plot_hexline@plt>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1518 <plot_hexagon+0x408>
movb   $0x30,-0x15(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1505 <plot_hexagon+0x3f5>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    14ce <plot_hexagon+0x3be>
mov    -0x14(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x64(%rbp),%eax
cmp    %ecx,%eax
jge    14c5 <plot_hexagon+0x3b5>
movb   $0x31,-0x15(%rbp)
jmp    14c9 <plot_hexagon+0x3b9>
movb   $0x30,-0x15(%rbp)
jmp    14ce <plot_hexagon+0x3be>
movsbl -0x15(%rbp),%eax
cmp    $0x31,%eax
jne    14f2 <plot_hexagon+0x3e2>
mov    -0x15(%rbp),%dl
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    14f7 <plot_hexagon+0x3e7>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1474 <plot_hexagon+0x364>
jmp    150a <plot_hexagon+0x3fa>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    145d <plot_hexagon+0x34d>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plot_hexagon>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x28,%rsp
mov    %esi,%r15d
mov    %rdi,%r14
cvtsi2ss %esi,%xmm0
cvtss2sd %xmm0,%xmm4
movsd  0xed0(%rip),%xmm5
mulsd  %xmm5,%xmm4
movsd  %xmm4,0x10(%rsp)
xorpd  %xmm1,%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm4,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0xc(%rsp)
movapd %xmm4,%xmm1
addsd  %xmm4,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,0x24(%rsp)
movsd  0xe9b(%rip),%xmm3
mulsd  %xmm4,%xmm3
addsd  %xmm4,%xmm3
cvtsd2ss %xmm3,%xmm2
movss  %xmm2,0x1c(%rsp)
mulsd  %xmm4,%xmm5
addsd  %xmm4,%xmm5
xorps  %xmm3,%xmm3
cvtsd2ss %xmm5,%xmm3
movss  %xmm3,0x8(%rsp)
call   1030 <plot_hexline@plt>
movsd  0xe6f(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
movss  %xmm3,0x4(%rsp)
mov    %r14,%rdi
mov    %r15d,%esi
movss  0x1c(%rsp),%xmm0
movss  0x8(%rsp),%xmm1
movaps %xmm0,%xmm2
call   1030 <plot_hexline@plt>
movsd  0x10(%rsp),%xmm0
subsd  %xmm0,%xmm0
xorps  %xmm3,%xmm3
cvtsd2ss %xmm0,%xmm3
movss  %xmm3,0x20(%rsp)
mov    %r14,%rdi
mov    %r15d,%esi
movss  0x1c(%rsp),%xmm0
movss  0x4(%rsp),%xmm1
movss  0xc(%rsp),%xmm2
call   1030 <plot_hexline@plt>
movsd  0xe06(%rip),%xmm0
movsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm2,%xmm2
cvtsd2ss %xmm0,%xmm2
movss  %xmm2,0x10(%rsp)
mov    %r14,%rdi
mov    %r15d,%esi
movss  0xc(%rsp),%xmm0
movss  0x20(%rsp),%xmm1
movss  0x4(%rsp),%xmm3
call   1030 <plot_hexline@plt>
mov    %r14,%rdi
mov    %r15d,%esi
movss  0x10(%rsp),%xmm0
movss  0x4(%rsp),%xmm1
movaps %xmm0,%xmm2
movss  0x8(%rsp),%xmm3
call   1030 <plot_hexline@plt>
mov    %r14,%rdi
mov    %r15d,%esi
movss  0x10(%rsp),%xmm0
movss  0x8(%rsp),%xmm1
movss  0xc(%rsp),%xmm2
movss  0x24(%rsp),%xmm3
call   1030 <plot_hexline@plt>
test   %r15d,%r15d
jle    134e <plot_hexagon+0x23e>
mov    %r15d,%eax
shr    %eax
mov    %r15d,%r8d
mov    %r8d,%edx
and    $0xfffffffe,%edx
lea    0x1(%r14),%rsi
xor    %ebp,%ebp
jmp    12c5 <plot_hexagon+0x1b5>
nopl   0x0(%rax)
movb   $0x31,(%r14,%rdi,1)
add    $0x1,%rbp
add    %r8,%rsi
cmp    %r8,%rbp
je     134e <plot_hexagon+0x23e>
mov    $0x30,%cl
xor    %ebx,%ebx
cmp    $0x1,%r15d
jne    12ff <plot_hexagon+0x1ef>
test   $0x1,%r8b
je     12b5 <plot_hexagon+0x1a5>
mov    %rbp,%rdi
imul   %r8,%rdi
add    %rbx,%rdi
cmpb   $0x31,(%r14,%rdi,1)
jne    1340 <plot_hexagon+0x230>
cmp    %rax,%rbx
jb     12b0 <plot_hexagon+0x1a0>
jmp    12b5 <plot_hexagon+0x1a5>
nopl   (%rax)
movb   $0x31,(%rsi,%rbx,1)
mov    $0x31,%cl
add    $0x2,%rbx
cmp    %rbx,%rdx
je     12cf <plot_hexagon+0x1bf>
cmpb   $0x31,-0x1(%rsi,%rbx,1)
jne    1310 <plot_hexagon+0x200>
mov    $0x30,%cl
cmp    %rax,%rbx
jb     1315 <plot_hexagon+0x205>
jmp    131c <plot_hexagon+0x20c>
nop
cmp    $0x31,%cl
jne    131c <plot_hexagon+0x20c>
movb   $0x31,-0x1(%rsi,%rbx,1)
mov    $0x31,%cl
cmpb   $0x31,(%rsi,%rbx,1)
jne    1330 <plot_hexagon+0x220>
lea    0x1(%rbx),%rdi
mov    $0x30,%cl
cmp    %rax,%rdi
jb     12f0 <plot_hexagon+0x1e0>
jmp    12f6 <plot_hexagon+0x1e6>
nop
cmp    $0x31,%cl
je     12f0 <plot_hexagon+0x1e0>
jmp    12f6 <plot_hexagon+0x1e6>
nopw   0x0(%rax,%rax,1)
cmp    $0x31,%cl
je     12b0 <plot_hexagon+0x1a0>
jmp    12b5 <plot_hexagon+0x1a5>
add    $0x28,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @plot_hexagon(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i8
%8 = alloca [6 x float]
%9 = alloca [6 x float]
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
store i8* %0, i8** %3
store i32 %1, i32* %4
%14 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 0
store float 0.000000e+00, float* %14
%15 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 1
store float 0x3FEB851EC0000000, float* %15
%16 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 2
store float 0x3FEB851EC0000000, float* %16
%17 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 3
store float 0.000000e+00, float* %17
%18 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 4
store float 0xBFEB851EC0000000, float* %18
%19 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 5
store float 0xBFEB851EC0000000, float* %19
%20 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 0
store float 1.000000e+00, float* %20
%21 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 1
store float 5.000000e-01, float* %21
%22 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 2
store float -5.000000e-01, float* %22
%23 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 3
store float -1.000000e+00, float* %23
%24 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 4
store float -5.000000e-01, float* %24
%25 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 5
store float 5.000000e-01, float* %25
store i32 0, i32* %5
br label %26
26: ; preds = %99, %2
%27 = load i32, i32* %5
%28 = icmp slt i32 %27, 5
br i1 %28, label %29, label %102
29: ; preds = %26
%30 = load i32, i32* %4
%31 = sitofp i32 %30 to float
%32 = fpext float %31 to double
%33 = fdiv double %32, 2.000000e+00
%34 = load i32, i32* %4
%35 = sitofp i32 %34 to float
%36 = fpext float %35 to double
%37 = fdiv double %36, 2.000000e+00
%38 = load i32, i32* %5
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 %39
%41 = load float, float* %40
%42 = fpext float %41 to double
%43 = call double @llvm.fmuladd.f64(double %37, double %42, double %33)
%44 = fptrunc double %43 to float
store float %44, float* %10
%45 = load i32, i32* %4
%46 = sitofp i32 %45 to float
%47 = fpext float %46 to double
%48 = fdiv double %47, 2.000000e+00
%49 = load i32, i32* %4
%50 = sitofp i32 %49 to float
%51 = fpext float %50 to double
%52 = fdiv double %51, 2.000000e+00
%53 = load i32, i32* %5
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 %54
%56 = load float, float* %55
%57 = fpext float %56 to double
%58 = call double @llvm.fmuladd.f64(double %52, double %57, double %48)
%59 = fptrunc double %58 to float
store float %59, float* %11
%60 = load i32, i32* %4
%61 = sitofp i32 %60 to float
%62 = fpext float %61 to double
%63 = fdiv double %62, 2.000000e+00
%64 = load i32, i32* %4
%65 = sitofp i32 %64 to float
%66 = fpext float %65 to double
%67 = fdiv double %66, 2.000000e+00
%68 = load i32, i32* %5
%69 = add nsw i32 %68, 1
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 %70
%72 = load float, float* %71
%73 = fpext float %72 to double
%74 = call double @llvm.fmuladd.f64(double %67, double %73, double %63)
%75 = fptrunc double %74 to float
store float %75, float* %12
%76 = load i32, i32* %4
%77 = sitofp i32 %76 to float
%78 = fpext float %77 to double
%79 = fdiv double %78, 2.000000e+00
%80 = load i32, i32* %4
%81 = sitofp i32 %80 to float
%82 = fpext float %81 to double
%83 = fdiv double %82, 2.000000e+00
%84 = load i32, i32* %5
%85 = add nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 %86
%88 = load float, float* %87
%89 = fpext float %88 to double
%90 = call double @llvm.fmuladd.f64(double %83, double %89, double %79)
%91 = fptrunc double %90 to float
store float %91, float* %13
%92 = load i8*, i8** %3
%93 = load i32, i32* %4
%94 = load float, float* %10
%95 = load float, float* %11
%96 = load float, float* %12
%97 = load float, float* %13
%98 = call i32 @plot_hexline(i8* %92, i32 %93, float %94, float %95, float %96, float %97)
br label %99
99: ; preds = %29
%100 = load i32, i32* %5
%101 = add nsw i32 %100, 1
store i32 %101, i32* %5
br label %26
102: ; preds = %26
%103 = load i32, i32* %4
%104 = sitofp i32 %103 to float
%105 = fpext float %104 to double
%106 = fdiv double %105, 2.000000e+00
%107 = load i32, i32* %4
%108 = sitofp i32 %107 to float
%109 = fpext float %108 to double
%110 = fdiv double %109, 2.000000e+00
%111 = load i32, i32* %5
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 %112
%114 = load float, float* %113
%115 = fpext float %114 to double
%116 = call double @llvm.fmuladd.f64(double %110, double %115, double %106)
%117 = fptrunc double %116 to float
store float %117, float* %10
%118 = load i32, i32* %4
%119 = sitofp i32 %118 to float
%120 = fpext float %119 to double
%121 = fdiv double %120, 2.000000e+00
%122 = load i32, i32* %4
%123 = sitofp i32 %122 to float
%124 = fpext float %123 to double
%125 = fdiv double %124, 2.000000e+00
%126 = load i32, i32* %5
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 %127
%129 = load float, float* %128
%130 = fpext float %129 to double
%131 = call double @llvm.fmuladd.f64(double %125, double %130, double %121)
%132 = fptrunc double %131 to float
store float %132, float* %11
%133 = load i32, i32* %4
%134 = sitofp i32 %133 to float
%135 = fpext float %134 to double
%136 = fdiv double %135, 2.000000e+00
%137 = load i32, i32* %4
%138 = sitofp i32 %137 to float
%139 = fpext float %138 to double
%140 = fdiv double %139, 2.000000e+00
%141 = getelementptr inbounds [6 x float], [6 x float]* %8, i64 0, i64 0
%142 = load float, float* %141
%143 = fpext float %142 to double
%144 = call double @llvm.fmuladd.f64(double %140, double %143, double %136)
%145 = fptrunc double %144 to float
store float %145, float* %12
%146 = load i32, i32* %4
%147 = sitofp i32 %146 to float
%148 = fpext float %147 to double
%149 = fdiv double %148, 2.000000e+00
%150 = load i32, i32* %4
%151 = sitofp i32 %150 to float
%152 = fpext float %151 to double
%153 = fdiv double %152, 2.000000e+00
%154 = getelementptr inbounds [6 x float], [6 x float]* %9, i64 0, i64 0
%155 = load float, float* %154
%156 = fpext float %155 to double
%157 = call double @llvm.fmuladd.f64(double %153, double %156, double %149)
%158 = fptrunc double %157 to float
store float %158, float* %13
%159 = load i8*, i8** %3
%160 = load i32, i32* %4
%161 = load float, float* %10
%162 = load float, float* %11
%163 = load float, float* %12
%164 = load float, float* %13
%165 = call i32 @plot_hexline(i8* %159, i32 %160, float %161, float %162, float %163, float %164)
store i32 0, i32* %5
br label %166
166: ; preds = %214, %102
%167 = load i32, i32* %5
%168 = load i32, i32* %4
%169 = icmp slt i32 %167, %168
br i1 %169, label %170, label %217
170: ; preds = %166
store i8 48, i8* %7
store i32 0, i32* %6
br label %171
171: ; preds = %210, %170
%172 = load i32, i32* %6
%173 = load i32, i32* %4
%174 = icmp slt i32 %172, %173
br i1 %174, label %175, label %213
175: ; preds = %171
%176 = load i8*, i8** %3
%177 = load i32, i32* %4
%178 = load i32, i32* %5
%179 = mul nsw i32 %177, %178
%180 = load i32, i32* %6
%181 = add nsw i32 %179, %180
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %176, i64 %182
%184 = load i8, i8* %183
%185 = sext i8 %184 to i32
%186 = icmp eq i32 %185, 49
br i1 %186, label %187, label %195
187: ; preds = %175
%188 = load i32, i32* %6
%189 = load i32, i32* %4
%190 = sdiv i32 %189, 2
%191 = icmp slt i32 %188, %190
br i1 %191, label %192, label %193
192: ; preds = %187
store i8 49, i8* %7
br label %194
193: ; preds = %187
store i8 48, i8* %7
br label %194
194: ; preds = %193, %192
br label %195
195: ; preds = %194, %175
%196 = load i8, i8* %7
%197 = sext i8 %196 to i32
%198 = icmp eq i32 %197, 49
br i1 %198, label %199, label %209
199: ; preds = %195
%200 = load i8, i8* %7
%201 = load i8*, i8** %3
%202 = load i32, i32* %4
%203 = load i32, i32* %5
%204 = mul nsw i32 %202, %203
%205 = load i32, i32* %6
%206 = add nsw i32 %204, %205
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds i8, i8* %201, i64 %207
store i8 %200, i8* %208
br label %209
209: ; preds = %199, %195
br label %210
210: ; preds = %209
%211 = load i32, i32* %6
%212 = add nsw i32 %211, 1
store i32 %212, i32* %6
br label %171
213: ; preds = %171
br label %214
214: ; preds = %213
%215 = load i32, i32* %5
%216 = add nsw i32 %215, 1
store i32 %216, i32* %5
br label %166
217: ; preds = %166
ret void
}

LLVM IR (-O2):
define void @plot_hexagon(i8* %0, i32 %1) {
%3 = sitofp i32 %1 to float
%4 = fpext float %3 to double
%5 = fmul double %4, 5.000000e-01
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0.000000e+00, double %5)
%7 = fptrunc double %6 to float
%8 = fadd double %5, %5
%9 = fptrunc double %8 to float
%10 = tail call double @llvm.fmuladd.f64(double %5, double 0x3FEB851EC0000000, double %5)
%11 = fptrunc double %10 to float
%12 = tail call double @llvm.fmuladd.f64(double %5, double 5.000000e-01, double %5)
%13 = fptrunc double %12 to float
%14 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %7, float %9, float %11, float %13)
%15 = tail call double @llvm.fmuladd.f64(double %5, double -5.000000e-01, double %5)
%16 = fptrunc double %15 to float
%17 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %11, float %13, float %11, float %16)
%18 = tail call double @llvm.fmuladd.f64(double %5, double -1.000000e+00, double %5)
%19 = fptrunc double %18 to float
%20 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %11, float %16, float %7, float %19)
%21 = tail call double @llvm.fmuladd.f64(double %5, double 0xBFEB851EC0000000, double %5)
%22 = fptrunc double %21 to float
%23 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %7, float %19, float %22, float %16)
%24 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %22, float %16, float %22, float %13)
%25 = fadd double %5, %5
%26 = fptrunc double %25 to float
%27 = tail call i32 @plot_hexline(i8* %0, i32 %1, float %22, float %13, float %7, float %26)
%28 = icmp sgt i32 %1, 0
br i1 %28, label %29, label %87
29: ; preds = %2
%30 = lshr i32 %1, 1
%31 = zext i32 %30 to i64
%32 = zext i32 %1 to i64
%33 = zext i32 %1 to i64
%34 = and i64 %33, 1
%35 = icmp eq i32 %1, 1
%36 = and i64 %33, 4294967294
%37 = icmp eq i64 %34, 0
br label %38
38: ; preds = %84, %29
%39 = phi i64 [ 0, %29 ], [ %85, %84 ]
%40 = mul nsw i64 %39, %32
br i1 %35, label %71, label %41
41: ; preds = %38, %66
%42 = phi i64 [ %68, %66 ], [ 0, %38 ]
%43 = phi i8 [ %67, %66 ], [ 48, %38 ]
%44 = phi i64 [ %69, %66 ], [ 0, %38 ]
%45 = add nuw nsw i64 %42, %40
%46 = getelementptr inbounds i8, i8* %0, i64 %45
%47 = load i8, i8* %46
%48 = icmp eq i8 %47, 49
br i1 %48, label %49, label %51
49: ; preds = %41
%50 = icmp ult i64 %42, %31
br i1 %50, label %53, label %54
51: ; preds = %41
%52 = icmp eq i8 %43, 49
br i1 %52, label %53, label %54
53: ; preds = %49, %51
store i8 49, i8* %46
br label %54
54: ; preds = %49, %51, %53
%55 = phi i8 [ %43, %51 ], [ 49, %53 ], [ 48, %49 ]
%56 = or i64 %42, 1
%57 = add nuw nsw i64 %56, %40
%58 = getelementptr inbounds i8, i8* %0, i64 %57
%59 = load i8, i8* %58
%60 = icmp eq i8 %59, 49
br i1 %60, label %63, label %61
61: ; preds = %54
%62 = icmp eq i8 %55, 49
br i1 %62, label %65, label %66
63: ; preds = %54
%64 = icmp ult i64 %56, %31
br i1 %64, label %65, label %66
65: ; preds = %63, %61
store i8 49, i8* %58
br label %66
66: ; preds = %65, %63, %61
%67 = phi i8 [ %55, %61 ], [ 49, %65 ], [ 48, %63 ]
%68 = add nuw nsw i64 %42, 2
%69 = add i64 %44, 2
%70 = icmp eq i64 %69, %36
br i1 %70, label %71, label %41
71: ; preds = %66, %38
%72 = phi i64 [ 0, %38 ], [ %68, %66 ]
%73 = phi i8 [ 48, %38 ], [ %67, %66 ]
br i1 %37, label %84, label %74
74: ; preds = %71
%75 = add nuw nsw i64 %72, %40
%76 = getelementptr inbounds i8, i8* %0, i64 %75
%77 = load i8, i8* %76
%78 = icmp eq i8 %77, 49
br i1 %78, label %81, label %79
79: ; preds = %74
%80 = icmp eq i8 %73, 49
br i1 %80, label %83, label %84
81: ; preds = %74
%82 = icmp ult i64 %72, %31
br i1 %82, label %83, label %84
83: ; preds = %81, %79
store i8 49, i8* %76
br label %84
84: ; preds = %79, %81, %83, %71
%85 = add nuw nsw i64 %39, 1
%86 = icmp eq i64 %85, %33
br i1 %86, label %87, label %38
87: ; preds = %84, %2
ret void
}