#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 */
typedef int *indexliste;

/* Variables and functions */
int /*<<< orphan*/ grwp(int **, int *);
__attribute__((visibility("hidden"))) void dxsmooth(int list[2][160],
                                                    int *indexliste) {
  int i, last, next;
  for (i = 0; i < *(indexliste); i++) {
    int current = list[1][i];
    int length = list[0][i];
    if (i != 0) {
      last = list[1][i - 1];
    } else {
      last = 0;
    }
    if (i != *(indexliste)-1) {
      next = list[1][i + 1];
    } else {
      next = 0;
    }
    if (i == 0) {
      if (current == 97) {
        if ((*(indexliste) == 1) && (length == 2)) {
          list[1][i] = 95;
          current = 95;
        } else if (length >= 4) {
          list[1][i] = 95;
          current = 95;
        } else {
          current = 96;
        }
      }
      if (current == 96) {
        if (next == 90) {
          list[1][i] = 91;
        } else {
          list[1][i] = 93;
        }
      } else if (current == 90) {
        list[1][i] = 91;
      } else if (current == 92) {
        list[1][i] = 93;
      }
    } else {
      if (current == 97) {
        if (length >= 4) {
          list[1][i] = 95;
          current = 95;
        } else {
          current = 96;
        }
      }
      if (current == 96) {
        if (last == 91 || last == 92) {
          list[1][i] = 91;
        } else if (last == 93 || last == 90) {
          list[1][i] = 93;
        } else if (next == 90) {
          list[1][i] = 91;
        } else {
          list[1][i] = 93;
        }
      } else if (current == 90) {
        if (length > 1) {
          list[1][i] = 91;
        } else if (last == 91 || last == 92) {
          list[1][i] = 91;
        } else if (last == 95) {
          list[1][i] = 91;
        }
      } else if (current == 92) {
        if (length > 1) {
          list[1][i] = 93;
        } else if (last == 93 || last == 90) {
          list[1][i] = 93;
        } else if (last == 95) {
          list[1][i] = 93;
        }
      }
    }
  }
  grwp(list, indexliste);
}


x86 assembly (clang, -O0):
<dxsmooth>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    14df <dxsmooth+0x3cf>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x280(%rax,%rcx,4),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     117c <dxsmooth+0x6c>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    0x280(%rax,%rcx,4),%eax
mov    %eax,-0x18(%rbp)
jmp    1183 <dxsmooth+0x73>
movl   $0x0,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     11b3 <dxsmooth+0xa3>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    0x280(%rax,%rcx,4),%eax
mov    %eax,-0x1c(%rbp)
jmp    11ba <dxsmooth+0xaa>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x0,-0x14(%rbp)
jne    12d0 <dxsmooth+0x1c0>
cmpl   $0x61,-0x20(%rbp)
jne    123e <dxsmooth+0x12e>
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1204 <dxsmooth+0xf4>
cmpl   $0x2,-0x24(%rbp)
jne    1204 <dxsmooth+0xf4>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5f,0x280(%rax,%rcx,4)
movl   $0x5f,-0x20(%rbp)
jmp    1239 <dxsmooth+0x129>
cmpl   $0x4,-0x24(%rbp)
jl     122d <dxsmooth+0x11d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5f,0x280(%rax,%rcx,4)
movl   $0x5f,-0x20(%rbp)
jmp    1234 <dxsmooth+0x124>
movl   $0x60,-0x20(%rbp)
jmp    1239 <dxsmooth+0x129>
jmp    123e <dxsmooth+0x12e>
cmpl   $0x60,-0x20(%rbp)
jne    1282 <dxsmooth+0x172>
cmpl   $0x5a,-0x1c(%rbp)
jne    126a <dxsmooth+0x15a>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    127d <dxsmooth+0x16d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    12cb <dxsmooth+0x1bb>
cmpl   $0x5a,-0x20(%rbp)
jne    12a4 <dxsmooth+0x194>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    12c6 <dxsmooth+0x1b6>
cmpl   $0x5c,-0x20(%rbp)
jne    12c1 <dxsmooth+0x1b1>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    12c6 <dxsmooth+0x1b6>
jmp    12cb <dxsmooth+0x1bb>
jmp    14cc <dxsmooth+0x3bc>
cmpl   $0x61,-0x20(%rbp)
jne    130f <dxsmooth+0x1ff>
cmpl   $0x4,-0x24(%rbp)
jl     1303 <dxsmooth+0x1f3>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5f,0x280(%rax,%rcx,4)
movl   $0x5f,-0x20(%rbp)
jmp    130a <dxsmooth+0x1fa>
movl   $0x60,-0x20(%rbp)
jmp    130f <dxsmooth+0x1ff>
cmpl   $0x60,-0x20(%rbp)
jne    13b5 <dxsmooth+0x2a5>
cmpl   $0x5b,-0x18(%rbp)
je     132d <dxsmooth+0x21d>
cmpl   $0x5c,-0x18(%rbp)
jne    1345 <dxsmooth+0x235>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    13b0 <dxsmooth+0x2a0>
cmpl   $0x5d,-0x18(%rbp)
je     1359 <dxsmooth+0x249>
cmpl   $0x5a,-0x18(%rbp)
jne    1371 <dxsmooth+0x261>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    13ab <dxsmooth+0x29b>
cmpl   $0x5a,-0x1c(%rbp)
jne    1393 <dxsmooth+0x283>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    13a6 <dxsmooth+0x296>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    13ab <dxsmooth+0x29b>
jmp    13b0 <dxsmooth+0x2a0>
jmp    14c7 <dxsmooth+0x3b7>
cmpl   $0x5a,-0x20(%rbp)
jne    1439 <dxsmooth+0x329>
cmpl   $0x1,-0x24(%rbp)
jle    13e1 <dxsmooth+0x2d1>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    1434 <dxsmooth+0x324>
cmpl   $0x5b,-0x18(%rbp)
je     13f5 <dxsmooth+0x2e5>
cmpl   $0x5c,-0x18(%rbp)
jne    140d <dxsmooth+0x2fd>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    142f <dxsmooth+0x31f>
cmpl   $0x5f,-0x18(%rbp)
jne    142a <dxsmooth+0x31a>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5b,0x280(%rax,%rcx,4)
jmp    142f <dxsmooth+0x31f>
jmp    1434 <dxsmooth+0x324>
jmp    14c2 <dxsmooth+0x3b2>
cmpl   $0x5c,-0x20(%rbp)
jne    14bd <dxsmooth+0x3ad>
cmpl   $0x1,-0x24(%rbp)
jle    1465 <dxsmooth+0x355>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    14b8 <dxsmooth+0x3a8>
cmpl   $0x5d,-0x18(%rbp)
je     1479 <dxsmooth+0x369>
cmpl   $0x5a,-0x18(%rbp)
jne    1491 <dxsmooth+0x381>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    14b3 <dxsmooth+0x3a3>
cmpl   $0x5f,-0x18(%rbp)
jne    14ae <dxsmooth+0x39e>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x5d,0x280(%rax,%rcx,4)
jmp    14b3 <dxsmooth+0x3a3>
jmp    14b8 <dxsmooth+0x3a8>
jmp    14bd <dxsmooth+0x3ad>
jmp    14c2 <dxsmooth+0x3b2>
jmp    14c7 <dxsmooth+0x3b7>
jmp    14cc <dxsmooth+0x3bc>
jmp    14d1 <dxsmooth+0x3c1>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1127 <dxsmooth+0x17>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1030 <grwp@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dxsmooth>:
push   %rbx
mov    (%rsi),%ecx
test   %ecx,%ecx
jle    129a <dxsmooth+0x18a>
mov    0x280(%rdi),%eax
xor    %r8d,%r8d
cmp    $0x1,%ecx
je     1130 <dxsmooth+0x20>
mov    0x284(%rdi),%r8d
add    $0xffffffa6,%eax
cmp    $0x7,%eax
ja     1181 <dxsmooth+0x71>
mov    $0x5b,%edx
lea    0xebc(%rip),%rbx
movslq (%rbx,%rax,4),%rax
add    %rbx,%rax
jmp    *%rax
mov    $0x5d,%edx
jmp    117b <dxsmooth+0x6b>
mov    (%rdi),%eax
xor    $0x1,%ecx
mov    %eax,%edx
xor    $0x2,%edx
or     %ecx,%edx
mov    $0x5f,%edx
je     117b <dxsmooth+0x6b>
cmp    $0x3,%eax
jg     117b <dxsmooth+0x6b>
xor    %eax,%eax
cmp    $0x5a,%r8d
setne  %al
lea    (%rax,%rax,1),%edx
add    $0x5b,%edx
mov    %edx,0x280(%rdi)
mov    (%rsi),%ecx
cmp    $0x2,%ecx
jl     129a <dxsmooth+0x18a>
mov    $0x1,%eax
lea    0xe88(%rip),%r10
mov    $0x13,%r8d
mov    $0x29,%r9d
jmp    11c7 <dxsmooth+0xb7>
cs nopw 0x0(%rax,%rax,1)
mov    %edx,0x280(%rdi,%rax,4)
add    $0x1,%rax
movslq (%rsi),%rcx
cmp    %rcx,%rax
jge    129a <dxsmooth+0x18a>
add    $0xffffffff,%ecx
xor    %r11d,%r11d
cmp    %rcx,%rax
je     11da <dxsmooth+0xca>
mov    0x284(%rdi,%rax,4),%r11d
mov    0x280(%rdi,%rax,4),%edx
add    $0xffffffa6,%edx
cmp    $0x7,%edx
ja     11b7 <dxsmooth+0xa7>
mov    (%rdi,%rax,4),%ebx
mov    0x27c(%rdi,%rax,4),%ecx
movslq (%r10,%rdx,4),%rdx
add    %r10,%rdx
jmp    *%rdx
mov    $0x5b,%edx
cmp    $0x1,%ebx
jg     11b0 <dxsmooth+0xa0>
add    $0xffffffa5,%ecx
cmp    $0x4,%ecx
ja     11b7 <dxsmooth+0xa7>
bt     %ecx,%r8d
jb     11b0 <dxsmooth+0xa0>
jmp    11b7 <dxsmooth+0xa7>
cs nopw 0x0(%rax,%rax,1)
mov    $0x5d,%edx
cmp    $0x1,%ebx
jg     11b0 <dxsmooth+0xa0>
add    $0xffffffa6,%ecx
cmp    $0x5,%ecx
ja     11b7 <dxsmooth+0xa7>
bt     %ecx,%r9d
jb     11b0 <dxsmooth+0xa0>
jmp    11b7 <dxsmooth+0xa7>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    $0x5f,%edx
cmp    $0x3,%ebx
jg     11b0 <dxsmooth+0xa0>
lea    -0x5b(%rcx),%ebx
mov    $0x5b,%edx
cmp    $0x2,%ebx
jb     11b0 <dxsmooth+0xa0>
mov    $0x5d,%edx
cmp    $0x5a,%ecx
je     11b0 <dxsmooth+0xa0>
cmp    $0x5d,%ecx
je     11b0 <dxsmooth+0xa0>
xor    %ecx,%ecx
cmp    $0x5a,%r11d
setne  %cl
lea    (%rcx,%rcx,1),%edx
add    $0x5b,%edx
jmp    11b0 <dxsmooth+0xa0>
pop    %rbx
jmp    1030 <grwp@plt>

LLVM IR (-O0):
define hidden void @dxsmooth([160 x i32]* %0, i32* %1) {
%3 = alloca [160 x i32]*
%4 = alloca i32*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store [160 x i32]* %0, [160 x i32]** %3
store i32* %1, i32** %4
store i32 0, i32* %5
br label %10
10: ; preds = %260, %2
%11 = load i32, i32* %5
%12 = load i32*, i32** %4
%13 = load i32, i32* %12
%14 = icmp slt i32 %11, %13
br i1 %14, label %15, label %263
15: ; preds = %10
%16 = load [160 x i32]*, [160 x i32]** %3
%17 = getelementptr inbounds [160 x i32], [160 x i32]* %16, i64 1
%18 = load i32, i32* %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [160 x i32], [160 x i32]* %17, i64 0, i64 %19
%21 = load i32, i32* %20
store i32 %21, i32* %8
%22 = load [160 x i32]*, [160 x i32]** %3
%23 = getelementptr inbounds [160 x i32], [160 x i32]* %22, i64 0
%24 = load i32, i32* %5
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [160 x i32], [160 x i32]* %23, i64 0, i64 %25
%27 = load i32, i32* %26
store i32 %27, i32* %9
%28 = load i32, i32* %5
%29 = icmp ne i32 %28, 0
br i1 %29, label %30, label %38
30: ; preds = %15
%31 = load [160 x i32]*, [160 x i32]** %3
%32 = getelementptr inbounds [160 x i32], [160 x i32]* %31, i64 1
%33 = load i32, i32* %5
%34 = sub nsw i32 %33, 1
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [160 x i32], [160 x i32]* %32, i64 0, i64 %35
%37 = load i32, i32* %36
store i32 %37, i32* %6
br label %39
38: ; preds = %15
store i32 0, i32* %6
br label %39
39: ; preds = %38, %30
%40 = load i32, i32* %5
%41 = load i32*, i32** %4
%42 = load i32, i32* %41
%43 = sub nsw i32 %42, 1
%44 = icmp ne i32 %40, %43
br i1 %44, label %45, label %53
45: ; preds = %39
%46 = load [160 x i32]*, [160 x i32]** %3
%47 = getelementptr inbounds [160 x i32], [160 x i32]* %46, i64 1
%48 = load i32, i32* %5
%49 = add nsw i32 %48, 1
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [160 x i32], [160 x i32]* %47, i64 0, i64 %50
%52 = load i32, i32* %51
store i32 %52, i32* %7
br label %54
53: ; preds = %39
store i32 0, i32* %7
br label %54
54: ; preds = %53, %45
%55 = load i32, i32* %5
%56 = icmp eq i32 %55, 0
br i1 %56, label %57, label %125
57: ; preds = %54
%58 = load i32, i32* %8
%59 = icmp eq i32 %58, 97
br i1 %59, label %60, label %85
60: ; preds = %57
%61 = load i32*, i32** %4
%62 = load i32, i32* %61
%63 = icmp eq i32 %62, 1
br i1 %63, label %64, label %73
64: ; preds = %60
%65 = load i32, i32* %9
%66 = icmp eq i32 %65, 2
br i1 %66, label %67, label %73
67: ; preds = %64
%68 = load [160 x i32]*, [160 x i32]** %3
%69 = getelementptr inbounds [160 x i32], [160 x i32]* %68, i64 1
%70 = load i32, i32* %5
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [160 x i32], [160 x i32]* %69, i64 0, i64 %71
store i32 95, i32* %72
store i32 95, i32* %8
br label %84
73: ; preds = %64, %60
%74 = load i32, i32* %9
%75 = icmp sge i32 %74, 4
br i1 %75, label %76, label %82
76: ; preds = %73
%77 = load [160 x i32]*, [160 x i32]** %3
%78 = getelementptr inbounds [160 x i32], [160 x i32]* %77, i64 1
%79 = load i32, i32* %5
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [160 x i32], [160 x i32]* %78, i64 0, i64 %80
store i32 95, i32* %81
store i32 95, i32* %8
br label %83
82: ; preds = %73
store i32 96, i32* %8
br label %83
83: ; preds = %82, %76
br label %84
84: ; preds = %83, %67
br label %85
85: ; preds = %84, %57
%86 = load i32, i32* %8
%87 = icmp eq i32 %86, 96
br i1 %87, label %88, label %104
88: ; preds = %85
%89 = load i32, i32* %7
%90 = icmp eq i32 %89, 90
br i1 %90, label %91, label %97
91: ; preds = %88
%92 = load [160 x i32]*, [160 x i32]** %3
%93 = getelementptr inbounds [160 x i32], [160 x i32]* %92, i64 1
%94 = load i32, i32* %5
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [160 x i32], [160 x i32]* %93, i64 0, i64 %95
store i32 91, i32* %96
br label %103
97: ; preds = %88
%98 = load [160 x i32]*, [160 x i32]** %3
%99 = getelementptr inbounds [160 x i32], [160 x i32]* %98, i64 1
%100 = load i32, i32* %5
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [160 x i32], [160 x i32]* %99, i64 0, i64 %101
store i32 93, i32* %102
br label %103
103: ; preds = %97, %91
br label %124
104: ; preds = %85
%105 = load i32, i32* %8
%106 = icmp eq i32 %105, 90
br i1 %106, label %107, label %113
107: ; preds = %104
%108 = load [160 x i32]*, [160 x i32]** %3
%109 = getelementptr inbounds [160 x i32], [160 x i32]* %108, i64 1
%110 = load i32, i32* %5
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds [160 x i32], [160 x i32]* %109, i64 0, i64 %111
store i32 91, i32* %112
br label %123
113: ; preds = %104
%114 = load i32, i32* %8
%115 = icmp eq i32 %114, 92
br i1 %115, label %116, label %122
116: ; preds = %113
%117 = load [160 x i32]*, [160 x i32]** %3
%118 = getelementptr inbounds [160 x i32], [160 x i32]* %117, i64 1
%119 = load i32, i32* %5
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [160 x i32], [160 x i32]* %118, i64 0, i64 %120
store i32 93, i32* %121
br label %122
122: ; preds = %116, %113
br label %123
123: ; preds = %122, %107
br label %124
124: ; preds = %123, %103
br label %259
125: ; preds = %54
%126 = load i32, i32* %8
%127 = icmp eq i32 %126, 97
br i1 %127, label %128, label %139
128: ; preds = %125
%129 = load i32, i32* %9
%130 = icmp sge i32 %129, 4
br i1 %130, label %131, label %137
131: ; preds = %128
%132 = load [160 x i32]*, [160 x i32]** %3
%133 = getelementptr inbounds [160 x i32], [160 x i32]* %132, i64 1
%134 = load i32, i32* %5
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds [160 x i32], [160 x i32]* %133, i64 0, i64 %135
store i32 95, i32* %136
store i32 95, i32* %8
br label %138
137: ; preds = %128
store i32 96, i32* %8
br label %138
138: ; preds = %137, %131
br label %139
139: ; preds = %138, %125
%140 = load i32, i32* %8
%141 = icmp eq i32 %140, 96
br i1 %141, label %142, label %184
142: ; preds = %139
%143 = load i32, i32* %6
%144 = icmp eq i32 %143, 91
br i1 %144, label %148, label %145
145: ; preds = %142
%146 = load i32, i32* %6
%147 = icmp eq i32 %146, 92
br i1 %147, label %148, label %154
148: ; preds = %145, %142
%149 = load [160 x i32]*, [160 x i32]** %3
%150 = getelementptr inbounds [160 x i32], [160 x i32]* %149, i64 1
%151 = load i32, i32* %5
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [160 x i32], [160 x i32]* %150, i64 0, i64 %152
store i32 91, i32* %153
br label %183
154: ; preds = %145
%155 = load i32, i32* %6
%156 = icmp eq i32 %155, 93
br i1 %156, label %160, label %157
157: ; preds = %154
%158 = load i32, i32* %6
%159 = icmp eq i32 %158, 90
br i1 %159, label %160, label %166
160: ; preds = %157, %154
%161 = load [160 x i32]*, [160 x i32]** %3
%162 = getelementptr inbounds [160 x i32], [160 x i32]* %161, i64 1
%163 = load i32, i32* %5
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [160 x i32], [160 x i32]* %162, i64 0, i64 %164
store i32 93, i32* %165
br label %182
166: ; preds = %157
%167 = load i32, i32* %7
%168 = icmp eq i32 %167, 90
br i1 %168, label %169, label %175
169: ; preds = %166
%170 = load [160 x i32]*, [160 x i32]** %3
%171 = getelementptr inbounds [160 x i32], [160 x i32]* %170, i64 1
%172 = load i32, i32* %5
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [160 x i32], [160 x i32]* %171, i64 0, i64 %173
store i32 91, i32* %174
br label %181
175: ; preds = %166
%176 = load [160 x i32]*, [160 x i32]** %3
%177 = getelementptr inbounds [160 x i32], [160 x i32]* %176, i64 1
%178 = load i32, i32* %5
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [160 x i32], [160 x i32]* %177, i64 0, i64 %179
store i32 93, i32* %180
br label %181
181: ; preds = %175, %169
br label %182
182: ; preds = %181, %160
br label %183
183: ; preds = %182, %148
br label %258
184: ; preds = %139
%185 = load i32, i32* %8
%186 = icmp eq i32 %185, 90
br i1 %186, label %187, label %220
187: ; preds = %184
%188 = load i32, i32* %9
%189 = icmp sgt i32 %188, 1
br i1 %189, label %190, label %196
190: ; preds = %187
%191 = load [160 x i32]*, [160 x i32]** %3
%192 = getelementptr inbounds [160 x i32], [160 x i32]* %191, i64 1
%193 = load i32, i32* %5
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds [160 x i32], [160 x i32]* %192, i64 0, i64 %194
store i32 91, i32* %195
br label %219
196: ; preds = %187
%197 = load i32, i32* %6
%198 = icmp eq i32 %197, 91
br i1 %198, label %202, label %199
199: ; preds = %196
%200 = load i32, i32* %6
%201 = icmp eq i32 %200, 92
br i1 %201, label %202, label %208
202: ; preds = %199, %196
%203 = load [160 x i32]*, [160 x i32]** %3
%204 = getelementptr inbounds [160 x i32], [160 x i32]* %203, i64 1
%205 = load i32, i32* %5
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [160 x i32], [160 x i32]* %204, i64 0, i64 %206
store i32 91, i32* %207
br label %218
208: ; preds = %199
%209 = load i32, i32* %6
%210 = icmp eq i32 %209, 95
br i1 %210, label %211, label %217
211: ; preds = %208
%212 = load [160 x i32]*, [160 x i32]** %3
%213 = getelementptr inbounds [160 x i32], [160 x i32]* %212, i64 1
%214 = load i32, i32* %5
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds [160 x i32], [160 x i32]* %213, i64 0, i64 %215
store i32 91, i32* %216
br label %217
217: ; preds = %211, %208
br label %218
218: ; preds = %217, %202
br label %219
219: ; preds = %218, %190
br label %257
220: ; preds = %184
%221 = load i32, i32* %8
%222 = icmp eq i32 %221, 92
br i1 %222, label %223, label %256
223: ; preds = %220
%224 = load i32, i32* %9
%225 = icmp sgt i32 %224, 1
br i1 %225, label %226, label %232
226: ; preds = %223
%227 = load [160 x i32]*, [160 x i32]** %3
%228 = getelementptr inbounds [160 x i32], [160 x i32]* %227, i64 1
%229 = load i32, i32* %5
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds [160 x i32], [160 x i32]* %228, i64 0, i64 %230
store i32 93, i32* %231
br label %255
232: ; preds = %223
%233 = load i32, i32* %6
%234 = icmp eq i32 %233, 93
br i1 %234, label %238, label %235
235: ; preds = %232
%236 = load i32, i32* %6
%237 = icmp eq i32 %236, 90
br i1 %237, label %238, label %244
238: ; preds = %235, %232
%239 = load [160 x i32]*, [160 x i32]** %3
%240 = getelementptr inbounds [160 x i32], [160 x i32]* %239, i64 1
%241 = load i32, i32* %5
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds [160 x i32], [160 x i32]* %240, i64 0, i64 %242
store i32 93, i32* %243
br label %254
244: ; preds = %235
%245 = load i32, i32* %6
%246 = icmp eq i32 %245, 95
br i1 %246, label %247, label %253
247: ; preds = %244
%248 = load [160 x i32]*, [160 x i32]** %3
%249 = getelementptr inbounds [160 x i32], [160 x i32]* %248, i64 1
%250 = load i32, i32* %5
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [160 x i32], [160 x i32]* %249, i64 0, i64 %251
store i32 93, i32* %252
br label %253
253: ; preds = %247, %244
br label %254
254: ; preds = %253, %238
br label %255
255: ; preds = %254, %226
br label %256
256: ; preds = %255, %220
br label %257
257: ; preds = %256, %219
br label %258
258: ; preds = %257, %183
br label %259
259: ; preds = %258, %124
br label %260
260: ; preds = %259
%261 = load i32, i32* %5
%262 = add nsw i32 %261, 1
store i32 %262, i32* %5
br label %10
263: ; preds = %10
%264 = load [160 x i32]*, [160 x i32]** %3
%265 = bitcast [160 x i32]* %264 to i32**
%266 = load i32*, i32** %4
%267 = call i32 @grwp(i32** %265, i32* %266)
ret void
}

LLVM IR (-O2):
define hidden void @dxsmooth([160 x i32]* %0, i32* %1) {
%3 = load i32, i32* %1
%4 = icmp sgt i32 %3, 0
br i1 %4, label %5, label %73
5: ; preds = %2
%6 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 1, i64 0
%7 = load i32, i32* %6
%8 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 0, i64 0
%9 = load i32, i32* %8
%10 = icmp eq i32 %3, 1
br i1 %10, label %14, label %11
11: ; preds = %5
%12 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 1, i64 1
%13 = load i32, i32* %12
br label %14
14: ; preds = %5, %11
%15 = phi i32 [ %13, %11 ], [ 0, %5 ]
switch i32 %7, label %28 [
i32 97, label %17
i32 96, label %23
i32 90, label %26
i32 92, label %16
]
16: ; preds = %14
br label %26
17: ; preds = %14
%18 = icmp eq i32 %3, 1
%19 = icmp eq i32 %9, 2
%20 = select i1 %18, i1 %19, i1 false
%21 = icmp sgt i32 %9, 3
%22 = select i1 %20, i1 true, i1 %21
br i1 %22, label %26, label %23
23: ; preds = %17, %14
%24 = icmp eq i32 %15, 90
%25 = select i1 %24, i32 91, i32 93
br label %26
26: ; preds = %23, %17, %16, %14
%27 = phi i32 [ 93, %16 ], [ 95, %17 ], [ %25, %23 ], [ 91, %14 ]
store i32 %27, i32* %6
br label %28
28: ; preds = %26, %14
%29 = load i32, i32* %1
%30 = icmp sgt i32 %29, 1
br i1 %30, label %31, label %73
31: ; preds = %28, %68
%32 = phi i64 [ %69, %68 ], [ 1, %28 ]
%33 = phi i32 [ %70, %68 ], [ %29, %28 ]
%34 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 1, i64 %32
%35 = load i32, i32* %34
%36 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 0, i64 %32
%37 = load i32, i32* %36
%38 = add nsw i64 %32, -1
%39 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 1, i64 %38
%40 = load i32, i32* %39
%41 = add nsw i32 %33, -1
%42 = zext i32 %41 to i64
%43 = icmp eq i64 %32, %42
br i1 %43, label %48, label %44
44: ; preds = %31
%45 = add nuw nsw i64 %32, 1
%46 = getelementptr inbounds [160 x i32], [160 x i32]* %0, i64 1, i64 %45
%47 = load i32, i32* %46
br label %48
48: ; preds = %44, %31
%49 = phi i32 [ %47, %44 ], [ 0, %31 ]
switch i32 %35, label %68 [
i32 97, label %50
i32 96, label %52
i32 90, label %59
i32 92, label %63
]
50: ; preds = %48
%51 = icmp sgt i32 %37, 3
br i1 %51, label %66, label %52
52: ; preds = %48, %50
%53 = add i32 %40, -91
%54 = icmp ult i32 %53, 2
br i1 %54, label %66, label %55
55: ; preds = %52
switch i32 %40, label %56 [
i32 93, label %66
i32 90, label %66
]
56: ; preds = %55
%57 = icmp eq i32 %49, 90
%58 = select i1 %57, i32 91, i32 93
br label %66
59: ; preds = %48
%60 = freeze i32 %37
%61 = icmp sgt i32 %60, 1
br i1 %61, label %66, label %62
62: ; preds = %59
switch i32 %40, label %68 [
i32 95, label %66
i32 92, label %66
i32 91, label %66
]
63: ; preds = %48
%64 = icmp sgt i32 %37, 1
br i1 %64, label %66, label %65
65: ; preds = %63
switch i32 %40, label %68 [
i32 93, label %66
i32 90, label %66
i32 95, label %66
]
66: ; preds = %62, %62, %62, %59, %65, %65, %65, %63, %56, %55, %55, %52, %50
%67 = phi i32 [ 95, %50 ], [ 91, %52 ], [ 93, %55 ], [ 93, %55 ], [ %58, %56 ], [ 91, %62 ], [ 93, %63 ], [ 93, %65 ], [ 93, %65 ], [ 93, %65 ], [ 91, %59 ], [ 91, %62 ], [ 91, %62 ]
store i32 %67, i32* %34
br label %68
68: ; preds = %62, %66, %48, %65
%69 = add nuw nsw i64 %32, 1
%70 = load i32, i32* %1
%71 = sext i32 %70 to i64
%72 = icmp slt i64 %69, %71
br i1 %72, label %31, label %73
73: ; preds = %28, %68, %2
%74 = bitcast [160 x i32]* %0 to i32**
%75 = tail call i32 @grwp(i32** %74, i32* %1)
ret void
}