#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 *, char *);
int main() {
  char palabra[21];
  int i;
  int contador = 0;
  printf("\nIngrese la palabra sin errores de una buena vez !!!:");
  scanf("%s", palabra);
  for (i = 0; i < 20; i++) {
    if (palabra[i] == 's' || palabra[i] == 'S')
      contador++;
  }
  if (contador == 1)
    printf("\nLa letra `s` se encuentra repetida %d vez", contador);
  else if (contador > 1)
    printf("\nLa letra `s` se encuentra repetida %d veces", contador);
  else
    printf("\nLa letra 's' o 'S' no se encuentra en la palabra ingresada");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x28(%rbp)
lea    0xec3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xee7(%rip),%rdi
call   1040 <scanf@plt>
movl   $0x0,-0x24(%rbp)
cmpl   $0x14,-0x24(%rbp)
jge    11a5 <main+0x85>
movslq -0x24(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x73,%eax
je     1189 <main+0x69>
movslq -0x24(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x53,%eax
jne    1192 <main+0x72>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1197 <main+0x77>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    115b <main+0x3b>
cmpl   $0x1,-0x28(%rbp)
jne    11c5 <main+0xa5>
mov    -0x28(%rbp),%esi
lea    0xe80(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11f8 <main+0xd8>
cmpl   $0x1,-0x28(%rbp)
jle    11e5 <main+0xc5>
mov    -0x28(%rbp),%esi
lea    0xe8b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11f3 <main+0xd3>
lea    0xea5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11f8 <main+0xd8>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x18,%rsp
lea    0xed5(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xefd(%rip),%rdi
mov    %rsp,%rsi
call   1040 <scanf@plt>
mov    (%rsp),%al
mov    0x1(%rsp),%dl
and    $0xdf,%al
xor    %esi,%esi
cmp    $0x53,%al
sete   %cl
or     $0x20,%dl
cmp    $0x73,%dl
jne    1166 <main+0x46>
xor    %esi,%esi
cmp    $0x53,%al
sete   %sil
add    $0x1,%esi
jmp    1169 <main+0x49>
mov    %cl,%sil
mov    0x2(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1176 <main+0x56>
add    $0x1,%esi
mov    0x3(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1183 <main+0x63>
add    $0x1,%esi
mov    0x4(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1190 <main+0x70>
add    $0x1,%esi
mov    0x5(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    119d <main+0x7d>
add    $0x1,%esi
mov    0x6(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11aa <main+0x8a>
add    $0x1,%esi
mov    0x7(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11b7 <main+0x97>
add    $0x1,%esi
mov    0x8(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11c4 <main+0xa4>
add    $0x1,%esi
mov    0x9(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11d1 <main+0xb1>
add    $0x1,%esi
mov    0xa(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11de <main+0xbe>
add    $0x1,%esi
mov    0xb(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11eb <main+0xcb>
add    $0x1,%esi
mov    0xc(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    11f8 <main+0xd8>
add    $0x1,%esi
mov    0xd(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1205 <main+0xe5>
add    $0x1,%esi
mov    0xe(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1212 <main+0xf2>
add    $0x1,%esi
mov    0xf(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    121f <main+0xff>
add    $0x1,%esi
mov    0x10(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    122c <main+0x10c>
add    $0x1,%esi
mov    0x11(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1239 <main+0x119>
add    $0x1,%esi
mov    0x12(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1246 <main+0x126>
add    $0x1,%esi
mov    0x13(%rsp),%al
or     $0x20,%al
cmp    $0x73,%al
jne    1253 <main+0x133>
add    $0x1,%esi
test   %esi,%esi
je     126a <main+0x14a>
cmp    $0x1,%esi
jne    127a <main+0x15a>
lea    0xdd6(%rip),%rdi
mov    $0x1,%esi
jmp    1281 <main+0x161>
lea    0xe20(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
jmp    1288 <main+0x168>
lea    0xde3(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
ret

LLVM IR (-O0):
@.str = [54 x i8] c"\0AIngrese la palabra sin errores de una buena vez !!!:\00"
@.str.1 = [3 x i8] c"%s\00"
@.str.2 = [43 x i8] c"\0ALa letra `s` se encuentra repetida %d vez\00"
@.str.3 = [45 x i8] c"\0ALa letra `s` se encuentra repetida %d veces\00"
@.str.4 = [60 x i8] c"\0ALa letra 's' o 'S' no se encuentra en la palabra ingresada\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [21 x i8]
%3 = alloca i32
%4 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %4
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str, i64 0, i64 0))
%6 = getelementptr inbounds [21 x i8], [21 x i8]* %2, i64 0, i64 0
%7 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %6)
store i32 0, i32* %3
br label %8
8: ; preds = %29, %0
%9 = load i32, i32* %3
%10 = icmp slt i32 %9, 20
br i1 %10, label %11, label %32
11: ; preds = %8
%12 = load i32, i32* %3
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [21 x i8], [21 x i8]* %2, i64 0, i64 %13
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 115
br i1 %17, label %25, label %18
18: ; preds = %11
%19 = load i32, i32* %3
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [21 x i8], [21 x i8]* %2, i64 0, i64 %20
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = icmp eq i32 %23, 83
br i1 %24, label %25, label %28
25: ; preds = %18, %11
%26 = load i32, i32* %4
%27 = add nsw i32 %26, 1
store i32 %27, i32* %4
br label %28
28: ; preds = %25, %18
br label %29
29: ; preds = %28
%30 = load i32, i32* %3
%31 = add nsw i32 %30, 1
store i32 %31, i32* %3
br label %8
32: ; preds = %8
%33 = load i32, i32* %4
%34 = icmp eq i32 %33, 1
br i1 %34, label %35, label %38
35: ; preds = %32
%36 = load i32, i32* %4
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0), i32 %36)
br label %47
38: ; preds = %32
%39 = load i32, i32* %4
%40 = icmp sgt i32 %39, 1
br i1 %40, label %41, label %44
41: ; preds = %38
%42 = load i32, i32* %4
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.3, i64 0, i64 0), i32 %42)
br label %46
44: ; preds = %38
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.4, i64 0, i64 0))
br label %46
46: ; preds = %44, %41
br label %47
47: ; preds = %46, %35
%48 = load i32, i32* %1
ret i32 %48
}

LLVM IR (-O2):
@.str = [54 x i8] c"\0AIngrese la palabra sin errores de una buena vez !!!:\00"
@.str.1 = [3 x i8] c"%s\00"
@.str.2 = [43 x i8] c"\0ALa letra `s` se encuentra repetida %d vez\00"
@.str.3 = [45 x i8] c"\0ALa letra `s` se encuentra repetida %d veces\00"
@.str.4 = [60 x i8] c"\0ALa letra 's' o 'S' no se encuentra en la palabra ingresada\00"
define i32 @main() {
%1 = alloca [21 x i8]
%2 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 0
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str, i64 0, i64 0))
%4 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %2)
%5 = load i8, i8* %2
%6 = and i8 %5, -33
%7 = icmp eq i8 %6, 83
%8 = zext i1 %7 to i32
%9 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 1
%10 = load i8, i8* %9
switch i8 %10, label %13 [
i8 115, label %11
i8 83, label %11
]
11: ; preds = %0, %0
%12 = select i1 %7, i32 2, i32 1
br label %13
13: ; preds = %11, %0
%14 = phi i32 [ %12, %11 ], [ %8, %0 ]
%15 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 2
%16 = load i8, i8* %15
switch i8 %16, label %19 [
i8 115, label %17
i8 83, label %17
]
17: ; preds = %13, %13
%18 = add nuw nsw i32 %14, 1
br label %19
19: ; preds = %17, %13
%20 = phi i32 [ %18, %17 ], [ %14, %13 ]
%21 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 3
%22 = load i8, i8* %21
switch i8 %22, label %25 [
i8 115, label %23
i8 83, label %23
]
23: ; preds = %19, %19
%24 = add nuw nsw i32 %20, 1
br label %25
25: ; preds = %23, %19
%26 = phi i32 [ %24, %23 ], [ %20, %19 ]
%27 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 4
%28 = load i8, i8* %27
switch i8 %28, label %31 [
i8 115, label %29
i8 83, label %29
]
29: ; preds = %25, %25
%30 = add nuw nsw i32 %26, 1
br label %31
31: ; preds = %29, %25
%32 = phi i32 [ %30, %29 ], [ %26, %25 ]
%33 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 5
%34 = load i8, i8* %33
switch i8 %34, label %37 [
i8 115, label %35
i8 83, label %35
]
35: ; preds = %31, %31
%36 = add nuw nsw i32 %32, 1
br label %37
37: ; preds = %35, %31
%38 = phi i32 [ %36, %35 ], [ %32, %31 ]
%39 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 6
%40 = load i8, i8* %39
switch i8 %40, label %43 [
i8 115, label %41
i8 83, label %41
]
41: ; preds = %37, %37
%42 = add nuw nsw i32 %38, 1
br label %43
43: ; preds = %41, %37
%44 = phi i32 [ %42, %41 ], [ %38, %37 ]
%45 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 7
%46 = load i8, i8* %45
switch i8 %46, label %49 [
i8 115, label %47
i8 83, label %47
]
47: ; preds = %43, %43
%48 = add nuw nsw i32 %44, 1
br label %49
49: ; preds = %47, %43
%50 = phi i32 [ %48, %47 ], [ %44, %43 ]
%51 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 8
%52 = load i8, i8* %51
switch i8 %52, label %55 [
i8 115, label %53
i8 83, label %53
]
53: ; preds = %49, %49
%54 = add nuw nsw i32 %50, 1
br label %55
55: ; preds = %53, %49
%56 = phi i32 [ %54, %53 ], [ %50, %49 ]
%57 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 9
%58 = load i8, i8* %57
switch i8 %58, label %61 [
i8 115, label %59
i8 83, label %59
]
59: ; preds = %55, %55
%60 = add nuw nsw i32 %56, 1
br label %61
61: ; preds = %59, %55
%62 = phi i32 [ %60, %59 ], [ %56, %55 ]
%63 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 10
%64 = load i8, i8* %63
switch i8 %64, label %67 [
i8 115, label %65
i8 83, label %65
]
65: ; preds = %61, %61
%66 = add nuw nsw i32 %62, 1
br label %67
67: ; preds = %65, %61
%68 = phi i32 [ %66, %65 ], [ %62, %61 ]
%69 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 11
%70 = load i8, i8* %69
switch i8 %70, label %73 [
i8 115, label %71
i8 83, label %71
]
71: ; preds = %67, %67
%72 = add nuw nsw i32 %68, 1
br label %73
73: ; preds = %71, %67
%74 = phi i32 [ %72, %71 ], [ %68, %67 ]
%75 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 12
%76 = load i8, i8* %75
switch i8 %76, label %79 [
i8 115, label %77
i8 83, label %77
]
77: ; preds = %73, %73
%78 = add nuw nsw i32 %74, 1
br label %79
79: ; preds = %77, %73
%80 = phi i32 [ %78, %77 ], [ %74, %73 ]
%81 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 13
%82 = load i8, i8* %81
switch i8 %82, label %85 [
i8 115, label %83
i8 83, label %83
]
83: ; preds = %79, %79
%84 = add nuw nsw i32 %80, 1
br label %85
85: ; preds = %83, %79
%86 = phi i32 [ %84, %83 ], [ %80, %79 ]
%87 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 14
%88 = load i8, i8* %87
switch i8 %88, label %91 [
i8 115, label %89
i8 83, label %89
]
89: ; preds = %85, %85
%90 = add nuw nsw i32 %86, 1
br label %91
91: ; preds = %89, %85
%92 = phi i32 [ %90, %89 ], [ %86, %85 ]
%93 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 15
%94 = load i8, i8* %93
switch i8 %94, label %97 [
i8 115, label %95
i8 83, label %95
]
95: ; preds = %91, %91
%96 = add nuw nsw i32 %92, 1
br label %97
97: ; preds = %95, %91
%98 = phi i32 [ %96, %95 ], [ %92, %91 ]
%99 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 16
%100 = load i8, i8* %99
switch i8 %100, label %103 [
i8 115, label %101
i8 83, label %101
]
101: ; preds = %97, %97
%102 = add nuw nsw i32 %98, 1
br label %103
103: ; preds = %101, %97
%104 = phi i32 [ %102, %101 ], [ %98, %97 ]
%105 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 17
%106 = load i8, i8* %105
switch i8 %106, label %109 [
i8 115, label %107
i8 83, label %107
]
107: ; preds = %103, %103
%108 = add nuw nsw i32 %104, 1
br label %109
109: ; preds = %107, %103
%110 = phi i32 [ %108, %107 ], [ %104, %103 ]
%111 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 18
%112 = load i8, i8* %111
switch i8 %112, label %115 [
i8 115, label %113
i8 83, label %113
]
113: ; preds = %109, %109
%114 = add nuw nsw i32 %110, 1
br label %115
115: ; preds = %113, %109
%116 = phi i32 [ %114, %113 ], [ %110, %109 ]
%117 = getelementptr inbounds [21 x i8], [21 x i8]* %1, i64 0, i64 19
%118 = load i8, i8* %117
switch i8 %118, label %121 [
i8 115, label %119
i8 83, label %119
]
119: ; preds = %115, %115
%120 = add nuw nsw i32 %116, 1
br label %121
121: ; preds = %119, %115
%122 = phi i32 [ %120, %119 ], [ %116, %115 ]
switch i32 %122, label %125 [
i32 1, label %123
i32 0, label %127
]
123: ; preds = %121
%124 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0), i32 1)
br label %129
125: ; preds = %121
%126 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @.str.3, i64 0, i64 0), i32 %122)
br label %129
127: ; preds = %121
%128 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @.str.4, i64 0, i64 0))
br label %129
129: ; preds = %125, %127, %123
ret i32 0
}