#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 *, float);
int /*<<< orphan*/ scanf(char *, float *, float *, float *);
int main() {
  float a = 0, b = 0, c = 0, d = 0;
  scanf("%f%f%f", &a, &b, &c);
  if ((a + b) <= c && a >= b) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else if ((a + b) <= c && a <= b) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else if ((a + c) <= b && a <= c) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else if ((a + c) <= b && a >= c) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else if ((b + c) <= a && b <= c) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else if ((b + c) <= a && b >= c) {
    d = (a + b) * .5 * c;
    printf("Area = %.1f\n", d);
  } else {
    d = a + b + c;
    printf("Perimetro = %.1f\n", d);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
lea    0xeb2(%rip),%rdi
lea    -0x8(%rbp),%rsi
lea    -0xc(%rbp),%rdx
lea    -0x10(%rbp),%rcx
call   1040 <scanf@plt>
movss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     11d4 <main+0xb4>
movss  -0x8(%rbp),%xmm0
ucomiss -0xc(%rbp),%xmm0
jb     11d4 <main+0xb4>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe5c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xe45(%rip),%rdi
call   1030 <printf@plt>
jmp    143f <main+0x31f>
movss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1245 <main+0x125>
movss  -0x8(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1245 <main+0x125>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdeb(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xdd4(%rip),%rdi
call   1030 <printf@plt>
jmp    143a <main+0x31a>
movss  -0x8(%rbp),%xmm1
addss  -0x10(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     12b6 <main+0x196>
movss  -0x8(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     12b6 <main+0x196>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd7a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xd63(%rip),%rdi
call   1030 <printf@plt>
jmp    1435 <main+0x315>
movss  -0x8(%rbp),%xmm1
addss  -0x10(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1323 <main+0x203>
movss  -0x8(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jb     1323 <main+0x203>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd0d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xcf6(%rip),%rdi
call   1030 <printf@plt>
jmp    1430 <main+0x310>
movss  -0xc(%rbp),%xmm1
addss  -0x10(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1394 <main+0x274>
movss  -0xc(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1394 <main+0x274>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc9c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xc85(%rip),%rdi
call   1030 <printf@plt>
jmp    142b <main+0x30b>
movss  -0xc(%rbp),%xmm1
addss  -0x10(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1401 <main+0x2e1>
movss  -0xc(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jb     1401 <main+0x2e1>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc2f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xc18(%rip),%rdi
call   1030 <printf@plt>
jmp    1426 <main+0x306>
movss  -0x8(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
lea    0xbfb(%rip),%rdi
call   1030 <printf@plt>
jmp    142b <main+0x30b>
jmp    1430 <main+0x310>
jmp    1435 <main+0x315>
jmp    143a <main+0x31a>
jmp    143f <main+0x31f>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x18,%rsp
movl   $0x0,0x14(%rsp)
movl   $0x0,0x10(%rsp)
movl   $0x0,0xc(%rsp)
lea    0xec5(%rip),%rdi
lea    0x14(%rsp),%rsi
lea    0x10(%rsp),%rdx
lea    0xc(%rsp),%rcx
call   1040 <scanf@plt>
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
movaps %xmm2,%xmm0
addss  %xmm3,%xmm0
movss  0xc(%rsp),%xmm1
ucomiss %xmm3,%xmm2
jb     117a <main+0x5a>
ucomiss %xmm0,%xmm1
jae    11ba <main+0x9a>
ucomiss %xmm2,%xmm3
jb     1184 <main+0x64>
ucomiss %xmm0,%xmm1
jae    11ba <main+0x9a>
movaps %xmm2,%xmm4
addss  %xmm1,%xmm4
ucomiss %xmm2,%xmm1
jb     1195 <main+0x75>
ucomiss %xmm4,%xmm3
jae    11ba <main+0x9a>
ucomiss %xmm1,%xmm2
jb     119f <main+0x7f>
ucomiss %xmm4,%xmm3
jae    11ba <main+0x9a>
movaps %xmm3,%xmm4
addss  %xmm1,%xmm4
ucomiss %xmm3,%xmm1
jb     11b0 <main+0x90>
ucomiss %xmm4,%xmm2
jae    11ba <main+0x9a>
ucomiss %xmm1,%xmm3
jb     11e8 <main+0xc8>
ucomiss %xmm4,%xmm2
jb     11e8 <main+0xc8>
cvtss2sd %xmm0,%xmm0
mulsd  0xe3a(%rip),%xmm0
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
lea    0xe33(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
ret
addss  %xmm1,%xmm0
lea    0xe29(%rip),%rdi
jmp    11dc <main+0xbc>

LLVM IR (-O0):
@.str = [7 x i8] c"%f%f%f\00"
@.str.1 = [13 x i8] c"Area = %.1f\0A\00"
@.str.2 = [18 x i8] c"Perimetro = %.1f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
store i32 0, i32* %1
store float 0.000000e+00, float* %2
store float 0.000000e+00, float* %3
store float 0.000000e+00, float* %4
store float 0.000000e+00, float* %5
%6 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), float* %2, float* %3, float* %4)
%7 = load float, float* %2
%8 = load float, float* %3
%9 = fadd float %7, %8
%10 = load float, float* %4
%11 = fcmp ole float %9, %10
br i1 %11, label %12, label %28
12: ; preds = %0
%13 = load float, float* %2
%14 = load float, float* %3
%15 = fcmp oge float %13, %14
br i1 %15, label %16, label %28
16: ; preds = %12
%17 = load float, float* %2
%18 = load float, float* %3
%19 = fadd float %17, %18
%20 = fpext float %19 to double
%21 = fmul double %20, 5.000000e-01
%22 = load float, float* %4
%23 = fpext float %22 to double
%24 = fmul double %21, %23
%25 = fptrunc double %24 to float
store float %25, float* %5
%26 = load float, float* %5
%27 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %26)
br label %151
28: ; preds = %12, %0
%29 = load float, float* %2
%30 = load float, float* %3
%31 = fadd float %29, %30
%32 = load float, float* %4
%33 = fcmp ole float %31, %32
br i1 %33, label %34, label %50
34: ; preds = %28
%35 = load float, float* %2
%36 = load float, float* %3
%37 = fcmp ole float %35, %36
br i1 %37, label %38, label %50
38: ; preds = %34
%39 = load float, float* %2
%40 = load float, float* %3
%41 = fadd float %39, %40
%42 = fpext float %41 to double
%43 = fmul double %42, 5.000000e-01
%44 = load float, float* %4
%45 = fpext float %44 to double
%46 = fmul double %43, %45
%47 = fptrunc double %46 to float
store float %47, float* %5
%48 = load float, float* %5
%49 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %48)
br label %150
50: ; preds = %34, %28
%51 = load float, float* %2
%52 = load float, float* %4
%53 = fadd float %51, %52
%54 = load float, float* %3
%55 = fcmp ole float %53, %54
br i1 %55, label %56, label %72
56: ; preds = %50
%57 = load float, float* %2
%58 = load float, float* %4
%59 = fcmp ole float %57, %58
br i1 %59, label %60, label %72
60: ; preds = %56
%61 = load float, float* %2
%62 = load float, float* %3
%63 = fadd float %61, %62
%64 = fpext float %63 to double
%65 = fmul double %64, 5.000000e-01
%66 = load float, float* %4
%67 = fpext float %66 to double
%68 = fmul double %65, %67
%69 = fptrunc double %68 to float
store float %69, float* %5
%70 = load float, float* %5
%71 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %70)
br label %149
72: ; preds = %56, %50
%73 = load float, float* %2
%74 = load float, float* %4
%75 = fadd float %73, %74
%76 = load float, float* %3
%77 = fcmp ole float %75, %76
br i1 %77, label %78, label %94
78: ; preds = %72
%79 = load float, float* %2
%80 = load float, float* %4
%81 = fcmp oge float %79, %80
br i1 %81, label %82, label %94
82: ; preds = %78
%83 = load float, float* %2
%84 = load float, float* %3
%85 = fadd float %83, %84
%86 = fpext float %85 to double
%87 = fmul double %86, 5.000000e-01
%88 = load float, float* %4
%89 = fpext float %88 to double
%90 = fmul double %87, %89
%91 = fptrunc double %90 to float
store float %91, float* %5
%92 = load float, float* %5
%93 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %92)
br label %148
94: ; preds = %78, %72
%95 = load float, float* %3
%96 = load float, float* %4
%97 = fadd float %95, %96
%98 = load float, float* %2
%99 = fcmp ole float %97, %98
br i1 %99, label %100, label %116
100: ; preds = %94
%101 = load float, float* %3
%102 = load float, float* %4
%103 = fcmp ole float %101, %102
br i1 %103, label %104, label %116
104: ; preds = %100
%105 = load float, float* %2
%106 = load float, float* %3
%107 = fadd float %105, %106
%108 = fpext float %107 to double
%109 = fmul double %108, 5.000000e-01
%110 = load float, float* %4
%111 = fpext float %110 to double
%112 = fmul double %109, %111
%113 = fptrunc double %112 to float
store float %113, float* %5
%114 = load float, float* %5
%115 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %114)
br label %147
116: ; preds = %100, %94
%117 = load float, float* %3
%118 = load float, float* %4
%119 = fadd float %117, %118
%120 = load float, float* %2
%121 = fcmp ole float %119, %120
br i1 %121, label %122, label %138
122: ; preds = %116
%123 = load float, float* %3
%124 = load float, float* %4
%125 = fcmp oge float %123, %124
br i1 %125, label %126, label %138
126: ; preds = %122
%127 = load float, float* %2
%128 = load float, float* %3
%129 = fadd float %127, %128
%130 = fpext float %129 to double
%131 = fmul double %130, 5.000000e-01
%132 = load float, float* %4
%133 = fpext float %132 to double
%134 = fmul double %131, %133
%135 = fptrunc double %134 to float
store float %135, float* %5
%136 = load float, float* %5
%137 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %136)
br label %146
138: ; preds = %122, %116
%139 = load float, float* %2
%140 = load float, float* %3
%141 = fadd float %139, %140
%142 = load float, float* %4
%143 = fadd float %141, %142
store float %143, float* %5
%144 = load float, float* %5
%145 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), float %144)
br label %146
146: ; preds = %138, %126
br label %147
147: ; preds = %146, %104
br label %148
148: ; preds = %147, %82
br label %149
149: ; preds = %148, %60
br label %150
150: ; preds = %149, %38
br label %151
151: ; preds = %150, %16
ret i32 0
}

LLVM IR (-O2):
@.str = [7 x i8] c"%f%f%f\00"
@.str.1 = [13 x i8] c"Area = %.1f\0A\00"
@.str.2 = [18 x i8] c"Perimetro = %.1f\0A\00"
define i32 @main() {
%1 = alloca float
%2 = alloca float
%3 = alloca float
%4 = bitcast float* %1 to i8*
store float 0.000000e+00, float* %1
%5 = bitcast float* %2 to i8*
store float 0.000000e+00, float* %2
%6 = bitcast float* %3 to i8*
store float 0.000000e+00, float* %3
%7 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), float* %1, float* %2, float* %3)
%8 = load float, float* %1
%9 = load float, float* %2
%10 = fadd float %8, %9
%11 = load float, float* %3
%12 = fcmp ugt float %10, %11
%13 = fcmp ult float %8, %9
%14 = or i1 %13, %12
br i1 %14, label %22, label %15
15: ; preds = %0
%16 = fpext float %10 to double
%17 = fmul double %16, 5.000000e-01
%18 = fpext float %11 to double
%19 = fmul double %17, %18
%20 = fptrunc double %19 to float
%21 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %20)
br label %79
22: ; preds = %0
%23 = fcmp ugt float %8, %9
%24 = or i1 %23, %12
br i1 %24, label %32, label %25
25: ; preds = %22
%26 = fpext float %10 to double
%27 = fmul double %26, 5.000000e-01
%28 = fpext float %11 to double
%29 = fmul double %27, %28
%30 = fptrunc double %29 to float
%31 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %30)
br label %79
32: ; preds = %22
%33 = fadd float %8, %11
%34 = fcmp ugt float %33, %9
%35 = fcmp ugt float %8, %11
%36 = or i1 %35, %34
br i1 %36, label %44, label %37
37: ; preds = %32
%38 = fpext float %10 to double
%39 = fmul double %38, 5.000000e-01
%40 = fpext float %11 to double
%41 = fmul double %39, %40
%42 = fptrunc double %41 to float
%43 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %42)
br label %79
44: ; preds = %32
%45 = fcmp ult float %8, %11
%46 = or i1 %45, %34
br i1 %46, label %54, label %47
47: ; preds = %44
%48 = fpext float %10 to double
%49 = fmul double %48, 5.000000e-01
%50 = fpext float %11 to double
%51 = fmul double %49, %50
%52 = fptrunc double %51 to float
%53 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %52)
br label %79
54: ; preds = %44
%55 = fadd float %9, %11
%56 = fcmp ugt float %55, %8
%57 = fcmp ugt float %9, %11
%58 = or i1 %57, %56
br i1 %58, label %66, label %59
59: ; preds = %54
%60 = fpext float %10 to double
%61 = fmul double %60, 5.000000e-01
%62 = fpext float %11 to double
%63 = fmul double %61, %62
%64 = fptrunc double %63 to float
%65 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %64)
br label %79
66: ; preds = %54
%67 = fcmp ult float %9, %11
%68 = or i1 %67, %56
br i1 %68, label %76, label %69
69: ; preds = %66
%70 = fpext float %10 to double
%71 = fmul double %70, 5.000000e-01
%72 = fpext float %11 to double
%73 = fmul double %71, %72
%74 = fptrunc double %73 to float
%75 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), float %74)
br label %79
76: ; preds = %66
%77 = fadd float %10, %11
%78 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), float %77)
br label %79
79: ; preds = %25, %47, %69, %76, %59, %37, %15
ret i32 0
}