#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 */
float sre_random();
float Gaussrandom(float mean, float stddev) {
  static float a[32] = {
      0.0,       3.917609E-2, 7.841241E-2, 0.11777,   0.1573107, 0.1970991,
      0.2372021, 0.2776904,   0.3186394,   0.36013,   0.4022501, 0.4450965,
      0.4887764, 0.5334097,   0.5791322,   0.626099,  0.6744898, 0.7245144,
      0.7764218, 0.8305109,   0.8871466,   0.9467818, 1.00999,   1.077516,
      1.150349,  1.229859,    1.318011,    1.417797,  1.534121,  1.67594,
      1.862732,  2.153875};
  static float d[31] = {0.0,       0.0,       0.0,       0.0,       0.0,
                        0.2636843, 0.2425085, 0.2255674, 0.2116342, 0.1999243,
                        0.1899108, 0.1812252, 0.1736014, 0.1668419, 0.1607967,
                        0.1553497, 0.1504094, 0.1459026, 0.14177,   0.1379632,
                        0.1344418, 0.1311722, 0.128126,  0.1252791, 0.1226109,
                        0.1201036, 0.1177417, 0.1155119, 0.1134023, 0.1114027,
                        0.1095039};
  static float t[31] = {7.673828E-4, 2.30687E-3,  3.860618E-3, 5.438454E-3,
                        7.0507E-3,   8.708396E-3, 1.042357E-2, 1.220953E-2,
                        1.408125E-2, 1.605579E-2, 1.81529E-2,  2.039573E-2,
                        2.281177E-2, 2.543407E-2, 2.830296E-2, 3.146822E-2,
                        3.499233E-2, 3.895483E-2, 4.345878E-2, 4.864035E-2,
                        5.468334E-2, 6.184222E-2, 7.047983E-2, 8.113195E-2,
                        9.462444E-2, 0.1123001,   0.136498,    0.1716886,
                        0.2276241,   0.330498,    0.5847031};
  static float h[31] = {3.920617E-2, 3.932705E-2, 3.951E-2,    3.975703E-2,
                        4.007093E-2, 4.045533E-2, 4.091481E-2, 4.145507E-2,
                        4.208311E-2, 4.280748E-2, 4.363863E-2, 4.458932E-2,
                        4.567523E-2, 4.691571E-2, 4.833487E-2, 4.996298E-2,
                        5.183859E-2, 5.401138E-2, 5.654656E-2, 5.95313E-2,
                        6.308489E-2, 6.737503E-2, 7.264544E-2, 7.926471E-2,
                        8.781922E-2, 9.930398E-2, 0.11556,     0.1404344,
                        0.1836142,   0.2790016,   0.7010474};
  static long i;
  static float snorm, u, s, ustar, aa, w, y, tt;
  u = sre_random();
  s = 0.0;
  if (u > 0.5)
    s = 1.0;
  u += (u - s);
  u = 32.0 * u;
  i = (long)(u);
  if (i == 32)
    i = 31;
  if (i == 0)
    goto S100;
  ustar = u - (float)i;
  aa = *(a + i - 1);
S40:
  if (ustar <= *(t + i - 1))
    goto S60;
  w = (ustar - *(t + i - 1)) * *(h + i - 1);
S50:
  y = aa + w;
  snorm = y;
  if (s == 1.0)
    snorm = -y;
  return (stddev * snorm + mean);
S60:
  u = sre_random();
  w = u * (*(a + i) - aa);
  tt = (0.5 * w + aa) * w;
  goto S80;
S70:
  tt = u;
  ustar = sre_random();
S80:
  if (ustar > tt)
    goto S50;
  u = sre_random();
  if (ustar >= u)
    goto S70;
  ustar = sre_random();
  goto S40;
S100:
  i = 6;
  aa = *(a + 31);
  goto S120;
S110:
  aa += *(d + i - 1);
  i += 1;
S120:
  u += u;
  if (u < 1.0)
    goto S110;
  u -= 1.0;
S140:
  w = u * *(d + i - 1);
  tt = (0.5 * w + aa) * w;
  goto S160;
S150:
  tt = u;
S160:
  ustar = sre_random();
  if (ustar > tt)
    goto S50;
  u = sre_random();
  if (ustar >= u)
    goto S150;
  u = sre_random();
  goto S140;
}


x86 assembly (clang, -O0):
<Gaussrandom>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x3113(%rip)
xorps  %xmm0,%xmm0
movss  %xmm0,0x310c(%rip)
movss  0x3100(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    116a <Gaussrandom+0x5a>
movss  0xeb6(%rip),%xmm0
movss  %xmm0,0x30de(%rip)
movss  0x30d2(%rip),%xmm0
subss  0x30ce(%rip),%xmm0
addss  0x30c2(%rip),%xmm0
movss  %xmm0,0x30ba(%rip)
movss  0x30b2(%rip),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe6a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x3096(%rip)
cvttss2si 0x308d(%rip),%rax
mov    %rax,0x307a(%rip)
cmpq   $0x20,0x3072(%rip)
20
jne    11d7 <Gaussrandom+0xc7>
movq   $0x1f,0x3061(%rip)
cmpq   $0x0,0x3059(%rip)
jne    11ea <Gaussrandom+0xda>
jmp    140b <Gaussrandom+0x2fb>
movss  0x3052(%rip),%xmm0
cvtsi2ssq 0x303d(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,0x3045(%rip)
mov    0x302a(%rip),%rcx
lea    0x2e1b(%rip),%rax
movss  -0x4(%rax,%rcx,4),%xmm0
movss  %xmm0,0x302d(%rip)
movss  0x3021(%rip),%xmm1
mov    0x3006(%rip),%rcx
lea    0x2ef7(%rip),%rax
movss  -0x4(%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jb     124d <Gaussrandom+0x13d>
jmp    130e <Gaussrandom+0x1fe>
movss  0x2ff7(%rip),%xmm0
mov    0x2fdc(%rip),%rcx
lea    0x2ecd(%rip),%rax
subss  -0x4(%rax,%rcx,4),%xmm0
mov    0x2fc8(%rip),%rcx
lea    0x2f39(%rip),%rax
mulss  -0x4(%rax,%rcx,4),%xmm0
movss  %xmm0,0x2fcf(%rip)
movss  0x2fc3(%rip),%xmm0
addss  0x2fbf(%rip),%xmm0
movss  %xmm0,0x2fbb(%rip)
movss  0x2fb3(%rip),%xmm0
movss  %xmm0,0x2f93(%rip)
movss  0x2f93(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd4f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12ee <Gaussrandom+0x1de>
jp     12ee <Gaussrandom+0x1de>
movss  0x2f7f(%rip),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,0x2f52(%rip)
movss  -0x8(%rbp),%xmm0
movss  0x2f45(%rip),%xmm2
movss  -0x4(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
add    $0x10,%rsp
pop    %rbp
ret
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2f27(%rip)
movss  0x2f1f(%rip),%xmm0
mov    0x2f0c(%rip),%rcx
lea    0x2cfd(%rip),%rax
movss  (%rax,%rcx,4),%xmm1
subss  0x2f10(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,0x2f08(%rip)
movss  0x2f00(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x2ef0(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xc94(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movss  0x2ed8(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2ecc(%rip)
jmp    13b4 <Gaussrandom+0x2a4>
movss  0x2ea7(%rip),%xmm0
movss  %xmm0,0x2eb7(%rip)
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2e98(%rip)
movss  0x2e90(%rip),%xmm0
ucomiss 0x2e99(%rip),%xmm0
jbe    13ce <Gaussrandom+0x2be>
jmp    1285 <Gaussrandom+0x175>
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2e67(%rip)
movss  0x2e67(%rip),%xmm0
ucomiss 0x2e58(%rip),%xmm0
jb     13f7 <Gaussrandom+0x2e7>
jmp    1395 <Gaussrandom+0x285>
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2e46(%rip)
jmp    1223 <Gaussrandom+0x113>
movq   $0x6,0x2e22(%rip)
movss  0x2c8e(%rip),%xmm0
movss  %xmm0,0x2e2a(%rip)
jmp    1461 <Gaussrandom+0x351>
mov    0x2e06(%rip),%rcx
lea    0x2c77(%rip),%rax
movss  -0x4(%rax,%rcx,4),%xmm0
addss  0x2e09(%rip),%xmm0
movss  %xmm0,0x2e01(%rip)
mov    0x2de2(%rip),%rax
add    $0x1,%rax
mov    %rax,0x2dd7(%rip)
movss  0x2ddb(%rip),%xmm0
addss  0x2dd3(%rip),%xmm0
movss  %xmm0,0x2dcb(%rip)
movss  0x2dc3(%rip),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb83(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    149c <Gaussrandom+0x38c>
jmp    142b <Gaussrandom+0x31b>
movss  0x2da0(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb60(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2d84(%rip)
movss  0x2d7c(%rip),%xmm0
mov    0x2d69(%rip),%rcx
lea    0x2bda(%rip),%rax
mulss  -0x4(%rax,%rcx,4),%xmm0
movss  %xmm0,0x2d70(%rip)
movss  0x2d68(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x2d58(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xafc(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movss  0x2d40(%rip),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2d34(%rip)
jmp    153d <Gaussrandom+0x42d>
movss  0x2d0f(%rip),%xmm0
movss  %xmm0,0x2d1f(%rip)
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2d00(%rip)
movss  0x2cf8(%rip),%xmm0
ucomiss 0x2d01(%rip),%xmm0
jbe    1566 <Gaussrandom+0x456>
jmp    1285 <Gaussrandom+0x175>
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2ccf(%rip)
movss  0x2ccf(%rip),%xmm0
ucomiss 0x2cc0(%rip),%xmm0
jb     158f <Gaussrandom+0x47f>
jmp    152d <Gaussrandom+0x41d>
mov    $0x0,%al
call   1030 <sre_random@plt>
movss  %xmm0,0x2ca6(%rip)
jmp    14c0 <Gaussrandom+0x3b0>

x86 assembly (clang, -O2):
<Gaussrandom>:
push   %r14
push   %rbx
push   %rax
movss  %xmm1,0x4(%rsp)
movss  %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <sre_random@plt>
movaps %xmm0,%xmm1
movss  0xecf(%rip),%xmm0
cmpltss %xmm1,%xmm0
movss  0xec6(%rip),%xmm2
andps  %xmm0,%xmm2
movss  %xmm2,0x2eef(%rip)
movaps %xmm1,%xmm0
subss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mulss  0xeac(%rip),%xmm0
cvttss2si %xmm0,%rcx
cmp    $0x20,%rcx
mov    $0x1f,%eax
cmovne %rcx,%rax
mov    %rax,0x2ebb(%rip)
test   %rax,%rax
je     128b <Gaussrandom+0x17b>
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,0x2eaa(%rip)
lea    0xe97(%rip),%rbx
movss  -0x4(%rbx,%rax,4),%xmm1
movss  %xmm1,0x2e99(%rip)
lea    0xf82(%rip),%r14
movss  -0x4(%r14,%rax,4),%xmm1
ucomiss %xmm0,%xmm1
jb     12f4 <Gaussrandom+0x1e4>
xor    %eax,%eax
call   1030 <sre_random@plt>
mov    0x2e64(%rip),%rax
movss  (%rbx,%rax,4),%xmm1
movss  0x2e67(%rip),%xmm2
subss  %xmm2,%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x2e5b(%rip)
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
movaps %xmm0,%xmm2
mulsd  0xe16(%rip),%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,0x2e2f(%rip)
movss  0x2e1b(%rip),%xmm1
ucomiss %xmm0,%xmm1
ja     130d <Gaussrandom+0x1fd>
nopw   0x0(%rax,%rax,1)
xor    %eax,%eax
call   1030 <sre_random@plt>
movss  0x2dfd(%rip),%xmm1
ucomiss %xmm0,%xmm1
jb     1270 <Gaussrandom+0x160>
movss  %xmm0,0x2dfc(%rip)
xor    %eax,%eax
call   1030 <sre_random@plt>
movss  %xmm0,0x2de1(%rip)
ucomiss 0x2de6(%rip),%xmm0
jbe    1230 <Gaussrandom+0x120>
jmp    130d <Gaussrandom+0x1fd>
nopl   0x0(%rax)
xor    %eax,%eax
call   1030 <sre_random@plt>
movss  %xmm0,0x2dbd(%rip)
mov    0x2daa(%rip),%rax
jmp    11ae <Gaussrandom+0x9e>
movq   $0x6,0x2d9a(%rip)
movl   $0x4009d917,0x2da0(%rip)
d9 09 40
addss  %xmm0,%xmm0
movss  0xd58(%rip),%xmm2
ucomiss %xmm0,%xmm2
jbe    135b <Gaussrandom+0x24b>
movss  0xd4f(%rip),%xmm1
mov    $0x6,%eax
lea    0xde7(%rip),%rcx
nopl   0x0(%rax)
addss  -0x4(%rcx,%rax,4),%xmm1
add    $0x1,%rax
addss  %xmm0,%xmm0
ucomiss %xmm0,%xmm2
ja     12d0 <Gaussrandom+0x1c0>
movss  %xmm1,0x2d55(%rip)
mov    %rax,0x2d3e(%rip)
jmp    1368 <Gaussrandom+0x258>
subss  %xmm1,%xmm0
lea    0xeb1(%rip),%rcx
mulss  -0x4(%rcx,%rax,4),%xmm0
movss  %xmm0,0x2d37(%rip)
movss  0x2d2b(%rip),%xmm0
addss  0x2d27(%rip),%xmm0
movaps 0xcfc(%rip),%xmm1
xorps  %xmm0,%xmm1
movss  0xcd5(%rip),%xmm2
cmpeqss 0x2d00(%rip),%xmm2
movaps %xmm2,%xmm3
andnps %xmm0,%xmm3
andps  %xmm1,%xmm2
orps   %xmm3,%xmm2
movss  0x4(%rsp),%xmm0
mulss  %xmm2,%xmm0
addss  (%rsp),%xmm0
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
mov    $0x6,%eax
movss  0xca4(%rip),%xmm1
addss  0xca0(%rip),%xmm0
lea    0xd39(%rip),%rbx
movsd  0xc99(%rip),%xmm3
mulss  -0x4(%rbx,%rax,4),%xmm0
movss  %xmm0,0x2cb7(%rip)
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
movaps %xmm0,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
nopl   0x0(%rax,%rax,1)
movss  %xmm0,0x2c90(%rip)
xor    %eax,%eax
call   1030 <sre_random@plt>
movss  %xmm0,0x2c75(%rip)
ucomiss 0x2c7a(%rip),%xmm0
ja     130d <Gaussrandom+0x1fd>
xor    %eax,%eax
call   1030 <sre_random@plt>
movss  0x2c59(%rip),%xmm1
ucomiss %xmm0,%xmm1
jae    13b0 <Gaussrandom+0x2a0>
xor    %eax,%eax
call   1030 <sre_random@plt>
mov    0x2c3a(%rip),%rax
movss  0x2c42(%rip),%xmm1
jmp    1377 <Gaussrandom+0x267>

LLVM IR (-O0):
@Gaussrandom.a = internal global [32 x float] [float 0.000000e+00, float 0x3FA40EE380000000, float 0x3FB412D600000000, float 0x3FBE262CC0000000, float 0x3FC422C1C0000000, float 0x3FC93A8B20000000, float 0x3FCE5CA360000000, float 0x3FD1C5AE00000000, float 0x3FD4649680000000, float 0x3FD70C5EC0000000, float 0x3FD9BE7740000000, float 0x3FDC7C7600000000, float 0x3FDF481CC0000000, float 0x3FE111B140000000, float 0x3FE2884040000000, float 0x3FE40900C0000000, float 0x3FE5956BA0000000, float 0x3FE72F38E0000000, float 0x3FE8D87280000000, float 0x3FEA938BA0000000, float 0x3FEC638140000000, float 0x3FEE4C0960000000, float 0x3FF028EB40000000, float 0x3FF13D8160000000, float 0x3FF267D460000000, float 0x3FF3AD80A0000000, float 0x3FF51692C0000000, float 0x3FF6AF4BE0000000, float 0x3FF88BC280000000, float 0x3FFAD0A680000000, float 0x3FFDCDC020000000, float 0x40013B22E0000000]
@Gaussrandom.d = internal global [31 x float] [float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0x3FD0E03420000000, float 0x3FCF0A84C0000000, float 0x3FCCDF6480000000, float 0x3FCB16D460000000, float 0x3FC9971EA0000000, float 0x3FC84EFF40000000, float 0x3FC7326320000000, float 0x3FC6389220000000, float 0x3FC55B1340000000, float 0x3FC494FC80000000, float 0x3FC3E27FC0000000, float 0x3FC3409D80000000, float 0x3FC2ACEFC0000000, float 0x3FC2258500000000, float 0x3FC1A8C740000000, float 0x3FC1356380000000, float 0x3FC0CA4020000000, float 0x3FC0666EC0000000, float 0x3FC0092540000000, float 0x3FBF636D80000000, float 0x3FBEBF1C00000000, float 0x3FBE2451E0000000, float 0x3FBD923020000000, float 0x3FBD07EEE0000000, float 0x3FBC84E320000000, float 0x3FBC0872A0000000]
@Gaussrandom.t = internal global [31 x float] [float 0x3F49254600000000, float 0x3F62E5DB60000000, float 0x3F6FA04D80000000, float 0x3F7646A1E0000000, float 0x3F7CE131E0000000, float 0x3F81D5B520000000, float 0x3F8558F3E0000000, float 0x3F89014F60000000, float 0x3F8CD6A160000000, float 0x3F9070EDE0000000, float 0x3F9296AC80000000, float 0x3F94E29E40000000, float 0x3F975BF800000000, float 0x3F9A0B6380000000, float 0x3F9CFB7380000000, float 0x3FA01C9A40000000, float 0x3FA1EA83C0000000, float 0x3FA3F1E340000000, float 0x3FA6403AA0000000, float 0x3FA8E76360000000, float 0x3FABFF7460000000, float 0x3FAFA9C8A0000000, float 0x3FB20AF760000000, float 0x3FB4C51040000000, float 0x3FB8394EA0000000, float 0x3FBCBFB300000000, float 0x3FC178C440000000, float 0x3FC5F9E460000000, float 0x3FCD22C960000000, float 0x3FD526E120000000, float 0x3FE2B5E340000000]
@Gaussrandom.h = internal global [31 x float] [float 0x3FA412D4C0000000, float 0x3FA422ACE0000000, float 0x3FA43AA7A0000000, float 0x3FA45B0880000000, float 0x3FA4842D40000000, float 0x3FA4B68FA0000000, float 0x3FA4F2C940000000, float 0x3FA5399960000000, float 0x3FA58BEAE0000000, float 0x3FA5EADCA0000000, float 0x3FA657CD80000000, float 0x3FA6D46940000000, float 0x3FA762BE60000000, float 0x3FA8055600000000, float 0x3FA8BF5920000000, float 0x3FA994BF60000000, float 0x3FAA8A9680000000, float 0x3FABA76120000000, float 0x3FACF3ABC0000000, float 0x3FAE7AE300000000, float 0x3FB02654E0000000, float 0x3FB13F7D60000000, float 0x3FB298E440000000, float 0x3FB44AB120000000, float 0x3FB67B5200000000, float 0x3FB96BFC60000000, float 0x3FBD955720000000, float 0x3FC1F9C120000000, float 0x3FC780AB80000000, float 0x3FD1DB2980000000, float 0x3FE66EFB00000000]
@Gaussrandom.i = internal global i64 0
@Gaussrandom.snorm = internal global float 0.000000e+00
@Gaussrandom.u = internal global float 0.000000e+00
@Gaussrandom.s = internal global float 0.000000e+00
@Gaussrandom.ustar = internal global float 0.000000e+00
@Gaussrandom.aa = internal global float 0.000000e+00
@Gaussrandom.w = internal global float 0.000000e+00
@Gaussrandom.y = internal global float 0.000000e+00
@Gaussrandom.tt = internal global float 0.000000e+00
define float @Gaussrandom(float %0, float %1) {
%3 = alloca float
%4 = alloca float
store float %0, float* %3
store float %1, float* %4
%5 = call float (...) @sre_random()
store float %5, float* @Gaussrandom.u
store float 0.000000e+00, float* @Gaussrandom.s
%6 = load float, float* @Gaussrandom.u
%7 = fpext float %6 to double
%8 = fcmp ogt double %7, 5.000000e-01
br i1 %8, label %9, label %10
9: ; preds = %2
store float 1.000000e+00, float* @Gaussrandom.s
br label %10
10: ; preds = %9, %2
%11 = load float, float* @Gaussrandom.u
%12 = load float, float* @Gaussrandom.s
%13 = fsub float %11, %12
%14 = load float, float* @Gaussrandom.u
%15 = fadd float %14, %13
store float %15, float* @Gaussrandom.u
%16 = load float, float* @Gaussrandom.u
%17 = fpext float %16 to double
%18 = fmul double 3.200000e+01, %17
%19 = fptrunc double %18 to float
store float %19, float* @Gaussrandom.u
%20 = load float, float* @Gaussrandom.u
%21 = fptosi float %20 to i64
store i64 %21, i64* @Gaussrandom.i
%22 = load i64, i64* @Gaussrandom.i
%23 = icmp eq i64 %22, 32
br i1 %23, label %24, label %25
24: ; preds = %10
store i64 31, i64* @Gaussrandom.i
br label %25
25: ; preds = %24, %10
%26 = load i64, i64* @Gaussrandom.i
%27 = icmp eq i64 %26, 0
br i1 %27, label %28, label %29
28: ; preds = %25
br label %108
29: ; preds = %25
%30 = load float, float* @Gaussrandom.u
%31 = load i64, i64* @Gaussrandom.i
%32 = sitofp i64 %31 to float
%33 = fsub float %30, %32
store float %33, float* @Gaussrandom.ustar
%34 = load i64, i64* @Gaussrandom.i
%35 = getelementptr inbounds float, float* getelementptr inbounds ([32 x float], [32 x float]* @Gaussrandom.a, i64 0, i64 0), i64 %34
%36 = getelementptr inbounds float, float* %35, i64 -1
%37 = load float, float* %36
store float %37, float* @Gaussrandom.aa
br label %38
38: ; preds = %106, %29
%39 = load float, float* @Gaussrandom.ustar
%40 = load i64, i64* @Gaussrandom.i
%41 = getelementptr inbounds float, float* getelementptr inbounds ([31 x float], [31 x float]* @Gaussrandom.t, i64 0, i64 0), i64 %40
%42 = getelementptr inbounds float, float* %41, i64 -1
%43 = load float, float* %42
%44 = fcmp ole float %39, %43
br i1 %44, label %45, label %46
45: ; preds = %38
br label %74
46: ; preds = %38
%47 = load float, float* @Gaussrandom.ustar
%48 = load i64, i64* @Gaussrandom.i
%49 = getelementptr inbounds float, float* getelementptr inbounds ([31 x float], [31 x float]* @Gaussrandom.t, i64 0, i64 0), i64 %48
%50 = getelementptr inbounds float, float* %49, i64 -1
%51 = load float, float* %50
%52 = fsub float %47, %51
%53 = load i64, i64* @Gaussrandom.i
%54 = getelementptr inbounds float, float* getelementptr inbounds ([31 x float], [31 x float]* @Gaussrandom.h, i64 0, i64 0), i64 %53
%55 = getelementptr inbounds float, float* %54, i64 -1
%56 = load float, float* %55
%57 = fmul float %52, %56
store float %57, float* @Gaussrandom.w
br label %58
58: ; preds = %155, %99, %46
%59 = load float, float* @Gaussrandom.aa
%60 = load float, float* @Gaussrandom.w
%61 = fadd float %59, %60
store float %61, float* @Gaussrandom.y
%62 = load float, float* @Gaussrandom.y
store float %62, float* @Gaussrandom.snorm
%63 = load float, float* @Gaussrandom.s
%64 = fpext float %63 to double
%65 = fcmp oeq double %64, 1.000000e+00
br i1 %65, label %66, label %69
66: ; preds = %58
%67 = load float, float* @Gaussrandom.y
%68 = fneg float %67
store float %68, float* @Gaussrandom.snorm
br label %69
69: ; preds = %66, %58
%70 = load float, float* %4
%71 = load float, float* @Gaussrandom.snorm
%72 = load float, float* %3
%73 = call float @llvm.fmuladd.f32(float %70, float %71, float %72)
ret float %73
74: ; preds = %45
%75 = call float (...) @sre_random()
store float %75, float* @Gaussrandom.u
%76 = load float, float* @Gaussrandom.u
%77 = load i64, i64* @Gaussrandom.i
%78 = getelementptr inbounds float, float* getelementptr inbounds ([32 x float], [32 x float]* @Gaussrandom.a, i64 0, i64 0), i64 %77
%79 = load float, float* %78
%80 = load float, float* @Gaussrandom.aa
%81 = fsub float %79, %80
%82 = fmul float %76, %81
store float %82, float* @Gaussrandom.w
%83 = load float, float* @Gaussrandom.w
%84 = fpext float %83 to double
%85 = load float, float* @Gaussrandom.aa
%86 = fpext float %85 to double
%87 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %84, double %86)
%88 = load float, float* @Gaussrandom.w
%89 = fpext float %88 to double
%90 = fmul double %87, %89
%91 = fptrunc double %90 to float
store float %91, float* @Gaussrandom.tt
br label %95
92: ; preds = %105
%93 = load float, float* @Gaussrandom.u
store float %93, float* @Gaussrandom.tt
%94 = call float (...) @sre_random()
store float %94, float* @Gaussrandom.ustar
br label %95
95: ; preds = %92, %74
%96 = load float, float* @Gaussrandom.ustar
%97 = load float, float* @Gaussrandom.tt
%98 = fcmp ogt float %96, %97
br i1 %98, label %99, label %100
99: ; preds = %95
br label %58
100: ; preds = %95
%101 = call float (...) @sre_random()
store float %101, float* @Gaussrandom.u
%102 = load float, float* @Gaussrandom.ustar
%103 = load float, float* @Gaussrandom.u
%104 = fcmp oge float %102, %103
br i1 %104, label %105, label %106
105: ; preds = %100
br label %92
106: ; preds = %100
%107 = call float (...) @sre_random()
store float %107, float* @Gaussrandom.ustar
br label %38
108: ; preds = %28
store i64 6, i64* @Gaussrandom.i
%109 = load float, float* getelementptr inbounds ([32 x float], [32 x float]* @Gaussrandom.a, i64 0, i64 31)
store float %109, float* @Gaussrandom.aa
br label %119
110: ; preds = %126
%111 = load i64, i64* @Gaussrandom.i
%112 = getelementptr inbounds float, float* getelementptr inbounds ([31 x float], [31 x float]* @Gaussrandom.d, i64 0, i64 0), i64 %111
%113 = getelementptr inbounds float, float* %112, i64 -1
%114 = load float, float* %113
%115 = load float, float* @Gaussrandom.aa
%116 = fadd float %115, %114
store float %116, float* @Gaussrandom.aa
%117 = load i64, i64* @Gaussrandom.i
%118 = add nsw i64 %117, 1
store i64 %118, i64* @Gaussrandom.i
br label %119
119: ; preds = %110, %108
%120 = load float, float* @Gaussrandom.u
%121 = load float, float* @Gaussrandom.u
%122 = fadd float %121, %120
store float %122, float* @Gaussrandom.u
%123 = load float, float* @Gaussrandom.u
%124 = fpext float %123 to double
%125 = fcmp olt double %124, 1.000000e+00
br i1 %125, label %126, label %127
126: ; preds = %119
br label %110
127: ; preds = %119
%128 = load float, float* @Gaussrandom.u
%129 = fpext float %128 to double
%130 = fsub double %129, 1.000000e+00
%131 = fptrunc double %130 to float
store float %131, float* @Gaussrandom.u
br label %132
132: ; preds = %162, %127
%133 = load float, float* @Gaussrandom.u
%134 = load i64, i64* @Gaussrandom.i
%135 = getelementptr inbounds float, float* getelementptr inbounds ([31 x float], [31 x float]* @Gaussrandom.d, i64 0, i64 0), i64 %134
%136 = getelementptr inbounds float, float* %135, i64 -1
%137 = load float, float* %136
%138 = fmul float %133, %137
store float %138, float* @Gaussrandom.w
%139 = load float, float* @Gaussrandom.w
%140 = fpext float %139 to double
%141 = load float, float* @Gaussrandom.aa
%142 = fpext float %141 to double
%143 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %140, double %142)
%144 = load float, float* @Gaussrandom.w
%145 = fpext float %144 to double
%146 = fmul double %143, %145
%147 = fptrunc double %146 to float
store float %147, float* @Gaussrandom.tt
br label %150
148: ; preds = %161
%149 = load float, float* @Gaussrandom.u
store float %149, float* @Gaussrandom.tt
br label %150
150: ; preds = %148, %132
%151 = call float (...) @sre_random()
store float %151, float* @Gaussrandom.ustar
%152 = load float, float* @Gaussrandom.ustar
%153 = load float, float* @Gaussrandom.tt
%154 = fcmp ogt float %152, %153
br i1 %154, label %155, label %156
155: ; preds = %150
br label %58
156: ; preds = %150
%157 = call float (...) @sre_random()
store float %157, float* @Gaussrandom.u
%158 = load float, float* @Gaussrandom.ustar
%159 = load float, float* @Gaussrandom.u
%160 = fcmp oge float %158, %159
br i1 %160, label %161, label %162
161: ; preds = %156
br label %148
162: ; preds = %156
%163 = call float (...) @sre_random()
store float %163, float* @Gaussrandom.u
br label %132
}

LLVM IR (-O2):
@Gaussrandom.a = internal unnamed_addr constant [32 x float] [float 0.000000e+00, float 0x3FA40EE380000000, float 0x3FB412D600000000, float 0x3FBE262CC0000000, float 0x3FC422C1C0000000, float 0x3FC93A8B20000000, float 0x3FCE5CA360000000, float 0x3FD1C5AE00000000, float 0x3FD4649680000000, float 0x3FD70C5EC0000000, float 0x3FD9BE7740000000, float 0x3FDC7C7600000000, float 0x3FDF481CC0000000, float 0x3FE111B140000000, float 0x3FE2884040000000, float 0x3FE40900C0000000, float 0x3FE5956BA0000000, float 0x3FE72F38E0000000, float 0x3FE8D87280000000, float 0x3FEA938BA0000000, float 0x3FEC638140000000, float 0x3FEE4C0960000000, float 0x3FF028EB40000000, float 0x3FF13D8160000000, float 0x3FF267D460000000, float 0x3FF3AD80A0000000, float 0x3FF51692C0000000, float 0x3FF6AF4BE0000000, float 0x3FF88BC280000000, float 0x3FFAD0A680000000, float 0x3FFDCDC020000000, float 0x40013B22E0000000]
@Gaussrandom.d = internal unnamed_addr constant [31 x float] [float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0x3FD0E03420000000, float 0x3FCF0A84C0000000, float 0x3FCCDF6480000000, float 0x3FCB16D460000000, float 0x3FC9971EA0000000, float 0x3FC84EFF40000000, float 0x3FC7326320000000, float 0x3FC6389220000000, float 0x3FC55B1340000000, float 0x3FC494FC80000000, float 0x3FC3E27FC0000000, float 0x3FC3409D80000000, float 0x3FC2ACEFC0000000, float 0x3FC2258500000000, float 0x3FC1A8C740000000, float 0x3FC1356380000000, float 0x3FC0CA4020000000, float 0x3FC0666EC0000000, float 0x3FC0092540000000, float 0x3FBF636D80000000, float 0x3FBEBF1C00000000, float 0x3FBE2451E0000000, float 0x3FBD923020000000, float 0x3FBD07EEE0000000, float 0x3FBC84E320000000, float 0x3FBC0872A0000000]
@Gaussrandom.t = internal unnamed_addr constant [31 x float] [float 0x3F49254600000000, float 0x3F62E5DB60000000, float 0x3F6FA04D80000000, float 0x3F7646A1E0000000, float 0x3F7CE131E0000000, float 0x3F81D5B520000000, float 0x3F8558F3E0000000, float 0x3F89014F60000000, float 0x3F8CD6A160000000, float 0x3F9070EDE0000000, float 0x3F9296AC80000000, float 0x3F94E29E40000000, float 0x3F975BF800000000, float 0x3F9A0B6380000000, float 0x3F9CFB7380000000, float 0x3FA01C9A40000000, float 0x3FA1EA83C0000000, float 0x3FA3F1E340000000, float 0x3FA6403AA0000000, float 0x3FA8E76360000000, float 0x3FABFF7460000000, float 0x3FAFA9C8A0000000, float 0x3FB20AF760000000, float 0x3FB4C51040000000, float 0x3FB8394EA0000000, float 0x3FBCBFB300000000, float 0x3FC178C440000000, float 0x3FC5F9E460000000, float 0x3FCD22C960000000, float 0x3FD526E120000000, float 0x3FE2B5E340000000]
@Gaussrandom.h = internal unnamed_addr constant [31 x float] [float 0x3FA412D4C0000000, float 0x3FA422ACE0000000, float 0x3FA43AA7A0000000, float 0x3FA45B0880000000, float 0x3FA4842D40000000, float 0x3FA4B68FA0000000, float 0x3FA4F2C940000000, float 0x3FA5399960000000, float 0x3FA58BEAE0000000, float 0x3FA5EADCA0000000, float 0x3FA657CD80000000, float 0x3FA6D46940000000, float 0x3FA762BE60000000, float 0x3FA8055600000000, float 0x3FA8BF5920000000, float 0x3FA994BF60000000, float 0x3FAA8A9680000000, float 0x3FABA76120000000, float 0x3FACF3ABC0000000, float 0x3FAE7AE300000000, float 0x3FB02654E0000000, float 0x3FB13F7D60000000, float 0x3FB298E440000000, float 0x3FB44AB120000000, float 0x3FB67B5200000000, float 0x3FB96BFC60000000, float 0x3FBD955720000000, float 0x3FC1F9C120000000, float 0x3FC780AB80000000, float 0x3FD1DB2980000000, float 0x3FE66EFB00000000]
@Gaussrandom.i = internal unnamed_addr global i64 0
@Gaussrandom.s = internal unnamed_addr global float 0.000000e+00
@Gaussrandom.ustar = internal unnamed_addr global float 0.000000e+00
@Gaussrandom.aa = internal unnamed_addr global float 0.000000e+00
@Gaussrandom.w = internal unnamed_addr global float 0.000000e+00
@Gaussrandom.tt = internal unnamed_addr global float 0.000000e+00
define float @Gaussrandom(float %0, float %1) {
%3 = tail call float (...) @sre_random()
%4 = fcmp ogt float %3, 5.000000e-01
%5 = select i1 %4, float 1.000000e+00, float 0.000000e+00
store float %5, float* @Gaussrandom.s
%6 = fsub float %3, %5
%7 = fadd float %3, %6
%8 = fmul float %7, 3.200000e+01
%9 = fptosi float %8 to i64
%10 = icmp eq i64 %9, 32
%11 = select i1 %10, i64 31, i64 %9
store i64 %11, i64* @Gaussrandom.i
%12 = icmp eq i64 %11, 0
br i1 %12, label %71, label %13
13: ; preds = %2
%14 = sitofp i64 %11 to float
%15 = fsub float %8, %14
store float %15, float* @Gaussrandom.ustar
%16 = getelementptr inbounds [32 x float], [32 x float]* @Gaussrandom.a, i64 0, i64 %11
%17 = getelementptr inbounds float, float* %16, i64 -1
%18 = load float, float* %17
store float %18, float* @Gaussrandom.aa
%19 = getelementptr inbounds [31 x float], [31 x float]* @Gaussrandom.t, i64 0, i64 %11
%20 = getelementptr inbounds float, float* %19, i64 -1
%21 = load float, float* %20
%22 = fcmp ugt float %15, %21
br i1 %22, label %23, label %41
23: ; preds = %64, %13
%24 = phi float [ %15, %13 ], [ %65, %64 ]
%25 = phi i64 [ %11, %13 ], [ %66, %64 ]
%26 = phi float [ %21, %13 ], [ %69, %64 ]
%27 = fsub float %24, %26
%28 = getelementptr inbounds [31 x float], [31 x float]* @Gaussrandom.h, i64 0, i64 %25
%29 = getelementptr inbounds float, float* %28, i64 -1
%30 = load float, float* %29
%31 = fmul float %27, %30
store float %31, float* @Gaussrandom.w
br label %32
32: ; preds = %41, %60, %104, %23
%33 = load float, float* @Gaussrandom.aa
%34 = load float, float* @Gaussrandom.w
%35 = fadd float %33, %34
%36 = load float, float* @Gaussrandom.s
%37 = fcmp oeq float %36, 1.000000e+00
%38 = fneg float %35
%39 = select i1 %37, float %38, float %35
%40 = tail call float @llvm.fmuladd.f32(float %1, float %39, float %0)
ret float %40
41: ; preds = %13, %64
%42 = tail call float (...) @sre_random()
%43 = load i64, i64* @Gaussrandom.i
%44 = getelementptr inbounds [32 x float], [32 x float]* @Gaussrandom.a, i64 0, i64 %43
%45 = load float, float* %44
%46 = load float, float* @Gaussrandom.aa
%47 = fsub float %45, %46
%48 = fmul float %42, %47
store float %48, float* @Gaussrandom.w
%49 = fpext float %48 to double
%50 = fpext float %46 to double
%51 = tail call double @llvm.fmuladd.f64(double %49, double 5.000000e-01, double %50)
%52 = fmul double %51, %49
%53 = fptrunc double %52 to float
store float %53, float* @Gaussrandom.tt
%54 = load float, float* @Gaussrandom.ustar
%55 = fcmp ogt float %54, %53
br i1 %55, label %32, label %56
56: ; preds = %41, %60
%57 = tail call float (...) @sre_random()
%58 = load float, float* @Gaussrandom.ustar
%59 = fcmp ult float %58, %57
br i1 %59, label %64, label %60
60: ; preds = %56
store float %57, float* @Gaussrandom.tt
%61 = tail call float (...) @sre_random()
store float %61, float* @Gaussrandom.ustar
%62 = load float, float* @Gaussrandom.tt
%63 = fcmp ogt float %61, %62
br i1 %63, label %32, label %56
64: ; preds = %56
%65 = tail call float (...) @sre_random()
store float %65, float* @Gaussrandom.ustar
%66 = load i64, i64* @Gaussrandom.i
%67 = getelementptr inbounds [31 x float], [31 x float]* @Gaussrandom.t, i64 0, i64 %66
%68 = getelementptr inbounds float, float* %67, i64 -1
%69 = load float, float* %68
%70 = fcmp ugt float %65, %69
br i1 %70, label %23, label %41
71: ; preds = %2
store i64 6, i64* @Gaussrandom.i
store float 0x40013B22E0000000, float* @Gaussrandom.aa
%72 = fadd float %8, %8
%73 = fcmp olt float %72, 1.000000e+00
br i1 %73, label %74, label %86
74: ; preds = %71, %74
%75 = phi float [ %83, %74 ], [ %72, %71 ]
%76 = phi i64 [ %82, %74 ], [ 6, %71 ]
%77 = phi float [ %81, %74 ], [ 0x40013B22E0000000, %71 ]
%78 = getelementptr inbounds [31 x float], [31 x float]* @Gaussrandom.d, i64 0, i64 %76
%79 = getelementptr inbounds float, float* %78, i64 -1
%80 = load float, float* %79
%81 = fadd float %80, %77
%82 = add nuw nsw i64 %76, 1
%83 = fadd float %75, %75
%84 = fcmp olt float %83, 1.000000e+00
br i1 %84, label %74, label %85
85: ; preds = %74
store float %81, float* @Gaussrandom.aa
store i64 %82, i64* @Gaussrandom.i
br label %86
86: ; preds = %85, %71
%87 = phi float [ %81, %85 ], [ 0x40013B22E0000000, %71 ]
%88 = phi i64 [ %82, %85 ], [ 6, %71 ]
%89 = phi float [ %83, %85 ], [ %72, %71 ]
%90 = fadd float %89, -1.000000e+00
br label %91
91: ; preds = %113, %86
%92 = phi float [ %87, %86 ], [ %116, %113 ]
%93 = phi i64 [ %88, %86 ], [ %115, %113 ]
%94 = phi float [ %90, %86 ], [ %114, %113 ]
%95 = getelementptr inbounds [31 x float], [31 x float]* @Gaussrandom.d, i64 0, i64 %93
%96 = getelementptr inbounds float, float* %95, i64 -1
%97 = load float, float* %96
%98 = fmul float %94, %97
store float %98, float* @Gaussrandom.w
%99 = fpext float %98 to double
%100 = fpext float %92 to double
%101 = tail call double @llvm.fmuladd.f64(double %99, double 5.000000e-01, double %100)
%102 = fmul double %101, %99
%103 = fptrunc double %102 to float
br label %104
104: ; preds = %109, %91
%105 = phi float [ %103, %91 ], [ %110, %109 ]
store float %105, float* @Gaussrandom.tt
%106 = tail call float (...) @sre_random()
store float %106, float* @Gaussrandom.ustar
%107 = load float, float* @Gaussrandom.tt
%108 = fcmp ogt float %106, %107
br i1 %108, label %32, label %109
109: ; preds = %104
%110 = tail call float (...) @sre_random()
%111 = load float, float* @Gaussrandom.ustar
%112 = fcmp ult float %111, %110
br i1 %112, label %113, label %104
113: ; preds = %109
%114 = tail call float (...) @sre_random()
%115 = load i64, i64* @Gaussrandom.i
%116 = load float, float* @Gaussrandom.aa
br label %91
}