__attribute__((no)) void main1(signed char x, signed char max_result,
                               signed char min_result) {
  int i;
  signed char b[256];
  signed char c[256];
  signed char check_diff = 2;
  signed char diff = 2;
  signed char max = x;
  signed char min = x;
  check_diff = 2;
  for (i = 0; i < 256; i++) {
    b[i] = i;
    c[i] = i;
    if (i % 16 == 0) {
      c[i] = i + 1;
      check_diff += 1;
    }
    if (c[i] > max_result)
      max_result = c[i];
    if (c[i] < min_result)
      min_result = c[i];
    asm volatile("" ::: "memory");
  }
  for (i = 0; i < 256; i++) {
    diff += (signed char)(c[i] - b[i]);
  }
  for (i = 0; i < 256; i++) {
    max = max < c[i] ? c[i] : max;
  }
  for (i = 0; i < 256; i++) {
    min = min > c[i] ? c[i] : min;
  }
  if (diff != check_diff)
    abort();
  if (max != max_result)
    abort();
  if (min != min_result)
    abort();
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
mov    %dl,%al
mov    %sil,%cl
mov    %dil,%dl
mov    %dl,-0x1(%rbp)
mov    %cl,-0x2(%rbp)
mov    %al,-0x3(%rbp)
movb   $0x2,-0x211(%rbp)
movb   $0x2,-0x212(%rbp)
mov    -0x1(%rbp),%al
mov    %al,-0x213(%rbp)
mov    -0x1(%rbp),%al
mov    %al,-0x214(%rbp)
movb   $0x2,-0x211(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    1218 <main1+0x108>
mov    -0x8(%rbp),%eax
mov    %al,%cl
movslq -0x8(%rbp),%rax
mov    %cl,-0x110(%rbp,%rax,1)
mov    -0x8(%rbp),%eax
mov    %al,%cl
movslq -0x8(%rbp),%rax
mov    %cl,-0x210(%rbp,%rax,1)
mov    -0x8(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11be <main1+0xae>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %al,%cl
movslq -0x8(%rbp),%rax
mov    %cl,-0x210(%rbp,%rax,1)
movsbl -0x211(%rbp),%eax
add    $0x1,%eax
mov    %al,-0x211(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x210(%rbp,%rax,1),%eax
ff
movsbl -0x2(%rbp),%ecx
cmp    %ecx,%eax
jle    11e4 <main1+0xd4>
movslq -0x8(%rbp),%rax
mov    -0x210(%rbp,%rax,1),%al
mov    %al,-0x2(%rbp)
movslq -0x8(%rbp),%rax
movsbl -0x210(%rbp,%rax,1),%eax
ff
movsbl -0x3(%rbp),%ecx
cmp    %ecx,%eax
jge    120a <main1+0xfa>
movslq -0x8(%rbp),%rax
mov    -0x210(%rbp,%rax,1),%al
mov    %al,-0x3(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    115a <main1+0x4a>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    1266 <main1+0x156>
movslq -0x8(%rbp),%rax
movsbl -0x210(%rbp,%rax,1),%eax
ff
movslq -0x8(%rbp),%rcx
movsbl -0x110(%rbp,%rcx,1),%ecx
ff
sub    %ecx,%eax
movsbl %al,%ecx
movsbl -0x212(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x212(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    121f <main1+0x10f>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    12d3 <main1+0x1c3>
movsbl -0x213(%rbp),%eax
movslq -0x8(%rbp),%rcx
movsbl -0x210(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
jge    12ac <main1+0x19c>
movslq -0x8(%rbp),%rax
movsbl -0x210(%rbp,%rax,1),%eax
ff
mov    %eax,-0x218(%rbp)
jmp    12b9 <main1+0x1a9>
movsbl -0x213(%rbp),%eax
mov    %eax,-0x218(%rbp)
mov    -0x218(%rbp),%eax
mov    %al,-0x213(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    126d <main1+0x15d>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    1340 <main1+0x230>
movsbl -0x214(%rbp),%eax
movslq -0x8(%rbp),%rcx
movsbl -0x210(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
jle    1319 <main1+0x209>
movslq -0x8(%rbp),%rax
movsbl -0x210(%rbp,%rax,1),%eax
ff
mov    %eax,-0x21c(%rbp)
jmp    1326 <main1+0x216>
movsbl -0x214(%rbp),%eax
mov    %eax,-0x21c(%rbp)
mov    -0x21c(%rbp),%eax
mov    %al,-0x214(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12da <main1+0x1ca>
movsbl -0x212(%rbp),%eax
movsbl -0x211(%rbp),%ecx
cmp    %ecx,%eax
je     135b <main1+0x24b>
call   1030 <abort@plt>
movsbl -0x213(%rbp),%eax
movsbl -0x2(%rbp),%ecx
cmp    %ecx,%eax
je     1373 <main1+0x263>
call   1030 <abort@plt>
movsbl -0x214(%rbp),%eax
movsbl -0x3(%rbp),%ecx
cmp    %ecx,%eax
je     138b <main1+0x27b>
call   1030 <abort@plt>
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x248,%rsp
xor    %ecx,%ecx
mov    $0x2,%r8b
xor    %r10d,%r10d
jmp    1166 <main1+0x56>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x1(%r10),%r9d
lea    0x1(%rcx),%eax
mov    %al,0x40(%rsp,%rcx,1)
add    $0x1,%r8b
cmp    %sil,%r9b
movzbl %sil,%esi
movzbl %r9b,%eax
cmovg  %eax,%esi
cmp    %dl,%al
movzbl %dl,%edx
cmovl  %eax,%edx
add    $0x1,%rcx
add    $0x1,%r10d
cmp    $0x100,%rcx
je     117b <main1+0x6b>
mov    %cl,0x140(%rsp,%rcx,1)
mov    %cl,0x40(%rsp,%rcx,1)
test   $0xf,%cl
je     1130 <main1+0x20>
mov    %ecx,%r9d
jmp    113f <main1+0x2f>
mov    $0x2,%r9d
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl 0x40(%rsp,%rax,1),%r10d
add    %r9d,%r10d
movzbl 0x140(%rsp,%rax,1),%r9d
movzbl 0x41(%rsp,%rax,1),%r11d
add    %r10d,%r11d
movzbl 0x141(%rsp,%rax,1),%ecx
add    %r9d,%ecx
sub    %ecx,%r11d
add    $0x2,%rax
movsbl %r11b,%r9d
cmp    $0x100,%rax
jne    1190 <main1+0x80>
movsbl %r8b,%eax
cmp    %eax,%r9d
jne    166f <main1+0x55f>
movzbl %dil,%eax
movd   %eax,%xmm0
punpcklbw %xmm0,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm2
movdqa 0x40(%rsp),%xmm13
movdqa 0x50(%rsp),%xmm6
movdqa 0x60(%rsp),%xmm5
movdqa 0x70(%rsp),%xmm4
movdqa %xmm2,%xmm0
pcmpgtb %xmm13,%xmm0
movdqa %xmm2,%xmm1
pand   %xmm0,%xmm1
pandn  %xmm13,%xmm0
por    %xmm1,%xmm0
movdqa %xmm2,%xmm1
pcmpgtb %xmm6,%xmm1
movdqa %xmm2,%xmm3
pand   %xmm1,%xmm3
movdqa %xmm6,0x10(%rsp)
pandn  %xmm6,%xmm1
por    %xmm3,%xmm1
movdqa %xmm0,%xmm3
pcmpgtb %xmm5,%xmm3
pand   %xmm3,%xmm0
movdqa %xmm5,0x20(%rsp)
pandn  %xmm5,%xmm3
por    %xmm0,%xmm3
movdqa %xmm1,%xmm0
pcmpgtb %xmm4,%xmm0
pand   %xmm0,%xmm1
movdqa %xmm4,0x30(%rsp)
pandn  %xmm4,%xmm0
por    %xmm1,%xmm0
movdqa 0x80(%rsp),%xmm9
movdqa 0x90(%rsp),%xmm1
movdqa %xmm3,%xmm4
pcmpgtb %xmm9,%xmm4
pand   %xmm4,%xmm3
pandn  %xmm9,%xmm4
por    %xmm3,%xmm4
movdqa %xmm0,%xmm5
pcmpgtb %xmm1,%xmm5
pand   %xmm5,%xmm0
movdqa %xmm1,(%rsp)
pandn  %xmm1,%xmm5
por    %xmm0,%xmm5
movdqa 0xa0(%rsp),%xmm10
movdqa 0xb0(%rsp),%xmm12
movdqa %xmm4,%xmm0
pcmpgtb %xmm10,%xmm0
pand   %xmm0,%xmm4
pandn  %xmm10,%xmm0
por    %xmm4,%xmm0
movdqa %xmm5,%xmm6
pcmpgtb %xmm12,%xmm6
pand   %xmm6,%xmm5
pandn  %xmm12,%xmm6
por    %xmm5,%xmm6
movdqa 0xc0(%rsp),%xmm11
movdqa 0xd0(%rsp),%xmm14
movdqa %xmm0,%xmm7
pcmpgtb %xmm11,%xmm7
pand   %xmm7,%xmm0
pandn  %xmm11,%xmm7
por    %xmm0,%xmm7
movdqa %xmm6,%xmm0
pcmpgtb %xmm14,%xmm0
pand   %xmm0,%xmm6
pandn  %xmm14,%xmm0
por    %xmm6,%xmm0
movdqa 0xe0(%rsp),%xmm5
movdqa 0xf0(%rsp),%xmm15
movdqa %xmm7,%xmm1
pcmpgtb %xmm5,%xmm1
pand   %xmm1,%xmm7
pandn  %xmm5,%xmm1
por    %xmm7,%xmm1
movdqa %xmm0,%xmm3
pcmpgtb %xmm15,%xmm3
pand   %xmm3,%xmm0
pandn  %xmm15,%xmm3
por    %xmm0,%xmm3
movdqa 0x100(%rsp),%xmm6
movdqa %xmm1,%xmm4
pcmpgtb %xmm6,%xmm4
pand   %xmm4,%xmm1
pandn  %xmm6,%xmm4
por    %xmm1,%xmm4
movdqa 0x110(%rsp),%xmm7
movdqa %xmm3,%xmm1
pcmpgtb %xmm7,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm7,%xmm1
por    %xmm3,%xmm1
movdqa 0x120(%rsp),%xmm0
movdqa %xmm4,%xmm3
pcmpgtb %xmm0,%xmm3
pand   %xmm3,%xmm4
pandn  %xmm0,%xmm3
por    %xmm4,%xmm3
movdqa 0x130(%rsp),%xmm8
movdqa %xmm1,%xmm4
pcmpgtb %xmm8,%xmm4
pand   %xmm4,%xmm1
pandn  %xmm8,%xmm4
por    %xmm1,%xmm4
movdqa %xmm3,%xmm1
pcmpgtb %xmm4,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm4,%xmm1
por    %xmm3,%xmm1
pshufd $0xee,%xmm1,%xmm3
movdqa %xmm1,%xmm4
pcmpgtb %xmm3,%xmm4
pand   %xmm4,%xmm1
pandn  %xmm3,%xmm4
por    %xmm1,%xmm4
pshufd $0x55,%xmm4,%xmm1
movdqa %xmm4,%xmm3
pcmpgtb %xmm1,%xmm3
pand   %xmm3,%xmm4
pandn  %xmm1,%xmm3
por    %xmm4,%xmm3
movdqa %xmm3,%xmm1
psrld  $0x10,%xmm1
movdqa %xmm3,%xmm4
pcmpgtb %xmm1,%xmm4
pand   %xmm4,%xmm3
pandn  %xmm1,%xmm4
por    %xmm3,%xmm4
movdqa %xmm4,%xmm1
psrlw  $0x8,%xmm1
movdqa %xmm4,%xmm3
pcmpgtb %xmm1,%xmm3
pand   %xmm3,%xmm4
pandn  %xmm1,%xmm3
por    %xmm4,%xmm3
movd   %xmm3,%eax
cmp    %sil,%al
jne    166f <main1+0x55f>
movdqa %xmm13,%xmm1
pcmpgtb %xmm2,%xmm1
movdqa %xmm2,%xmm3
pand   %xmm1,%xmm3
pandn  %xmm13,%xmm1
por    %xmm3,%xmm1
movdqa 0x10(%rsp),%xmm4
movdqa %xmm4,%xmm3
pcmpgtb %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm4,%xmm3
por    %xmm2,%xmm3
movdqa 0x20(%rsp),%xmm4
movdqa %xmm4,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm4,%xmm2
por    %xmm1,%xmm2
movdqa 0x30(%rsp),%xmm4
movdqa %xmm4,%xmm1
pcmpgtb %xmm3,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm4,%xmm1
por    %xmm3,%xmm1
movdqa %xmm9,%xmm3
pcmpgtb %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm9,%xmm3
por    %xmm2,%xmm3
movdqa (%rsp),%xmm4
movdqa %xmm4,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm4,%xmm2
por    %xmm1,%xmm2
movdqa %xmm10,%xmm1
pcmpgtb %xmm3,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm10,%xmm1
por    %xmm3,%xmm1
movdqa %xmm12,%xmm3
pcmpgtb %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm12,%xmm3
por    %xmm2,%xmm3
movdqa %xmm11,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm11,%xmm2
por    %xmm1,%xmm2
movdqa %xmm14,%xmm1
pcmpgtb %xmm3,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm14,%xmm1
por    %xmm3,%xmm1
movdqa %xmm5,%xmm3
pcmpgtb %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm5,%xmm3
por    %xmm2,%xmm3
movdqa %xmm15,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm15,%xmm2
por    %xmm1,%xmm2
movdqa %xmm6,%xmm1
pcmpgtb %xmm3,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm6,%xmm1
por    %xmm3,%xmm1
movdqa %xmm7,%xmm3
pcmpgtb %xmm2,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm7,%xmm3
por    %xmm2,%xmm3
movdqa %xmm0,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movdqa %xmm8,%xmm0
pcmpgtb %xmm3,%xmm0
pand   %xmm0,%xmm3
pandn  %xmm8,%xmm0
por    %xmm3,%xmm0
movdqa %xmm0,%xmm1
pcmpgtb %xmm2,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
pshufd $0xee,%xmm1,%xmm0
movdqa %xmm0,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm0,%xmm1
pcmpgtb %xmm2,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movdqa %xmm1,%xmm0
psrld  $0x10,%xmm0
movdqa %xmm0,%xmm2
pcmpgtb %xmm1,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movdqa %xmm2,%xmm0
psrlw  $0x8,%xmm0
movdqa %xmm0,%xmm1
pcmpgtb %xmm2,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movd   %xmm1,%eax
cmp    %dl,%al
jne    166f <main1+0x55f>
add    $0x248,%rsp
ret
call   1030 <abort@plt>

LLVM IR (-O0):
define void @main1(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i32
%8 = alloca [256 x i8]
%9 = alloca [256 x i8]
%10 = alloca i8
%11 = alloca i8
%12 = alloca i8
%13 = alloca i8
store i8 %0, i8* %4
store i8 %1, i8* %5
store i8 %2, i8* %6
store i8 2, i8* %10
store i8 2, i8* %11
%14 = load i8, i8* %4
store i8 %14, i8* %12
%15 = load i8, i8* %4
store i8 %15, i8* %13
store i8 2, i8* %10
store i32 0, i32* %7
br label %16
16: ; preds = %73, %3
%17 = load i32, i32* %7
%18 = icmp slt i32 %17, 256
br i1 %18, label %19, label %76
19: ; preds = %16
%20 = load i32, i32* %7
%21 = trunc i32 %20 to i8
%22 = load i32, i32* %7
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [256 x i8], [256 x i8]* %8, i64 0, i64 %23
store i8 %21, i8* %24
%25 = load i32, i32* %7
%26 = trunc i32 %25 to i8
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %28
store i8 %26, i8* %29
%30 = load i32, i32* %7
%31 = srem i32 %30, 16
%32 = icmp eq i32 %31, 0
br i1 %32, label %33, label %44
33: ; preds = %19
%34 = load i32, i32* %7
%35 = add nsw i32 %34, 1
%36 = trunc i32 %35 to i8
%37 = load i32, i32* %7
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %38
store i8 %36, i8* %39
%40 = load i8, i8* %10
%41 = sext i8 %40 to i32
%42 = add nsw i32 %41, 1
%43 = trunc i32 %42 to i8
store i8 %43, i8* %10
br label %44
44: ; preds = %33, %19
%45 = load i32, i32* %7
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %46
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = load i8, i8* %5
%51 = sext i8 %50 to i32
%52 = icmp sgt i32 %49, %51
br i1 %52, label %53, label %58
53: ; preds = %44
%54 = load i32, i32* %7
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %55
%57 = load i8, i8* %56
store i8 %57, i8* %5
br label %58
58: ; preds = %53, %44
%59 = load i32, i32* %7
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %60
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = load i8, i8* %6
%65 = sext i8 %64 to i32
%66 = icmp slt i32 %63, %65
br i1 %66, label %67, label %72
67: ; preds = %58
%68 = load i32, i32* %7
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %69
%71 = load i8, i8* %70
store i8 %71, i8* %6
br label %72
72: ; preds = %67, %58
br label %73
73: ; preds = %72
%74 = load i32, i32* %7
%75 = add nsw i32 %74, 1
store i32 %75, i32* %7
br label %16
76: ; preds = %16
store i32 0, i32* %7
br label %77
77: ; preds = %98, %76
%78 = load i32, i32* %7
%79 = icmp slt i32 %78, 256
br i1 %79, label %80, label %101
80: ; preds = %77
%81 = load i32, i32* %7
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %82
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = load i32, i32* %7
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [256 x i8], [256 x i8]* %8, i64 0, i64 %87
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = sub nsw i32 %85, %90
%92 = trunc i32 %91 to i8
%93 = sext i8 %92 to i32
%94 = load i8, i8* %11
%95 = sext i8 %94 to i32
%96 = add nsw i32 %95, %93
%97 = trunc i32 %96 to i8
store i8 %97, i8* %11
br label %98
98: ; preds = %80
%99 = load i32, i32* %7
%100 = add nsw i32 %99, 1
store i32 %100, i32* %7
br label %77
101: ; preds = %77
store i32 0, i32* %7
br label %102
102: ; preds = %126, %101
%103 = load i32, i32* %7
%104 = icmp slt i32 %103, 256
br i1 %104, label %105, label %129
105: ; preds = %102
%106 = load i8, i8* %12
%107 = sext i8 %106 to i32
%108 = load i32, i32* %7
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %109
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = icmp slt i32 %107, %112
br i1 %113, label %114, label %120
114: ; preds = %105
%115 = load i32, i32* %7
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %116
%118 = load i8, i8* %117
%119 = sext i8 %118 to i32
br label %123
120: ; preds = %105
%121 = load i8, i8* %12
%122 = sext i8 %121 to i32
br label %123
123: ; preds = %120, %114
%124 = phi i32 [ %119, %114 ], [ %122, %120 ]
%125 = trunc i32 %124 to i8
store i8 %125, i8* %12
br label %126
126: ; preds = %123
%127 = load i32, i32* %7
%128 = add nsw i32 %127, 1
store i32 %128, i32* %7
br label %102
129: ; preds = %102
store i32 0, i32* %7
br label %130
130: ; preds = %154, %129
%131 = load i32, i32* %7
%132 = icmp slt i32 %131, 256
br i1 %132, label %133, label %157
133: ; preds = %130
%134 = load i8, i8* %13
%135 = sext i8 %134 to i32
%136 = load i32, i32* %7
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = icmp sgt i32 %135, %140
br i1 %141, label %142, label %148
142: ; preds = %133
%143 = load i32, i32* %7
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [256 x i8], [256 x i8]* %9, i64 0, i64 %144
%146 = load i8, i8* %145
%147 = sext i8 %146 to i32
br label %151
148: ; preds = %133
%149 = load i8, i8* %13
%150 = sext i8 %149 to i32
br label %151
151: ; preds = %148, %142
%152 = phi i32 [ %147, %142 ], [ %150, %148 ]
%153 = trunc i32 %152 to i8
store i8 %153, i8* %13
br label %154
154: ; preds = %151
%155 = load i32, i32* %7
%156 = add nsw i32 %155, 1
store i32 %156, i32* %7
br label %130
157: ; preds = %130
%158 = load i8, i8* %11
%159 = sext i8 %158 to i32
%160 = load i8, i8* %10
%161 = sext i8 %160 to i32
%162 = icmp ne i32 %159, %161
br i1 %162, label %163, label %164
163: ; preds = %157
unreachable
164: ; preds = %157
%165 = load i8, i8* %12
%166 = sext i8 %165 to i32
%167 = load i8, i8* %5
%168 = sext i8 %167 to i32
%169 = icmp ne i32 %166, %168
br i1 %169, label %170, label %171
170: ; preds = %164
unreachable
171: ; preds = %164
%172 = load i8, i8* %13
%173 = sext i8 %172 to i32
%174 = load i8, i8* %6
%175 = sext i8 %174 to i32
%176 = icmp ne i32 %173, %175
br i1 %176, label %177, label %178
177: ; preds = %171
unreachable
178: ; preds = %171
ret void
}

LLVM IR (-O2):
define void @main1(i8 signext %0, i8 signext %1, i8 signext %2) {
%4 = alloca [256 x i8]
%5 = alloca [256 x i8]
%6 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 0
%7 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 0
br label %8
8: ; preds = %3, %22
%9 = phi i64 [ 0, %3 ], [ %29, %22 ]
%10 = phi i8 [ 2, %3 ], [ %24, %22 ]
%11 = phi i32 [ 0, %3 ], [ %30, %22 ]
%12 = phi i8 [ %2, %3 ], [ %28, %22 ]
%13 = phi i8 [ %1, %3 ], [ %26, %22 ]
%14 = trunc i32 %11 to i8
%15 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 %9
store i8 %14, i8* %15
%16 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 %9
store i8 %14, i8* %16
%17 = and i64 %9, 15
%18 = icmp eq i64 %17, 0
br i1 %18, label %19, label %22
19: ; preds = %8
%20 = add i8 %14, 1
store i8 %20, i8* %16
%21 = add i8 %10, 1
br label %22
22: ; preds = %19, %8
%23 = phi i8 [ %20, %19 ], [ %14, %8 ]
%24 = phi i8 [ %21, %19 ], [ %10, %8 ]
%25 = icmp sgt i8 %23, %13
%26 = select i1 %25, i8 %23, i8 %13
%27 = icmp slt i8 %23, %12
%28 = select i1 %27, i8 %23, i8 %12
tail call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
%29 = add nuw nsw i64 %9, 1
%30 = add nuw nsw i32 %11, 1
%31 = icmp eq i64 %29, 256
br i1 %31, label %203, label %8
32: ; preds = %203
%33 = insertelement <16 x i8> poison, i8 %0, i64 0
%34 = shufflevector <16 x i8> %33, <16 x i8> poison, <16 x i32> zeroinitializer
%35 = bitcast [256 x i8]* %5 to <16 x i8>*
%36 = load <16 x i8>, <16 x i8>* %35
%37 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 16
%38 = bitcast i8* %37 to <16 x i8>*
%39 = load <16 x i8>, <16 x i8>* %38
%40 = icmp slt <16 x i8> %34, %36
%41 = icmp slt <16 x i8> %34, %39
%42 = select <16 x i1> %40, <16 x i8> %36, <16 x i8> %34
%43 = select <16 x i1> %41, <16 x i8> %39, <16 x i8> %34
%44 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 32
%45 = bitcast i8* %44 to <16 x i8>*
%46 = load <16 x i8>, <16 x i8>* %45
%47 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 48
%48 = bitcast i8* %47 to <16 x i8>*
%49 = load <16 x i8>, <16 x i8>* %48
%50 = icmp slt <16 x i8> %42, %46
%51 = icmp slt <16 x i8> %43, %49
%52 = select <16 x i1> %50, <16 x i8> %46, <16 x i8> %42
%53 = select <16 x i1> %51, <16 x i8> %49, <16 x i8> %43
%54 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 64
%55 = bitcast i8* %54 to <16 x i8>*
%56 = load <16 x i8>, <16 x i8>* %55
%57 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 80
%58 = bitcast i8* %57 to <16 x i8>*
%59 = load <16 x i8>, <16 x i8>* %58
%60 = icmp slt <16 x i8> %52, %56
%61 = icmp slt <16 x i8> %53, %59
%62 = select <16 x i1> %60, <16 x i8> %56, <16 x i8> %52
%63 = select <16 x i1> %61, <16 x i8> %59, <16 x i8> %53
%64 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 96
%65 = bitcast i8* %64 to <16 x i8>*
%66 = load <16 x i8>, <16 x i8>* %65
%67 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 112
%68 = bitcast i8* %67 to <16 x i8>*
%69 = load <16 x i8>, <16 x i8>* %68
%70 = icmp slt <16 x i8> %62, %66
%71 = icmp slt <16 x i8> %63, %69
%72 = select <16 x i1> %70, <16 x i8> %66, <16 x i8> %62
%73 = select <16 x i1> %71, <16 x i8> %69, <16 x i8> %63
%74 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 128
%75 = bitcast i8* %74 to <16 x i8>*
%76 = load <16 x i8>, <16 x i8>* %75
%77 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 144
%78 = bitcast i8* %77 to <16 x i8>*
%79 = load <16 x i8>, <16 x i8>* %78
%80 = icmp slt <16 x i8> %72, %76
%81 = icmp slt <16 x i8> %73, %79
%82 = select <16 x i1> %80, <16 x i8> %76, <16 x i8> %72
%83 = select <16 x i1> %81, <16 x i8> %79, <16 x i8> %73
%84 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 160
%85 = bitcast i8* %84 to <16 x i8>*
%86 = load <16 x i8>, <16 x i8>* %85
%87 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 176
%88 = bitcast i8* %87 to <16 x i8>*
%89 = load <16 x i8>, <16 x i8>* %88
%90 = icmp slt <16 x i8> %82, %86
%91 = icmp slt <16 x i8> %83, %89
%92 = select <16 x i1> %90, <16 x i8> %86, <16 x i8> %82
%93 = select <16 x i1> %91, <16 x i8> %89, <16 x i8> %83
%94 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 192
%95 = bitcast i8* %94 to <16 x i8>*
%96 = load <16 x i8>, <16 x i8>* %95
%97 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 208
%98 = bitcast i8* %97 to <16 x i8>*
%99 = load <16 x i8>, <16 x i8>* %98
%100 = icmp slt <16 x i8> %92, %96
%101 = icmp slt <16 x i8> %93, %99
%102 = select <16 x i1> %100, <16 x i8> %96, <16 x i8> %92
%103 = select <16 x i1> %101, <16 x i8> %99, <16 x i8> %93
%104 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 224
%105 = bitcast i8* %104 to <16 x i8>*
%106 = load <16 x i8>, <16 x i8>* %105
%107 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 240
%108 = bitcast i8* %107 to <16 x i8>*
%109 = load <16 x i8>, <16 x i8>* %108
%110 = icmp slt <16 x i8> %102, %106
%111 = icmp slt <16 x i8> %103, %109
%112 = select <16 x i1> %110, <16 x i8> %106, <16 x i8> %102
%113 = select <16 x i1> %111, <16 x i8> %109, <16 x i8> %103
%114 = icmp sgt <16 x i8> %112, %113
%115 = select <16 x i1> %114, <16 x i8> %112, <16 x i8> %113
%116 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %115)
%117 = insertelement <16 x i8> poison, i8 %0, i64 0
%118 = shufflevector <16 x i8> %117, <16 x i8> poison, <16 x i32> zeroinitializer
%119 = bitcast [256 x i8]* %5 to <16 x i8>*
%120 = load <16 x i8>, <16 x i8>* %119
%121 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 16
%122 = bitcast i8* %121 to <16 x i8>*
%123 = load <16 x i8>, <16 x i8>* %122
%124 = icmp sgt <16 x i8> %118, %120
%125 = icmp sgt <16 x i8> %118, %123
%126 = select <16 x i1> %124, <16 x i8> %120, <16 x i8> %118
%127 = select <16 x i1> %125, <16 x i8> %123, <16 x i8> %118
%128 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 32
%129 = bitcast i8* %128 to <16 x i8>*
%130 = load <16 x i8>, <16 x i8>* %129
%131 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 48
%132 = bitcast i8* %131 to <16 x i8>*
%133 = load <16 x i8>, <16 x i8>* %132
%134 = icmp sgt <16 x i8> %126, %130
%135 = icmp sgt <16 x i8> %127, %133
%136 = select <16 x i1> %134, <16 x i8> %130, <16 x i8> %126
%137 = select <16 x i1> %135, <16 x i8> %133, <16 x i8> %127
%138 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 64
%139 = bitcast i8* %138 to <16 x i8>*
%140 = load <16 x i8>, <16 x i8>* %139
%141 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 80
%142 = bitcast i8* %141 to <16 x i8>*
%143 = load <16 x i8>, <16 x i8>* %142
%144 = icmp sgt <16 x i8> %136, %140
%145 = icmp sgt <16 x i8> %137, %143
%146 = select <16 x i1> %144, <16 x i8> %140, <16 x i8> %136
%147 = select <16 x i1> %145, <16 x i8> %143, <16 x i8> %137
%148 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 96
%149 = bitcast i8* %148 to <16 x i8>*
%150 = load <16 x i8>, <16 x i8>* %149
%151 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 112
%152 = bitcast i8* %151 to <16 x i8>*
%153 = load <16 x i8>, <16 x i8>* %152
%154 = icmp sgt <16 x i8> %146, %150
%155 = icmp sgt <16 x i8> %147, %153
%156 = select <16 x i1> %154, <16 x i8> %150, <16 x i8> %146
%157 = select <16 x i1> %155, <16 x i8> %153, <16 x i8> %147
%158 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 128
%159 = bitcast i8* %158 to <16 x i8>*
%160 = load <16 x i8>, <16 x i8>* %159
%161 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 144
%162 = bitcast i8* %161 to <16 x i8>*
%163 = load <16 x i8>, <16 x i8>* %162
%164 = icmp sgt <16 x i8> %156, %160
%165 = icmp sgt <16 x i8> %157, %163
%166 = select <16 x i1> %164, <16 x i8> %160, <16 x i8> %156
%167 = select <16 x i1> %165, <16 x i8> %163, <16 x i8> %157
%168 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 160
%169 = bitcast i8* %168 to <16 x i8>*
%170 = load <16 x i8>, <16 x i8>* %169
%171 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 176
%172 = bitcast i8* %171 to <16 x i8>*
%173 = load <16 x i8>, <16 x i8>* %172
%174 = icmp sgt <16 x i8> %166, %170
%175 = icmp sgt <16 x i8> %167, %173
%176 = select <16 x i1> %174, <16 x i8> %170, <16 x i8> %166
%177 = select <16 x i1> %175, <16 x i8> %173, <16 x i8> %167
%178 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 192
%179 = bitcast i8* %178 to <16 x i8>*
%180 = load <16 x i8>, <16 x i8>* %179
%181 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 208
%182 = bitcast i8* %181 to <16 x i8>*
%183 = load <16 x i8>, <16 x i8>* %182
%184 = icmp sgt <16 x i8> %176, %180
%185 = icmp sgt <16 x i8> %177, %183
%186 = select <16 x i1> %184, <16 x i8> %180, <16 x i8> %176
%187 = select <16 x i1> %185, <16 x i8> %183, <16 x i8> %177
%188 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 224
%189 = bitcast i8* %188 to <16 x i8>*
%190 = load <16 x i8>, <16 x i8>* %189
%191 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 240
%192 = bitcast i8* %191 to <16 x i8>*
%193 = load <16 x i8>, <16 x i8>* %192
%194 = icmp sgt <16 x i8> %186, %190
%195 = icmp sgt <16 x i8> %187, %193
%196 = select <16 x i1> %194, <16 x i8> %190, <16 x i8> %186
%197 = select <16 x i1> %195, <16 x i8> %193, <16 x i8> %187
%198 = icmp slt <16 x i8> %196, %197
%199 = select <16 x i1> %198, <16 x i8> %196, <16 x i8> %197
%200 = call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %199)
%201 = sext i8 %24 to i32
%202 = icmp eq i32 %225, %201
br i1 %202, label %228, label %227
203: ; preds = %22, %203
%204 = phi i64 [ %223, %203 ], [ 0, %22 ]
%205 = phi i32 [ %225, %203 ], [ 2, %22 ]
%206 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 %204
%207 = load i8, i8* %206
%208 = zext i8 %207 to i32
%209 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 %204
%210 = load i8, i8* %209
%211 = zext i8 %210 to i32
%212 = add nsw i32 %205, %208
%213 = or i64 %204, 1
%214 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 %213
%215 = load i8, i8* %214
%216 = zext i8 %215 to i32
%217 = getelementptr inbounds [256 x i8], [256 x i8]* %4, i64 0, i64 %213
%218 = load i8, i8* %217
%219 = zext i8 %218 to i32
%220 = add nsw i32 %212, %216
%221 = add nuw nsw i32 %211, %219
%222 = sub nsw i32 %220, %221
%223 = add nuw nsw i64 %204, 2
%224 = shl i32 %222, 24
%225 = ashr exact i32 %224, 24
%226 = icmp eq i64 %223, 256
br i1 %226, label %32, label %203
227: ; preds = %32
tail call void @abort()
unreachable
228: ; preds = %32
%229 = icmp eq i8 %116, %26
br i1 %229, label %231, label %230
230: ; preds = %228
tail call void @abort()
unreachable
231: ; preds = %228
%232 = icmp eq i8 %200, %28
br i1 %232, label %234, label %233
233: ; preds = %231
tail call void @abort()
unreachable
234: ; preds = %231
ret void
}