int lop1() {
  int count = 0;
  for (int i = 103; i < 987; i++) {
    int k = i;
    int a = k % 10;
    k = k / 10;
    int b = k % 10;
    k = k / 10;
    int c = k % 10;
    if (a != b && a != c && b != c)
      count++;
  }
  return count;
}


x86 assembly (clang, -O0):
<lop1>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x67,-0x8(%rbp)
cmpl   $0x3db,-0x8(%rbp)
jge    11ab <lop1+0xab>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x18(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     1198 <lop1+0x98>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1198 <lop1+0x98>
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1198 <lop1+0x98>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    119d <lop1+0x9d>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1112 <lop1+0x12>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<lop1>:
movdqa 0xef7(%rip),%xmm10
pxor   %xmm15,%xmm15
mov    $0x370,%eax
movdqa 0xf25(%rip),%xmm5
movdqa 0xf4c(%rip),%xmm13
pxor   %xmm6,%xmm6
pxor   %xmm4,%xmm4
movdqa 0xf2b(%rip),%xmm12
cs nopw 0x0(%rax,%rax,1)
nop
movdqa %xmm10,%xmm0
paddw  0xec3(%rip),%xmm0
movdqa %xmm10,%xmm7
movdqa 0xec6(%rip),%xmm2
pmulhuw %xmm2,%xmm7
psrlw  $0x3,%xmm7
movdqa %xmm7,%xmm3
movdqa 0xec1(%rip),%xmm1
pmullw %xmm1,%xmm3
movdqa %xmm10,%xmm11
psubw  %xmm3,%xmm11
movdqa %xmm0,%xmm14
pmulhuw %xmm2,%xmm14
psrlw  $0x3,%xmm14
movdqa %xmm14,%xmm3
pmullw %xmm1,%xmm3
movdqa %xmm0,%xmm9
psubw  %xmm3,%xmm9
pand   %xmm5,%xmm7
packuswb %xmm7,%xmm7
pand   %xmm5,%xmm14
packuswb %xmm14,%xmm14
movdqa %xmm7,%xmm3
punpcklbw %xmm15,%xmm3
movdqa 0xe8d(%rip),%xmm1
pmullw %xmm1,%xmm3
psrlw  $0x8,%xmm3
packuswb %xmm15,%xmm3
psrlw  $0x3,%xmm3
pand   %xmm12,%xmm3
movdqa %xmm3,%xmm2
punpckhbw %xmm2,%xmm2
pmullw %xmm13,%xmm2
pand   %xmm5,%xmm2
punpcklbw %xmm3,%xmm3
pmullw %xmm13,%xmm3
pand   %xmm5,%xmm3
packuswb %xmm2,%xmm3
psubb  %xmm3,%xmm7
movdqa %xmm14,%xmm2
punpcklbw %xmm15,%xmm2
pmullw %xmm1,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm15,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm12,%xmm2
movdqa %xmm2,%xmm3
punpckhbw %xmm3,%xmm3
pmullw %xmm13,%xmm3
pand   %xmm5,%xmm3
punpcklbw %xmm2,%xmm2
pmullw %xmm13,%xmm2
pand   %xmm5,%xmm2
packuswb %xmm3,%xmm2
psubb  %xmm2,%xmm14
movdqa %xmm10,%xmm8
psrlw  $0x2,%xmm8
movdqa 0xe23(%rip),%xmm2
pmulhuw %xmm2,%xmm8
psrlw  $0x1,%xmm8
psrlw  $0x2,%xmm0
pmulhuw %xmm2,%xmm0
psrlw  $0x1,%xmm0
pand   %xmm5,%xmm8
packuswb %xmm8,%xmm8
pand   %xmm5,%xmm0
packuswb %xmm0,%xmm0
movdqa %xmm8,%xmm2
punpcklbw %xmm15,%xmm2
pmullw %xmm1,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm15,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm12,%xmm2
movdqa %xmm2,%xmm3
punpckhbw %xmm3,%xmm3
pmullw %xmm13,%xmm3
pand   %xmm5,%xmm3
punpcklbw %xmm2,%xmm2
pmullw %xmm13,%xmm2
pand   %xmm5,%xmm2
packuswb %xmm3,%xmm2
psubb  %xmm2,%xmm8
movdqa %xmm0,%xmm2
punpcklbw %xmm15,%xmm2
pmullw %xmm1,%xmm2
psrlw  $0x8,%xmm2
packuswb %xmm15,%xmm2
psrlw  $0x3,%xmm2
pand   %xmm12,%xmm2
movdqa %xmm2,%xmm3
punpckhbw %xmm3,%xmm3
pmullw %xmm13,%xmm3
pand   %xmm5,%xmm3
punpcklbw %xmm2,%xmm2
pmullw %xmm13,%xmm2
pand   %xmm5,%xmm2
packuswb %xmm3,%xmm2
psubb  %xmm2,%xmm0
movdqa %xmm7,%xmm2
punpcklbw %xmm15,%xmm2
pcmpeqw %xmm11,%xmm2
pcmpeqb %xmm8,%xmm7
punpcklbw %xmm15,%xmm8
pcmpeqw %xmm11,%xmm8
pcmpeqd %xmm1,%xmm1
pxor   %xmm1,%xmm2
punpcklwd %xmm2,%xmm2
pxor   %xmm1,%xmm8
punpcklwd %xmm8,%xmm8
pand   %xmm2,%xmm8
movdqa %xmm0,%xmm2
pcmpeqb %xmm14,%xmm0
punpcklbw %xmm15,%xmm14
pcmpeqw %xmm9,%xmm14
punpcklbw %xmm15,%xmm2
pcmpeqw %xmm9,%xmm2
pxor   %xmm1,%xmm14
punpcklwd %xmm14,%xmm14
pxor   %xmm1,%xmm2
punpcklwd %xmm2,%xmm2
pand   %xmm14,%xmm2
pxor   %xmm1,%xmm7
punpcklbw %xmm7,%xmm7
punpcklwd %xmm7,%xmm7
movdqa 0xcf8(%rip),%xmm3
pand   %xmm3,%xmm7
pand   %xmm8,%xmm7
paddd  %xmm7,%xmm6
pxor   %xmm1,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
pand   %xmm3,%xmm0
pand   %xmm2,%xmm0
paddd  %xmm0,%xmm4
paddw  0xcda(%rip),%xmm10
add    $0xfffffff8,%eax
jne    1140 <lop1+0x40>
paddd  %xmm6,%xmm4
pshufd $0xee,%xmm4,%xmm0
paddd  %xmm4,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    $0x4,%eax
ret

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

LLVM IR (-O2):
define i32 @lop1() {
br label %1
1: ; preds = %1, %0
%2 = phi i32 [ 0, %0 ], [ %43, %1 ]
%3 = phi <4 x i32> [ zeroinitializer, %0 ], [ %41, %1 ]
%4 = phi <4 x i32> [ zeroinitializer, %0 ], [ %42, %1 ]
%5 = phi <4 x i16> [ <i16 103, i16 104, i16 105, i16 106>, %0 ], [ %44, %1 ]
%6 = add <4 x i16> %5, <i16 4, i16 4, i16 4, i16 4>
%7 = freeze <4 x i16> %5
%8 = udiv <4 x i16> %7, <i16 10, i16 10, i16 10, i16 10>
%9 = mul <4 x i16> %8, <i16 10, i16 10, i16 10, i16 10>
%10 = sub <4 x i16> %7, %9
%11 = freeze <4 x i16> %6
%12 = udiv <4 x i16> %11, <i16 10, i16 10, i16 10, i16 10>
%13 = mul <4 x i16> %12, <i16 10, i16 10, i16 10, i16 10>
%14 = sub <4 x i16> %11, %13
%15 = trunc <4 x i16> %8 to <4 x i8>
%16 = trunc <4 x i16> %12 to <4 x i8>
%17 = urem <4 x i8> %15, <i8 10, i8 10, i8 10, i8 10>
%18 = urem <4 x i8> %16, <i8 10, i8 10, i8 10, i8 10>
%19 = udiv <4 x i16> %5, <i16 100, i16 100, i16 100, i16 100>
%20 = udiv <4 x i16> %6, <i16 100, i16 100, i16 100, i16 100>
%21 = trunc <4 x i16> %19 to <4 x i8>
%22 = trunc <4 x i16> %20 to <4 x i8>
%23 = urem <4 x i8> %21, <i8 10, i8 10, i8 10, i8 10>
%24 = urem <4 x i8> %22, <i8 10, i8 10, i8 10, i8 10>
%25 = zext <4 x i8> %17 to <4 x i16>
%26 = zext <4 x i8> %18 to <4 x i16>
%27 = icmp ne <4 x i16> %10, %25
%28 = icmp ne <4 x i16> %14, %26
%29 = zext <4 x i8> %23 to <4 x i16>
%30 = zext <4 x i8> %24 to <4 x i16>
%31 = icmp ne <4 x i16> %10, %29
%32 = icmp ne <4 x i16> %14, %30
%33 = select <4 x i1> %27, <4 x i1> %31, <4 x i1> zeroinitializer
%34 = select <4 x i1> %28, <4 x i1> %32, <4 x i1> zeroinitializer
%35 = icmp ne <4 x i8> %17, %23
%36 = icmp ne <4 x i8> %18, %24
%37 = select <4 x i1> %33, <4 x i1> %35, <4 x i1> zeroinitializer
%38 = select <4 x i1> %34, <4 x i1> %36, <4 x i1> zeroinitializer
%39 = zext <4 x i1> %37 to <4 x i32>
%40 = zext <4 x i1> %38 to <4 x i32>
%41 = add <4 x i32> %3, %39
%42 = add <4 x i32> %4, %40
%43 = add nuw i32 %2, 8
%44 = add <4 x i16> %5, <i16 8, i16 8, i16 8, i16 8>
%45 = icmp eq i32 %43, 880
br i1 %45, label %46, label %1
46: ; preds = %1
%47 = add <4 x i32> %42, %41
%48 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %47)
%49 = add nuw nsw i32 %48, 4
ret i32 %49
}