int conta_giorni(int giorno, int mese, int anno, int calendario[]) {
  int giorni;
  unsigned int indice_array;
  giorni = 0;
  indice_array = 0;
  while (indice_array < 12) {
    if (indice_array < (mese - 1)) {
      giorni += calendario[indice_array];
    } else if (indice_array == (mese - 1)) {
      giorni += giorno;
    }
    indice_array++;
  }
  return (giorni);
}


x86 assembly (clang, -O0):
<conta_giorni>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0xc,-0x20(%rbp)
jae    117c <conta_giorni+0x7c>
mov    -0x20(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jae    114f <conta_giorni+0x4f>
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    (%rax,%rcx,4),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    116e <conta_giorni+0x6e>
mov    -0x20(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1169 <conta_giorni+0x69>
mov    -0x4(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    116e <conta_giorni+0x6e>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    111f <conta_giorni+0x1f>
mov    -0x1c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<conta_giorni>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %edi,%eax
add    $0xffffffff,%esi
je     111a <conta_giorni+0x1a>
mov    (%rcx),%eax
cmp    $0x1,%esi
jne    11a6 <conta_giorni+0xa6>
xor    %r8d,%r8d
cmp    $0x1,%esi
cmove  %edi,%r8d
xor    %r9d,%r9d
cmp    $0x2,%esi
cmove  %edi,%r9d
xor    %r10d,%r10d
cmp    $0x3,%esi
cmove  %edi,%r10d
xor    %r11d,%r11d
cmp    $0x4,%esi
cmove  %edi,%r11d
xor    %r14d,%r14d
cmp    $0x5,%esi
cmove  %edi,%r14d
xor    %r15d,%r15d
cmp    $0x6,%esi
cmove  %edi,%r15d
xor    %r12d,%r12d
cmp    $0x7,%esi
cmove  %edi,%r12d
xor    %edx,%edx
cmp    $0x8,%esi
cmove  %edi,%edx
xor    %ebx,%ebx
cmp    $0x9,%esi
cmove  %edi,%ebx
xor    %ebp,%ebp
cmp    $0xa,%esi
cmove  %edi,%ebp
xor    %ecx,%ecx
cmp    $0xb,%esi
cmove  %edi,%ecx
add    %r8d,%eax
add    %r9d,%eax
add    %r10d,%eax
add    %r11d,%eax
add    %r14d,%eax
add    %r15d,%eax
add    %r12d,%eax
add    %edx,%eax
add    %ebx,%eax
add    %ebp,%eax
add    %ecx,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x4(%rcx),%r8d
cmp    $0x2,%esi
jbe    1124 <conta_giorni+0x24>
mov    0x8(%rcx),%r9d
cmp    $0x3,%esi
je     112e <conta_giorni+0x2e>
mov    0xc(%rcx),%r10d
cmp    $0x4,%esi
jbe    1138 <conta_giorni+0x38>
mov    0x10(%rcx),%r11d
cmp    $0x5,%esi
je     1142 <conta_giorni+0x42>
mov    0x14(%rcx),%r14d
cmp    $0x6,%esi
jbe    114c <conta_giorni+0x4c>
mov    0x18(%rcx),%r15d
cmp    $0x7,%esi
je     1156 <conta_giorni+0x56>
mov    0x1c(%rcx),%r12d
cmp    $0x8,%esi
jbe    1160 <conta_giorni+0x60>
mov    0x20(%rcx),%edx
cmp    $0x9,%esi
je     1168 <conta_giorni+0x68>
mov    0x24(%rcx),%ebx
cmp    $0xa,%esi
jbe    1170 <conta_giorni+0x70>
mov    0x28(%rcx),%ebp
cmp    $0xb,%esi
je     1178 <conta_giorni+0x78>
mov    0x2c(%rcx),%ecx
jmp    1180 <conta_giorni+0x80>

LLVM IR (-O0):
define i32 @conta_giorni(i32 %0, i32 %1, i32 %2, i32* %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32*
%9 = alloca i32
%10 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32* %3, i32** %8
store i32 0, i32* %9
store i32 0, i32* %10
br label %11
11: ; preds = %37, %4
%12 = load i32, i32* %10
%13 = icmp ult i32 %12, 12
br i1 %13, label %14, label %40
14: ; preds = %11
%15 = load i32, i32* %10
%16 = load i32, i32* %6
%17 = sub nsw i32 %16, 1
%18 = icmp ult i32 %15, %17
br i1 %18, label %19, label %27
19: ; preds = %14
%20 = load i32*, i32** %8
%21 = load i32, i32* %10
%22 = zext i32 %21 to i64
%23 = getelementptr inbounds i32, i32* %20, i64 %22
%24 = load i32, i32* %23
%25 = load i32, i32* %9
%26 = add nsw i32 %25, %24
store i32 %26, i32* %9
br label %37
27: ; preds = %14
%28 = load i32, i32* %10
%29 = load i32, i32* %6
%30 = sub nsw i32 %29, 1
%31 = icmp eq i32 %28, %30
br i1 %31, label %32, label %36
32: ; preds = %27
%33 = load i32, i32* %5
%34 = load i32, i32* %9
%35 = add nsw i32 %34, %33
store i32 %35, i32* %9
br label %36
36: ; preds = %32, %27
br label %37
37: ; preds = %36, %19
%38 = load i32, i32* %10
%39 = add i32 %38, 1
store i32 %39, i32* %10
br label %11
40: ; preds = %11
%41 = load i32, i32* %9
ret i32 %41
}

LLVM IR (-O2):
define i32 @conta_giorni(i32 %0, i32 %1, i32 %2, i32* nocapture %3) {
%5 = add nsw i32 %1, -1
%6 = icmp eq i32 %5, 0
br i1 %6, label %10, label %7
7: ; preds = %4
%8 = load i32, i32* %3
%9 = icmp eq i32 %5, 1
br i1 %9, label %10, label %14
10: ; preds = %7, %4
%11 = phi i32 [ %8, %7 ], [ %0, %4 ]
%12 = icmp eq i32 %5, 1
%13 = select i1 %12, i32 %0, i32 0
br label %18
14: ; preds = %7
%15 = getelementptr inbounds i32, i32* %3, i64 1
%16 = load i32, i32* %15
%17 = icmp ugt i32 %5, 2
br i1 %17, label %23, label %18
18: ; preds = %14, %10
%19 = phi i32 [ %13, %10 ], [ %16, %14 ]
%20 = phi i32 [ %11, %10 ], [ %8, %14 ]
%21 = icmp eq i32 %5, 2
%22 = select i1 %21, i32 %0, i32 0
br label %27
23: ; preds = %14
%24 = getelementptr inbounds i32, i32* %3, i64 2
%25 = load i32, i32* %24
%26 = icmp eq i32 %5, 3
br i1 %26, label %27, label %33
27: ; preds = %23, %18
%28 = phi i32 [ %22, %18 ], [ %25, %23 ]
%29 = phi i32 [ %20, %18 ], [ %8, %23 ]
%30 = phi i32 [ %19, %18 ], [ %16, %23 ]
%31 = icmp eq i32 %5, 3
%32 = select i1 %31, i32 %0, i32 0
br label %37
33: ; preds = %23
%34 = getelementptr inbounds i32, i32* %3, i64 3
%35 = load i32, i32* %34
%36 = icmp ugt i32 %5, 4
br i1 %36, label %44, label %37
37: ; preds = %33, %27
%38 = phi i32 [ %32, %27 ], [ %35, %33 ]
%39 = phi i32 [ %30, %27 ], [ %16, %33 ]
%40 = phi i32 [ %29, %27 ], [ %8, %33 ]
%41 = phi i32 [ %28, %27 ], [ %25, %33 ]
%42 = icmp eq i32 %5, 4
%43 = select i1 %42, i32 %0, i32 0
br label %48
44: ; preds = %33
%45 = getelementptr inbounds i32, i32* %3, i64 4
%46 = load i32, i32* %45
%47 = icmp eq i32 %5, 5
br i1 %47, label %48, label %56
48: ; preds = %44, %37
%49 = phi i32 [ %43, %37 ], [ %46, %44 ]
%50 = phi i32 [ %41, %37 ], [ %25, %44 ]
%51 = phi i32 [ %40, %37 ], [ %8, %44 ]
%52 = phi i32 [ %39, %37 ], [ %16, %44 ]
%53 = phi i32 [ %38, %37 ], [ %35, %44 ]
%54 = icmp eq i32 %5, 5
%55 = select i1 %54, i32 %0, i32 0
br label %60
56: ; preds = %44
%57 = getelementptr inbounds i32, i32* %3, i64 5
%58 = load i32, i32* %57
%59 = icmp ugt i32 %5, 6
br i1 %59, label %69, label %60
60: ; preds = %56, %48
%61 = phi i32 [ %55, %48 ], [ %58, %56 ]
%62 = phi i32 [ %53, %48 ], [ %35, %56 ]
%63 = phi i32 [ %52, %48 ], [ %16, %56 ]
%64 = phi i32 [ %51, %48 ], [ %8, %56 ]
%65 = phi i32 [ %50, %48 ], [ %25, %56 ]
%66 = phi i32 [ %49, %48 ], [ %46, %56 ]
%67 = icmp eq i32 %5, 6
%68 = select i1 %67, i32 %0, i32 0
br label %73
69: ; preds = %56
%70 = getelementptr inbounds i32, i32* %3, i64 6
%71 = load i32, i32* %70
%72 = icmp eq i32 %5, 7
br i1 %72, label %73, label %83
73: ; preds = %69, %60
%74 = phi i32 [ %68, %60 ], [ %71, %69 ]
%75 = phi i32 [ %66, %60 ], [ %46, %69 ]
%76 = phi i32 [ %65, %60 ], [ %25, %69 ]
%77 = phi i32 [ %64, %60 ], [ %8, %69 ]
%78 = phi i32 [ %63, %60 ], [ %16, %69 ]
%79 = phi i32 [ %62, %60 ], [ %35, %69 ]
%80 = phi i32 [ %61, %60 ], [ %58, %69 ]
%81 = icmp eq i32 %5, 7
%82 = select i1 %81, i32 %0, i32 0
br label %87
83: ; preds = %69
%84 = getelementptr inbounds i32, i32* %3, i64 7
%85 = load i32, i32* %84
%86 = icmp ugt i32 %5, 8
br i1 %86, label %98, label %87
87: ; preds = %83, %73
%88 = phi i32 [ %82, %73 ], [ %85, %83 ]
%89 = phi i32 [ %80, %73 ], [ %58, %83 ]
%90 = phi i32 [ %79, %73 ], [ %35, %83 ]
%91 = phi i32 [ %78, %73 ], [ %16, %83 ]
%92 = phi i32 [ %77, %73 ], [ %8, %83 ]
%93 = phi i32 [ %76, %73 ], [ %25, %83 ]
%94 = phi i32 [ %75, %73 ], [ %46, %83 ]
%95 = phi i32 [ %74, %73 ], [ %71, %83 ]
%96 = icmp eq i32 %5, 8
%97 = select i1 %96, i32 %0, i32 0
br label %102
98: ; preds = %83
%99 = getelementptr inbounds i32, i32* %3, i64 8
%100 = load i32, i32* %99
%101 = icmp eq i32 %5, 9
br i1 %101, label %102, label %114
102: ; preds = %98, %87
%103 = phi i32 [ %97, %87 ], [ %100, %98 ]
%104 = phi i32 [ %95, %87 ], [ %71, %98 ]
%105 = phi i32 [ %94, %87 ], [ %46, %98 ]
%106 = phi i32 [ %93, %87 ], [ %25, %98 ]
%107 = phi i32 [ %92, %87 ], [ %8, %98 ]
%108 = phi i32 [ %91, %87 ], [ %16, %98 ]
%109 = phi i32 [ %90, %87 ], [ %35, %98 ]
%110 = phi i32 [ %89, %87 ], [ %58, %98 ]
%111 = phi i32 [ %88, %87 ], [ %85, %98 ]
%112 = icmp eq i32 %5, 9
%113 = select i1 %112, i32 %0, i32 0
br label %118
114: ; preds = %98
%115 = getelementptr inbounds i32, i32* %3, i64 9
%116 = load i32, i32* %115
%117 = icmp ugt i32 %5, 10
br i1 %117, label %131, label %118
118: ; preds = %114, %102
%119 = phi i32 [ %113, %102 ], [ %116, %114 ]
%120 = phi i32 [ %111, %102 ], [ %85, %114 ]
%121 = phi i32 [ %110, %102 ], [ %58, %114 ]
%122 = phi i32 [ %109, %102 ], [ %35, %114 ]
%123 = phi i32 [ %108, %102 ], [ %16, %114 ]
%124 = phi i32 [ %107, %102 ], [ %8, %114 ]
%125 = phi i32 [ %106, %102 ], [ %25, %114 ]
%126 = phi i32 [ %105, %102 ], [ %46, %114 ]
%127 = phi i32 [ %104, %102 ], [ %71, %114 ]
%128 = phi i32 [ %103, %102 ], [ %100, %114 ]
%129 = icmp eq i32 %5, 10
%130 = select i1 %129, i32 %0, i32 0
br label %135
131: ; preds = %114
%132 = getelementptr inbounds i32, i32* %3, i64 10
%133 = load i32, i32* %132
%134 = icmp eq i32 %5, 11
br i1 %134, label %135, label %149
135: ; preds = %118, %131
%136 = phi i32 [ %130, %118 ], [ %133, %131 ]
%137 = phi i32 [ %128, %118 ], [ %100, %131 ]
%138 = phi i32 [ %127, %118 ], [ %71, %131 ]
%139 = phi i32 [ %126, %118 ], [ %46, %131 ]
%140 = phi i32 [ %125, %118 ], [ %25, %131 ]
%141 = phi i32 [ %124, %118 ], [ %8, %131 ]
%142 = phi i32 [ %123, %118 ], [ %16, %131 ]
%143 = phi i32 [ %122, %118 ], [ %35, %131 ]
%144 = phi i32 [ %121, %118 ], [ %58, %131 ]
%145 = phi i32 [ %120, %118 ], [ %85, %131 ]
%146 = phi i32 [ %119, %118 ], [ %116, %131 ]
%147 = icmp eq i32 %5, 11
%148 = select i1 %147, i32 %0, i32 0
br label %152
149: ; preds = %131
%150 = getelementptr inbounds i32, i32* %3, i64 11
%151 = load i32, i32* %150
br label %152
152: ; preds = %149, %135
%153 = phi i32 [ %133, %149 ], [ %136, %135 ]
%154 = phi i32 [ %100, %149 ], [ %137, %135 ]
%155 = phi i32 [ %71, %149 ], [ %138, %135 ]
%156 = phi i32 [ %46, %149 ], [ %139, %135 ]
%157 = phi i32 [ %25, %149 ], [ %140, %135 ]
%158 = phi i32 [ %8, %149 ], [ %141, %135 ]
%159 = phi i32 [ %16, %149 ], [ %142, %135 ]
%160 = phi i32 [ %35, %149 ], [ %143, %135 ]
%161 = phi i32 [ %58, %149 ], [ %144, %135 ]
%162 = phi i32 [ %85, %149 ], [ %145, %135 ]
%163 = phi i32 [ %116, %149 ], [ %146, %135 ]
%164 = phi i32 [ %151, %149 ], [ %148, %135 ]
%165 = add nsw i32 %159, %158
%166 = add nsw i32 %157, %165
%167 = add nsw i32 %160, %166
%168 = add nsw i32 %156, %167
%169 = add nsw i32 %161, %168
%170 = add nsw i32 %155, %169
%171 = add nsw i32 %162, %170
%172 = add nsw i32 %154, %171
%173 = add nsw i32 %163, %172
%174 = add nsw i32 %153, %173
%175 = add nsw i32 %164, %174
ret i32 %175
}