char **setUnidad(char var, char **MatrizNivel, int i, int j) {
  int aux1, aux2;
  for (aux1 = 3 * i; aux1 <= 3 * i + 2; aux1++) {
    for (aux2 = 3 * j; aux2 <= 3 * j + 2; aux2++) {
      MatrizNivel[aux1][aux2] = var;
    }
  }
  return MatrizNivel;
}


x86 assembly (clang, -O0):
<setUnidad>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
imul   $0x3,-0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     117d <setUnidad+0x7d>
imul   $0x3,-0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
imul   $0x3,-0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jg     116a <setUnidad+0x6a>
mov    -0x1(%rbp),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1134 <setUnidad+0x34>
jmp    116f <setUnidad+0x6f>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    111b <setUnidad+0x1b>
mov    -0x10(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<setUnidad>:
mov    %rsi,%rax
lea    (%rdx,%rdx,2),%r8d
lea    (%rdx,%rdx,2),%esi
add    $0x2,%esi
lea    (%rcx,%rcx,2),%edx
lea    (%rcx,%rcx,2),%ecx
add    $0x2,%ecx
movslq %edx,%r9
cmp    %ecx,%r9d
cmovg  %r9d,%ecx
movslq %r8d,%r10
cmp    %esi,%r10d
cmovg  %r10d,%esi
add    $0x1,%esi
mov    (%rax,%r10,8),%rdx
mov    %dil,(%rdx,%r9,1)
cmp    %r9d,%ecx
jne    114e <setUnidad+0x4e>
add    $0x1,%r8d
cmp    %r8d,%esi
je     11ab <setUnidad+0xab>
mov    0x8(%rax,%r10,8),%rcx
mov    %dil,(%rcx,%r9,1)
jmp    119c <setUnidad+0x9c>
mov    (%rax,%r10,8),%rcx
mov    %dil,0x1(%rcx,%r9,1)
mov    (%rax,%r10,8),%rcx
mov    %dil,0x2(%r9,%rcx,1)
lea    0x1(%r10),%ecx
cmp    %ecx,%esi
je     11ab <setUnidad+0xab>
mov    0x8(%rax,%r10,8),%rcx
mov    %dil,(%rcx,%r9,1)
mov    0x8(%rax,%r10,8),%rcx
mov    %dil,0x1(%rcx,%r9,1)
mov    0x8(%rax,%r10,8),%rcx
mov    %dil,0x2(%rcx,%r9,1)
mov    0x10(%rax,%r10,8),%rcx
mov    %dil,(%rcx,%r9,1)
mov    0x10(%rax,%r10,8),%rcx
mov    %dil,0x1(%rcx,%r9,1)
add    $0x2,%r9
lea    (%rax,%r10,8),%rdx
add    $0x10,%rdx
mov    (%rdx),%rcx
mov    %dil,(%rcx,%r9,1)
ret

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

LLVM IR (-O2):
define i8** @setUnidad(i8 signext %0, i8** returned %1, i32 %2, i32 %3) {
%5 = mul i32 %2, 3
%6 = add i32 %5, 2
%7 = mul i32 %3, 3
%8 = add i32 %7, 2
%9 = sext i32 %7 to i64
%10 = call i32 @llvm.smax.i32(i32 %7, i32 %8)
%11 = add i32 %10, 1
%12 = sext i32 %5 to i64
%13 = call i32 @llvm.smax.i32(i32 %5, i32 %6)
%14 = add i32 %13, 1
%15 = getelementptr inbounds i8*, i8** %1, i64 %12
%16 = load i8*, i8** %15
%17 = getelementptr inbounds i8, i8* %16, i64 %9
store i8 %0, i8* %17
%18 = add nsw i64 %9, 1
%19 = trunc i64 %18 to i32
%20 = icmp eq i32 %11, %19
br i1 %20, label %21, label %25
21: ; preds = %4
%22 = add nsw i64 %12, 1
%23 = trunc i64 %22 to i32
%24 = icmp eq i32 %14, %23
br i1 %24, label %61, label %34
25: ; preds = %4
%26 = load i8*, i8** %15
%27 = getelementptr inbounds i8, i8* %26, i64 %18
store i8 %0, i8* %27
%28 = add nsw i64 %9, 2
%29 = load i8*, i8** %15
%30 = getelementptr inbounds i8, i8* %29, i64 %28
store i8 %0, i8* %30
%31 = add nsw i64 %12, 1
%32 = trunc i64 %31 to i32
%33 = icmp eq i32 %14, %32
br i1 %33, label %61, label %40
34: ; preds = %21
%35 = getelementptr inbounds i8*, i8** %1, i64 %22
%36 = load i8*, i8** %35
%37 = getelementptr inbounds i8, i8* %36, i64 %9
store i8 %0, i8* %37
%38 = add nsw i64 %12, 2
%39 = getelementptr inbounds i8*, i8** %1, i64 %38
br label %56
40: ; preds = %25
%41 = getelementptr inbounds i8*, i8** %1, i64 %31
%42 = load i8*, i8** %41
%43 = getelementptr inbounds i8, i8* %42, i64 %9
store i8 %0, i8* %43
%44 = load i8*, i8** %41
%45 = getelementptr inbounds i8, i8* %44, i64 %18
store i8 %0, i8* %45
%46 = add nsw i64 %9, 2
%47 = load i8*, i8** %41
%48 = getelementptr inbounds i8, i8* %47, i64 %46
store i8 %0, i8* %48
%49 = add nsw i64 %12, 2
%50 = getelementptr inbounds i8*, i8** %1, i64 %49
%51 = load i8*, i8** %50
%52 = getelementptr inbounds i8, i8* %51, i64 %9
store i8 %0, i8* %52
%53 = load i8*, i8** %50
%54 = getelementptr inbounds i8, i8* %53, i64 %18
store i8 %0, i8* %54
%55 = add nsw i64 %9, 2
br label %56
56: ; preds = %34, %40
%57 = phi i8** [ %50, %40 ], [ %39, %34 ]
%58 = phi i64 [ %55, %40 ], [ %9, %34 ]
%59 = load i8*, i8** %57
%60 = getelementptr inbounds i8, i8* %59, i64 %58
store i8 %0, i8* %60
br label %61
61: ; preds = %56, %25, %21
ret i8** %1
}