#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, scalar_t__ *);
int main() {
  typedef struct {
    float x;
    float y;
  } punto;
  typedef struct {
    punto a;
    punto b;
  } segmento;
  segmento dati[100];
  segmento s;
  segmento ris[100];
  int num_coincidenti;
  int i;
  printf("Inserire coordinata x del primo punto: ");
  scanf("%f", &s.a.x);
  printf("\nInserire coordinata y del primo punto: ");
  scanf("%f", &s.a.y);
  printf("Inserire coordinata x del secondo punto: ");
  scanf("%f", &s.b.x);
  printf("\nInserire coordinata y del secondo punto: ");
  scanf("%f", &s.b.y);
  num_coincidenti = 0;
  for (i = 0; i < 100; i++)
    if (dati[i].a.x == s.a.x && dati[i].a.y == s.a.y && dati[i].b.x == s.b.x &&
            dati[i].b.y == s.b.y ||
        dati[i].b.x == s.a.x && dati[i].b.y == s.a.y && dati[i].a.x == s.b.x &&
            dati[i].a.y == s.b.y) {
      ris[num_coincidenti].a.x = s.a.x;
      ris[num_coincidenti].a.y = s.a.y;
      ris[num_coincidenti].b.x = s.b.x;
      ris[num_coincidenti].b.y = s.b.y;
      num_coincidenti++;
    }
  for (i = 0; i < 100 - 1; i++)
    if (dati[i].b.x == dati[i + 1].a.x && dati[i].b.y == dati[i + 1].a.y)
      printf("(%f, %f)--(%f, %f)--(%f, %f)\n", dati[i].a.x, dati[i].a.y,
             dati[i].b.x, dati[i].b.y, dati[i + 1].a.x, dati[i + 1].a.y);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xcb0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xec7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x660(%rbp),%rsi
lea    0xeda(%rip),%rdi
call   1040 <scanf@plt>
lea    0xed1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x660(%rbp),%rsi
add    $0x4,%rsi
lea    0xeb5(%rip),%rdi
call   1040 <scanf@plt>
lea    0xed5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x660(%rbp),%rsi
add    $0x8,%rsi
lea    0xe90(%rip),%rdi
call   1040 <scanf@plt>
lea    0xeda(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x660(%rbp),%rsi
add    $0x8,%rsi
add    $0x4,%rsi
lea    0xe67(%rip),%rdi
call   1040 <scanf@plt>
movl   $0x0,-0xca4(%rbp)
movl   $0x0,-0xca8(%rbp)
cmpl   $0x64,-0xca8(%rbp)
jge    1401 <main+0x2e1>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  (%rax),%xmm0
ucomiss -0x660(%rbp),%xmm0
jne    129f <main+0x17f>
jp     129f <main+0x17f>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm0
ucomiss -0x65c(%rbp),%xmm0
jne    129f <main+0x17f>
jp     129f <main+0x17f>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm0
ucomiss -0x658(%rbp),%xmm0
jne    129f <main+0x17f>
jp     129f <main+0x17f>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0xc(%rax),%xmm0
ucomiss -0x654(%rbp),%xmm0
jne    129f <main+0x17f>
jp     129f <main+0x17f>
jmp    1352 <main+0x232>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm0
ucomiss -0x660(%rbp),%xmm0
jne    13e8 <main+0x2c8>
jp     13e8 <main+0x2c8>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0xc(%rax),%xmm0
ucomiss -0x65c(%rbp),%xmm0
jne    13e8 <main+0x2c8>
jp     13e8 <main+0x2c8>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  (%rax),%xmm0
ucomiss -0x658(%rbp),%xmm0
jne    13e8 <main+0x2c8>
jp     13e8 <main+0x2c8>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm0
ucomiss -0x654(%rbp),%xmm0
jne    13e8 <main+0x2c8>
jp     13e8 <main+0x2c8>
movss  -0x660(%rbp),%xmm0
ff
movslq -0xca4(%rbp),%rcx
lea    -0xca0(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  %xmm0,(%rax)
movss  -0x65c(%rbp),%xmm0
ff
movslq -0xca4(%rbp),%rcx
lea    -0xca0(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  %xmm0,0x4(%rax)
movss  -0x658(%rbp),%xmm0
ff
movslq -0xca4(%rbp),%rcx
lea    -0xca0(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  %xmm0,0x8(%rax)
movss  -0x654(%rbp),%xmm0
ff
movslq -0xca4(%rbp),%rcx
lea    -0xca0(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  %xmm0,0xc(%rax)
mov    -0xca4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xca4(%rbp)
jmp    13ed <main+0x2cd>
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xca8(%rbp)
jmp    11da <main+0xba>
movl   $0x0,-0xca8(%rbp)
cmpl   $0x63,-0xca8(%rbp)
jge    1582 <main+0x462>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm0
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
ucomiss (%rax),%xmm0
jne    1569 <main+0x449>
jp     1569 <main+0x449>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0xc(%rax),%xmm0
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
ucomiss 0x4(%rax),%xmm0
jne    1569 <main+0x449>
jp     1569 <main+0x449>
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
movslq -0xca8(%rbp),%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0xc(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  (%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
lea    0xb47(%rip),%rdi
mov    $0x6,%al
call   1030 <printf@plt>
jmp    156e <main+0x44e>
mov    -0xca8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xca8(%rbp)
jmp    140b <main+0x2eb>
xor    %eax,%eax
add    $0xcb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x658,%rsp
lea    0xecf(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xee9(%rip),%rbx
mov    %rsp,%rsi
mov    %rbx,%rdi
call   1040 <scanf@plt>
lea    0xeda(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0x4(%rsp),%rsi
mov    %rbx,%rdi
call   1040 <scanf@plt>
lea    0xee8(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0x8(%rsp),%rsi
mov    %rbx,%rdi
call   1040 <scanf@plt>
lea    0xef7(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xc(%rsp),%rsi
mov    %rbx,%rdi
call   1040 <scanf@plt>
mov    $0x14,%ebx
lea    0xf02(%rip),%r14
jmp    11bd <main+0x9d>
nopl   0x0(%rax)
add    $0x10,%rbx
cmp    $0x644,%rbx
je     1212 <main+0xf2>
movss  0x4(%rsp,%rbx,1),%xmm2
movss  0xc(%rsp,%rbx,1),%xmm4
ucomiss %xmm4,%xmm2
jne    11b0 <main+0x90>
jp     11b0 <main+0x90>
movss  0x8(%rsp,%rbx,1),%xmm3
movss  0x10(%rsp,%rbx,1),%xmm5
ucomiss %xmm5,%xmm3
jne    11b0 <main+0x90>
jp     11b0 <main+0x90>
movss  -0x4(%rsp,%rbx,1),%xmm0
movss  (%rsp,%rbx,1),%xmm1
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
cvtss2sd %xmm4,%xmm4
cvtss2sd %xmm5,%xmm5
mov    %r14,%rdi
mov    $0x6,%al
call   1030 <printf@plt>
jmp    11b0 <main+0x90>
xor    %eax,%eax
add    $0x658,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
%struct.segmento = type { %struct.punto, %struct.punto }
%struct.punto = type { float, float }
@.str = [40 x i8] c"Inserire coordinata x del primo punto: \00"
@.str.1 = [3 x i8] c"%f\00"
@.str.2 = [41 x i8] c"\0AInserire coordinata y del primo punto: \00"
@.str.3 = [42 x i8] c"Inserire coordinata x del secondo punto: \00"
@.str.4 = [43 x i8] c"\0AInserire coordinata y del secondo punto: \00"
@.str.5 = [30 x i8] c"(%f, %f)--(%f, %f)--(%f, %f)\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [100 x %struct.segmento]
%3 = alloca %struct.segmento
%4 = alloca [100 x %struct.segmento]
%5 = alloca i32
%6 = alloca i32
store i32 0, i32* %1
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0))
%8 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%9 = getelementptr inbounds %struct.punto, %struct.punto* %8, i32 0, i32 0
%10 = bitcast float* %9 to i64*
%11 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %10)
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0))
%13 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%14 = getelementptr inbounds %struct.punto, %struct.punto* %13, i32 0, i32 1
%15 = bitcast float* %14 to i64*
%16 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %15)
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.3, i64 0, i64 0))
%18 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%19 = getelementptr inbounds %struct.punto, %struct.punto* %18, i32 0, i32 0
%20 = bitcast float* %19 to i64*
%21 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %20)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.4, i64 0, i64 0))
%23 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%24 = getelementptr inbounds %struct.punto, %struct.punto* %23, i32 0, i32 1
%25 = bitcast float* %24 to i64*
%26 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %25)
store i32 0, i32* %5
store i32 0, i32* %6
br label %27
27: ; preds = %154, %0
%28 = load i32, i32* %6
%29 = icmp slt i32 %28, 100
br i1 %29, label %30, label %157
30: ; preds = %27
%31 = load i32, i32* %6
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %32
%34 = getelementptr inbounds %struct.segmento, %struct.segmento* %33, i32 0, i32 0
%35 = getelementptr inbounds %struct.punto, %struct.punto* %34, i32 0, i32 0
%36 = load float, float* %35
%37 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%38 = getelementptr inbounds %struct.punto, %struct.punto* %37, i32 0, i32 0
%39 = load float, float* %38
%40 = fcmp oeq float %36, %39
br i1 %40, label %41, label %74
41: ; preds = %30
%42 = load i32, i32* %6
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %43
%45 = getelementptr inbounds %struct.segmento, %struct.segmento* %44, i32 0, i32 0
%46 = getelementptr inbounds %struct.punto, %struct.punto* %45, i32 0, i32 1
%47 = load float, float* %46
%48 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%49 = getelementptr inbounds %struct.punto, %struct.punto* %48, i32 0, i32 1
%50 = load float, float* %49
%51 = fcmp oeq float %47, %50
br i1 %51, label %52, label %74
52: ; preds = %41
%53 = load i32, i32* %6
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %54
%56 = getelementptr inbounds %struct.segmento, %struct.segmento* %55, i32 0, i32 1
%57 = getelementptr inbounds %struct.punto, %struct.punto* %56, i32 0, i32 0
%58 = load float, float* %57
%59 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%60 = getelementptr inbounds %struct.punto, %struct.punto* %59, i32 0, i32 0
%61 = load float, float* %60
%62 = fcmp oeq float %58, %61
br i1 %62, label %63, label %74
63: ; preds = %52
%64 = load i32, i32* %6
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %65
%67 = getelementptr inbounds %struct.segmento, %struct.segmento* %66, i32 0, i32 1
%68 = getelementptr inbounds %struct.punto, %struct.punto* %67, i32 0, i32 1
%69 = load float, float* %68
%70 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%71 = getelementptr inbounds %struct.punto, %struct.punto* %70, i32 0, i32 1
%72 = load float, float* %71
%73 = fcmp oeq float %69, %72
br i1 %73, label %118, label %74
74: ; preds = %63, %52, %41, %30
%75 = load i32, i32* %6
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %76
%78 = getelementptr inbounds %struct.segmento, %struct.segmento* %77, i32 0, i32 1
%79 = getelementptr inbounds %struct.punto, %struct.punto* %78, i32 0, i32 0
%80 = load float, float* %79
%81 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%82 = getelementptr inbounds %struct.punto, %struct.punto* %81, i32 0, i32 0
%83 = load float, float* %82
%84 = fcmp oeq float %80, %83
br i1 %84, label %85, label %153
85: ; preds = %74
%86 = load i32, i32* %6
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %87
%89 = getelementptr inbounds %struct.segmento, %struct.segmento* %88, i32 0, i32 1
%90 = getelementptr inbounds %struct.punto, %struct.punto* %89, i32 0, i32 1
%91 = load float, float* %90
%92 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%93 = getelementptr inbounds %struct.punto, %struct.punto* %92, i32 0, i32 1
%94 = load float, float* %93
%95 = fcmp oeq float %91, %94
br i1 %95, label %96, label %153
96: ; preds = %85
%97 = load i32, i32* %6
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %98
%100 = getelementptr inbounds %struct.segmento, %struct.segmento* %99, i32 0, i32 0
%101 = getelementptr inbounds %struct.punto, %struct.punto* %100, i32 0, i32 0
%102 = load float, float* %101
%103 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%104 = getelementptr inbounds %struct.punto, %struct.punto* %103, i32 0, i32 0
%105 = load float, float* %104
%106 = fcmp oeq float %102, %105
br i1 %106, label %107, label %153
107: ; preds = %96
%108 = load i32, i32* %6
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %109
%111 = getelementptr inbounds %struct.segmento, %struct.segmento* %110, i32 0, i32 0
%112 = getelementptr inbounds %struct.punto, %struct.punto* %111, i32 0, i32 1
%113 = load float, float* %112
%114 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%115 = getelementptr inbounds %struct.punto, %struct.punto* %114, i32 0, i32 1
%116 = load float, float* %115
%117 = fcmp oeq float %113, %116
br i1 %117, label %118, label %153
118: ; preds = %107, %63
%119 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%120 = getelementptr inbounds %struct.punto, %struct.punto* %119, i32 0, i32 0
%121 = load float, float* %120
%122 = load i32, i32* %5
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %4, i64 0, i64 %123
%125 = getelementptr inbounds %struct.segmento, %struct.segmento* %124, i32 0, i32 0
%126 = getelementptr inbounds %struct.punto, %struct.punto* %125, i32 0, i32 0
store float %121, float* %126
%127 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 0
%128 = getelementptr inbounds %struct.punto, %struct.punto* %127, i32 0, i32 1
%129 = load float, float* %128
%130 = load i32, i32* %5
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %4, i64 0, i64 %131
%133 = getelementptr inbounds %struct.segmento, %struct.segmento* %132, i32 0, i32 0
%134 = getelementptr inbounds %struct.punto, %struct.punto* %133, i32 0, i32 1
store float %129, float* %134
%135 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%136 = getelementptr inbounds %struct.punto, %struct.punto* %135, i32 0, i32 0
%137 = load float, float* %136
%138 = load i32, i32* %5
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %4, i64 0, i64 %139
%141 = getelementptr inbounds %struct.segmento, %struct.segmento* %140, i32 0, i32 1
%142 = getelementptr inbounds %struct.punto, %struct.punto* %141, i32 0, i32 0
store float %137, float* %142
%143 = getelementptr inbounds %struct.segmento, %struct.segmento* %3, i32 0, i32 1
%144 = getelementptr inbounds %struct.punto, %struct.punto* %143, i32 0, i32 1
%145 = load float, float* %144
%146 = load i32, i32* %5
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %4, i64 0, i64 %147
%149 = getelementptr inbounds %struct.segmento, %struct.segmento* %148, i32 0, i32 1
%150 = getelementptr inbounds %struct.punto, %struct.punto* %149, i32 0, i32 1
store float %145, float* %150
%151 = load i32, i32* %5
%152 = add nsw i32 %151, 1
store i32 %152, i32* %5
br label %153
153: ; preds = %118, %107, %96, %85, %74
br label %154
154: ; preds = %153
%155 = load i32, i32* %6
%156 = add nsw i32 %155, 1
store i32 %156, i32* %6
br label %27
157: ; preds = %27
store i32 0, i32* %6
br label %158
158: ; preds = %238, %157
%159 = load i32, i32* %6
%160 = icmp slt i32 %159, 99
br i1 %160, label %161, label %241
161: ; preds = %158
%162 = load i32, i32* %6
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %163
%165 = getelementptr inbounds %struct.segmento, %struct.segmento* %164, i32 0, i32 1
%166 = getelementptr inbounds %struct.punto, %struct.punto* %165, i32 0, i32 0
%167 = load float, float* %166
%168 = load i32, i32* %6
%169 = add nsw i32 %168, 1
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %170
%172 = getelementptr inbounds %struct.segmento, %struct.segmento* %171, i32 0, i32 0
%173 = getelementptr inbounds %struct.punto, %struct.punto* %172, i32 0, i32 0
%174 = load float, float* %173
%175 = fcmp oeq float %167, %174
br i1 %175, label %176, label %237
176: ; preds = %161
%177 = load i32, i32* %6
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %178
%180 = getelementptr inbounds %struct.segmento, %struct.segmento* %179, i32 0, i32 1
%181 = getelementptr inbounds %struct.punto, %struct.punto* %180, i32 0, i32 1
%182 = load float, float* %181
%183 = load i32, i32* %6
%184 = add nsw i32 %183, 1
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %185
%187 = getelementptr inbounds %struct.segmento, %struct.segmento* %186, i32 0, i32 0
%188 = getelementptr inbounds %struct.punto, %struct.punto* %187, i32 0, i32 1
%189 = load float, float* %188
%190 = fcmp oeq float %182, %189
br i1 %190, label %191, label %237
191: ; preds = %176
%192 = load i32, i32* %6
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %193
%195 = getelementptr inbounds %struct.segmento, %struct.segmento* %194, i32 0, i32 0
%196 = getelementptr inbounds %struct.punto, %struct.punto* %195, i32 0, i32 0
%197 = load float, float* %196
%198 = fpext float %197 to double
%199 = load i32, i32* %6
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %200
%202 = getelementptr inbounds %struct.segmento, %struct.segmento* %201, i32 0, i32 0
%203 = getelementptr inbounds %struct.punto, %struct.punto* %202, i32 0, i32 1
%204 = load float, float* %203
%205 = fpext float %204 to double
%206 = load i32, i32* %6
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %207
%209 = getelementptr inbounds %struct.segmento, %struct.segmento* %208, i32 0, i32 1
%210 = getelementptr inbounds %struct.punto, %struct.punto* %209, i32 0, i32 0
%211 = load float, float* %210
%212 = fpext float %211 to double
%213 = load i32, i32* %6
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %214
%216 = getelementptr inbounds %struct.segmento, %struct.segmento* %215, i32 0, i32 1
%217 = getelementptr inbounds %struct.punto, %struct.punto* %216, i32 0, i32 1
%218 = load float, float* %217
%219 = fpext float %218 to double
%220 = load i32, i32* %6
%221 = add nsw i32 %220, 1
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %222
%224 = getelementptr inbounds %struct.segmento, %struct.segmento* %223, i32 0, i32 0
%225 = getelementptr inbounds %struct.punto, %struct.punto* %224, i32 0, i32 0
%226 = load float, float* %225
%227 = fpext float %226 to double
%228 = load i32, i32* %6
%229 = add nsw i32 %228, 1
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %2, i64 0, i64 %230
%232 = getelementptr inbounds %struct.segmento, %struct.segmento* %231, i32 0, i32 0
%233 = getelementptr inbounds %struct.punto, %struct.punto* %232, i32 0, i32 1
%234 = load float, float* %233
%235 = fpext float %234 to double
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0), double %198, double %205, double %212, double %219, double %227, double %235)
br label %237
237: ; preds = %191, %176, %161
br label %238
238: ; preds = %237
%239 = load i32, i32* %6
%240 = add nsw i32 %239, 1
store i32 %240, i32* %6
br label %158
241: ; preds = %158
ret i32 0
}

LLVM IR (-O2):
%struct.segmento = type { %struct.punto, %struct.punto }
%struct.punto = type { float, float }
@.str = [40 x i8] c"Inserire coordinata x del primo punto: \00"
@.str.1 = [3 x i8] c"%f\00"
@.str.2 = [41 x i8] c"\0AInserire coordinata y del primo punto: \00"
@.str.3 = [42 x i8] c"Inserire coordinata x del secondo punto: \00"
@.str.4 = [43 x i8] c"\0AInserire coordinata y del secondo punto: \00"
@.str.5 = [30 x i8] c"(%f, %f)--(%f, %f)--(%f, %f)\0A\00"
define i32 @main() {
%1 = alloca [100 x %struct.segmento]
%2 = alloca %struct.segmento
%3 = bitcast [100 x %struct.segmento]* %1 to i8*
%4 = bitcast %struct.segmento* %2 to i8*
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str, i64 0, i64 0))
%6 = bitcast %struct.segmento* %2 to i64*
%7 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %6)
%8 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0))
%9 = getelementptr inbounds %struct.segmento, %struct.segmento* %2, i64 0, i32 0, i32 1
%10 = bitcast float* %9 to i64*
%11 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %10)
%12 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.3, i64 0, i64 0))
%13 = getelementptr inbounds %struct.segmento, %struct.segmento* %2, i64 0, i32 1
%14 = bitcast %struct.punto* %13 to i64*
%15 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %14)
%16 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.4, i64 0, i64 0))
%17 = getelementptr inbounds %struct.segmento, %struct.segmento* %2, i64 0, i32 1, i32 1
%18 = bitcast float* %17 to i64*
%19 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i64* %18)
br label %20
20: ; preds = %0, %46
%21 = phi i64 [ 0, %0 ], [ %24, %46 ]
%22 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %21, i32 1, i32 0
%23 = load float, float* %22
%24 = add nuw nsw i64 %21, 1
%25 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %24, i32 0, i32 0
%26 = load float, float* %25
%27 = fcmp oeq float %23, %26
br i1 %27, label %28, label %46
28: ; preds = %20
%29 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %21, i32 1, i32 1
%30 = load float, float* %29
%31 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %24, i32 0, i32 1
%32 = load float, float* %31
%33 = fcmp oeq float %30, %32
br i1 %33, label %34, label %46
34: ; preds = %28
%35 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %21, i32 0, i32 0
%36 = load float, float* %35
%37 = fpext float %36 to double
%38 = getelementptr inbounds [100 x %struct.segmento], [100 x %struct.segmento]* %1, i64 0, i64 %21, i32 0, i32 1
%39 = load float, float* %38
%40 = fpext float %39 to double
%41 = fpext float %23 to double
%42 = fpext float %30 to double
%43 = fpext float %26 to double
%44 = fpext float %32 to double
%45 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0), double %37, double %40, double %41, double %42, double %43, double %44)
br label %46
46: ; preds = %20, %28, %34
%47 = icmp eq i64 %24, 99
br i1 %47, label %48, label %20
48: ; preds = %46
ret i32 0
}