#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 scalar_t__ i3;
typedef scalar_t__ i2;
typedef scalar_t__ i1;
typedef scalar_t__ i0;

/* Variables and functions */
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, int, char *);
int /*<<< orphan*/ stderr;
void scale4bw(unsigned char *ibm, unsigned char *obm, long unsigned int *w,
              long unsigned int *l) {
  register unsigned long x;
  register unsigned char *i0, *i1, *i2, *i3;
  register unsigned char *end, *i0end;
  unsigned rowwid;
  unsigned rrowwid;
  unsigned y;
  unsigned char *bm = obm;
  rowwid = ((*w + 7) / 8);
  rrowwid = (rowwid / 4) * 4;
  i0 = ibm;
  i0end = i0 + rrowwid;
  i1 = i0 + rowwid;
  i2 = i1 + rowwid;
  i3 = i2 + rowwid;
  end = i0 + (rowwid * *l);
  *w = (i0end - i0) * (8 / 4);
  *l /= 4;
  y = 0;
  do {
    if (!(sizeof(long) * 8 == 32)) {
      fprintf(stderr, "ASSERT fails at %d %s\n", 371,
              "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
              "2022-01-22/02-19-57/repos/ffzg/PhiloLogic3/refs/heads/master/"
              "goodies/dlxs-utils/tif2web-1.0.3/scale.c");
      exit(1);
    }
  } while (0);
  while (i0 < end) {
    unsigned long w0, w1, w2, w3;
    int nb;
    int pos;
    unsigned char b;
    switch ((unsigned long)(i0)&3) {
    case 0:
      w0 = *(unsigned long *)(i0);
      i0 += sizeof(unsigned long);
      break;
    case 1:
      w0 = *(unsigned long *)((char *)(i0)-1) << 8;
      w0 |= *(unsigned long *)((char *)(i0) + 3) >> 24;
      i0 += sizeof(unsigned long);
      break;
    case 2:
      w0 = *(unsigned long *)((char *)(i0)-2) << 16;
      w0 |= *(unsigned long *)((char *)(i0) + 2) >> 16;
      i0 += sizeof(unsigned long);
      break;
    case 3:
      w0 = *(unsigned long *)((char *)(i0)-3) << 24;
      w0 |= *(unsigned long *)((char *)(i0) + 1) >> 8;
      i0 += sizeof(unsigned long);
      break;
    };
    switch ((unsigned long)(i1)&3) {
    case 0:
      w1 = *(unsigned long *)(i1);
      i1 += sizeof(unsigned long);
      break;
    case 1:
      w1 = *(unsigned long *)((char *)(i1)-1) << 8;
      w1 |= *(unsigned long *)((char *)(i1) + 3) >> 24;
      i1 += sizeof(unsigned long);
      break;
    case 2:
      w1 = *(unsigned long *)((char *)(i1)-2) << 16;
      w1 |= *(unsigned long *)((char *)(i1) + 2) >> 16;
      i1 += sizeof(unsigned long);
      break;
    case 3:
      w1 = *(unsigned long *)((char *)(i1)-3) << 24;
      w1 |= *(unsigned long *)((char *)(i1) + 1) >> 8;
      i1 += sizeof(unsigned long);
      break;
    };
    switch ((unsigned long)(i2)&3) {
    case 0:
      w2 = *(unsigned long *)(i2);
      i2 += sizeof(unsigned long);
      break;
    case 1:
      w2 = *(unsigned long *)((char *)(i2)-1) << 8;
      w2 |= *(unsigned long *)((char *)(i2) + 3) >> 24;
      i2 += sizeof(unsigned long);
      break;
    case 2:
      w2 = *(unsigned long *)((char *)(i2)-2) << 16;
      w2 |= *(unsigned long *)((char *)(i2) + 2) >> 16;
      i2 += sizeof(unsigned long);
      break;
    case 3:
      w2 = *(unsigned long *)((char *)(i2)-3) << 24;
      w2 |= *(unsigned long *)((char *)(i2) + 1) >> 8;
      i2 += sizeof(unsigned long);
      break;
    };
    switch ((unsigned long)(i3)&3) {
    case 0:
      w3 = *(unsigned long *)(i3);
      i3 += sizeof(unsigned long);
      break;
    case 1:
      w3 = *(unsigned long *)((char *)(i3)-1) << 8;
      w3 |= *(unsigned long *)((char *)(i3) + 3) >> 24;
      i3 += sizeof(unsigned long);
      break;
    case 2:
      w3 = *(unsigned long *)((char *)(i3)-2) << 16;
      w3 |= *(unsigned long *)((char *)(i3) + 2) >> 16;
      i3 += sizeof(unsigned long);
      break;
    case 3:
      w3 = *(unsigned long *)((char *)(i3)-3) << 24;
      w3 |= *(unsigned long *)((char *)(i3) + 1) >> 8;
      i3 += sizeof(unsigned long);
      break;
    };
    b = 0;
    for (pos = 0; pos < sizeof(long) * 8; pos += 4) {
      x = (((w0) >> (28 - (pos))) & 0xf);
      x |= (((w1) >> (28 - (pos))) & 0xf);
      x |= (((w2) >> (28 - (pos))) & 0xf);
      x |= (((w3) >> (28 - (pos))) & 0xf);
      if (x)
        b |= 1 << (7 - (pos >> 2));
    }
    *obm++ = b;
    if (i0 >= i0end) {
      y += 4;
      i0 = ibm + (y * rowwid);
      i0end = i0 + rrowwid;
      i1 = i0 + rowwid;
      i2 = i1 + rowwid;
      i3 = i2 + rowwid;
    }
  }
}


x86 assembly (clang, -O0):
<scale4bw>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
add    $0x7,%rax
shr    $0x3,%rax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
shr    $0x2,%eax
shl    $0x2,%eax
mov    %eax,-0x60(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x5c(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x5c(%rbp),%ecx
mov    -0x20(%rbp),%rdx
imul   (%rdx),%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rcx
mov    -0x30(%rbp),%rax
sub    %rax,%rcx
shl    $0x1,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
shr    $0x2,%rcx
mov    %rcx,(%rax)
movl   $0x0,-0x64(%rbp)
mov    0x2df7(%rip),%rax
mov    (%rax),%edi
lea    0xe0e(%rip),%rsi
mov    $0x173,%edx
lea    0xe19(%rip),%rcx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<scale4bw>:
push   %rax
mov    (%rdx),%rax
add    $0x7,%rax
shr    $0x2,%rax
movabs $0x1fffffff8,%rsi
and    %rax,%rsi
mov    %rsi,(%rdx)
shrq   $0x2,(%rcx)
mov    0x2e99(%rip),%rax
mov    (%rax),%edi
lea    0xeb0(%rip),%rsi
lea    0xec0(%rip),%rcx
mov    $0x173,%edx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [23 x i8] c"ASSERT fails at %d %s\0A\00"
@.str.1 = [166 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/ffzg/PhiloLogic3/refs/heads/master/goodies/dlxs-utils/tif2web-1.0.3/scale.c\00"
define void @scale4bw(i8* %0, i8* %1, i64* %2, i64* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i64*
%8 = alloca i64*
%9 = alloca i64
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i8*
%20 = alloca i64
%21 = alloca i64
%22 = alloca i64
%23 = alloca i64
%24 = alloca i32
%25 = alloca i32
%26 = alloca i8
store i8* %0, i8** %5
store i8* %1, i8** %6
store i64* %2, i64** %7
store i64* %3, i64** %8
%27 = load i8*, i8** %6
store i8* %27, i8** %19
%28 = load i64*, i64** %7
%29 = load i64, i64* %28
%30 = add i64 %29, 7
%31 = udiv i64 %30, 8
%32 = trunc i64 %31 to i32
store i32 %32, i32* %16
%33 = load i32, i32* %16
%34 = udiv i32 %33, 4
%35 = mul i32 %34, 4
store i32 %35, i32* %17
%36 = load i8*, i8** %5
store i8* %36, i8** %10
%37 = load i8*, i8** %10
%38 = load i32, i32* %17
%39 = zext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %37, i64 %39
store i8* %40, i8** %15
%41 = load i8*, i8** %10
%42 = load i32, i32* %16
%43 = zext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %41, i64 %43
store i8* %44, i8** %11
%45 = load i8*, i8** %11
%46 = load i32, i32* %16
%47 = zext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
store i8* %48, i8** %12
%49 = load i8*, i8** %12
%50 = load i32, i32* %16
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %49, i64 %51
store i8* %52, i8** %13
%53 = load i8*, i8** %10
%54 = load i32, i32* %16
%55 = zext i32 %54 to i64
%56 = load i64*, i64** %8
%57 = load i64, i64* %56
%58 = mul i64 %55, %57
%59 = getelementptr inbounds i8, i8* %53, i64 %58
store i8* %59, i8** %14
%60 = load i8*, i8** %15
%61 = load i8*, i8** %10
%62 = ptrtoint i8* %60 to i64
%63 = ptrtoint i8* %61 to i64
%64 = sub i64 %62, %63
%65 = mul nsw i64 %64, 2
%66 = load i64*, i64** %7
store i64 %65, i64* %66
%67 = load i64*, i64** %8
%68 = load i64, i64* %67
%69 = udiv i64 %68, 4
store i64 %69, i64* %67
store i32 0, i32* %18
br label %70
70: ; preds = %4
%71 = load i32, i32* @stderr
%72 = call i32 @fprintf(i32 %71, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), i32 371, i8* getelementptr inbounds ([166 x i8], [166 x i8]* @.str.1, i64 0, i64 0))
%73 = call i32 @exit(i32 1)
unreachable
74: ; No predecessors!
br label %75
75: ; preds = %382, %74
%76 = load i8*, i8** %10
%77 = load i8*, i8** %14
%78 = icmp ult i8* %76, %77
br i1 %78, label %79, label %383
79: ; preds = %75
%80 = load i8*, i8** %10
%81 = ptrtoint i8* %80 to i64
%82 = and i64 %81, 3
switch i64 %82, label %134 [
i64 0, label %83
i64 1, label %89
i64 2, label %104
i64 3, label %119
]
83: ; preds = %79
%84 = load i8*, i8** %10
%85 = bitcast i8* %84 to i64*
%86 = load i64, i64* %85
store i64 %86, i64* %20
%87 = load i8*, i8** %10
%88 = getelementptr inbounds i8, i8* %87, i64 8
store i8* %88, i8** %10
br label %134
89: ; preds = %79
%90 = load i8*, i8** %10
%91 = getelementptr inbounds i8, i8* %90, i64 -1
%92 = bitcast i8* %91 to i64*
%93 = load i64, i64* %92
%94 = shl i64 %93, 8
store i64 %94, i64* %20
%95 = load i8*, i8** %10
%96 = getelementptr inbounds i8, i8* %95, i64 3
%97 = bitcast i8* %96 to i64*
%98 = load i64, i64* %97
%99 = lshr i64 %98, 24
%100 = load i64, i64* %20
%101 = or i64 %100, %99
store i64 %101, i64* %20
%102 = load i8*, i8** %10
%103 = getelementptr inbounds i8, i8* %102, i64 8
store i8* %103, i8** %10
br label %134
104: ; preds = %79
%105 = load i8*, i8** %10
%106 = getelementptr inbounds i8, i8* %105, i64 -2
%107 = bitcast i8* %106 to i64*
%108 = load i64, i64* %107
%109 = shl i64 %108, 16
store i64 %109, i64* %20
%110 = load i8*, i8** %10
%111 = getelementptr inbounds i8, i8* %110, i64 2
%112 = bitcast i8* %111 to i64*
%113 = load i64, i64* %112
%114 = lshr i64 %113, 16
%115 = load i64, i64* %20
%116 = or i64 %115, %114
store i64 %116, i64* %20
%117 = load i8*, i8** %10
%118 = getelementptr inbounds i8, i8* %117, i64 8
store i8* %118, i8** %10
br label %134
119: ; preds = %79
%120 = load i8*, i8** %10
%121 = getelementptr inbounds i8, i8* %120, i64 -3
%122 = bitcast i8* %121 to i64*
%123 = load i64, i64* %122
%124 = shl i64 %123, 24
store i64 %124, i64* %20
%125 = load i8*, i8** %10
%126 = getelementptr inbounds i8, i8* %125, i64 1
%127 = bitcast i8* %126 to i64*
%128 = load i64, i64* %127
%129 = lshr i64 %128, 8
%130 = load i64, i64* %20
%131 = or i64 %130, %129
store i64 %131, i64* %20
%132 = load i8*, i8** %10
%133 = getelementptr inbounds i8, i8* %132, i64 8
store i8* %133, i8** %10
br label %134
134: ; preds = %79, %119, %104, %89, %83
%135 = load i8*, i8** %11
%136 = ptrtoint i8* %135 to i64
%137 = and i64 %136, 3
switch i64 %137, label %189 [
i64 0, label %138
i64 1, label %144
i64 2, label %159
i64 3, label %174
]
138: ; preds = %134
%139 = load i8*, i8** %11
%140 = bitcast i8* %139 to i64*
%141 = load i64, i64* %140
store i64 %141, i64* %21
%142 = load i8*, i8** %11
%143 = getelementptr inbounds i8, i8* %142, i64 8
store i8* %143, i8** %11
br label %189
144: ; preds = %134
%145 = load i8*, i8** %11
%146 = getelementptr inbounds i8, i8* %145, i64 -1
%147 = bitcast i8* %146 to i64*
%148 = load i64, i64* %147
%149 = shl i64 %148, 8
store i64 %149, i64* %21
%150 = load i8*, i8** %11
%151 = getelementptr inbounds i8, i8* %150, i64 3
%152 = bitcast i8* %151 to i64*
%153 = load i64, i64* %152
%154 = lshr i64 %153, 24
%155 = load i64, i64* %21
%156 = or i64 %155, %154
store i64 %156, i64* %21
%157 = load i8*, i8** %11
%158 = getelementptr inbounds i8, i8* %157, i64 8
store i8* %158, i8** %11
br label %189
159: ; preds = %134
%160 = load i8*, i8** %11
%161 = getelementptr inbounds i8, i8* %160, i64 -2
%162 = bitcast i8* %161 to i64*
%163 = load i64, i64* %162
%164 = shl i64 %163, 16
store i64 %164, i64* %21
%165 = load i8*, i8** %11
%166 = getelementptr inbounds i8, i8* %165, i64 2
%167 = bitcast i8* %166 to i64*
%168 = load i64, i64* %167
%169 = lshr i64 %168, 16
%170 = load i64, i64* %21
%171 = or i64 %170, %169
store i64 %171, i64* %21
%172 = load i8*, i8** %11
%173 = getelementptr inbounds i8, i8* %172, i64 8
store i8* %173, i8** %11
br label %189
174: ; preds = %134
%175 = load i8*, i8** %11
%176 = getelementptr inbounds i8, i8* %175, i64 -3
%177 = bitcast i8* %176 to i64*
%178 = load i64, i64* %177
%179 = shl i64 %178, 24
store i64 %179, i64* %21
%180 = load i8*, i8** %11
%181 = getelementptr inbounds i8, i8* %180, i64 1
%182 = bitcast i8* %181 to i64*
%183 = load i64, i64* %182
%184 = lshr i64 %183, 8
%185 = load i64, i64* %21
%186 = or i64 %185, %184
store i64 %186, i64* %21
%187 = load i8*, i8** %11
%188 = getelementptr inbounds i8, i8* %187, i64 8
store i8* %188, i8** %11
br label %189
189: ; preds = %134, %174, %159, %144, %138
%190 = load i8*, i8** %12
%191 = ptrtoint i8* %190 to i64
%192 = and i64 %191, 3
switch i64 %192, label %244 [
i64 0, label %193
i64 1, label %199
i64 2, label %214
i64 3, label %229
]
193: ; preds = %189
%194 = load i8*, i8** %12
%195 = bitcast i8* %194 to i64*
%196 = load i64, i64* %195
store i64 %196, i64* %22
%197 = load i8*, i8** %12
%198 = getelementptr inbounds i8, i8* %197, i64 8
store i8* %198, i8** %12
br label %244
199: ; preds = %189
%200 = load i8*, i8** %12
%201 = getelementptr inbounds i8, i8* %200, i64 -1
%202 = bitcast i8* %201 to i64*
%203 = load i64, i64* %202
%204 = shl i64 %203, 8
store i64 %204, i64* %22
%205 = load i8*, i8** %12
%206 = getelementptr inbounds i8, i8* %205, i64 3
%207 = bitcast i8* %206 to i64*
%208 = load i64, i64* %207
%209 = lshr i64 %208, 24
%210 = load i64, i64* %22
%211 = or i64 %210, %209
store i64 %211, i64* %22
%212 = load i8*, i8** %12
%213 = getelementptr inbounds i8, i8* %212, i64 8
store i8* %213, i8** %12
br label %244
214: ; preds = %189
%215 = load i8*, i8** %12
%216 = getelementptr inbounds i8, i8* %215, i64 -2
%217 = bitcast i8* %216 to i64*
%218 = load i64, i64* %217
%219 = shl i64 %218, 16
store i64 %219, i64* %22
%220 = load i8*, i8** %12
%221 = getelementptr inbounds i8, i8* %220, i64 2
%222 = bitcast i8* %221 to i64*
%223 = load i64, i64* %222
%224 = lshr i64 %223, 16
%225 = load i64, i64* %22
%226 = or i64 %225, %224
store i64 %226, i64* %22
%227 = load i8*, i8** %12
%228 = getelementptr inbounds i8, i8* %227, i64 8
store i8* %228, i8** %12
br label %244
229: ; preds = %189
%230 = load i8*, i8** %12
%231 = getelementptr inbounds i8, i8* %230, i64 -3
%232 = bitcast i8* %231 to i64*
%233 = load i64, i64* %232
%234 = shl i64 %233, 24
store i64 %234, i64* %22
%235 = load i8*, i8** %12
%236 = getelementptr inbounds i8, i8* %235, i64 1
%237 = bitcast i8* %236 to i64*
%238 = load i64, i64* %237
%239 = lshr i64 %238, 8
%240 = load i64, i64* %22
%241 = or i64 %240, %239
store i64 %241, i64* %22
%242 = load i8*, i8** %12
%243 = getelementptr inbounds i8, i8* %242, i64 8
store i8* %243, i8** %12
br label %244
244: ; preds = %189, %229, %214, %199, %193
%245 = load i8*, i8** %13
%246 = ptrtoint i8* %245 to i64
%247 = and i64 %246, 3
switch i64 %247, label %299 [
i64 0, label %248
i64 1, label %254
i64 2, label %269
i64 3, label %284
]
248: ; preds = %244
%249 = load i8*, i8** %13
%250 = bitcast i8* %249 to i64*
%251 = load i64, i64* %250
store i64 %251, i64* %23
%252 = load i8*, i8** %13
%253 = getelementptr inbounds i8, i8* %252, i64 8
store i8* %253, i8** %13
br label %299
254: ; preds = %244
%255 = load i8*, i8** %13
%256 = getelementptr inbounds i8, i8* %255, i64 -1
%257 = bitcast i8* %256 to i64*
%258 = load i64, i64* %257
%259 = shl i64 %258, 8
store i64 %259, i64* %23
%260 = load i8*, i8** %13
%261 = getelementptr inbounds i8, i8* %260, i64 3
%262 = bitcast i8* %261 to i64*
%263 = load i64, i64* %262
%264 = lshr i64 %263, 24
%265 = load i64, i64* %23
%266 = or i64 %265, %264
store i64 %266, i64* %23
%267 = load i8*, i8** %13
%268 = getelementptr inbounds i8, i8* %267, i64 8
store i8* %268, i8** %13
br label %299
269: ; preds = %244
%270 = load i8*, i8** %13
%271 = getelementptr inbounds i8, i8* %270, i64 -2
%272 = bitcast i8* %271 to i64*
%273 = load i64, i64* %272
%274 = shl i64 %273, 16
store i64 %274, i64* %23
%275 = load i8*, i8** %13
%276 = getelementptr inbounds i8, i8* %275, i64 2
%277 = bitcast i8* %276 to i64*
%278 = load i64, i64* %277
%279 = lshr i64 %278, 16
%280 = load i64, i64* %23
%281 = or i64 %280, %279
store i64 %281, i64* %23
%282 = load i8*, i8** %13
%283 = getelementptr inbounds i8, i8* %282, i64 8
store i8* %283, i8** %13
br label %299
284: ; preds = %244
%285 = load i8*, i8** %13
%286 = getelementptr inbounds i8, i8* %285, i64 -3
%287 = bitcast i8* %286 to i64*
%288 = load i64, i64* %287
%289 = shl i64 %288, 24
store i64 %289, i64* %23
%290 = load i8*, i8** %13
%291 = getelementptr inbounds i8, i8* %290, i64 1
%292 = bitcast i8* %291 to i64*
%293 = load i64, i64* %292
%294 = lshr i64 %293, 8
%295 = load i64, i64* %23
%296 = or i64 %295, %294
store i64 %296, i64* %23
%297 = load i8*, i8** %13
%298 = getelementptr inbounds i8, i8* %297, i64 8
store i8* %298, i8** %13
br label %299
299: ; preds = %244, %284, %269, %254, %248
store i8 0, i8* %26
store i32 0, i32* %25
br label %300
300: ; preds = %347, %299
%301 = load i32, i32* %25
%302 = sext i32 %301 to i64
%303 = icmp ult i64 %302, 64
br i1 %303, label %304, label %350
304: ; preds = %300
%305 = load i64, i64* %20
%306 = load i32, i32* %25
%307 = sub nsw i32 28, %306
%308 = zext i32 %307 to i64
%309 = lshr i64 %305, %308
%310 = and i64 %309, 15
store i64 %310, i64* %9
%311 = load i64, i64* %21
%312 = load i32, i32* %25
%313 = sub nsw i32 28, %312
%314 = zext i32 %313 to i64
%315 = lshr i64 %311, %314
%316 = and i64 %315, 15
%317 = load i64, i64* %9
%318 = or i64 %317, %316
store i64 %318, i64* %9
%319 = load i64, i64* %22
%320 = load i32, i32* %25
%321 = sub nsw i32 28, %320
%322 = zext i32 %321 to i64
%323 = lshr i64 %319, %322
%324 = and i64 %323, 15
%325 = load i64, i64* %9
%326 = or i64 %325, %324
store i64 %326, i64* %9
%327 = load i64, i64* %23
%328 = load i32, i32* %25
%329 = sub nsw i32 28, %328
%330 = zext i32 %329 to i64
%331 = lshr i64 %327, %330
%332 = and i64 %331, 15
%333 = load i64, i64* %9
%334 = or i64 %333, %332
store i64 %334, i64* %9
%335 = load i64, i64* %9
%336 = icmp ne i64 %335, 0
br i1 %336, label %337, label %346
337: ; preds = %304
%338 = load i32, i32* %25
%339 = ashr i32 %338, 2
%340 = sub nsw i32 7, %339
%341 = shl i32 1, %340
%342 = load i8, i8* %26
%343 = zext i8 %342 to i32
%344 = or i32 %343, %341
%345 = trunc i32 %344 to i8
store i8 %345, i8* %26
br label %346
346: ; preds = %337, %304
br label %347
347: ; preds = %346
%348 = load i32, i32* %25
%349 = add nsw i32 %348, 4
store i32 %349, i32* %25
br label %300
350: ; preds = %300
%351 = load i8, i8* %26
%352 = load i8*, i8** %6
%353 = getelementptr inbounds i8, i8* %352, i32 1
store i8* %353, i8** %6
store i8 %351, i8* %352
%354 = load i8*, i8** %10
%355 = load i8*, i8** %15
%356 = icmp uge i8* %354, %355
br i1 %356, label %357, label %382
357: ; preds = %350
%358 = load i32, i32* %18
%359 = add i32 %358, 4
store i32 %359, i32* %18
%360 = load i8*, i8** %5
%361 = load i32, i32* %18
%362 = load i32, i32* %16
%363 = mul i32 %361, %362
%364 = zext i32 %363 to i64
%365 = getelementptr inbounds i8, i8* %360, i64 %364
store i8* %365, i8** %10
%366 = load i8*, i8** %10
%367 = load i32, i32* %17
%368 = zext i32 %367 to i64
%369 = getelementptr inbounds i8, i8* %366, i64 %368
store i8* %369, i8** %15
%370 = load i8*, i8** %10
%371 = load i32, i32* %16
%372 = zext i32 %371 to i64
%373 = getelementptr inbounds i8, i8* %370, i64 %372
store i8* %373, i8** %11
%374 = load i8*, i8** %11
%375 = load i32, i32* %16
%376 = zext i32 %375 to i64
%377 = getelementptr inbounds i8, i8* %374, i64 %376
store i8* %377, i8** %12
%378 = load i8*, i8** %12
%379 = load i32, i32* %16
%380 = zext i32 %379 to i64
%381 = getelementptr inbounds i8, i8* %378, i64 %380
store i8* %381, i8** %13
br label %382
382: ; preds = %357, %350
br label %75
383: ; preds = %75
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [23 x i8] c"ASSERT fails at %d %s\0A\00"
@.str.1 = [166 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/ffzg/PhiloLogic3/refs/heads/master/goodies/dlxs-utils/tif2web-1.0.3/scale.c\00"
define void @scale4bw(i8* nocapture readnone %0, i8* nocapture readnone %1, i64* nocapture %2, i64* nocapture %3) {
%5 = load i64, i64* %2
%6 = add i64 %5, 7
%7 = lshr i64 %6, 2
%8 = and i64 %7, 8589934584
store i64 %8, i64* %2
%9 = load i64, i64* %3
%10 = lshr i64 %9, 2
store i64 %10, i64* %3
%11 = load i32, i32* @stderr
%12 = tail call i32 @fprintf(i32 %11, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), i32 371, i8* getelementptr inbounds ([166 x i8], [166 x i8]* @.str.1, i64 0, i64 0))
%13 = tail call i32 @exit(i32 1)
unreachable
}