; LLVM IR from aap/pdp6 :: emu (apr)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.Apr = type { %struct.Device, %struct.IOBus, %struct.Membus, i32, %struct.AprState, %struct.AprState, i32, i64, i64, i32, i32, i32, i8, i16, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr, i32, i8, [20 x %struct.TPulse], ptr, ptr }
%struct.Device = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.IOBus = type { i64, i64, i64, i64, i64, i64, i32, [128 x %struct.Busdev] }
%struct.Busdev = type { ptr, ptr, i8 }
%struct.Membus = type { i64, i64, i64, i64, i64, i64, ptr, [16 x ptr] }
%struct.AprState = type { i64, i64, i64 }
%struct.TPulse = type { ptr, ptr, i32 }

; Function Attrs: nounwind uwtable
define dso_local void @decodeir(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = getelementptr inbounds %struct.Apr, ptr %3, i32 0, i32 6
  %5 = load i32, ptr %4, align 8, !tbaa !9
  %6 = lshr i32 %5, 9
  %7 = and i32 %6, 511
  %8 = load ptr, ptr %2, align 8, !tbaa !5
  %9 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 147
  store i32 %7, ptr %9, align 4, !tbaa !18
  %10 = load ptr, ptr %2, align 8, !tbaa !5
  %11 = getelementptr inbounds %struct.Apr, ptr %10, i32 0, i32 6
  %12 = load i32, ptr %11, align 8, !tbaa !9
  %13 = and i32 %12, 229600
  %14 = load ptr, ptr %2, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.Apr, ptr %14, i32 0, i32 148
  store i32 %13, ptr %15, align 8, !tbaa !19
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.Apr, ptr %16, i32 0, i32 1
  %18 = getelementptr inbounds %struct.IOBus, ptr %17, i32 0, i32 3
  %19 = load i64, ptr %18, align 8, !tbaa !20
  %20 = and i64 %19, -4294705153
  store i64 %20, ptr %18, align 8, !tbaa !20
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.Apr, ptr %21, i32 0, i32 6
  %23 = load i32, ptr %22, align 8, !tbaa !9
  %24 = and i32 %23, 16384
  %25 = icmp ne i32 %24, 0
  %26 = zext i1 %25 to i64
  %27 = select i1 %25, i64 1073741824, i64 2147483648
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.Apr, ptr %28, i32 0, i32 1
  %30 = getelementptr inbounds %struct.IOBus, ptr %29, i32 0, i32 3
  %31 = load i64, ptr %30, align 8, !tbaa !20
  %32 = or i64 %31, %27
  store i64 %32, ptr %30, align 8, !tbaa !20
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.Apr, ptr %33, i32 0, i32 6
  %35 = load i32, ptr %34, align 8, !tbaa !9
  %36 = and i32 %35, 8192
  %37 = icmp ne i32 %36, 0
  %38 = zext i1 %37 to i64
  %39 = select i1 %37, i32 268435456, i32 536870912
  %40 = sext i32 %39 to i64
  %41 = load ptr, ptr %2, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.Apr, ptr %41, i32 0, i32 1
  %43 = getelementptr inbounds %struct.IOBus, ptr %42, i32 0, i32 3
  %44 = load i64, ptr %43, align 8, !tbaa !20
  %45 = or i64 %44, %40
  store i64 %45, ptr %43, align 8, !tbaa !20
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.Apr, ptr %46, i32 0, i32 6
  %48 = load i32, ptr %47, align 8, !tbaa !9
  %49 = and i32 %48, 4096
  %50 = icmp ne i32 %49, 0
  %51 = zext i1 %50 to i64
  %52 = select i1 %50, i32 67108864, i32 134217728
  %53 = sext i32 %52 to i64
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.Apr, ptr %54, i32 0, i32 1
  %56 = getelementptr inbounds %struct.IOBus, ptr %55, i32 0, i32 3
  %57 = load i64, ptr %56, align 8, !tbaa !20
  %58 = or i64 %57, %53
  store i64 %58, ptr %56, align 8, !tbaa !20
  %59 = load ptr, ptr %2, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.Apr, ptr %59, i32 0, i32 6
  %61 = load i32, ptr %60, align 8, !tbaa !9
  %62 = and i32 %61, 2048
  %63 = icmp ne i32 %62, 0
  %64 = zext i1 %63 to i64
  %65 = select i1 %63, i32 16777216, i32 33554432
  %66 = sext i32 %65 to i64
  %67 = load ptr, ptr %2, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.Apr, ptr %67, i32 0, i32 1
  %69 = getelementptr inbounds %struct.IOBus, ptr %68, i32 0, i32 3
  %70 = load i64, ptr %69, align 8, !tbaa !20
  %71 = or i64 %70, %66
  store i64 %71, ptr %69, align 8, !tbaa !20
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Apr, ptr %72, i32 0, i32 6
  %74 = load i32, ptr %73, align 8, !tbaa !9
  %75 = and i32 %74, 1024
  %76 = icmp ne i32 %75, 0
  %77 = zext i1 %76 to i64
  %78 = select i1 %76, i32 4194304, i32 8388608
  %79 = sext i32 %78 to i64
  %80 = load ptr, ptr %2, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.Apr, ptr %80, i32 0, i32 1
  %82 = getelementptr inbounds %struct.IOBus, ptr %81, i32 0, i32 3
  %83 = load i64, ptr %82, align 8, !tbaa !20
  %84 = or i64 %83, %79
  store i64 %84, ptr %82, align 8, !tbaa !20
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.Apr, ptr %85, i32 0, i32 6
  %87 = load i32, ptr %86, align 8, !tbaa !9
  %88 = and i32 %87, 512
  %89 = icmp ne i32 %88, 0
  %90 = zext i1 %89 to i64
  %91 = select i1 %89, i32 1048576, i32 2097152
  %92 = sext i32 %91 to i64
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.Apr, ptr %93, i32 0, i32 1
  %95 = getelementptr inbounds %struct.IOBus, ptr %94, i32 0, i32 3
  %96 = load i64, ptr %95, align 8, !tbaa !20
  %97 = or i64 %96, %92
  store i64 %97, ptr %95, align 8, !tbaa !20
  %98 = load ptr, ptr %2, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.Apr, ptr %98, i32 0, i32 6
  %100 = load i32, ptr %99, align 8, !tbaa !9
  %101 = and i32 %100, 256
  %102 = icmp ne i32 %101, 0
  %103 = zext i1 %102 to i64
  %104 = select i1 %102, i32 262144, i32 524288
  %105 = sext i32 %104 to i64
  %106 = load ptr, ptr %2, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.Apr, ptr %106, i32 0, i32 1
  %108 = getelementptr inbounds %struct.IOBus, ptr %107, i32 0, i32 3
  %109 = load i64, ptr %108, align 8, !tbaa !20
  %110 = or i64 %109, %105
  store i64 %110, ptr %108, align 8, !tbaa !20
  %111 = load ptr, ptr %2, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.Apr, ptr %111, i32 0, i32 147
  %113 = load i32, ptr %112, align 4, !tbaa !18
  %114 = and i32 %113, 480
  %115 = icmp eq i32 %114, 96
  %116 = zext i1 %115 to i32
  %117 = trunc i32 %116 to i8
  %118 = load ptr, ptr %2, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.Apr, ptr %118, i32 0, i32 149
  store i8 %117, ptr %119, align 4, !tbaa !21
  %120 = load ptr, ptr %2, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.Apr, ptr %120, i32 0, i32 147
  %122 = load i32, ptr %121, align 4, !tbaa !18
  %123 = and i32 %122, 504
  %124 = icmp eq i32 %123, 128
  br i1 %124, label %131, label %125

125:                                              ; preds = %1
  %126 = load ptr, ptr %2, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.Apr, ptr %126, i32 0, i32 147
  %128 = load i32, ptr %127, align 4, !tbaa !18
  %129 = and i32 %128, 504
  %130 = icmp eq i32 %129, 136
  br label %131

131:                                              ; preds = %125, %1
  %132 = phi i1 [ true, %1 ], [ %130, %125 ]
  %133 = zext i1 %132 to i32
  %134 = trunc i32 %133 to i8
  %135 = load ptr, ptr %2, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.Apr, ptr %135, i32 0, i32 150
  store i8 %134, ptr %136, align 1, !tbaa !22
  %137 = load ptr, ptr %2, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.Apr, ptr %137, i32 0, i32 154
  store i8 0, ptr %138, align 1, !tbaa !23
  %139 = load ptr, ptr %2, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.Apr, ptr %139, i32 0, i32 153
  store i8 0, ptr %140, align 8, !tbaa !24
  %141 = load ptr, ptr %2, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.Apr, ptr %141, i32 0, i32 152
  store i8 0, ptr %142, align 1, !tbaa !25
  %143 = load ptr, ptr %2, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.Apr, ptr %143, i32 0, i32 151
  store i8 0, ptr %144, align 2, !tbaa !26
  %145 = load ptr, ptr %2, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.Apr, ptr %145, i32 0, i32 150
  %147 = load i8, ptr %146, align 1, !tbaa !22
  %148 = icmp ne i8 %147, 0
  br i1 %148, label %149, label %186

149:                                              ; preds = %131
  %150 = load ptr, ptr %2, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.Apr, ptr %150, i32 0, i32 147
  %152 = load i32, ptr %151, align 4, !tbaa !18
  %153 = and i32 %152, 3
  %154 = icmp eq i32 %153, 0
  %155 = zext i1 %154 to i32
  %156 = trunc i32 %155 to i8
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.Apr, ptr %157, i32 0, i32 151
  store i8 %156, ptr %158, align 2, !tbaa !26
  %159 = load ptr, ptr %2, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.Apr, ptr %159, i32 0, i32 147
  %161 = load i32, ptr %160, align 4, !tbaa !18
  %162 = and i32 %161, 3
  %163 = icmp eq i32 %162, 1
  %164 = zext i1 %163 to i32
  %165 = trunc i32 %164 to i8
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.Apr, ptr %166, i32 0, i32 152
  store i8 %165, ptr %167, align 1, !tbaa !25
  %168 = load ptr, ptr %2, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.Apr, ptr %168, i32 0, i32 147
  %170 = load i32, ptr %169, align 4, !tbaa !18
  %171 = and i32 %170, 3
  %172 = icmp eq i32 %171, 2
  %173 = zext i1 %172 to i32
  %174 = trunc i32 %173 to i8
  %175 = load ptr, ptr %2, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.Apr, ptr %175, i32 0, i32 153
  store i8 %174, ptr %176, align 8, !tbaa !24
  %177 = load ptr, ptr %2, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.Apr, ptr %177, i32 0, i32 147
  %179 = load i32, ptr %178, align 4, !tbaa !18
  %180 = and i32 %179, 3
  %181 = icmp eq i32 %180, 3
  %182 = zext i1 %181 to i32
  %183 = trunc i32 %182 to i8
  %184 = load ptr, ptr %2, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.Apr, ptr %184, i32 0, i32 154
  store i8 %183, ptr %185, align 1, !tbaa !23
  br label %186

186:                                              ; preds = %149, %131
  %187 = load ptr, ptr %2, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.Apr, ptr %187, i32 0, i32 147
  %189 = load i32, ptr %188, align 4, !tbaa !18
  %190 = and i32 %189, 496
  %191 = icmp eq i32 %190, 144
  %192 = zext i1 %191 to i32
  %193 = trunc i32 %192 to i8
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.Apr, ptr %194, i32 0, i32 156
  store i8 %193, ptr %195, align 1, !tbaa !27
  %196 = load ptr, ptr %2, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.Apr, ptr %196, i32 0, i32 147
  %198 = load i32, ptr %197, align 4, !tbaa !18
  %199 = and i32 %198, 504
  %200 = icmp eq i32 %199, 160
  br i1 %200, label %201, label %207

201:                                              ; preds = %186
  %202 = load ptr, ptr %2, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.Apr, ptr %202, i32 0, i32 147
  %204 = load i32, ptr %203, align 4, !tbaa !18
  %205 = and i32 %204, 3
  %206 = icmp ne i32 %205, 3
  br label %207

207:                                              ; preds = %201, %186
  %208 = phi i1 [ false, %186 ], [ %206, %201 ]
  %209 = zext i1 %208 to i32
  %210 = trunc i32 %209 to i8
  %211 = load ptr, ptr %2, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.Apr, ptr %211, i32 0, i32 155
  store i8 %210, ptr %212, align 2, !tbaa !28
  %213 = load ptr, ptr %2, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.Apr, ptr %213, i32 0, i32 147
  %215 = load i32, ptr %214, align 4, !tbaa !18
  %216 = and i32 %215, 504
  %217 = icmp eq i32 %216, 176
  %218 = zext i1 %217 to i32
  %219 = trunc i32 %218 to i8
  %220 = load ptr, ptr %2, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.Apr, ptr %220, i32 0, i32 157
  store i8 %219, ptr %221, align 4, !tbaa !29
  %222 = load ptr, ptr %2, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.Apr, ptr %222, i32 0, i32 147
  %224 = load i32, ptr %223, align 4, !tbaa !18
  %225 = and i32 %224, 504
  %226 = icmp eq i32 %225, 184
  %227 = zext i1 %226 to i32
  %228 = trunc i32 %227 to i8
  %229 = load ptr, ptr %2, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.Apr, ptr %229, i32 0, i32 158
  store i8 %228, ptr %230, align 1, !tbaa !30
  %231 = load ptr, ptr %2, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.Apr, ptr %231, i32 0, i32 161
  store i8 0, ptr %232, align 8, !tbaa !31
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.Apr, ptr %233, i32 0, i32 160
  store i8 0, ptr %234, align 1, !tbaa !32
  %235 = load ptr, ptr %2, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.Apr, ptr %235, i32 0, i32 163
  store i8 0, ptr %236, align 2, !tbaa !33
  %237 = load ptr, ptr %2, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.Apr, ptr %237, i32 0, i32 162
  store i8 0, ptr %238, align 1, !tbaa !34
  %239 = load ptr, ptr %2, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.Apr, ptr %239, i32 0, i32 147
  %241 = load i32, ptr %240, align 4, !tbaa !18
  %242 = and i32 %241, 448
  %243 = icmp eq i32 %242, 256
  %244 = zext i1 %243 to i32
  %245 = trunc i32 %244 to i8
  %246 = load ptr, ptr %2, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.Apr, ptr %246, i32 0, i32 159
  store i8 %245, ptr %247, align 2, !tbaa !35
  %248 = load ptr, ptr %2, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.Apr, ptr %248, i32 0, i32 159
  %250 = load i8, ptr %249, align 2, !tbaa !35
  %251 = icmp ne i8 %250, 0
  br i1 %251, label %252, label %260

252:                                              ; preds = %207
  %253 = load ptr, ptr %2, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.Apr, ptr %253, i32 0, i32 147
  %255 = load i32, ptr %254, align 4, !tbaa !18
  %256 = ashr i32 %255, 2
  %257 = and i32 %256, 15
  %258 = load ptr, ptr %2, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.Apr, ptr %258, i32 0, i32 164
  store i32 %257, ptr %259, align 4, !tbaa !36
  br label %260

260:                                              ; preds = %252, %207
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.Apr, ptr %261, i32 0, i32 169
  store i8 0, ptr %262, align 4, !tbaa !37
  %263 = load ptr, ptr %2, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.Apr, ptr %263, i32 0, i32 168
  store i8 0, ptr %264, align 1, !tbaa !38
  %265 = load ptr, ptr %2, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.Apr, ptr %265, i32 0, i32 167
  store i8 0, ptr %266, align 2, !tbaa !39
  %267 = load ptr, ptr %2, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.Apr, ptr %267, i32 0, i32 166
  store i8 0, ptr %268, align 1, !tbaa !40
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.Apr, ptr %269, i32 0, i32 147
  %271 = load i32, ptr %270, align 4, !tbaa !18
  %272 = and i32 %271, 448
  %273 = icmp eq i32 %272, 320
  %274 = zext i1 %273 to i32
  %275 = trunc i32 %274 to i8
  %276 = load ptr, ptr %2, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.Apr, ptr %276, i32 0, i32 165
  store i8 %275, ptr %277, align 8, !tbaa !41
  %278 = load ptr, ptr %2, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.Apr, ptr %278, i32 0, i32 165
  %280 = load i8, ptr %279, align 8, !tbaa !41
  %281 = icmp ne i8 %280, 0
  br i1 %281, label %282, label %319

282:                                              ; preds = %260
  %283 = load ptr, ptr %2, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.Apr, ptr %283, i32 0, i32 147
  %285 = load i32, ptr %284, align 4, !tbaa !18
  %286 = and i32 %285, 3
  %287 = icmp eq i32 %286, 0
  %288 = zext i1 %287 to i32
  %289 = trunc i32 %288 to i8
  %290 = load ptr, ptr %2, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.Apr, ptr %290, i32 0, i32 166
  store i8 %289, ptr %291, align 1, !tbaa !40
  %292 = load ptr, ptr %2, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.Apr, ptr %292, i32 0, i32 147
  %294 = load i32, ptr %293, align 4, !tbaa !18
  %295 = and i32 %294, 3
  %296 = icmp eq i32 %295, 1
  %297 = zext i1 %296 to i32
  %298 = trunc i32 %297 to i8
  %299 = load ptr, ptr %2, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.Apr, ptr %299, i32 0, i32 167
  store i8 %298, ptr %300, align 2, !tbaa !39
  %301 = load ptr, ptr %2, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.Apr, ptr %301, i32 0, i32 147
  %303 = load i32, ptr %302, align 4, !tbaa !18
  %304 = and i32 %303, 3
  %305 = icmp eq i32 %304, 2
  %306 = zext i1 %305 to i32
  %307 = trunc i32 %306 to i8
  %308 = load ptr, ptr %2, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.Apr, ptr %308, i32 0, i32 168
  store i8 %307, ptr %309, align 1, !tbaa !38
  %310 = load ptr, ptr %2, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.Apr, ptr %310, i32 0, i32 147
  %312 = load i32, ptr %311, align 4, !tbaa !18
  %313 = and i32 %312, 3
  %314 = icmp eq i32 %313, 3
  %315 = zext i1 %314 to i32
  %316 = trunc i32 %315 to i8
  %317 = load ptr, ptr %2, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.Apr, ptr %317, i32 0, i32 169
  store i8 %316, ptr %318, align 4, !tbaa !37
  br label %319

319:                                              ; preds = %282, %260
  %320 = load ptr, ptr %2, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.Apr, ptr %320, i32 0, i32 159
  %322 = load i8, ptr %321, align 2, !tbaa !35
  %323 = zext i8 %322 to i32
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %331, label %325

325:                                              ; preds = %319
  %326 = load ptr, ptr %2, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.Apr, ptr %326, i32 0, i32 158
  %328 = load i8, ptr %327, align 1, !tbaa !30
  %329 = zext i8 %328 to i32
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %331, label %368

331:                                              ; preds = %325, %319
  %332 = load ptr, ptr %2, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.Apr, ptr %332, i32 0, i32 147
  %334 = load i32, ptr %333, align 4, !tbaa !18
  %335 = and i32 %334, 3
  %336 = icmp eq i32 %335, 0
  %337 = zext i1 %336 to i32
  %338 = trunc i32 %337 to i8
  %339 = load ptr, ptr %2, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.Apr, ptr %339, i32 0, i32 160
  store i8 %338, ptr %340, align 1, !tbaa !32
  %341 = load ptr, ptr %2, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.Apr, ptr %341, i32 0, i32 147
  %343 = load i32, ptr %342, align 4, !tbaa !18
  %344 = and i32 %343, 3
  %345 = icmp eq i32 %344, 1
  %346 = zext i1 %345 to i32
  %347 = trunc i32 %346 to i8
  %348 = load ptr, ptr %2, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.Apr, ptr %348, i32 0, i32 161
  store i8 %347, ptr %349, align 8, !tbaa !31
  %350 = load ptr, ptr %2, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.Apr, ptr %350, i32 0, i32 147
  %352 = load i32, ptr %351, align 4, !tbaa !18
  %353 = and i32 %352, 3
  %354 = icmp eq i32 %353, 2
  %355 = zext i1 %354 to i32
  %356 = trunc i32 %355 to i8
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.Apr, ptr %357, i32 0, i32 162
  store i8 %356, ptr %358, align 1, !tbaa !34
  %359 = load ptr, ptr %2, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.Apr, ptr %359, i32 0, i32 147
  %361 = load i32, ptr %360, align 4, !tbaa !18
  %362 = and i32 %361, 3
  %363 = icmp eq i32 %362, 3
  %364 = zext i1 %363 to i32
  %365 = trunc i32 %364 to i8
  %366 = load ptr, ptr %2, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.Apr, ptr %366, i32 0, i32 163
  store i8 %365, ptr %367, align 2, !tbaa !33
  br label %368

368:                                              ; preds = %331, %325
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.Apr, ptr %369, i32 0, i32 147
  %371 = load i32, ptr %370, align 4, !tbaa !18
  %372 = and i32 %371, 448
  %373 = icmp eq i32 %372, 384
  %374 = zext i1 %373 to i32
  %375 = trunc i32 %374 to i8
  %376 = load ptr, ptr %2, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.Apr, ptr %376, i32 0, i32 170
  store i8 %375, ptr %377, align 1, !tbaa !42
  %378 = load ptr, ptr %2, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.Apr, ptr %378, i32 0, i32 147
  %380 = load i32, ptr %379, align 4, !tbaa !18
  %381 = and i32 %380, 448
  %382 = icmp eq i32 %381, 0
  br i1 %382, label %383, label %389

383:                                              ; preds = %368
  %384 = load ptr, ptr %2, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.Apr, ptr %384, i32 0, i32 54
  %386 = load i8, ptr %385, align 8, !tbaa !43
  %387 = zext i8 %386 to i32
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %430, label %389

389:                                              ; preds = %383, %368
  %390 = load ptr, ptr %2, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.Apr, ptr %390, i32 0, i32 147
  %392 = load i32, ptr %391, align 4, !tbaa !18
  %393 = and i32 %392, 448
  %394 = icmp eq i32 %393, 448
  br i1 %394, label %395, label %411

395:                                              ; preds = %389
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.Apr, ptr %396, i32 0, i32 55
  %398 = load i8, ptr %397, align 1, !tbaa !44
  %399 = icmp ne i8 %398, 0
  br i1 %399, label %411, label %400

400:                                              ; preds = %395
  %401 = load ptr, ptr %2, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.Apr, ptr %401, i32 0, i32 57
  %403 = load i8, ptr %402, align 1, !tbaa !45
  %404 = zext i8 %403 to i32
  %405 = icmp ne i32 %404, 0
  br i1 %405, label %406, label %411

406:                                              ; preds = %400
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.Apr, ptr %407, i32 0, i32 78
  %409 = load i8, ptr %408, align 8, !tbaa !46
  %410 = icmp ne i8 %409, 0
  br i1 %410, label %411, label %430

411:                                              ; preds = %406, %400, %395, %389
  %412 = load ptr, ptr %2, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.Apr, ptr %412, i32 0, i32 147
  %414 = load i32, ptr %413, align 4, !tbaa !18
  %415 = icmp eq i32 %414, 172
  br i1 %415, label %416, label %428

416:                                              ; preds = %411
  %417 = load ptr, ptr %2, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.Apr, ptr %417, i32 0, i32 6
  %419 = load i32, ptr %418, align 8, !tbaa !9
  %420 = and i32 %419, 384
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %428

422:                                              ; preds = %416
  %423 = load ptr, ptr %2, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.Apr, ptr %423, i32 0, i32 57
  %425 = load i8, ptr %424, align 1, !tbaa !45
  %426 = zext i8 %425 to i32
  %427 = icmp ne i32 %426, 0
  br label %428

428:                                              ; preds = %422, %416, %411
  %429 = phi i1 [ false, %416 ], [ false, %411 ], [ %427, %422 ]
  br label %430

430:                                              ; preds = %428, %406, %383
  %431 = phi i1 [ true, %406 ], [ true, %383 ], [ %429, %428 ]
  %432 = zext i1 %431 to i32
  %433 = trunc i32 %432 to i8
  %434 = load ptr, ptr %2, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.Apr, ptr %434, i32 0, i32 171
  store i8 %433, ptr %435, align 2, !tbaa !47
  %436 = load ptr, ptr %2, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.Apr, ptr %436, i32 0, i32 171
  %438 = load i8, ptr %437, align 2, !tbaa !47
  %439 = icmp ne i8 %438, 0
  br i1 %439, label %445, label %440

440:                                              ; preds = %430
  %441 = load ptr, ptr %2, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.Apr, ptr %441, i32 0, i32 147
  %443 = load i32, ptr %442, align 4, !tbaa !18
  %444 = icmp eq i32 %443, 172
  br label %445

445:                                              ; preds = %440, %430
  %446 = phi i1 [ false, %430 ], [ %444, %440 ]
  %447 = zext i1 %446 to i32
  %448 = trunc i32 %447 to i8
  %449 = load ptr, ptr %2, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.Apr, ptr %449, i32 0, i32 173
  store i8 %448, ptr %450, align 8, !tbaa !48
  %451 = load ptr, ptr %2, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.Apr, ptr %451, i32 0, i32 171
  %453 = load i8, ptr %452, align 2, !tbaa !47
  %454 = icmp ne i8 %453, 0
  br i1 %454, label %461, label %455

455:                                              ; preds = %445
  %456 = load ptr, ptr %2, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.Apr, ptr %456, i32 0, i32 147
  %458 = load i32, ptr %457, align 4, !tbaa !18
  %459 = and i32 %458, 448
  %460 = icmp eq i32 %459, 448
  br label %461

461:                                              ; preds = %455, %445
  %462 = phi i1 [ false, %445 ], [ %460, %455 ]
  %463 = zext i1 %462 to i32
  %464 = trunc i32 %463 to i8
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.Apr, ptr %465, i32 0, i32 172
  store i8 %464, ptr %466, align 1, !tbaa !49
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !14, i64 3432}
!10 = !{!"Apr", !11, i64 0, !12, i64 64, !15, i64 3192, !14, i64 3376, !16, i64 3384, !16, i64 3408, !14, i64 3432, !13, i64 3440, !13, i64 3448, !14, i64 3456, !14, i64 3460, !14, i64 3464, !7, i64 3468, !17, i64 3470, !17, i64 3472, !7, i64 3474, !7, i64 3475, !7, i64 3476, !7, i64 3477, !7, i64 3478, !7, i64 3479, !7, i64 3480, !7, i64 3481, !7, i64 3482, !7, i64 3483, !7, i64 3484, !7, i64 3485, !7, i64 3486, !7, i64 3487, !7, i64 3488, !7, i64 3489, !7, i64 3490, !7, i64 3491, !7, i64 3492, !7, i64 3493, !7, i64 3494, !7, i64 3495, !7, i64 3496, !7, i64 3497, !7, i64 3498, !7, i64 3499, !7, i64 3500, !7, i64 3501, !7, i64 3502, !14, i64 3504, !14, i64 3508, !7, i64 3512, !7, i64 3513, !7, i64 3514, !7, i64 3515, !7, i64 3516, !7, i64 3517, !7, i64 3518, !7, i64 3519, !7, i64 3520, !7, i64 3521, !7, i64 3522, !7, i64 3523, !7, i64 3524, !7, i64 3525, !7, i64 3526, !7, i64 3527, !7, i64 3528, !7, i64 3529, !7, i64 3530, !7, i64 3531, !7, i64 3532, !7, i64 3533, !7, i64 3534, !7, i64 3535, !7, i64 3536, !7, i64 3537, !7, i64 3538, !7, i64 3539, !7, i64 3540, !7, i64 3541, !7, i64 3542, !7, i64 3543, !7, i64 3544, !7, i64 3545, !7, i64 3546, !7, i64 3547, !7, i64 3548, !7, i64 3549, !7, i64 3550, !7, i64 3551, !14, i64 3552, !7, i64 3556, !7, i64 3557, !7, i64 3558, !7, i64 3559, !7, i64 3560, !7, i64 3561, !7, i64 3562, !7, i64 3563, !7, i64 3564, !7, i64 3565, !7, i64 3566, !7, i64 3567, !7, i64 3568, !7, i64 3569, !7, i64 3570, !7, i64 3571, !7, i64 3572, !7, i64 3573, !7, i64 3574, !7, i64 3575, !7, i64 3576, !7, i64 3577, !7, i64 3578, !7, i64 3579, !7, i64 3580, !7, i64 3581, !7, i64 3582, !7, i64 3583, !7, i64 3584, !7, i64 3585, !7, i64 3586, !7, i64 3587, !7, i64 3588, !7, i64 3589, !7, i64 3590, !7, i64 3591, !7, i64 3592, !7, i64 3593, !7, i64 3594, !7, i64 3595, !7, i64 3596, !7, i64 3597, !7, i64 3598, !7, i64 3599, !7, i64 3600, !7, i64 3601, !7, i64 3602, !7, i64 3603, !7, i64 3604, !7, i64 3605, !7, i64 3606, !7, i64 3607, !7, i64 3608, !7, i64 3609, !7, i64 3610, !7, i64 3611, !7, i64 3612, !7, i64 3613, !7, i64 3614, !14, i64 3616, !14, i64 3620, !14, i64 3624, !7, i64 3628, !7, i64 3629, !7, i64 3630, !7, i64 3631, !7, i64 3632, !7, i64 3633, !7, i64 3634, !7, i64 3635, !7, i64 3636, !7, i64 3637, !7, i64 3638, !7, i64 3639, !7, i64 3640, !7, i64 3641, !7, i64 3642, !14, i64 3644, !7, i64 3648, !7, i64 3649, !7, i64 3650, !7, i64 3651, !7, i64 3652, !7, i64 3653, !7, i64 3654, !7, i64 3655, !7, i64 3656, !7, i64 3657, !7, i64 3658, !6, i64 3664, !6, i64 3672, !14, i64 3680, !7, i64 3684, !7, i64 3688, !6, i64 4168, !6, i64 4176}
!11 = !{!"Device", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!12 = !{!"IOBus", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !7, i64 56}
!13 = !{!"long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"Membus", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !6, i64 48, !7, i64 56}
!16 = !{!"AprState", !13, i64 0, !13, i64 8, !13, i64 16}
!17 = !{!"short", !7, i64 0}
!18 = !{!10, !14, i64 3620}
!19 = !{!10, !14, i64 3624}
!20 = !{!10, !13, i64 88}
!21 = !{!10, !7, i64 3628}
!22 = !{!10, !7, i64 3629}
!23 = !{!10, !7, i64 3633}
!24 = !{!10, !7, i64 3632}
!25 = !{!10, !7, i64 3631}
!26 = !{!10, !7, i64 3630}
!27 = !{!10, !7, i64 3635}
!28 = !{!10, !7, i64 3634}
!29 = !{!10, !7, i64 3636}
!30 = !{!10, !7, i64 3637}
!31 = !{!10, !7, i64 3640}
!32 = !{!10, !7, i64 3639}
!33 = !{!10, !7, i64 3642}
!34 = !{!10, !7, i64 3641}
!35 = !{!10, !7, i64 3638}
!36 = !{!10, !14, i64 3644}
!37 = !{!10, !7, i64 3652}
!38 = !{!10, !7, i64 3651}
!39 = !{!10, !7, i64 3650}
!40 = !{!10, !7, i64 3649}
!41 = !{!10, !7, i64 3648}
!42 = !{!10, !7, i64 3653}
!43 = !{!10, !7, i64 3520}
!44 = !{!10, !7, i64 3521}
!45 = !{!10, !7, i64 3523}
!46 = !{!10, !7, i64 3544}
!47 = !{!10, !7, i64 3654}
!48 = !{!10, !7, i64 3656}
!49 = !{!10, !7, i64 3655}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
define dso_local void @decodeir(ptr nocapture noundef %0) local_unnamed_addr #0 {
._crit_edge:
  %1 = getelementptr inbounds i8, ptr %0, i64 3432
  %2 = load i32, ptr %1, align 8, !tbaa !5
  %3 = lshr i32 %2, 9
  %4 = and i32 %3, 511
  %5 = getelementptr inbounds i8, ptr %0, i64 3620
  store i32 %4, ptr %5, align 4, !tbaa !17
  %6 = and i32 %2, 229600
  %7 = getelementptr inbounds i8, ptr %0, i64 3624
  store i32 %6, ptr %7, align 8, !tbaa !18
  %8 = getelementptr inbounds i8, ptr %0, i64 88
  %9 = load i64, ptr %8, align 8, !tbaa !19
  %10 = and i64 %9, -4294705153
  %11 = and i32 %2, 16384
  %.not = icmp eq i32 %11, 0
  %12 = select i1 %.not, i64 2147483648, i64 1073741824
  %13 = getelementptr inbounds i8, ptr %0, i64 3628
  %14 = and i32 %3, 504
  %15 = insertelement <8 x i32> poison, i32 %2, i64 0
  %16 = shufflevector <8 x i32> %15, <8 x i32> poison, <8 x i32> zeroinitializer
  %17 = and <8 x i32> %16, <i32 253952, i32 245760, i32 256, i32 512, i32 1024, i32 2048, i32 4096, i32 8192>
  %18 = icmp eq <8 x i32> %17, <i32 65536, i32 49152, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
  %19 = extractelement <8 x i1> %18, i64 7
  %20 = select i1 %19, i64 536870912, i64 268435456
  %21 = extractelement <8 x i1> %18, i64 6
  %22 = select i1 %21, i64 134217728, i64 67108864
  %23 = extractelement <8 x i1> %18, i64 5
  %24 = select i1 %23, i64 33554432, i64 16777216
  %25 = extractelement <8 x i1> %18, i64 4
  %26 = select i1 %25, i64 8388608, i64 4194304
  %27 = extractelement <8 x i1> %18, i64 3
  %28 = select i1 %27, i64 2097152, i64 1048576
  %29 = extractelement <8 x i1> %18, i64 2
  %30 = select i1 %29, i64 524288, i64 262144
  %31 = or disjoint i64 %26, %28
  %32 = or disjoint i64 %31, %24
  %33 = or disjoint i64 %32, %22
  %34 = or disjoint i64 %33, %20
  %35 = or disjoint i64 %34, %12
  %36 = or i64 %35, %30
  %37 = or i64 %36, %10
  store i64 %37, ptr %8, align 8, !tbaa !19
  %38 = extractelement <8 x i1> %18, i64 1
  %39 = zext i1 %38 to i8
  store i8 %39, ptr %13, align 4, !tbaa !20
  %40 = extractelement <8 x i1> %18, i64 0
  %41 = zext i1 %40 to i8
  %42 = getelementptr inbounds i8, ptr %0, i64 3629
  store i8 %41, ptr %42, align 1, !tbaa !21
  %43 = getelementptr inbounds i8, ptr %0, i64 3630
  %44 = and i32 %3, 3
  %45 = insertelement <4 x i32> poison, i32 %44, i64 0
  %46 = shufflevector <4 x i32> %45, <4 x i32> poison, <4 x i32> zeroinitializer
  %47 = icmp eq <4 x i32> %46, <i32 0, i32 1, i32 2, i32 3>
  %48 = zext <4 x i1> %47 to <4 x i8>
  %storemerge = select i1 %40, <4 x i8> %48, <4 x i8> zeroinitializer
  store <4 x i8> %storemerge, ptr %43, align 2
  %49 = getelementptr inbounds i8, ptr %0, i64 3635
  %50 = icmp eq i32 %14, 160
  %51 = icmp ne i32 %44, 3
  %narrow127 = and i1 %50, %51
  %52 = zext i1 %narrow127 to i8
  %53 = getelementptr inbounds i8, ptr %0, i64 3634
  store i8 %52, ptr %53, align 2, !tbaa !22
  %54 = getelementptr inbounds i8, ptr %0, i64 3639
  %55 = and i32 %3, 448
  store i32 0, ptr %54, align 1
  %56 = shufflevector <8 x i32> %17, <8 x i32> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
  %57 = insertelement <4 x i32> %56, i32 %14, i64 1
  %58 = insertelement <4 x i32> %57, i32 %55, i64 3
  %59 = shufflevector <4 x i32> %58, <4 x i32> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 3>
  %60 = icmp eq <4 x i32> %59, <i32 73728, i32 176, i32 184, i32 256>
  %61 = zext <4 x i1> %60 to <4 x i8>
  store <4 x i8> %61, ptr %49, align 1, !tbaa !23
  %62 = extractelement <4 x i1> %60, i64 3
  br i1 %62, label %63, label %67

63:                                               ; preds = %._crit_edge
  %64 = lshr i32 %2, 11
  %65 = and i32 %64, 15
  %66 = getelementptr inbounds i8, ptr %0, i64 3644
  store i32 %65, ptr %66, align 4, !tbaa !24
  br label %67

67:                                               ; preds = %63, %._crit_edge
  %68 = getelementptr inbounds i8, ptr %0, i64 3649
  %69 = icmp eq i32 %55, 320
  %70 = zext i1 %69 to i8
  %71 = getelementptr inbounds i8, ptr %0, i64 3648
  store i32 0, ptr %68, align 1
  store i8 %70, ptr %71, align 8, !tbaa !25
  br i1 %69, label %72, label %77

72:                                               ; preds = %67
  %73 = insertelement <4 x i32> poison, i32 %44, i64 0
  %74 = shufflevector <4 x i32> %73, <4 x i32> poison, <4 x i32> zeroinitializer
  %75 = icmp eq <4 x i32> %74, <i32 0, i32 1, i32 2, i32 3>
  %76 = zext <4 x i1> %75 to <4 x i8>
  store <4 x i8> %76, ptr %68, align 1, !tbaa !23
  br label %77

77:                                               ; preds = %72, %67
  %78 = extractelement <4 x i1> %60, i64 2
  %or.cond.demorgan = or i1 %62, %78
  br i1 %or.cond.demorgan, label %79, label %84

79:                                               ; preds = %77
  %80 = insertelement <4 x i32> poison, i32 %44, i64 0
  %81 = shufflevector <4 x i32> %80, <4 x i32> poison, <4 x i32> zeroinitializer
  %82 = icmp eq <4 x i32> %81, <i32 0, i32 1, i32 2, i32 3>
  %83 = zext <4 x i1> %82 to <4 x i8>
  store <4 x i8> %83, ptr %54, align 1, !tbaa !23
  br label %84

84:                                               ; preds = %77, %79
  %85 = icmp eq i32 %55, 384
  %86 = zext i1 %85 to i8
  %87 = getelementptr inbounds i8, ptr %0, i64 3653
  store i8 %86, ptr %87, align 1, !tbaa !26
  switch i32 %55, label %.thread [
    i32 0, label %88
    i32 448, label %91
  ]

88:                                               ; preds = %84
  %89 = getelementptr inbounds i8, ptr %0, i64 3520
  %90 = load i8, ptr %89, align 8, !tbaa !27
  %.not107 = icmp eq i8 %90, 0
  br i1 %.not107, label %.thread, label %.thread121

91:                                               ; preds = %84
  %92 = getelementptr inbounds i8, ptr %0, i64 3521
  %93 = load i8, ptr %92, align 1, !tbaa !28
  %.not108 = icmp eq i8 %93, 0
  br i1 %.not108, label %94, label %.thread116

94:                                               ; preds = %91
  %95 = getelementptr inbounds i8, ptr %0, i64 3523
  %96 = load i8, ptr %95, align 1, !tbaa !29
  %.not109 = icmp eq i8 %96, 0
  br i1 %.not109, label %.thread116, label %97

97:                                               ; preds = %94
  %98 = getelementptr inbounds i8, ptr %0, i64 3544
  %99 = load i8, ptr %98, align 8, !tbaa !30
  %.not110 = icmp eq i8 %99, 0
  br i1 %.not110, label %.thread121, label %.thread116

.thread:                                          ; preds = %84, %88
  %100 = icmp ne i32 %4, 172
  %101 = and i32 %2, 384
  %.not111 = icmp eq i32 %101, 0
  %or.cond126 = select i1 %100, i1 true, i1 %.not111
  br i1 %or.cond126, label %.thread116, label %104

.thread116:                                       ; preds = %.thread, %97, %94, %91
  %102 = getelementptr inbounds i8, ptr %0, i64 3654
  store i8 0, ptr %102, align 2, !tbaa !31
  br label %111

.thread121:                                       ; preds = %97, %88
  %103 = getelementptr inbounds i8, ptr %0, i64 3654
  store i8 1, ptr %103, align 2, !tbaa !31
  br label %.thread124

104:                                              ; preds = %.thread
  %105 = getelementptr inbounds i8, ptr %0, i64 3523
  %106 = load i8, ptr %105, align 1, !tbaa !29
  %107 = icmp ne i8 %106, 0
  %108 = zext i1 %107 to i8
  %109 = getelementptr inbounds i8, ptr %0, i64 3654
  store i8 %108, ptr %109, align 2, !tbaa !31
  br i1 %107, label %.thread124, label %111

.thread124:                                       ; preds = %104, %.thread121
  %110 = getelementptr inbounds i8, ptr %0, i64 3656
  store i8 0, ptr %110, align 8, !tbaa !32
  br label %117

111:                                              ; preds = %.thread116, %104
  %112 = icmp eq i32 %4, 172
  %113 = zext i1 %112 to i8
  %114 = getelementptr inbounds i8, ptr %0, i64 3656
  store i8 %113, ptr %114, align 8, !tbaa !32
  %115 = icmp eq i32 %55, 448
  %116 = zext i1 %115 to i8
  br label %117

117:                                              ; preds = %.thread124, %111
  %118 = phi i8 [ %116, %111 ], [ 0, %.thread124 ]
  %119 = getelementptr inbounds i8, ptr %0, i64 3655
  store i8 %118, ptr %119, align 1, !tbaa !33
  ret void
}

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 3432}
!6 = !{!"Apr", !7, i64 0, !11, i64 64, !14, i64 3192, !13, i64 3376, !15, i64 3384, !15, i64 3408, !13, i64 3432, !12, i64 3440, !12, i64 3448, !13, i64 3456, !13, i64 3460, !13, i64 3464, !9, i64 3468, !16, i64 3470, !16, i64 3472, !9, i64 3474, !9, i64 3475, !9, i64 3476, !9, i64 3477, !9, i64 3478, !9, i64 3479, !9, i64 3480, !9, i64 3481, !9, i64 3482, !9, i64 3483, !9, i64 3484, !9, i64 3485, !9, i64 3486, !9, i64 3487, !9, i64 3488, !9, i64 3489, !9, i64 3490, !9, i64 3491, !9, i64 3492, !9, i64 3493, !9, i64 3494, !9, i64 3495, !9, i64 3496, !9, i64 3497, !9, i64 3498, !9, i64 3499, !9, i64 3500, !9, i64 3501, !9, i64 3502, !13, i64 3504, !13, i64 3508, !9, i64 3512, !9, i64 3513, !9, i64 3514, !9, i64 3515, !9, i64 3516, !9, i64 3517, !9, i64 3518, !9, i64 3519, !9, i64 3520, !9, i64 3521, !9, i64 3522, !9, i64 3523, !9, i64 3524, !9, i64 3525, !9, i64 3526, !9, i64 3527, !9, i64 3528, !9, i64 3529, !9, i64 3530, !9, i64 3531, !9, i64 3532, !9, i64 3533, !9, i64 3534, !9, i64 3535, !9, i64 3536, !9, i64 3537, !9, i64 3538, !9, i64 3539, !9, i64 3540, !9, i64 3541, !9, i64 3542, !9, i64 3543, !9, i64 3544, !9, i64 3545, !9, i64 3546, !9, i64 3547, !9, i64 3548, !9, i64 3549, !9, i64 3550, !9, i64 3551, !13, i64 3552, !9, i64 3556, !9, i64 3557, !9, i64 3558, !9, i64 3559, !9, i64 3560, !9, i64 3561, !9, i64 3562, !9, i64 3563, !9, i64 3564, !9, i64 3565, !9, i64 3566, !9, i64 3567, !9, i64 3568, !9, i64 3569, !9, i64 3570, !9, i64 3571, !9, i64 3572, !9, i64 3573, !9, i64 3574, !9, i64 3575, !9, i64 3576, !9, i64 3577, !9, i64 3578, !9, i64 3579, !9, i64 3580, !9, i64 3581, !9, i64 3582, !9, i64 3583, !9, i64 3584, !9, i64 3585, !9, i64 3586, !9, i64 3587, !9, i64 3588, !9, i64 3589, !9, i64 3590, !9, i64 3591, !9, i64 3592, !9, i64 3593, !9, i64 3594, !9, i64 3595, !9, i64 3596, !9, i64 3597, !9, i64 3598, !9, i64 3599, !9, i64 3600, !9, i64 3601, !9, i64 3602, !9, i64 3603, !9, i64 3604, !9, i64 3605, !9, i64 3606, !9, i64 3607, !9, i64 3608, !9, i64 3609, !9, i64 3610, !9, i64 3611, !9, i64 3612, !9, i64 3613, !9, i64 3614, !13, i64 3616, !13, i64 3620, !13, i64 3624, !9, i64 3628, !9, i64 3629, !9, i64 3630, !9, i64 3631, !9, i64 3632, !9, i64 3633, !9, i64 3634, !9, i64 3635, !9, i64 3636, !9, i64 3637, !9, i64 3638, !9, i64 3639, !9, i64 3640, !9, i64 3641, !9, i64 3642, !13, i64 3644, !9, i64 3648, !9, i64 3649, !9, i64 3650, !9, i64 3651, !9, i64 3652, !9, i64 3653, !9, i64 3654, !9, i64 3655, !9, i64 3656, !9, i64 3657, !9, i64 3658, !8, i64 3664, !8, i64 3672, !13, i64 3680, !9, i64 3684, !9, i64 3688, !8, i64 4168, !8, i64 4176}
!7 = !{!"Device", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48, !8, i64 56}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"IOBus", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !9, i64 56}
!12 = !{!"long", !9, i64 0}
!13 = !{!"int", !9, i64 0}
!14 = !{!"Membus", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !8, i64 48, !9, i64 56}
!15 = !{!"AprState", !12, i64 0, !12, i64 8, !12, i64 16}
!16 = !{!"short", !9, i64 0}
!17 = !{!6, !13, i64 3620}
!18 = !{!6, !13, i64 3624}
!19 = !{!6, !12, i64 88}
!20 = !{!6, !9, i64 3628}
!21 = !{!6, !9, i64 3629}
!22 = !{!6, !9, i64 3634}
!23 = !{!9, !9, i64 0}
!24 = !{!6, !13, i64 3644}
!25 = !{!6, !9, i64 3648}
!26 = !{!6, !9, i64 3653}
!27 = !{!6, !9, i64 3520}
!28 = !{!6, !9, i64 3521}
!29 = !{!6, !9, i64 3523}
!30 = !{!6, !9, i64 3544}
!31 = !{!6, !9, i64 3654}
!32 = !{!6, !9, i64 3656}
!33 = !{!6, !9, i64 3655}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InstCombinePass,JumpThreadingPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass