#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 pow(float, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, float *, float *, ...);
int sqrt(float);
main() {
  float r, a, b, x1, y1, x2, y2, d, k, b1;
  printf("Введите параметры окружности a,b,r:");
  scanf("%f%f%f", &a, &b, &r);
  printf("Введите коэффициенты прямой k,b:");
  scanf("%f%f", &k, &b1);
  d = pow((-2 * a + 2 * b1 * k - 2 * b * k), 2) -
      4 * (1 + pow(k, 2)) *
          (pow(a, 2) + pow(b1, 2) - 2 * b * b1 + pow(b, 2) - pow(r, 2));
  if (d < 0)
    printf("Точек пересечения нет.");
  if (d == 0) {
    x1 = -(-2 * a + 2 * b1 * k - 2 * b * k) / (2 * (1 + pow(k, 2)));
    y1 = k * x1 + b1;
    printf("Прямая касается окружности в точке x=%f и y=%f", x1, y1);
  }
  if (d > 0) {
    x1 = (-(-2 * a + 2 * b1 * k - 2 * b * k) + sqrt(d)) / (2 * (1 + pow(k, 2)));
    y1 = k * x1 + b1;
    x2 = (-(-2 * a + 2 * b1 * k - 2 * b * k) - sqrt(d)) / (2 * (1 + pow(k, 2)));
    y2 = k * x2 + b1;
    printf("Прямая пересекает окружность в двух точках:");
    printf("x1=%f y1=%f x2=%f y2=%f", x1, y1, x2, y2);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xede(%rip),%rdi
lea    -0xc(%rbp),%rsi
lea    -0x10(%rbp),%rdx
lea    -0x8(%rbp),%rcx
mov    $0x0,%al
call   1040 <scanf@plt>
lea    0xecb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeb8(%rip),%rdi
lea    -0x28(%rbp),%rsi
lea    -0x2c(%rbp),%rdx
mov    $0x0,%al
call   1040 <scanf@plt>
movss  -0xc(%rbp),%xmm0
movss  0xe58(%rip),%xmm1
mulss  -0x2c(%rbp),%xmm1
mulss  -0x28(%rbp),%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0xe3e(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x28(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
add    $0x1,%eax
shl    $0x2,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0xc(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mov    %eax,-0x40(%rbp)
movss  -0x2c(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
add    %ecx,%eax
cvtsi2ss %eax,%xmm1
movss  0xdba(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x10(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  -0x3c(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x8(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  -0x38(%rbp),%xmm2
movss  -0x34(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
cvtsi2ss %eax,%xmm3
subss  %xmm3,%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    12e6 <main+0x1a6>
lea    0xda4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movss  -0x24(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    13b8 <main+0x278>
jp     13b8 <main+0x278>
movss  -0xc(%rbp),%xmm0
movss  0xcf6(%rip),%xmm1
mulss  -0x2c(%rbp),%xmm1
mulss  -0x28(%rbp),%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0xcdc(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x28(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  -0x44(%rbp),%xmm0
add    $0x1,%eax
shl    $0x1,%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x14(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xcfc(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0x24(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1577 <main+0x437>
movss  -0xc(%rbp),%xmm0
movss  0xc2a(%rip),%xmm1
mulss  -0x2c(%rbp),%xmm1
mulss  -0x28(%rbp),%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0xc10(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x24(%rbp),%xmm0
call   1060 <sqrt@plt>
movss  -0x54(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x28(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  -0x50(%rbp),%xmm0
add    $0x1,%eax
shl    $0x1,%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x14(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0xc(%rbp),%xmm0
movss  0xb73(%rip),%xmm1
mulss  -0x2c(%rbp),%xmm1
mulss  -0x28(%rbp),%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0xb59(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x24(%rbp),%xmm0
call   1060 <sqrt@plt>
movss  -0x4c(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x28(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  -0x48(%rbp),%xmm0
add    $0x1,%eax
shl    $0x1,%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x28(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm2
movss  -0x2c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
lea    0xbbd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
movss  -0x20(%rbp),%xmm3
cvtss2sd %xmm3,%xmm3
lea    0xbdc(%rip),%rdi
mov    $0x4,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x40,%rsp
lea    0xed4(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf04(%rip),%rdi
lea    0x1c(%rsp),%rsi
lea    0x18(%rsp),%rdx
lea    0x3c(%rsp),%rcx
xor    %eax,%eax
call   1040 <scanf@plt>
lea    0xeee(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xedb(%rip),%rdi
lea    0x8(%rsp),%rsi
lea    0xc(%rsp),%rdx
xor    %eax,%eax
call   1040 <scanf@plt>
movss  0x1c(%rsp),%xmm0
movss  0xc(%rsp),%xmm1
addss  %xmm1,%xmm1
movss  0x8(%rsp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0xe40(%rip),%xmm3
movss  0x18(%rsp),%xmm0
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,0x14(%rsp)
movss  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
lea    0x4(,%rax,4),%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,0x20(%rsp)
movss  0x1c(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mov    %eax,%ebx
movss  0xc(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
add    %ebx,%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movss  0x18(%rsp),%xmm0
movaps %xmm0,%xmm3
movss  0xdb7(%rip),%xmm2
mulss  %xmm2,%xmm3
mulss  0xc(%rsp),%xmm3
addss  %xmm1,%xmm3
movss  %xmm3,0x10(%rsp)
mov    $0x2,%edi
call   1050 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
addss  0x10(%rsp),%xmm0
movss  %xmm0,0x10(%rsp)
movss  0x3c(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movss  0x14(%rsp),%xmm3
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  0x10(%rsp),%xmm1
subss  %xmm0,%xmm1
mulss  0x20(%rsp),%xmm1
subss  %xmm1,%xmm3
xorps  %xmm0,%xmm0
ucomiss %xmm3,%xmm0
movss  %xmm3,0x14(%rsp)
jbe    12d0 <main+0x190>
lea    0xddf(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movss  0x14(%rsp),%xmm3
ucomiss %xmm0,%xmm3
jne    136d <main+0x22d>
jp     136d <main+0x22d>
movss  0x1c(%rsp),%xmm1
movss  0xc(%rsp),%xmm2
addss  %xmm2,%xmm2
movss  0x8(%rsp),%xmm0
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm1
subss  %xmm1,%xmm2
movss  0x18(%rsp),%xmm1
mulss  0xcf1(%rip),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm1
xorps  0xcf2(%rip),%xmm1
movaps %xmm1,0x20(%rsp)
mov    $0x2,%edi
call   1050 <pow@plt>
add    %eax,%eax
add    $0x2,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps 0x20(%rsp),%xmm1
divss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mulss  0x8(%rsp),%xmm1
addss  0xc(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xd69(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  0x14(%rsp),%xmm3
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm3
jbe    14fa <main+0x3ba>
movss  0x1c(%rsp),%xmm0
movss  0xc(%rsp),%xmm1
addss  %xmm1,%xmm1
movss  0x8(%rsp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm0
subss  %xmm0,%xmm1
movss  0x18(%rsp),%xmm4
movss  0xc57(%rip),%xmm0
mulss  %xmm0,%xmm4
mulss  %xmm2,%xmm4
addss  %xmm1,%xmm4
movss  %xmm4,0x20(%rsp)
movaps %xmm3,%xmm0
call   1060 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
subss  0x20(%rsp),%xmm0
movss  %xmm0,0x10(%rsp)
movss  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
add    %eax,%eax
add    $0x2,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  0x10(%rsp),%xmm2
divss  %xmm0,%xmm2
movss  %xmm2,0x10(%rsp)
movss  0x8(%rsp),%xmm0
movss  0xc(%rsp),%xmm1
movaps %xmm0,%xmm3
mulss  %xmm2,%xmm3
addss  %xmm1,%xmm3
movss  %xmm3,0x38(%rsp)
movss  0x1c(%rsp),%xmm2
addss  %xmm1,%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm2
subss  %xmm2,%xmm1
movss  0xbc3(%rip),%xmm2
mulss  0x18(%rsp),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
xorps  0xbbe(%rip),%xmm2
movaps %xmm2,0x20(%rsp)
movss  0x14(%rsp),%xmm0
call   1060 <sqrt@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps 0x20(%rsp),%xmm1
subss  %xmm0,%xmm1
movaps %xmm1,0x20(%rsp)
movss  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
add    %eax,%eax
add    $0x2,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps 0x20(%rsp),%xmm1
divss  %xmm0,%xmm1
movaps %xmm1,0x20(%rsp)
movss  0x8(%rsp),%xmm0
mulss  %xmm1,%xmm0
addss  0xc(%rsp),%xmm0
movss  %xmm0,0x14(%rsp)
lea    0xc59(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movss  0x10(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  0x38(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
movaps 0x20(%rsp),%xmm2
cvtss2sd %xmm2,%xmm2
movss  0x14(%rsp),%xmm3
cvtss2sd %xmm3,%xmm3
lea    0xc75(%rip),%rdi
mov    $0x4,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [62 x i8] c"\D0\92\D0\B2\D0\B5\D0\B4\D0\B8\D1\82\D0\B5 \D0\BF\D0\B0\D1\80\D0\B0\D0\BC\D0\B5\D1\82\D1\80\D1\8B \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D0\B8 a,b,r:\00"
@.str.1 = [7 x i8] c"%f%f%f\00"
@.str.2 = [58 x i8] c"\D0\92\D0\B2\D0\B5\D0\B4\D0\B8\D1\82\D0\B5 \D0\BA\D0\BE\D1\8D\D1\84\D1\84\D0\B8\D1\86\D0\B8\D0\B5\D0\BD\D1\82\D1\8B \D0\BF\D1\80\D1\8F\D0\BC\D0\BE\D0\B9 k,b:\00"
@.str.3 = [5 x i8] c"%f%f\00"
@.str.4 = [42 x i8] c"\D0\A2\D0\BE\D1\87\D0\B5\D0\BA \D0\BF\D0\B5\D1\80\D0\B5\D1\81\D0\B5\D1\87\D0\B5\D0\BD\D0\B8\D1\8F \D0\BD\D0\B5\D1\82.\00"
@.str.5 = [78 x i8] c"\D0\9F\D1\80\D1\8F\D0\BC\D0\B0\D1\8F \D0\BA\D0\B0\D1\81\D0\B0\D0\B5\D1\82\D1\81\D1\8F \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D0\B8 \D0\B2 \D1\82\D0\BE\D1\87\D0\BA\D0\B5 x=%f \D0\B8 y=%f\00"
@.str.6 = [81 x i8] c"\D0\9F\D1\80\D1\8F\D0\BC\D0\B0\D1\8F \D0\BF\D0\B5\D1\80\D0\B5\D1\81\D0\B5\D0\BA\D0\B0\D0\B5\D1\82 \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D1\8C \D0\B2 \D0\B4\D0\B2\D1\83\D1\85 \D1\82\D0\BE\D1\87\D0\BA\D0\B0\D1\85:\00"
@.str.7 = [24 x i8] c"x1=%f y1=%f x2=%f y2=%f\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
store i32 0, i32* %1
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str, i64 0, i64 0))
%13 = call i32 (i8*, float*, float*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), float* %3, float* %4, float* %2)
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.2, i64 0, i64 0))
%15 = call i32 (i8*, float*, float*, ...) @scanf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), float* %10, float* %11)
%16 = load float, float* %3
%17 = load float, float* %11
%18 = fmul float 2.000000e+00, %17
%19 = load float, float* %10
%20 = fmul float %18, %19
%21 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %16, float %20)
%22 = load float, float* %4
%23 = fmul float 2.000000e+00, %22
%24 = load float, float* %10
%25 = fneg float %23
%26 = call float @llvm.fmuladd.f32(float %25, float %24, float %21)
%27 = call i32 @pow(float %26, i32 2)
%28 = sitofp i32 %27 to float
%29 = load float, float* %10
%30 = call i32 @pow(float %29, i32 2)
%31 = add nsw i32 1, %30
%32 = mul nsw i32 4, %31
%33 = sitofp i32 %32 to float
%34 = load float, float* %3
%35 = call i32 @pow(float %34, i32 2)
%36 = load float, float* %11
%37 = call i32 @pow(float %36, i32 2)
%38 = add nsw i32 %35, %37
%39 = sitofp i32 %38 to float
%40 = load float, float* %4
%41 = fmul float 2.000000e+00, %40
%42 = load float, float* %11
%43 = fneg float %41
%44 = call float @llvm.fmuladd.f32(float %43, float %42, float %39)
%45 = load float, float* %4
%46 = call i32 @pow(float %45, i32 2)
%47 = sitofp i32 %46 to float
%48 = fadd float %44, %47
%49 = load float, float* %2
%50 = call i32 @pow(float %49, i32 2)
%51 = sitofp i32 %50 to float
%52 = fsub float %48, %51
%53 = fneg float %33
%54 = call float @llvm.fmuladd.f32(float %53, float %52, float %28)
store float %54, float* %9
%55 = load float, float* %9
%56 = fcmp olt float %55, 0.000000e+00
br i1 %56, label %57, label %59
57: ; preds = %0
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.4, i64 0, i64 0))
br label %59
59: ; preds = %57, %0
%60 = load float, float* %9
%61 = fcmp oeq float %60, 0.000000e+00
br i1 %61, label %62, label %90
62: ; preds = %59
%63 = load float, float* %3
%64 = load float, float* %11
%65 = fmul float 2.000000e+00, %64
%66 = load float, float* %10
%67 = fmul float %65, %66
%68 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %63, float %67)
%69 = load float, float* %4
%70 = fmul float 2.000000e+00, %69
%71 = load float, float* %10
%72 = fneg float %70
%73 = call float @llvm.fmuladd.f32(float %72, float %71, float %68)
%74 = fneg float %73
%75 = load float, float* %10
%76 = call i32 @pow(float %75, i32 2)
%77 = add nsw i32 1, %76
%78 = mul nsw i32 2, %77
%79 = sitofp i32 %78 to float
%80 = fdiv float %74, %79
store float %80, float* %5
%81 = load float, float* %10
%82 = load float, float* %5
%83 = load float, float* %11
%84 = call float @llvm.fmuladd.f32(float %81, float %82, float %83)
store float %84, float* %6
%85 = load float, float* %5
%86 = fpext float %85 to double
%87 = load float, float* %6
%88 = fpext float %87 to double
%89 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.5, i64 0, i64 0), double %86, double %88)
br label %90
90: ; preds = %62, %59
%91 = load float, float* %9
%92 = fcmp ogt float %91, 0.000000e+00
br i1 %92, label %93, label %156
93: ; preds = %90
%94 = load float, float* %3
%95 = load float, float* %11
%96 = fmul float 2.000000e+00, %95
%97 = load float, float* %10
%98 = fmul float %96, %97
%99 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %94, float %98)
%100 = load float, float* %4
%101 = fmul float 2.000000e+00, %100
%102 = load float, float* %10
%103 = fneg float %101
%104 = call float @llvm.fmuladd.f32(float %103, float %102, float %99)
%105 = fneg float %104
%106 = load float, float* %9
%107 = call i32 @sqrt(float %106)
%108 = sitofp i32 %107 to float
%109 = fadd float %105, %108
%110 = load float, float* %10
%111 = call i32 @pow(float %110, i32 2)
%112 = add nsw i32 1, %111
%113 = mul nsw i32 2, %112
%114 = sitofp i32 %113 to float
%115 = fdiv float %109, %114
store float %115, float* %5
%116 = load float, float* %10
%117 = load float, float* %5
%118 = load float, float* %11
%119 = call float @llvm.fmuladd.f32(float %116, float %117, float %118)
store float %119, float* %6
%120 = load float, float* %3
%121 = load float, float* %11
%122 = fmul float 2.000000e+00, %121
%123 = load float, float* %10
%124 = fmul float %122, %123
%125 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %120, float %124)
%126 = load float, float* %4
%127 = fmul float 2.000000e+00, %126
%128 = load float, float* %10
%129 = fneg float %127
%130 = call float @llvm.fmuladd.f32(float %129, float %128, float %125)
%131 = fneg float %130
%132 = load float, float* %9
%133 = call i32 @sqrt(float %132)
%134 = sitofp i32 %133 to float
%135 = fsub float %131, %134
%136 = load float, float* %10
%137 = call i32 @pow(float %136, i32 2)
%138 = add nsw i32 1, %137
%139 = mul nsw i32 2, %138
%140 = sitofp i32 %139 to float
%141 = fdiv float %135, %140
store float %141, float* %7
%142 = load float, float* %10
%143 = load float, float* %7
%144 = load float, float* %11
%145 = call float @llvm.fmuladd.f32(float %142, float %143, float %144)
store float %145, float* %8
%146 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.6, i64 0, i64 0))
%147 = load float, float* %5
%148 = fpext float %147 to double
%149 = load float, float* %6
%150 = fpext float %149 to double
%151 = load float, float* %7
%152 = fpext float %151 to double
%153 = load float, float* %8
%154 = fpext float %153 to double
%155 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), double %148, double %150, double %152, double %154)
br label %156
156: ; preds = %93, %90
ret i32 0
}

LLVM IR (-O2):
@.str = [62 x i8] c"\D0\92\D0\B2\D0\B5\D0\B4\D0\B8\D1\82\D0\B5 \D0\BF\D0\B0\D1\80\D0\B0\D0\BC\D0\B5\D1\82\D1\80\D1\8B \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D0\B8 a,b,r:\00"
@.str.1 = [7 x i8] c"%f%f%f\00"
@.str.2 = [58 x i8] c"\D0\92\D0\B2\D0\B5\D0\B4\D0\B8\D1\82\D0\B5 \D0\BA\D0\BE\D1\8D\D1\84\D1\84\D0\B8\D1\86\D0\B8\D0\B5\D0\BD\D1\82\D1\8B \D0\BF\D1\80\D1\8F\D0\BC\D0\BE\D0\B9 k,b:\00"
@.str.3 = [5 x i8] c"%f%f\00"
@.str.4 = [42 x i8] c"\D0\A2\D0\BE\D1\87\D0\B5\D0\BA \D0\BF\D0\B5\D1\80\D0\B5\D1\81\D0\B5\D1\87\D0\B5\D0\BD\D0\B8\D1\8F \D0\BD\D0\B5\D1\82.\00"
@.str.5 = [78 x i8] c"\D0\9F\D1\80\D1\8F\D0\BC\D0\B0\D1\8F \D0\BA\D0\B0\D1\81\D0\B0\D0\B5\D1\82\D1\81\D1\8F \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D0\B8 \D0\B2 \D1\82\D0\BE\D1\87\D0\BA\D0\B5 x=%f \D0\B8 y=%f\00"
@.str.6 = [81 x i8] c"\D0\9F\D1\80\D1\8F\D0\BC\D0\B0\D1\8F \D0\BF\D0\B5\D1\80\D0\B5\D1\81\D0\B5\D0\BA\D0\B0\D0\B5\D1\82 \D0\BE\D0\BA\D1\80\D1\83\D0\B6\D0\BD\D0\BE\D1\81\D1\82\D1\8C \D0\B2 \D0\B4\D0\B2\D1\83\D1\85 \D1\82\D0\BE\D1\87\D0\BA\D0\B0\D1\85:\00"
@.str.7 = [24 x i8] c"x1=%f y1=%f x2=%f y2=%f\00"
define i32 @main() {
%1 = alloca float
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = bitcast float* %1 to i8*
%7 = bitcast float* %2 to i8*
%8 = bitcast float* %3 to i8*
%9 = bitcast float* %4 to i8*
%10 = bitcast float* %5 to i8*
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @.str, i64 0, i64 0))
%12 = call i32 (i8*, float*, float*, ...) @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), float* %2, float* %3, float* %1)
%13 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str.2, i64 0, i64 0))
%14 = call i32 (i8*, float*, float*, ...) @scanf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), float* %4, float* %5)
%15 = load float, float* %2
%16 = load float, float* %5
%17 = fmul float %16, 2.000000e+00
%18 = load float, float* %4
%19 = fmul float %17, %18
%20 = call float @llvm.fmuladd.f32(float %15, float -2.000000e+00, float %19)
%21 = load float, float* %3
%22 = fmul float %21, -2.000000e+00
%23 = call float @llvm.fmuladd.f32(float %22, float %18, float %20)
%24 = call i32 @pow(float %23, i32 2)
%25 = sitofp i32 %24 to float
%26 = load float, float* %4
%27 = call i32 @pow(float %26, i32 2)
%28 = shl i32 %27, 2
%29 = add i32 %28, 4
%30 = sitofp i32 %29 to float
%31 = load float, float* %2
%32 = call i32 @pow(float %31, i32 2)
%33 = load float, float* %5
%34 = call i32 @pow(float %33, i32 2)
%35 = add nsw i32 %34, %32
%36 = sitofp i32 %35 to float
%37 = load float, float* %3
%38 = load float, float* %5
%39 = fmul float %37, -2.000000e+00
%40 = call float @llvm.fmuladd.f32(float %39, float %38, float %36)
%41 = call i32 @pow(float %37, i32 2)
%42 = sitofp i32 %41 to float
%43 = fadd float %40, %42
%44 = load float, float* %1
%45 = call i32 @pow(float %44, i32 2)
%46 = sitofp i32 %45 to float
%47 = fsub float %43, %46
%48 = fneg float %30
%49 = call float @llvm.fmuladd.f32(float %48, float %47, float %25)
%50 = fcmp olt float %49, 0.000000e+00
br i1 %50, label %51, label %53
51: ; preds = %0
%52 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.4, i64 0, i64 0))
br label %53
53: ; preds = %51, %0
%54 = fcmp oeq float %49, 0.000000e+00
br i1 %54, label %55, label %77
55: ; preds = %53
%56 = load float, float* %2
%57 = load float, float* %5
%58 = fmul float %57, 2.000000e+00
%59 = load float, float* %4
%60 = fmul float %58, %59
%61 = call float @llvm.fmuladd.f32(float %56, float -2.000000e+00, float %60)
%62 = load float, float* %3
%63 = fmul float %62, -2.000000e+00
%64 = call float @llvm.fmuladd.f32(float %63, float %59, float %61)
%65 = fneg float %64
%66 = call i32 @pow(float %59, i32 2)
%67 = shl i32 %66, 1
%68 = add i32 %67, 2
%69 = sitofp i32 %68 to float
%70 = fdiv float %65, %69
%71 = load float, float* %4
%72 = load float, float* %5
%73 = call float @llvm.fmuladd.f32(float %71, float %70, float %72)
%74 = fpext float %70 to double
%75 = fpext float %73 to double
%76 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @.str.5, i64 0, i64 0), double %74, double %75)
br label %77
77: ; preds = %55, %53
%78 = fcmp ogt float %49, 0.000000e+00
br i1 %78, label %79, label %127
79: ; preds = %77
%80 = load float, float* %2
%81 = load float, float* %5
%82 = fmul float %81, 2.000000e+00
%83 = load float, float* %4
%84 = fmul float %82, %83
%85 = call float @llvm.fmuladd.f32(float %80, float -2.000000e+00, float %84)
%86 = load float, float* %3
%87 = fmul float %86, -2.000000e+00
%88 = call float @llvm.fmuladd.f32(float %87, float %83, float %85)
%89 = call i32 @sqrt(float %49)
%90 = sitofp i32 %89 to float
%91 = fsub float %90, %88
%92 = load float, float* %4
%93 = call i32 @pow(float %92, i32 2)
%94 = shl i32 %93, 1
%95 = add i32 %94, 2
%96 = sitofp i32 %95 to float
%97 = fdiv float %91, %96
%98 = load float, float* %4
%99 = load float, float* %5
%100 = call float @llvm.fmuladd.f32(float %98, float %97, float %99)
%101 = load float, float* %2
%102 = fmul float %99, 2.000000e+00
%103 = fmul float %98, %102
%104 = call float @llvm.fmuladd.f32(float %101, float -2.000000e+00, float %103)
%105 = load float, float* %3
%106 = fmul float %105, -2.000000e+00
%107 = call float @llvm.fmuladd.f32(float %106, float %98, float %104)
%108 = fneg float %107
%109 = call i32 @sqrt(float %49)
%110 = sitofp i32 %109 to float
%111 = fsub float %108, %110
%112 = load float, float* %4
%113 = call i32 @pow(float %112, i32 2)
%114 = shl i32 %113, 1
%115 = add i32 %114, 2
%116 = sitofp i32 %115 to float
%117 = fdiv float %111, %116
%118 = load float, float* %4
%119 = load float, float* %5
%120 = call float @llvm.fmuladd.f32(float %118, float %117, float %119)
%121 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @.str.6, i64 0, i64 0))
%122 = fpext float %97 to double
%123 = fpext float %100 to double
%124 = fpext float %117 to double
%125 = fpext float %120 to double
%126 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), double %122, double %123, double %124, double %125)
br label %127
127: ; preds = %79, %77
ret i32 0
}