unsigned char opt_med7_uint8(unsigned char *p, int n) {
  {
    if ((p[0]) > (p[5])) {
      unsigned char temp = ((p[0]));
      ((p[0])) = ((p[5]));
      ((p[5])) = temp;
    };
  };
  {
    if ((p[0]) > (p[3])) {
      unsigned char temp = ((p[0]));
      ((p[0])) = ((p[3]));
      ((p[3])) = temp;
    };
  };
  {
    if ((p[1]) > (p[6])) {
      unsigned char temp = ((p[1]));
      ((p[1])) = ((p[6]));
      ((p[6])) = temp;
    };
  };
  {
    if ((p[2]) > (p[4])) {
      unsigned char temp = ((p[2]));
      ((p[2])) = ((p[4]));
      ((p[4])) = temp;
    };
  };
  {
    if ((p[0]) > (p[1])) {
      unsigned char temp = ((p[0]));
      ((p[0])) = ((p[1]));
      ((p[1])) = temp;
    };
  };
  {
    if ((p[3]) > (p[5])) {
      unsigned char temp = ((p[3]));
      ((p[3])) = ((p[5]));
      ((p[5])) = temp;
    };
  };
  {
    if ((p[2]) > (p[6])) {
      unsigned char temp = ((p[2]));
      ((p[2])) = ((p[6]));
      ((p[6])) = temp;
    };
  };
  {
    if ((p[2]) > (p[3])) {
      unsigned char temp = ((p[2]));
      ((p[2])) = ((p[3]));
      ((p[3])) = temp;
    };
  };
  {
    if ((p[3]) > (p[6])) {
      unsigned char temp = ((p[3]));
      ((p[3])) = ((p[6]));
      ((p[6])) = temp;
    };
  };
  {
    if ((p[4]) > (p[5])) {
      unsigned char temp = ((p[4]));
      ((p[4])) = ((p[5]));
      ((p[5])) = temp;
    };
  };
  {
    if ((p[1]) > (p[4])) {
      unsigned char temp = ((p[1]));
      ((p[1])) = ((p[4]));
      ((p[4])) = temp;
    };
  };
  {
    if ((p[1]) > (p[3])) {
      unsigned char temp = ((p[1]));
      ((p[1])) = ((p[3]));
      ((p[3])) = temp;
    };
  };
  {
    if ((p[3]) > (p[4])) {
      unsigned char temp = ((p[3]));
      ((p[3])) = ((p[4]));
      ((p[4])) = temp;
    };
  };
  return (p[3]);
}


x86 assembly (clang, -O0):
<opt_med7_uint8>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
cmp    %ecx,%eax
jle    1142 <opt_med7_uint8+0x42>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0xd(%rbp)
mov    -0x8(%rbp),%rax
mov    0x5(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0xd(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
cmp    %ecx,%eax
jle    1179 <opt_med7_uint8+0x79>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0xe(%rbp)
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0xe(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
cmp    %ecx,%eax
jle    11b3 <opt_med7_uint8+0xb3>
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%al
mov    %al,-0xf(%rbp)
mov    -0x8(%rbp),%rax
mov    0x6(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0xf(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
cmp    %ecx,%eax
jle    11ed <opt_med7_uint8+0xed>
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%al
mov    %al,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x10(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
cmp    %ecx,%eax
jle    1224 <opt_med7_uint8+0x124>
mov    -0x8(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x11(%rbp)
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x11(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
cmp    %ecx,%eax
jle    125e <opt_med7_uint8+0x15e>
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%al
mov    %al,-0x12(%rbp)
mov    -0x8(%rbp),%rax
mov    0x5(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x12(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
cmp    %ecx,%eax
jle    1298 <opt_med7_uint8+0x198>
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%al
mov    %al,-0x13(%rbp)
mov    -0x8(%rbp),%rax
mov    0x6(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x13(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
cmp    %ecx,%eax
jle    12d2 <opt_med7_uint8+0x1d2>
mov    -0x8(%rbp),%rax
mov    0x2(%rax),%al
mov    %al,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x14(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
cmp    %ecx,%eax
jle    130c <opt_med7_uint8+0x20c>
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%al
mov    %al,-0x15(%rbp)
mov    -0x8(%rbp),%rax
mov    0x6(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x15(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
cmp    %ecx,%eax
jle    1346 <opt_med7_uint8+0x246>
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%al
mov    %al,-0x16(%rbp)
mov    -0x8(%rbp),%rax
mov    0x5(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x16(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
cmp    %ecx,%eax
jle    1380 <opt_med7_uint8+0x280>
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%al
mov    %al,-0x17(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x17(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
cmp    %ecx,%eax
jle    13ba <opt_med7_uint8+0x2ba>
mov    -0x8(%rbp),%rax
mov    0x1(%rax),%al
mov    %al,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x18(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
cmp    %ecx,%eax
jle    13f4 <opt_med7_uint8+0x2f4>
mov    -0x8(%rbp),%rax
mov    0x3(%rax),%al
mov    %al,-0x19(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x19(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<opt_med7_uint8>:
mov    (%rdi),%cl
mov    0x5(%rdi),%al
cmp    %al,%cl
jbe    1112 <opt_med7_uint8+0x12>
mov    %al,(%rdi)
mov    %cl,0x5(%rdi)
mov    %ecx,%esi
jmp    1116 <opt_med7_uint8+0x16>
mov    %eax,%esi
mov    %ecx,%eax
mov    0x3(%rdi),%r10b
cmp    %r10b,%al
jbe    112a <opt_med7_uint8+0x2a>
mov    %r10b,(%rdi)
mov    %al,0x3(%rdi)
mov    %eax,%r9d
jmp    1130 <opt_med7_uint8+0x30>
mov    %r10d,%r9d
mov    %eax,%r10d
mov    0x1(%rdi),%al
mov    0x6(%rdi),%dl
cmp    %dl,%al
jbe    1145 <opt_med7_uint8+0x45>
mov    %dl,0x1(%rdi)
mov    %al,0x6(%rdi)
mov    %eax,%r11d
jmp    114a <opt_med7_uint8+0x4a>
mov    %edx,%r11d
mov    %eax,%edx
mov    0x2(%rdi),%al
mov    0x4(%rdi),%cl
cmp    %cl,%al
jbe    11ab <opt_med7_uint8+0xab>
mov    %cl,0x2(%rdi)
mov    %al,0x4(%rdi)
mov    %eax,%r8d
cmp    %dl,%r10b
ja     11b5 <opt_med7_uint8+0xb5>
mov    %edx,%r10d
cmp    %sil,%r9b
ja     11c0 <opt_med7_uint8+0xc0>
mov    %esi,%edx
mov    %r9d,%esi
cmp    %r11b,%cl
ja     11d0 <opt_med7_uint8+0xd0>
mov    %r11d,%r9d
mov    %ecx,%r11d
cmp    %sil,%r11b
ja     11df <opt_med7_uint8+0xdf>
mov    %esi,%r11d
cmp    %r9b,%r11b
ja     11ec <opt_med7_uint8+0xec>
mov    %r11d,%r9d
cmp    %dl,%r8b
ja     11f9 <opt_med7_uint8+0xf9>
mov    %r8d,%edx
cmp    %dl,%r10b
ja     1205 <opt_med7_uint8+0x105>
mov    %edx,%eax
mov    %r10d,%edx
cmp    %r9b,%dl
ja     1214 <opt_med7_uint8+0x114>
mov    %r9d,%edx
cmp    %al,%dl
ja     121f <opt_med7_uint8+0x11f>
mov    %edx,%eax
ret
mov    %ecx,%r8d
mov    %eax,%ecx
cmp    %dl,%r10b
jbe    1162 <opt_med7_uint8+0x62>
mov    %dl,(%rdi)
mov    %r10b,0x1(%rdi)
cmp    %sil,%r9b
jbe    116a <opt_med7_uint8+0x6a>
mov    %sil,0x3(%rdi)
mov    %r9b,0x5(%rdi)
mov    %r9d,%edx
cmp    %r11b,%cl
jbe    1174 <opt_med7_uint8+0x74>
mov    %r11b,0x2(%rdi)
mov    %cl,0x6(%rdi)
mov    %ecx,%r9d
cmp    %sil,%r11b
jbe    117f <opt_med7_uint8+0x7f>
mov    %sil,0x2(%rdi)
mov    %r11b,0x3(%rdi)
cmp    %r9b,%r11b
jbe    1187 <opt_med7_uint8+0x87>
mov    %r9b,0x3(%rdi)
mov    %r11b,0x6(%rdi)
cmp    %dl,%r8b
jbe    118f <opt_med7_uint8+0x8f>
mov    %dl,0x4(%rdi)
mov    %r8b,0x5(%rdi)
cmp    %dl,%r10b
jbe    1197 <opt_med7_uint8+0x97>
mov    %dl,0x1(%rdi)
mov    %r10b,0x4(%rdi)
mov    %r10d,%eax
cmp    %r9b,%dl
jbe    11a1 <opt_med7_uint8+0xa1>
mov    %r9b,0x1(%rdi)
mov    %dl,0x3(%rdi)
cmp    %al,%dl
jbe    11a8 <opt_med7_uint8+0xa8>
mov    %al,0x3(%rdi)
mov    %dl,0x4(%rdi)
ret

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

LLVM IR (-O2):
define zeroext i8 @opt_med7_uint8(i8* nocapture %0, i32 %1) {
%3 = load i8, i8* %0
%4 = getelementptr inbounds i8, i8* %0, i64 5
%5 = load i8, i8* %4
%6 = icmp ugt i8 %3, %5
br i1 %6, label %7, label %8
7: ; preds = %2
store i8 %5, i8* %0
store i8 %3, i8* %4
br label %8
8: ; preds = %7, %2
%9 = phi i8 [ %3, %7 ], [ %5, %2 ]
%10 = phi i8 [ %5, %7 ], [ %3, %2 ]
%11 = getelementptr inbounds i8, i8* %0, i64 3
%12 = load i8, i8* %11
%13 = icmp ugt i8 %10, %12
br i1 %13, label %14, label %15
14: ; preds = %8
store i8 %12, i8* %0
store i8 %10, i8* %11
br label %15
15: ; preds = %14, %8
%16 = phi i8 [ %10, %14 ], [ %12, %8 ]
%17 = phi i8 [ %12, %14 ], [ %10, %8 ]
%18 = getelementptr inbounds i8, i8* %0, i64 1
%19 = load i8, i8* %18
%20 = getelementptr inbounds i8, i8* %0, i64 6
%21 = load i8, i8* %20
%22 = icmp ugt i8 %19, %21
br i1 %22, label %23, label %24
23: ; preds = %15
store i8 %21, i8* %18
store i8 %19, i8* %20
br label %24
24: ; preds = %23, %15
%25 = phi i8 [ %19, %23 ], [ %21, %15 ]
%26 = phi i8 [ %21, %23 ], [ %19, %15 ]
%27 = getelementptr inbounds i8, i8* %0, i64 2
%28 = load i8, i8* %27
%29 = getelementptr inbounds i8, i8* %0, i64 4
%30 = load i8, i8* %29
%31 = icmp ugt i8 %28, %30
br i1 %31, label %32, label %33
32: ; preds = %24
store i8 %30, i8* %27
store i8 %28, i8* %29
br label %33
33: ; preds = %32, %24
%34 = phi i8 [ %28, %32 ], [ %30, %24 ]
%35 = phi i8 [ %30, %32 ], [ %28, %24 ]
%36 = icmp ugt i8 %17, %26
br i1 %36, label %37, label %38
37: ; preds = %33
store i8 %26, i8* %0
store i8 %17, i8* %18
br label %38
38: ; preds = %37, %33
%39 = phi i8 [ %17, %37 ], [ %26, %33 ]
%40 = icmp ugt i8 %16, %9
br i1 %40, label %41, label %42
41: ; preds = %38
store i8 %9, i8* %11
store i8 %16, i8* %4
br label %42
42: ; preds = %41, %38
%43 = phi i8 [ %16, %41 ], [ %9, %38 ]
%44 = phi i8 [ %9, %41 ], [ %16, %38 ]
%45 = icmp ugt i8 %35, %25
br i1 %45, label %46, label %47
46: ; preds = %42
store i8 %25, i8* %27
store i8 %35, i8* %20
br label %47
47: ; preds = %46, %42
%48 = phi i8 [ %35, %46 ], [ %25, %42 ]
%49 = phi i8 [ %25, %46 ], [ %35, %42 ]
%50 = icmp ugt i8 %49, %44
br i1 %50, label %51, label %52
51: ; preds = %47
store i8 %44, i8* %27
store i8 %49, i8* %11
br label %52
52: ; preds = %51, %47
%53 = phi i8 [ %49, %51 ], [ %44, %47 ]
%54 = icmp ugt i8 %53, %48
br i1 %54, label %55, label %56
55: ; preds = %52
store i8 %48, i8* %11
store i8 %53, i8* %20
br label %56
56: ; preds = %55, %52
%57 = phi i8 [ %48, %55 ], [ %53, %52 ]
%58 = icmp ugt i8 %34, %43
br i1 %58, label %59, label %60
59: ; preds = %56
store i8 %43, i8* %29
store i8 %34, i8* %4
br label %60
60: ; preds = %59, %56
%61 = phi i8 [ %43, %59 ], [ %34, %56 ]
%62 = icmp ugt i8 %39, %61
br i1 %62, label %63, label %64
63: ; preds = %60
store i8 %61, i8* %18
store i8 %39, i8* %29
br label %64
64: ; preds = %63, %60
%65 = phi i8 [ %39, %63 ], [ %61, %60 ]
%66 = phi i8 [ %61, %63 ], [ %39, %60 ]
%67 = icmp ugt i8 %66, %57
br i1 %67, label %68, label %69
68: ; preds = %64
store i8 %57, i8* %18
store i8 %66, i8* %11
br label %69
69: ; preds = %68, %64
%70 = phi i8 [ %66, %68 ], [ %57, %64 ]
%71 = icmp ugt i8 %70, %65
br i1 %71, label %72, label %73
72: ; preds = %69
store i8 %65, i8* %11
store i8 %70, i8* %29
br label %73
73: ; preds = %72, %69
%74 = phi i8 [ %65, %72 ], [ %70, %69 ]
ret i8 %74
}