#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*/ getText(char *);
int /*<<< orphan*/ printMorseCode(char *, char **);
void main() {
  char m[26][5] = {{".-"},   {"-..."}, {"-.-."}, {"-.."},  {"."},    {"..-."},
                   {"--."},  {"...."}, {".."},   {".---"}, {"-.-"},  {".-.."},
                   {"--"},   {"-."},   {"---"},  {".--."}, {"--.-"}, {".-."},
                   {"..."},  {"-"},    {"..-"},  {"...-"}, {".--"},  {"-..-"},
                   {"-.--"}, {"--.."}};
  char a[80];
  getText(a);
  printMorseCode(a, m);
  return;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
lea    -0x90(%rbp),%rdi
lea    0xeb7(%rip),%rsi
mov    $0x82,%edx
call   1040 <memcpy@plt>
lea    -0xe0(%rbp),%rdi
call   1050 <getText@plt>
lea    -0xe0(%rbp),%rdi
lea    -0x90(%rbp),%rsi
call   1030 <printMorseCode@plt>
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0xd8,%rsp
lea    0xebf(%rip),%rsi
lea    0x50(%rsp),%r14
mov    $0x82,%edx
mov    %r14,%rdi
call   1040 <memcpy@plt>
mov    %rsp,%rbx
mov    %rbx,%rdi
call   1050 <getText@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1030 <printMorseCode@plt>
add    $0xd8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.main.m = [26 x [5 x i8]] [[5 x i8] c".-\00\00\00", [5 x i8] c"-...\00", [5 x i8] c"-.-.\00", [5 x i8] c"-..\00\00", [5 x i8] c".\00\00\00\00", [5 x i8] c"..-.\00", [5 x i8] c"--.\00\00", [5 x i8] c"....\00", [5 x i8] c"..\00\00\00", [5 x i8] c".---\00", [5 x i8] c"-.-\00\00", [5 x i8] c".-..\00", [5 x i8] c"--\00\00\00", [5 x i8] c"-.\00\00\00", [5 x i8] c"---\00\00", [5 x i8] c".--.\00", [5 x i8] c"--.-\00", [5 x i8] c".-.\00\00", [5 x i8] c"...\00\00", [5 x i8] c"-\00\00\00\00", [5 x i8] c"..-\00\00", [5 x i8] c"...-\00", [5 x i8] c".--\00\00", [5 x i8] c"-..-\00", [5 x i8] c"-.--\00", [5 x i8] c"--..\00"]
define void @main() {
%1 = alloca [26 x [5 x i8]]
%2 = alloca [80 x i8]
%3 = bitcast [26 x [5 x i8]]* %1 to i8*
%4 = getelementptr inbounds [80 x i8], [80 x i8]* %2, i64 0, i64 0
%5 = call i32 @getText(i8* %4)
%6 = getelementptr inbounds [80 x i8], [80 x i8]* %2, i64 0, i64 0
%7 = getelementptr inbounds [26 x [5 x i8]], [26 x [5 x i8]]* %1, i64 0, i64 0
%8 = bitcast [5 x i8]* %7 to i8**
%9 = call i32 @printMorseCode(i8* %6, i8** %8)
ret void
}

LLVM IR (-O2):
@__const.main.m = [26 x [5 x i8]] [[5 x i8] c".-\00\00\00", [5 x i8] c"-...\00", [5 x i8] c"-.-.\00", [5 x i8] c"-..\00\00", [5 x i8] c".\00\00\00\00", [5 x i8] c"..-.\00", [5 x i8] c"--.\00\00", [5 x i8] c"....\00", [5 x i8] c"..\00\00\00", [5 x i8] c".---\00", [5 x i8] c"-.-\00\00", [5 x i8] c".-..\00", [5 x i8] c"--\00\00\00", [5 x i8] c"-.\00\00\00", [5 x i8] c"---\00\00", [5 x i8] c".--.\00", [5 x i8] c"--.-\00", [5 x i8] c".-.\00\00", [5 x i8] c"...\00\00", [5 x i8] c"-\00\00\00\00", [5 x i8] c"..-\00\00", [5 x i8] c"...-\00", [5 x i8] c".--\00\00", [5 x i8] c"-..-\00", [5 x i8] c"-.--\00", [5 x i8] c"--..\00"]
define void @main() {
%1 = alloca [26 x [5 x i8]]
%2 = alloca [80 x i8]
%3 = getelementptr inbounds [26 x [5 x i8]], [26 x [5 x i8]]* %1, i64 0, i64 0, i64 0
%4 = getelementptr inbounds [80 x i8], [80 x i8]* %2, i64 0, i64 0
%5 = call i32 @getText(i8* %4)
%6 = bitcast [26 x [5 x i8]]* %1 to i8**
%7 = call i32 @printMorseCode(i8* %4, i8** %6)
ret void
}