int soma_primo(int m) {
  int i = 1, primo = 0;
  for (i; i <= m; i++) {
    if (i == 2 || i == 3 || i == 5 || i == 7) {
      primo += i;
    } else if (i % 2 == 0 || i % 3 == 0 || i % 5 == 0 || i % 7 == 0) {
      continue;
    } else {
      primo += i;
    }
  }
  return primo;
}


x86 assembly (clang, -O0):
<soma_primo>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     11cd <soma_primo+0xcd>
cmpl   $0x2,-0x8(%rbp)
je     1149 <soma_primo+0x49>
cmpl   $0x3,-0x8(%rbp)
je     1149 <soma_primo+0x49>
cmpl   $0x5,-0x8(%rbp)
je     1149 <soma_primo+0x49>
cmpl   $0x7,-0x8(%rbp)
jne    1157 <soma_primo+0x57>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    11ba <soma_primo+0xba>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11a7 <soma_primo+0xa7>
mov    -0x8(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11a7 <soma_primo+0xa7>
mov    -0x8(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     11a7 <soma_primo+0xa7>
mov    -0x8(%rbp),%eax
mov    $0x7,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11ac <soma_primo+0xac>
jmp    11bf <soma_primo+0xbf>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    11ba <soma_primo+0xba>
jmp    11bf <soma_primo+0xbf>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1115 <soma_primo+0x15>
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<soma_primo>:
push   %rbp
push   %rbx
test   %edi,%edi
jle    1118 <soma_primo+0x18>
cmp    $0x8,%edi
jae    111f <soma_primo+0x1f>
mov    $0x1,%r10d
xor    %eax,%eax
jmp    1363 <soma_primo+0x263>
xor    %eax,%eax
jmp    1360 <soma_primo+0x260>
mov    %edi,%edx
and    $0xfffffff8,%edx
lea    0x1(%rdx),%r10d
movdqa 0xecf(%rip),%xmm11
mov    %edx,%eax
pxor   %xmm10,%xmm10
pxor   %xmm8,%xmm8
movdqa 0xf3b(%rip),%xmm3
pcmpeqd %xmm9,%xmm9
movdqa 0xf8d(%rip),%xmm12
movdqa 0xf95(%rip),%xmm2
nopl   0x0(%rax,%rax,1)
movdqa %xmm11,%xmm13
paddd  0xea2(%rip),%xmm13
movdqa %xmm11,%xmm1
movdqa 0xea5(%rip),%xmm0
pand   %xmm0,%xmm1
movdqa %xmm13,%xmm4
pand   %xmm0,%xmm4
movdqa 0xea0(%rip),%xmm0
pcmpeqd %xmm0,%xmm1
pcmpeqd %xmm0,%xmm4
movdqa %xmm11,%xmm0
movdqa 0xe9b(%rip),%xmm5
pand   %xmm5,%xmm0
movdqa %xmm13,%xmm15
pand   %xmm5,%xmm15
movdqa 0xe95(%rip),%xmm5
pcmpeqd %xmm5,%xmm0
por    %xmm1,%xmm0
pcmpeqd %xmm5,%xmm15
por    %xmm4,%xmm15
movdqa %xmm11,%xmm4
pand   0xe86(%rip),%xmm4
pcmpeqd 0xf3e(%rip),%xmm4
movdqa %xmm11,%xmm1
movdqa 0xe81(%rip),%xmm5
pmuludq %xmm5,%xmm1
pshufd $0xe8,%xmm1,%xmm14
pshufd $0xf5,%xmm11,%xmm1
movdqa %xmm1,%xmm6
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm14
movdqa %xmm14,%xmm6
pxor   %xmm3,%xmm6
movdqa 0xe6e(%rip),%xmm5
pcmpgtd %xmm5,%xmm6
pxor   %xmm9,%xmm6
paddd  0xe6c(%rip),%xmm14
pxor   %xmm3,%xmm14
pcmpgtd %xmm5,%xmm14
pxor   %xmm9,%xmm14
por    %xmm4,%xmm6
por    %xmm4,%xmm14
movdqa %xmm11,%xmm4
movdqa 0xe57(%rip),%xmm5
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm7
movdqa %xmm1,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm7
movdqa %xmm7,%xmm5
pxor   %xmm3,%xmm5
movdqa 0xe3d(%rip),%xmm4
pcmpgtd %xmm4,%xmm5
pxor   %xmm9,%xmm5
movdqa %xmm11,%xmm4
pmuludq %xmm12,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm12,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm4
movdqa %xmm4,%xmm1
pxor   %xmm3,%xmm1
pcmpgtd %xmm2,%xmm1
pxor   %xmm9,%xmm1
por    %xmm5,%xmm1
por    %xmm6,%xmm1
paddd  0xe06(%rip),%xmm7
pxor   %xmm3,%xmm7
pcmpgtd 0xdea(%rip),%xmm7
pxor   %xmm9,%xmm7
paddd  0xe1d(%rip),%xmm4
pxor   %xmm3,%xmm4
pcmpgtd %xmm2,%xmm4
pxor   %xmm9,%xmm4
por    %xmm7,%xmm4
por    %xmm14,%xmm4
pandn  %xmm11,%xmm1
movdqa %xmm11,%xmm5
pand   %xmm0,%xmm5
pandn  %xmm1,%xmm0
por    %xmm5,%xmm0
paddd  %xmm0,%xmm10
pandn  %xmm13,%xmm4
pand   %xmm15,%xmm13
pandn  %xmm4,%xmm15
por    %xmm13,%xmm15
paddd  %xmm15,%xmm8
paddd  0xdda(%rip),%xmm11
add    $0xfffffff8,%eax
jne    1160 <soma_primo+0x60>
paddd  %xmm10,%xmm8
pshufd $0xee,%xmm8,%xmm0
paddd  %xmm8,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %edi,%edx
jne    1363 <soma_primo+0x263>
pop    %rbx
pop    %rbp
ret
add    $0x1,%edi
mov    $0xaaaaaaab,%r8d
mov    $0xcccccccd,%r9d
xor    %r11d,%r11d
jmp    13a1 <soma_primo+0x2a1>
nopw   0x0(%rax,%rax,1)
lea    (%rsi,%rsi,2),%esi
lea    (%rdx,%rdx,4),%edx
cmp    %r10d,%edx
cmove  %r11d,%ebx
cmp    %r10d,%esi
cmove  %r11d,%ebx
and    %ebx,%ecx
add    %ecx,%eax
add    $0x1,%r10d
cmp    %r10d,%edi
je     1360 <soma_primo+0x260>
mov    %r10d,%edx
and    $0x7ffffffd,%edx
mov    %r10d,%ecx
cmp    $0x5,%edx
je     1396 <soma_primo+0x296>
mov    %r10d,%edx
and    $0x7ffffffe,%edx
mov    %r10d,%ecx
cmp    $0x2,%edx
je     1396 <soma_primo+0x296>
mov    %r10d,%edx
mov    %rdx,%rsi
imul   %r8,%rsi
shr    $0x21,%rsi
imul   $0x24924925,%rdx,%rcx
imul   %r9,%rdx
shr    $0x22,%rdx
shr    $0x20,%rcx
mov    %r10d,%ebx
sub    %ecx,%ebx
shr    %ebx
add    %ecx,%ebx
shr    $0x2,%ebx
lea    0x0(,%rbx,8),%ebp
sub    %ebx,%ebp
mov    %r10d,%ecx
and    $0x1,%ecx
neg    %ecx
mov    $0x0,%ebx
cmp    %r10d,%ebp
je     1380 <soma_primo+0x280>
mov    %r10d,%ebx
jmp    1380 <soma_primo+0x280>

LLVM IR (-O0):
define i32 @soma_primo(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %2
store i32 1, i32* %3
store i32 0, i32* %4
%5 = load i32, i32* %3
br label %6
6: ; preds = %49, %1
%7 = load i32, i32* %3
%8 = load i32, i32* %2
%9 = icmp sle i32 %7, %8
br i1 %9, label %10, label %52
10: ; preds = %6
%11 = load i32, i32* %3
%12 = icmp eq i32 %11, 2
br i1 %12, label %22, label %13
13: ; preds = %10
%14 = load i32, i32* %3
%15 = icmp eq i32 %14, 3
br i1 %15, label %22, label %16
16: ; preds = %13
%17 = load i32, i32* %3
%18 = icmp eq i32 %17, 5
br i1 %18, label %22, label %19
19: ; preds = %16
%20 = load i32, i32* %3
%21 = icmp eq i32 %20, 7
br i1 %21, label %22, label %26
22: ; preds = %19, %16, %13, %10
%23 = load i32, i32* %3
%24 = load i32, i32* %4
%25 = add nsw i32 %24, %23
store i32 %25, i32* %4
br label %48
26: ; preds = %19
%27 = load i32, i32* %3
%28 = srem i32 %27, 2
%29 = icmp eq i32 %28, 0
br i1 %29, label %42, label %30
30: ; preds = %26
%31 = load i32, i32* %3
%32 = srem i32 %31, 3
%33 = icmp eq i32 %32, 0
br i1 %33, label %42, label %34
34: ; preds = %30
%35 = load i32, i32* %3
%36 = srem i32 %35, 5
%37 = icmp eq i32 %36, 0
br i1 %37, label %42, label %38
38: ; preds = %34
%39 = load i32, i32* %3
%40 = srem i32 %39, 7
%41 = icmp eq i32 %40, 0
br i1 %41, label %42, label %43
42: ; preds = %38, %34, %30, %26
br label %49
43: ; preds = %38
%44 = load i32, i32* %3
%45 = load i32, i32* %4
%46 = add nsw i32 %45, %44
store i32 %46, i32* %4
br label %47
47: ; preds = %43
br label %48
48: ; preds = %47, %22
br label %49
49: ; preds = %48, %42
%50 = load i32, i32* %3
%51 = add nsw i32 %50, 1
store i32 %51, i32* %3
br label %6
52: ; preds = %6
%53 = load i32, i32* %4
ret i32 %53
}

LLVM IR (-O2):
define i32 @soma_primo(i32 %0) {
%2 = icmp slt i32 %0, 1
br i1 %2, label %88, label %3
3: ; preds = %1
%4 = icmp ult i32 %0, 8
br i1 %4, label %59, label %5
5: ; preds = %3
%6 = and i32 %0, -8
%7 = or i32 %6, 1
br label %8
8: ; preds = %8, %5
%9 = phi i32 [ 0, %5 ], [ %52, %8 ]
%10 = phi <4 x i32> [ zeroinitializer, %5 ], [ %50, %8 ]
%11 = phi <4 x i32> [ zeroinitializer, %5 ], [ %51, %8 ]
%12 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %5 ], [ %53, %8 ]
%13 = add <4 x i32> %12, <i32 4, i32 4, i32 4, i32 4>
%14 = and <4 x i32> %12, <i32 2147483646, i32 2147483646, i32 2147483646, i32 2147483646>
%15 = and <4 x i32> %13, <i32 2147483646, i32 2147483646, i32 2147483646, i32 2147483646>
%16 = icmp eq <4 x i32> %14, <i32 2, i32 2, i32 2, i32 2>
%17 = icmp eq <4 x i32> %15, <i32 2, i32 2, i32 2, i32 2>
%18 = and <4 x i32> %12, <i32 2147483645, i32 2147483645, i32 2147483645, i32 2147483645>
%19 = and <4 x i32> %13, <i32 2147483645, i32 2147483645, i32 2147483645, i32 2147483645>
%20 = icmp eq <4 x i32> %18, <i32 5, i32 5, i32 5, i32 5>
%21 = icmp eq <4 x i32> %19, <i32 5, i32 5, i32 5, i32 5>
%22 = or <4 x i1> %20, %16
%23 = or <4 x i1> %21, %17
%24 = and <4 x i32> %12, <i32 1, i32 1, i32 1, i32 1>
%25 = and <4 x i32> %12, <i32 1, i32 1, i32 1, i32 1>
%26 = icmp eq <4 x i32> %24, zeroinitializer
%27 = icmp eq <4 x i32> %25, zeroinitializer
%28 = urem <4 x i32> %12, <i32 3, i32 3, i32 3, i32 3>
%29 = urem <4 x i32> %13, <i32 3, i32 3, i32 3, i32 3>
%30 = icmp eq <4 x i32> %28, zeroinitializer
%31 = icmp eq <4 x i32> %29, zeroinitializer
%32 = or <4 x i1> %26, %30
%33 = or <4 x i1> %27, %31
%34 = urem <4 x i32> %12, <i32 5, i32 5, i32 5, i32 5>
%35 = urem <4 x i32> %13, <i32 5, i32 5, i32 5, i32 5>
%36 = icmp eq <4 x i32> %34, zeroinitializer
%37 = icmp eq <4 x i32> %35, zeroinitializer
%38 = select <4 x i1> %32, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %36
%39 = select <4 x i1> %33, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %37
%40 = urem <4 x i32> %12, <i32 7, i32 7, i32 7, i32 7>
%41 = urem <4 x i32> %13, <i32 7, i32 7, i32 7, i32 7>
%42 = icmp eq <4 x i32> %40, zeroinitializer
%43 = icmp eq <4 x i32> %41, zeroinitializer
%44 = select <4 x i1> %38, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %42
%45 = select <4 x i1> %39, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %43
%46 = select <4 x i1> %44, <4 x i32> zeroinitializer, <4 x i32> %12
%47 = select <4 x i1> %45, <4 x i32> zeroinitializer, <4 x i32> %13
%48 = select <4 x i1> %22, <4 x i32> %12, <4 x i32> %46
%49 = select <4 x i1> %23, <4 x i32> %13, <4 x i32> %47
%50 = add <4 x i32> %48, %10
%51 = add <4 x i32> %49, %11
%52 = add nuw i32 %9, 8
%53 = add <4 x i32> %12, <i32 8, i32 8, i32 8, i32 8>
%54 = icmp eq i32 %52, %6
br i1 %54, label %55, label %8
55: ; preds = %8
%56 = add <4 x i32> %51, %50
%57 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %56)
%58 = icmp eq i32 %6, %0
br i1 %58, label %88, label %59
59: ; preds = %3, %55
%60 = phi i32 [ 0, %3 ], [ %57, %55 ]
%61 = phi i32 [ 1, %3 ], [ %7, %55 ]
br label %62
62: ; preds = %59, %83
%63 = phi i32 [ %85, %83 ], [ %60, %59 ]
%64 = phi i32 [ %86, %83 ], [ %61, %59 ]
%65 = and i32 %64, 2147483646
%66 = icmp eq i32 %65, 2
%67 = and i32 %64, 2147483645
%68 = icmp eq i32 %67, 5
%69 = or i1 %68, %66
br i1 %69, label %83, label %70
70: ; preds = %62
%71 = and i32 %64, 1
%72 = icmp eq i32 %71, 0
%73 = urem i32 %64, 3
%74 = icmp eq i32 %73, 0
%75 = or i1 %72, %74
%76 = urem i32 %64, 5
%77 = icmp eq i32 %76, 0
%78 = select i1 %75, i1 true, i1 %77
%79 = urem i32 %64, 7
%80 = icmp eq i32 %79, 0
%81 = select i1 %78, i1 true, i1 %80
%82 = select i1 %81, i32 0, i32 %64
br label %83
83: ; preds = %62, %70
%84 = phi i32 [ %82, %70 ], [ %64, %62 ]
%85 = add nsw i32 %84, %63
%86 = add nuw i32 %64, 1
%87 = icmp eq i32 %64, %0
br i1 %87, label %88, label %62
88: ; preds = %83, %55, %1
%89 = phi i32 [ 0, %1 ], [ %57, %55 ], [ %85, %83 ]
ret i32 %89
}