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

; 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.termios = type { i32, i32, i32, i32, i8, [32 x i8], i32, i32 }
%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 @talkserial(i32 noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %struct.termios, align 4
  %8 = alloca %struct.Apr, align 8
  %9 = alloca i8, align 1
  %10 = alloca [32 x i8], align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 60, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4184, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %14 = load i32, ptr %4, align 4, !tbaa !5
  %15 = call i32 @tcgetattr(i32 noundef %14, ptr noundef %7) #5
  %16 = icmp eq i32 %15, 0
  br i1 %16, label %17, label %22

17:                                               ; preds = %3
  %18 = call i32 @cfsetispeed(ptr noundef %7, i32 noundef 15) #5
  %19 = call i32 @cfsetospeed(ptr noundef %7, i32 noundef 15) #5
  call void @cfmakeraw(ptr noundef %7) #5
  %20 = load i32, ptr %4, align 4, !tbaa !5
  %21 = call i32 @tcsetattr(i32 noundef %20, i32 noundef 0, ptr noundef %7) #5
  br label %22

22:                                               ; preds = %17, %3
  br label %23

23:                                               ; preds = %31, %22
  %24 = load i32, ptr %4, align 4, !tbaa !5
  %25 = call i32 @readn(i32 noundef %24, ptr noundef %9, i32 noundef 1)
  %26 = icmp eq i32 %25, 0
  %27 = zext i1 %26 to i32
  %28 = load i8, ptr %9, align 1, !tbaa !11
  %29 = sext i8 %28 to i32
  %30 = icmp ne i32 %29, 13
  br i1 %30, label %31, label %32

31:                                               ; preds = %23
  br label %23, !llvm.loop !12

32:                                               ; preds = %23
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %33

33:                                               ; preds = %829, %32
  br label %34

34:                                               ; preds = %33
  %35 = load ptr, ptr %5, align 8, !tbaa !9
  %36 = icmp eq ptr %35, null
  br i1 %36, label %37, label %38

37:                                               ; preds = %34
  store i32 1, ptr %13, align 4
  br label %839

38:                                               ; preds = %34
  %39 = load ptr, ptr %5, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %8, ptr align 8 %39, i64 4184, i1 false), !tbaa.struct !14
  %40 = load i32, ptr %4, align 4, !tbaa !5
  %41 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %42 = call i32 @readn(i32 noundef %40, ptr noundef %41, i32 noundef 15)
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %38
  br label %838

45:                                               ; preds = %38
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = getelementptr inbounds %struct.Apr, ptr %46, i32 0, i32 8
  store i64 0, ptr %47, align 8, !tbaa !19
  %48 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %49 = load i8, ptr %48, align 16, !tbaa !11
  %50 = sext i8 %49 to i64
  %51 = and i64 %50, 63
  %52 = shl i64 %51, 30
  %53 = load ptr, ptr %5, align 8, !tbaa !9
  %54 = getelementptr inbounds %struct.Apr, ptr %53, i32 0, i32 8
  %55 = load i64, ptr %54, align 8, !tbaa !19
  %56 = or i64 %55, %52
  store i64 %56, ptr %54, align 8, !tbaa !19
  %57 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 1
  %58 = load i8, ptr %57, align 1, !tbaa !11
  %59 = sext i8 %58 to i64
  %60 = and i64 %59, 63
  %61 = shl i64 %60, 24
  %62 = load ptr, ptr %5, align 8, !tbaa !9
  %63 = getelementptr inbounds %struct.Apr, ptr %62, i32 0, i32 8
  %64 = load i64, ptr %63, align 8, !tbaa !19
  %65 = or i64 %64, %61
  store i64 %65, ptr %63, align 8, !tbaa !19
  %66 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 2
  %67 = load i8, ptr %66, align 2, !tbaa !11
  %68 = sext i8 %67 to i64
  %69 = and i64 %68, 63
  %70 = shl i64 %69, 18
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = getelementptr inbounds %struct.Apr, ptr %71, i32 0, i32 8
  %73 = load i64, ptr %72, align 8, !tbaa !19
  %74 = or i64 %73, %70
  store i64 %74, ptr %72, align 8, !tbaa !19
  %75 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 3
  %76 = load i8, ptr %75, align 1, !tbaa !11
  %77 = sext i8 %76 to i64
  %78 = and i64 %77, 63
  %79 = shl i64 %78, 12
  %80 = load ptr, ptr %5, align 8, !tbaa !9
  %81 = getelementptr inbounds %struct.Apr, ptr %80, i32 0, i32 8
  %82 = load i64, ptr %81, align 8, !tbaa !19
  %83 = or i64 %82, %79
  store i64 %83, ptr %81, align 8, !tbaa !19
  %84 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 4
  %85 = load i8, ptr %84, align 4, !tbaa !11
  %86 = sext i8 %85 to i64
  %87 = and i64 %86, 63
  %88 = shl i64 %87, 6
  %89 = load ptr, ptr %5, align 8, !tbaa !9
  %90 = getelementptr inbounds %struct.Apr, ptr %89, i32 0, i32 8
  %91 = load i64, ptr %90, align 8, !tbaa !19
  %92 = or i64 %91, %88
  store i64 %92, ptr %90, align 8, !tbaa !19
  %93 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 5
  %94 = load i8, ptr %93, align 1, !tbaa !11
  %95 = sext i8 %94 to i64
  %96 = and i64 %95, 63
  %97 = shl i64 %96, 0
  %98 = load ptr, ptr %5, align 8, !tbaa !9
  %99 = getelementptr inbounds %struct.Apr, ptr %98, i32 0, i32 8
  %100 = load i64, ptr %99, align 8, !tbaa !19
  %101 = or i64 %100, %97
  store i64 %101, ptr %99, align 8, !tbaa !19
  %102 = load ptr, ptr %5, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.Apr, ptr %102, i32 0, i32 11
  store i32 0, ptr %103, align 8, !tbaa !25
  %104 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 6
  %105 = load i8, ptr %104, align 2, !tbaa !11
  %106 = sext i8 %105 to i64
  %107 = and i64 %106, 63
  %108 = shl i64 %107, 12
  %109 = load ptr, ptr %5, align 8, !tbaa !9
  %110 = getelementptr inbounds %struct.Apr, ptr %109, i32 0, i32 11
  %111 = load i32, ptr %110, align 8, !tbaa !25
  %112 = zext i32 %111 to i64
  %113 = or i64 %112, %108
  %114 = trunc i64 %113 to i32
  store i32 %114, ptr %110, align 8, !tbaa !25
  %115 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 7
  %116 = load i8, ptr %115, align 1, !tbaa !11
  %117 = sext i8 %116 to i64
  %118 = and i64 %117, 63
  %119 = shl i64 %118, 6
  %120 = load ptr, ptr %5, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.Apr, ptr %120, i32 0, i32 11
  %122 = load i32, ptr %121, align 8, !tbaa !25
  %123 = zext i32 %122 to i64
  %124 = or i64 %123, %119
  %125 = trunc i64 %124 to i32
  store i32 %125, ptr %121, align 8, !tbaa !25
  %126 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 8
  %127 = load i8, ptr %126, align 8, !tbaa !11
  %128 = sext i8 %127 to i64
  %129 = and i64 %128, 63
  %130 = shl i64 %129, 0
  %131 = load ptr, ptr %5, align 8, !tbaa !9
  %132 = getelementptr inbounds %struct.Apr, ptr %131, i32 0, i32 11
  %133 = load i32, ptr %132, align 8, !tbaa !25
  %134 = zext i32 %133 to i64
  %135 = or i64 %134, %130
  %136 = trunc i64 %135 to i32
  store i32 %136, ptr %132, align 8, !tbaa !25
  %137 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %138 = load i8, ptr %137, align 2, !tbaa !11
  %139 = sext i8 %138 to i32
  %140 = and i32 %139, 32
  %141 = icmp ne i32 %140, 0
  %142 = xor i1 %141, true
  %143 = xor i1 %142, true
  %144 = zext i1 %143 to i32
  %145 = trunc i32 %144 to i8
  %146 = load ptr, ptr %5, align 8, !tbaa !9
  %147 = getelementptr inbounds %struct.Apr, ptr %146, i32 0, i32 28
  store i8 %145, ptr %147, align 1, !tbaa !26
  %148 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %149 = load i8, ptr %148, align 1, !tbaa !11
  %150 = sext i8 %149 to i32
  %151 = and i32 %150, 32
  %152 = icmp ne i32 %151, 0
  %153 = xor i1 %152, true
  %154 = xor i1 %153, true
  %155 = zext i1 %154 to i32
  %156 = trunc i32 %155 to i8
  %157 = load ptr, ptr %5, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct.Apr, ptr %157, i32 0, i32 29
  store i8 %156, ptr %158, align 8, !tbaa !27
  %159 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %160 = load i8, ptr %159, align 2, !tbaa !11
  %161 = sext i8 %160 to i32
  %162 = and i32 %161, 16
  %163 = icmp ne i32 %162, 0
  %164 = xor i1 %163, true
  %165 = xor i1 %164, true
  %166 = zext i1 %165 to i32
  %167 = trunc i32 %166 to i8
  %168 = load ptr, ptr %5, align 8, !tbaa !9
  %169 = getelementptr inbounds %struct.Apr, ptr %168, i32 0, i32 31
  store i8 %167, ptr %169, align 2, !tbaa !28
  %170 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %171 = load i8, ptr %170, align 1, !tbaa !11
  %172 = sext i8 %171 to i32
  %173 = and i32 %172, 16
  %174 = icmp ne i32 %173, 0
  %175 = xor i1 %174, true
  %176 = xor i1 %175, true
  %177 = zext i1 %176 to i32
  %178 = trunc i32 %177 to i8
  %179 = load ptr, ptr %5, align 8, !tbaa !9
  %180 = getelementptr inbounds %struct.Apr, ptr %179, i32 0, i32 30
  store i8 %178, ptr %180, align 1, !tbaa !29
  %181 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %182 = load i8, ptr %181, align 2, !tbaa !11
  %183 = sext i8 %182 to i32
  %184 = and i32 %183, 8
  %185 = icmp ne i32 %184, 0
  %186 = xor i1 %185, true
  %187 = xor i1 %186, true
  %188 = zext i1 %187 to i32
  %189 = trunc i32 %188 to i8
  %190 = load ptr, ptr %5, align 8, !tbaa !9
  %191 = getelementptr inbounds %struct.Apr, ptr %190, i32 0, i32 33
  store i8 %189, ptr %191, align 4, !tbaa !30
  %192 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %193 = load i8, ptr %192, align 1, !tbaa !11
  %194 = sext i8 %193 to i32
  %195 = and i32 %194, 8
  %196 = icmp ne i32 %195, 0
  %197 = xor i1 %196, true
  %198 = xor i1 %197, true
  %199 = zext i1 %198 to i32
  %200 = trunc i32 %199 to i8
  %201 = load ptr, ptr %5, align 8, !tbaa !9
  %202 = getelementptr inbounds %struct.Apr, ptr %201, i32 0, i32 32
  store i8 %200, ptr %202, align 1, !tbaa !31
  %203 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %204 = load i8, ptr %203, align 2, !tbaa !11
  %205 = sext i8 %204 to i32
  %206 = and i32 %205, 4
  %207 = icmp ne i32 %206, 0
  %208 = xor i1 %207, true
  %209 = xor i1 %208, true
  %210 = zext i1 %209 to i32
  %211 = trunc i32 %210 to i8
  %212 = load ptr, ptr %5, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.Apr, ptr %212, i32 0, i32 34
  store i8 %211, ptr %213, align 1, !tbaa !32
  %214 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %215 = load i8, ptr %214, align 1, !tbaa !11
  %216 = sext i8 %215 to i32
  %217 = and i32 %216, 4
  %218 = icmp ne i32 %217, 0
  %219 = xor i1 %218, true
  %220 = xor i1 %219, true
  %221 = zext i1 %220 to i32
  %222 = trunc i32 %221 to i8
  %223 = load ptr, ptr %5, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.Apr, ptr %223, i32 0, i32 35
  store i8 %222, ptr %224, align 2, !tbaa !33
  %225 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %226 = load i8, ptr %225, align 2, !tbaa !11
  %227 = sext i8 %226 to i32
  %228 = and i32 %227, 2
  %229 = icmp ne i32 %228, 0
  %230 = xor i1 %229, true
  %231 = xor i1 %230, true
  %232 = zext i1 %231 to i32
  %233 = trunc i32 %232 to i8
  %234 = load ptr, ptr %5, align 8, !tbaa !9
  %235 = getelementptr inbounds %struct.Apr, ptr %234, i32 0, i32 36
  store i8 %233, ptr %235, align 1, !tbaa !34
  %236 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %237 = load i8, ptr %236, align 1, !tbaa !11
  %238 = sext i8 %237 to i32
  %239 = and i32 %238, 2
  %240 = icmp ne i32 %239, 0
  %241 = xor i1 %240, true
  %242 = xor i1 %241, true
  %243 = zext i1 %242 to i32
  %244 = trunc i32 %243 to i8
  %245 = load ptr, ptr %5, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.Apr, ptr %245, i32 0, i32 37
  store i8 %244, ptr %246, align 8, !tbaa !35
  %247 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  %248 = load i8, ptr %247, align 2, !tbaa !11
  %249 = sext i8 %248 to i32
  %250 = and i32 %249, 1
  %251 = icmp ne i32 %250, 0
  %252 = xor i1 %251, true
  %253 = xor i1 %252, true
  %254 = zext i1 %253 to i32
  %255 = trunc i32 %254 to i8
  %256 = load ptr, ptr %5, align 8, !tbaa !9
  %257 = getelementptr inbounds %struct.Apr, ptr %256, i32 0, i32 38
  store i8 %255, ptr %257, align 1, !tbaa !36
  %258 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  %259 = load i8, ptr %258, align 1, !tbaa !11
  %260 = sext i8 %259 to i32
  %261 = and i32 %260, 1
  %262 = icmp ne i32 %261, 0
  %263 = xor i1 %262, true
  %264 = xor i1 %263, true
  %265 = zext i1 %264 to i32
  %266 = trunc i32 %265 to i8
  %267 = load ptr, ptr %5, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.Apr, ptr %267, i32 0, i32 39
  store i8 %266, ptr %268, align 2, !tbaa !37
  %269 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 11
  %270 = load i8, ptr %269, align 1, !tbaa !11
  %271 = sext i8 %270 to i32
  %272 = and i32 %271, 8
  %273 = icmp ne i32 %272, 0
  %274 = xor i1 %273, true
  %275 = xor i1 %274, true
  %276 = zext i1 %275 to i32
  %277 = trunc i32 %276 to i8
  %278 = load ptr, ptr %5, align 8, !tbaa !9
  %279 = getelementptr inbounds %struct.Apr, ptr %278, i32 0, i32 40
  store i8 %277, ptr %279, align 1, !tbaa !38
  %280 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 11
  %281 = load i8, ptr %280, align 1, !tbaa !11
  %282 = sext i8 %281 to i32
  %283 = and i32 %282, 4
  %284 = icmp ne i32 %283, 0
  %285 = xor i1 %284, true
  %286 = xor i1 %285, true
  %287 = zext i1 %286 to i32
  %288 = trunc i32 %287 to i8
  %289 = load ptr, ptr %5, align 8, !tbaa !9
  %290 = getelementptr inbounds %struct.Apr, ptr %289, i32 0, i32 41
  store i8 %288, ptr %290, align 4, !tbaa !39
  %291 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 11
  %292 = load i8, ptr %291, align 1, !tbaa !11
  %293 = sext i8 %292 to i32
  %294 = and i32 %293, 2
  %295 = icmp ne i32 %294, 0
  %296 = xor i1 %295, true
  %297 = xor i1 %296, true
  %298 = zext i1 %297 to i32
  %299 = trunc i32 %298 to i8
  %300 = load ptr, ptr %5, align 8, !tbaa !9
  %301 = getelementptr inbounds %struct.Apr, ptr %300, i32 0, i32 42
  store i8 %299, ptr %301, align 1, !tbaa !40
  %302 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 11
  %303 = load i8, ptr %302, align 1, !tbaa !11
  %304 = sext i8 %303 to i32
  %305 = and i32 %304, 1
  %306 = icmp ne i32 %305, 0
  %307 = xor i1 %306, true
  %308 = xor i1 %307, true
  %309 = zext i1 %308 to i32
  %310 = trunc i32 %309 to i8
  %311 = load ptr, ptr %5, align 8, !tbaa !9
  %312 = getelementptr inbounds %struct.Apr, ptr %311, i32 0, i32 43
  store i8 %310, ptr %312, align 2, !tbaa !41
  %313 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 12
  %314 = load i8, ptr %313, align 4, !tbaa !11
  %315 = sext i8 %314 to i32
  %316 = and i32 %315, 8
  %317 = icmp ne i32 %316, 0
  %318 = xor i1 %317, true
  %319 = xor i1 %318, true
  %320 = zext i1 %319 to i32
  %321 = trunc i32 %320 to i8
  %322 = load ptr, ptr %5, align 8, !tbaa !9
  %323 = getelementptr inbounds %struct.Apr, ptr %322, i32 0, i32 19
  store i8 %321, ptr %323, align 2, !tbaa !42
  %324 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 12
  %325 = load i8, ptr %324, align 4, !tbaa !11
  %326 = sext i8 %325 to i32
  %327 = and i32 %326, 4
  %328 = icmp ne i32 %327, 0
  %329 = xor i1 %328, true
  %330 = xor i1 %329, true
  %331 = zext i1 %330 to i32
  %332 = trunc i32 %331 to i8
  %333 = load ptr, ptr %5, align 8, !tbaa !9
  %334 = getelementptr inbounds %struct.Apr, ptr %333, i32 0, i32 20
  store i8 %332, ptr %334, align 1, !tbaa !43
  %335 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 12
  %336 = load i8, ptr %335, align 4, !tbaa !11
  %337 = sext i8 %336 to i32
  %338 = and i32 %337, 2
  %339 = icmp ne i32 %338, 0
  %340 = xor i1 %339, true
  %341 = xor i1 %340, true
  %342 = zext i1 %341 to i32
  %343 = trunc i32 %342 to i8
  %344 = load ptr, ptr %5, align 8, !tbaa !9
  %345 = getelementptr inbounds %struct.Apr, ptr %344, i32 0, i32 21
  store i8 %343, ptr %345, align 8, !tbaa !44
  %346 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 12
  %347 = load i8, ptr %346, align 4, !tbaa !11
  %348 = sext i8 %347 to i32
  %349 = and i32 %348, 1
  %350 = icmp ne i32 %349, 0
  %351 = xor i1 %350, true
  %352 = xor i1 %351, true
  %353 = zext i1 %352 to i32
  %354 = trunc i32 %353 to i8
  %355 = load ptr, ptr %5, align 8, !tbaa !9
  %356 = getelementptr inbounds %struct.Apr, ptr %355, i32 0, i32 22
  store i8 %354, ptr %356, align 1, !tbaa !45
  %357 = load ptr, ptr %5, align 8, !tbaa !9
  %358 = getelementptr inbounds %struct.Apr, ptr %357, i32 0, i32 22
  %359 = load i8, ptr %358, align 1, !tbaa !45
  %360 = icmp ne i8 %359, 0
  br i1 %360, label %361, label %510

361:                                              ; preds = %45
  %362 = load ptr, ptr %5, align 8, !tbaa !9
  %363 = getelementptr inbounds %struct.Apr, ptr %362, i32 0, i32 28
  %364 = load i8, ptr %363, align 1, !tbaa !26
  %365 = zext i8 %364 to i32
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %371

367:                                              ; preds = %361
  %368 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 28
  %369 = load i8, ptr %368, align 1, !tbaa !26
  %370 = icmp ne i8 %369, 0
  br i1 %370, label %371, label %461

371:                                              ; preds = %367, %361
  %372 = load ptr, ptr %5, align 8, !tbaa !9
  %373 = getelementptr inbounds %struct.Apr, ptr %372, i32 0, i32 29
  %374 = load i8, ptr %373, align 8, !tbaa !27
  %375 = zext i8 %374 to i32
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %377, label %381

377:                                              ; preds = %371
  %378 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 29
  %379 = load i8, ptr %378, align 8, !tbaa !27
  %380 = icmp ne i8 %379, 0
  br i1 %380, label %381, label %461

381:                                              ; preds = %377, %371
  %382 = load ptr, ptr %5, align 8, !tbaa !9
  %383 = getelementptr inbounds %struct.Apr, ptr %382, i32 0, i32 31
  %384 = load i8, ptr %383, align 2, !tbaa !28
  %385 = zext i8 %384 to i32
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %391

387:                                              ; preds = %381
  %388 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 31
  %389 = load i8, ptr %388, align 2, !tbaa !28
  %390 = icmp ne i8 %389, 0
  br i1 %390, label %391, label %461

391:                                              ; preds = %387, %381
  %392 = load ptr, ptr %5, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.Apr, ptr %392, i32 0, i32 30
  %394 = load i8, ptr %393, align 1, !tbaa !29
  %395 = zext i8 %394 to i32
  %396 = icmp ne i32 %395, 0
  br i1 %396, label %397, label %401

397:                                              ; preds = %391
  %398 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 30
  %399 = load i8, ptr %398, align 1, !tbaa !29
  %400 = icmp ne i8 %399, 0
  br i1 %400, label %401, label %461

401:                                              ; preds = %397, %391
  %402 = load ptr, ptr %5, align 8, !tbaa !9
  %403 = getelementptr inbounds %struct.Apr, ptr %402, i32 0, i32 34
  %404 = load i8, ptr %403, align 1, !tbaa !32
  %405 = zext i8 %404 to i32
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %411

407:                                              ; preds = %401
  %408 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 34
  %409 = load i8, ptr %408, align 1, !tbaa !32
  %410 = icmp ne i8 %409, 0
  br i1 %410, label %411, label %461

411:                                              ; preds = %407, %401
  %412 = load ptr, ptr %5, align 8, !tbaa !9
  %413 = getelementptr inbounds %struct.Apr, ptr %412, i32 0, i32 35
  %414 = load i8, ptr %413, align 2, !tbaa !33
  %415 = zext i8 %414 to i32
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %421

417:                                              ; preds = %411
  %418 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 35
  %419 = load i8, ptr %418, align 2, !tbaa !33
  %420 = icmp ne i8 %419, 0
  br i1 %420, label %421, label %461

421:                                              ; preds = %417, %411
  %422 = load ptr, ptr %5, align 8, !tbaa !9
  %423 = getelementptr inbounds %struct.Apr, ptr %422, i32 0, i32 36
  %424 = load i8, ptr %423, align 1, !tbaa !34
  %425 = zext i8 %424 to i32
  %426 = icmp ne i32 %425, 0
  br i1 %426, label %427, label %431

427:                                              ; preds = %421
  %428 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 36
  %429 = load i8, ptr %428, align 1, !tbaa !34
  %430 = icmp ne i8 %429, 0
  br i1 %430, label %431, label %461

431:                                              ; preds = %427, %421
  %432 = load ptr, ptr %5, align 8, !tbaa !9
  %433 = getelementptr inbounds %struct.Apr, ptr %432, i32 0, i32 37
  %434 = load i8, ptr %433, align 8, !tbaa !35
  %435 = zext i8 %434 to i32
  %436 = icmp ne i32 %435, 0
  br i1 %436, label %437, label %441

437:                                              ; preds = %431
  %438 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 37
  %439 = load i8, ptr %438, align 8, !tbaa !35
  %440 = icmp ne i8 %439, 0
  br i1 %440, label %441, label %461

441:                                              ; preds = %437, %431
  %442 = load ptr, ptr %5, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.Apr, ptr %442, i32 0, i32 38
  %444 = load i8, ptr %443, align 1, !tbaa !36
  %445 = zext i8 %444 to i32
  %446 = icmp ne i32 %445, 0
  br i1 %446, label %447, label %451

447:                                              ; preds = %441
  %448 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 38
  %449 = load i8, ptr %448, align 1, !tbaa !36
  %450 = icmp ne i8 %449, 0
  br i1 %450, label %451, label %461

451:                                              ; preds = %447, %441
  %452 = load ptr, ptr %5, align 8, !tbaa !9
  %453 = getelementptr inbounds %struct.Apr, ptr %452, i32 0, i32 39
  %454 = load i8, ptr %453, align 2, !tbaa !37
  %455 = zext i8 %454 to i32
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %457, label %466

457:                                              ; preds = %451
  %458 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 39
  %459 = load i8, ptr %458, align 2, !tbaa !37
  %460 = icmp ne i8 %459, 0
  br i1 %460, label %466, label %461

461:                                              ; preds = %457, %447, %437, %427, %417, %407, %397, %387, %377, %367
  %462 = load ptr, ptr %5, align 8, !tbaa !9
  %463 = getelementptr inbounds %struct.Apr, ptr %462, i32 0, i32 178
  %464 = load i32, ptr %463, align 8, !tbaa !46
  %465 = or i32 %464, 1
  store i32 %465, ptr %463, align 8, !tbaa !46
  br label %466

466:                                              ; preds = %461, %457, %451
  %467 = load ptr, ptr %5, align 8, !tbaa !9
  %468 = getelementptr inbounds %struct.Apr, ptr %467, i32 0, i32 33
  %469 = load i8, ptr %468, align 4, !tbaa !30
  %470 = zext i8 %469 to i32
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %472, label %481

472:                                              ; preds = %466
  %473 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 33
  %474 = load i8, ptr %473, align 4, !tbaa !30
  %475 = icmp ne i8 %474, 0
  br i1 %475, label %481, label %476

476:                                              ; preds = %472
  %477 = load ptr, ptr %5, align 8, !tbaa !9
  %478 = getelementptr inbounds %struct.Apr, ptr %477, i32 0, i32 178
  %479 = load i32, ptr %478, align 8, !tbaa !46
  %480 = or i32 %479, 2
  store i32 %480, ptr %478, align 8, !tbaa !46
  br label %481

481:                                              ; preds = %476, %472, %466
  %482 = load ptr, ptr %6, align 8, !tbaa !9
  %483 = icmp ne ptr %482, null
  br i1 %483, label %484, label %509

484:                                              ; preds = %481
  %485 = load ptr, ptr %5, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.Apr, ptr %485, i32 0, i32 41
  %487 = load i8, ptr %486, align 4, !tbaa !39
  %488 = zext i8 %487 to i32
  %489 = icmp ne i32 %488, 0
  br i1 %489, label %490, label %496

490:                                              ; preds = %484
  %491 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 41
  %492 = load i8, ptr %491, align 4, !tbaa !39
  %493 = icmp ne i8 %492, 0
  br i1 %493, label %496, label %494

494:                                              ; preds = %490
  %495 = load ptr, ptr %6, align 8, !tbaa !9
  call void @ptr_setmotor(ptr noundef %495, i32 noundef 1)
  br label %496

496:                                              ; preds = %494, %490, %484
  %497 = load ptr, ptr %5, align 8, !tbaa !9
  %498 = getelementptr inbounds %struct.Apr, ptr %497, i32 0, i32 40
  %499 = load i8, ptr %498, align 1, !tbaa !38
  %500 = zext i8 %499 to i32
  %501 = icmp ne i32 %500, 0
  br i1 %501, label %502, label %508

502:                                              ; preds = %496
  %503 = getelementptr inbounds %struct.Apr, ptr %8, i32 0, i32 40
  %504 = load i8, ptr %503, align 1, !tbaa !38
  %505 = icmp ne i8 %504, 0
  br i1 %505, label %508, label %506

506:                                              ; preds = %502
  %507 = load ptr, ptr %6, align 8, !tbaa !9
  call void @ptr_setmotor(ptr noundef %507, i32 noundef 0)
  br label %508

508:                                              ; preds = %506, %502, %496
  br label %509

509:                                              ; preds = %508, %481
  br label %510

510:                                              ; preds = %509, %45
  store i32 0, ptr %11, align 4, !tbaa !5
  %511 = load i32, ptr %12, align 4, !tbaa !5
  switch i32 %511, label %810 [
    i32 0, label %512
    i32 1, label %661
  ]

512:                                              ; preds = %510
  %513 = load i32, ptr %11, align 4, !tbaa !5
  %514 = add nsw i32 %513, 1
  store i32 %514, ptr %11, align 4, !tbaa !5
  %515 = sext i32 %513 to i64
  %516 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %515
  store i8 48, ptr %516, align 1, !tbaa !11
  %517 = load ptr, ptr %5, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct.Apr, ptr %517, i32 0, i32 6
  %519 = load i32, ptr %518, align 8, !tbaa !47
  %520 = lshr i32 %519, 12
  %521 = and i32 %520, 63
  %522 = or i32 %521, 64
  %523 = trunc i32 %522 to i8
  %524 = load i32, ptr %11, align 4, !tbaa !5
  %525 = add nsw i32 %524, 1
  store i32 %525, ptr %11, align 4, !tbaa !5
  %526 = sext i32 %524 to i64
  %527 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %526
  store i8 %523, ptr %527, align 1, !tbaa !11
  %528 = load ptr, ptr %5, align 8, !tbaa !9
  %529 = getelementptr inbounds %struct.Apr, ptr %528, i32 0, i32 6
  %530 = load i32, ptr %529, align 8, !tbaa !47
  %531 = lshr i32 %530, 6
  %532 = and i32 %531, 63
  %533 = or i32 %532, 64
  %534 = trunc i32 %533 to i8
  %535 = load i32, ptr %11, align 4, !tbaa !5
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %11, align 4, !tbaa !5
  %537 = sext i32 %535 to i64
  %538 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %537
  store i8 %534, ptr %538, align 1, !tbaa !11
  %539 = load ptr, ptr %5, align 8, !tbaa !9
  %540 = getelementptr inbounds %struct.Apr, ptr %539, i32 0, i32 6
  %541 = load i32, ptr %540, align 8, !tbaa !47
  %542 = lshr i32 %541, 0
  %543 = and i32 %542, 63
  %544 = or i32 %543, 64
  %545 = trunc i32 %544 to i8
  %546 = load i32, ptr %11, align 4, !tbaa !5
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %11, align 4, !tbaa !5
  %548 = sext i32 %546 to i64
  %549 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %548
  store i8 %545, ptr %549, align 1, !tbaa !11
  %550 = load i32, ptr %11, align 4, !tbaa !5
  %551 = add nsw i32 %550, 1
  store i32 %551, ptr %11, align 4, !tbaa !5
  %552 = sext i32 %550 to i64
  %553 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %552
  store i8 49, ptr %553, align 1, !tbaa !11
  %554 = load ptr, ptr %5, align 8, !tbaa !9
  %555 = getelementptr inbounds %struct.Apr, ptr %554, i32 0, i32 7
  %556 = load i64, ptr %555, align 8, !tbaa !48
  %557 = lshr i64 %556, 30
  %558 = and i64 %557, 63
  %559 = or i64 %558, 64
  %560 = trunc i64 %559 to i8
  %561 = load i32, ptr %11, align 4, !tbaa !5
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %11, align 4, !tbaa !5
  %563 = sext i32 %561 to i64
  %564 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %563
  store i8 %560, ptr %564, align 1, !tbaa !11
  %565 = load ptr, ptr %5, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.Apr, ptr %565, i32 0, i32 7
  %567 = load i64, ptr %566, align 8, !tbaa !48
  %568 = lshr i64 %567, 24
  %569 = and i64 %568, 63
  %570 = or i64 %569, 64
  %571 = trunc i64 %570 to i8
  %572 = load i32, ptr %11, align 4, !tbaa !5
  %573 = add nsw i32 %572, 1
  store i32 %573, ptr %11, align 4, !tbaa !5
  %574 = sext i32 %572 to i64
  %575 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %574
  store i8 %571, ptr %575, align 1, !tbaa !11
  %576 = load ptr, ptr %5, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.Apr, ptr %576, i32 0, i32 7
  %578 = load i64, ptr %577, align 8, !tbaa !48
  %579 = lshr i64 %578, 18
  %580 = and i64 %579, 63
  %581 = or i64 %580, 64
  %582 = trunc i64 %581 to i8
  %583 = load i32, ptr %11, align 4, !tbaa !5
  %584 = add nsw i32 %583, 1
  store i32 %584, ptr %11, align 4, !tbaa !5
  %585 = sext i32 %583 to i64
  %586 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %585
  store i8 %582, ptr %586, align 1, !tbaa !11
  %587 = load i32, ptr %11, align 4, !tbaa !5
  %588 = add nsw i32 %587, 1
  store i32 %588, ptr %11, align 4, !tbaa !5
  %589 = sext i32 %587 to i64
  %590 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %589
  store i8 50, ptr %590, align 1, !tbaa !11
  %591 = load ptr, ptr %5, align 8, !tbaa !9
  %592 = getelementptr inbounds %struct.Apr, ptr %591, i32 0, i32 7
  %593 = load i64, ptr %592, align 8, !tbaa !48
  %594 = lshr i64 %593, 12
  %595 = and i64 %594, 63
  %596 = or i64 %595, 64
  %597 = trunc i64 %596 to i8
  %598 = load i32, ptr %11, align 4, !tbaa !5
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %11, align 4, !tbaa !5
  %600 = sext i32 %598 to i64
  %601 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %600
  store i8 %597, ptr %601, align 1, !tbaa !11
  %602 = load ptr, ptr %5, align 8, !tbaa !9
  %603 = getelementptr inbounds %struct.Apr, ptr %602, i32 0, i32 7
  %604 = load i64, ptr %603, align 8, !tbaa !48
  %605 = lshr i64 %604, 6
  %606 = and i64 %605, 63
  %607 = or i64 %606, 64
  %608 = trunc i64 %607 to i8
  %609 = load i32, ptr %11, align 4, !tbaa !5
  %610 = add nsw i32 %609, 1
  store i32 %610, ptr %11, align 4, !tbaa !5
  %611 = sext i32 %609 to i64
  %612 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %611
  store i8 %608, ptr %612, align 1, !tbaa !11
  %613 = load ptr, ptr %5, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.Apr, ptr %613, i32 0, i32 7
  %615 = load i64, ptr %614, align 8, !tbaa !48
  %616 = lshr i64 %615, 0
  %617 = and i64 %616, 63
  %618 = or i64 %617, 64
  %619 = trunc i64 %618 to i8
  %620 = load i32, ptr %11, align 4, !tbaa !5
  %621 = add nsw i32 %620, 1
  store i32 %621, ptr %11, align 4, !tbaa !5
  %622 = sext i32 %620 to i64
  %623 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %622
  store i8 %619, ptr %623, align 1, !tbaa !11
  %624 = load i32, ptr %11, align 4, !tbaa !5
  %625 = add nsw i32 %624, 1
  store i32 %625, ptr %11, align 4, !tbaa !5
  %626 = sext i32 %624 to i64
  %627 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %626
  store i8 51, ptr %627, align 1, !tbaa !11
  %628 = load ptr, ptr %5, align 8, !tbaa !9
  %629 = getelementptr inbounds %struct.Apr, ptr %628, i32 0, i32 9
  %630 = load i32, ptr %629, align 8, !tbaa !49
  %631 = lshr i32 %630, 12
  %632 = and i32 %631, 63
  %633 = or i32 %632, 64
  %634 = trunc i32 %633 to i8
  %635 = load i32, ptr %11, align 4, !tbaa !5
  %636 = add nsw i32 %635, 1
  store i32 %636, ptr %11, align 4, !tbaa !5
  %637 = sext i32 %635 to i64
  %638 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %637
  store i8 %634, ptr %638, align 1, !tbaa !11
  %639 = load ptr, ptr %5, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.Apr, ptr %639, i32 0, i32 9
  %641 = load i32, ptr %640, align 8, !tbaa !49
  %642 = lshr i32 %641, 6
  %643 = and i32 %642, 63
  %644 = or i32 %643, 64
  %645 = trunc i32 %644 to i8
  %646 = load i32, ptr %11, align 4, !tbaa !5
  %647 = add nsw i32 %646, 1
  store i32 %647, ptr %11, align 4, !tbaa !5
  %648 = sext i32 %646 to i64
  %649 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %648
  store i8 %645, ptr %649, align 1, !tbaa !11
  %650 = load ptr, ptr %5, align 8, !tbaa !9
  %651 = getelementptr inbounds %struct.Apr, ptr %650, i32 0, i32 9
  %652 = load i32, ptr %651, align 8, !tbaa !49
  %653 = lshr i32 %652, 0
  %654 = and i32 %653, 63
  %655 = or i32 %654, 64
  %656 = trunc i32 %655 to i8
  %657 = load i32, ptr %11, align 4, !tbaa !5
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %11, align 4, !tbaa !5
  %659 = sext i32 %657 to i64
  %660 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %659
  store i8 %656, ptr %660, align 1, !tbaa !11
  br label %810

661:                                              ; preds = %510
  %662 = load i32, ptr %11, align 4, !tbaa !5
  %663 = add nsw i32 %662, 1
  store i32 %663, ptr %11, align 4, !tbaa !5
  %664 = sext i32 %662 to i64
  %665 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %664
  store i8 52, ptr %665, align 1, !tbaa !11
  %666 = load ptr, ptr %5, align 8, !tbaa !9
  %667 = getelementptr inbounds %struct.Apr, ptr %666, i32 0, i32 10
  %668 = load i32, ptr %667, align 4, !tbaa !50
  %669 = lshr i32 %668, 12
  %670 = and i32 %669, 63
  %671 = or i32 %670, 64
  %672 = trunc i32 %671 to i8
  %673 = load i32, ptr %11, align 4, !tbaa !5
  %674 = add nsw i32 %673, 1
  store i32 %674, ptr %11, align 4, !tbaa !5
  %675 = sext i32 %673 to i64
  %676 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %675
  store i8 %672, ptr %676, align 1, !tbaa !11
  %677 = load ptr, ptr %5, align 8, !tbaa !9
  %678 = getelementptr inbounds %struct.Apr, ptr %677, i32 0, i32 10
  %679 = load i32, ptr %678, align 4, !tbaa !50
  %680 = lshr i32 %679, 6
  %681 = and i32 %680, 63
  %682 = or i32 %681, 64
  %683 = trunc i32 %682 to i8
  %684 = load i32, ptr %11, align 4, !tbaa !5
  %685 = add nsw i32 %684, 1
  store i32 %685, ptr %11, align 4, !tbaa !5
  %686 = sext i32 %684 to i64
  %687 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %686
  store i8 %683, ptr %687, align 1, !tbaa !11
  %688 = load ptr, ptr %5, align 8, !tbaa !9
  %689 = getelementptr inbounds %struct.Apr, ptr %688, i32 0, i32 10
  %690 = load i32, ptr %689, align 4, !tbaa !50
  %691 = lshr i32 %690, 0
  %692 = and i32 %691, 63
  %693 = or i32 %692, 64
  %694 = trunc i32 %693 to i8
  %695 = load i32, ptr %11, align 4, !tbaa !5
  %696 = add nsw i32 %695, 1
  store i32 %696, ptr %11, align 4, !tbaa !5
  %697 = sext i32 %695 to i64
  %698 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %697
  store i8 %694, ptr %698, align 1, !tbaa !11
  %699 = load i32, ptr %11, align 4, !tbaa !5
  %700 = add nsw i32 %699, 1
  store i32 %700, ptr %11, align 4, !tbaa !5
  %701 = sext i32 %699 to i64
  %702 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %701
  store i8 53, ptr %702, align 1, !tbaa !11
  %703 = load ptr, ptr %5, align 8, !tbaa !9
  %704 = getelementptr inbounds %struct.Apr, ptr %703, i32 0, i32 18
  %705 = load i8, ptr %704, align 1, !tbaa !51
  %706 = zext i8 %705 to i32
  %707 = shl i32 %706, 5
  %708 = load ptr, ptr %5, align 8, !tbaa !9
  %709 = getelementptr inbounds %struct.Apr, ptr %708, i32 0, i32 48
  %710 = load i8, ptr %709, align 2, !tbaa !52
  %711 = zext i8 %710 to i32
  %712 = ashr i32 %711, 3
  %713 = or i32 %707, %712
  %714 = or i32 %713, 64
  %715 = trunc i32 %714 to i8
  %716 = load i32, ptr %11, align 4, !tbaa !5
  %717 = add nsw i32 %716, 1
  store i32 %717, ptr %11, align 4, !tbaa !5
  %718 = sext i32 %716 to i64
  %719 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %718
  store i8 %715, ptr %719, align 1, !tbaa !11
  %720 = load ptr, ptr %5, align 8, !tbaa !9
  %721 = getelementptr inbounds %struct.Apr, ptr %720, i32 0, i32 48
  %722 = load i8, ptr %721, align 2, !tbaa !52
  %723 = zext i8 %722 to i32
  %724 = and i32 %723, 7
  %725 = shl i32 %724, 3
  %726 = or i32 %725, 64
  %727 = trunc i32 %726 to i8
  %728 = load i32, ptr %11, align 4, !tbaa !5
  %729 = add nsw i32 %728, 1
  store i32 %729, ptr %11, align 4, !tbaa !5
  %730 = sext i32 %728 to i64
  %731 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %730
  store i8 %727, ptr %731, align 1, !tbaa !11
  %732 = load i32, ptr %11, align 4, !tbaa !5
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %11, align 4, !tbaa !5
  %734 = sext i32 %732 to i64
  %735 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %734
  store i8 64, ptr %735, align 1, !tbaa !11
  %736 = load i32, ptr %11, align 4, !tbaa !5
  %737 = add nsw i32 %736, 1
  store i32 %737, ptr %11, align 4, !tbaa !5
  %738 = sext i32 %736 to i64
  %739 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %738
  store i8 54, ptr %739, align 1, !tbaa !11
  %740 = load ptr, ptr %5, align 8, !tbaa !9
  %741 = getelementptr inbounds %struct.Apr, ptr %740, i32 0, i32 75
  %742 = load i8, ptr %741, align 1, !tbaa !53
  %743 = zext i8 %742 to i32
  %744 = shl i32 %743, 5
  %745 = load ptr, ptr %5, align 8, !tbaa !9
  %746 = getelementptr inbounds %struct.Apr, ptr %745, i32 0, i32 47
  %747 = load i8, ptr %746, align 1, !tbaa !54
  %748 = zext i8 %747 to i32
  %749 = ashr i32 %748, 3
  %750 = or i32 %744, %749
  %751 = or i32 %750, 64
  %752 = trunc i32 %751 to i8
  %753 = load i32, ptr %11, align 4, !tbaa !5
  %754 = add nsw i32 %753, 1
  store i32 %754, ptr %11, align 4, !tbaa !5
  %755 = sext i32 %753 to i64
  %756 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %755
  store i8 %752, ptr %756, align 1, !tbaa !11
  %757 = load ptr, ptr %5, align 8, !tbaa !9
  %758 = getelementptr inbounds %struct.Apr, ptr %757, i32 0, i32 47
  %759 = load i8, ptr %758, align 1, !tbaa !54
  %760 = zext i8 %759 to i32
  %761 = and i32 %760, 7
  %762 = shl i32 %761, 3
  %763 = or i32 %762, 64
  %764 = trunc i32 %763 to i8
  %765 = load i32, ptr %11, align 4, !tbaa !5
  %766 = add nsw i32 %765, 1
  store i32 %766, ptr %11, align 4, !tbaa !5
  %767 = sext i32 %765 to i64
  %768 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %767
  store i8 %764, ptr %768, align 1, !tbaa !11
  %769 = load i32, ptr %11, align 4, !tbaa !5
  %770 = add nsw i32 %769, 1
  store i32 %770, ptr %11, align 4, !tbaa !5
  %771 = sext i32 %769 to i64
  %772 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %771
  store i8 64, ptr %772, align 1, !tbaa !11
  %773 = load i32, ptr %11, align 4, !tbaa !5
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %11, align 4, !tbaa !5
  %775 = sext i32 %773 to i64
  %776 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %775
  store i8 55, ptr %776, align 1, !tbaa !11
  %777 = load ptr, ptr %5, align 8, !tbaa !9
  %778 = getelementptr inbounds %struct.Apr, ptr %777, i32 0, i32 50
  %779 = load i8, ptr %778, align 4, !tbaa !55
  %780 = zext i8 %779 to i32
  %781 = shl i32 %780, 5
  %782 = load ptr, ptr %5, align 8, !tbaa !9
  %783 = getelementptr inbounds %struct.Apr, ptr %782, i32 0, i32 46
  %784 = load i8, ptr %783, align 8, !tbaa !56
  %785 = zext i8 %784 to i32
  %786 = ashr i32 %785, 3
  %787 = or i32 %781, %786
  %788 = or i32 %787, 64
  %789 = trunc i32 %788 to i8
  %790 = load i32, ptr %11, align 4, !tbaa !5
  %791 = add nsw i32 %790, 1
  store i32 %791, ptr %11, align 4, !tbaa !5
  %792 = sext i32 %790 to i64
  %793 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %792
  store i8 %789, ptr %793, align 1, !tbaa !11
  %794 = load ptr, ptr %5, align 8, !tbaa !9
  %795 = getelementptr inbounds %struct.Apr, ptr %794, i32 0, i32 46
  %796 = load i8, ptr %795, align 8, !tbaa !56
  %797 = zext i8 %796 to i32
  %798 = and i32 %797, 7
  %799 = shl i32 %798, 3
  %800 = or i32 %799, 64
  %801 = trunc i32 %800 to i8
  %802 = load i32, ptr %11, align 4, !tbaa !5
  %803 = add nsw i32 %802, 1
  store i32 %803, ptr %11, align 4, !tbaa !5
  %804 = sext i32 %802 to i64
  %805 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %804
  store i8 %801, ptr %805, align 1, !tbaa !11
  %806 = load i32, ptr %11, align 4, !tbaa !5
  %807 = add nsw i32 %806, 1
  store i32 %807, ptr %11, align 4, !tbaa !5
  %808 = sext i32 %806 to i64
  %809 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 %808
  store i8 64, ptr %809, align 1, !tbaa !11
  br label %810

810:                                              ; preds = %661, %512, %510
  %811 = load ptr, ptr %5, align 8, !tbaa !9
  %812 = getelementptr inbounds %struct.Apr, ptr %811, i32 0, i32 22
  %813 = load i8, ptr %812, align 1, !tbaa !45
  %814 = zext i8 %813 to i32
  %815 = icmp eq i32 %814, 0
  br i1 %815, label %816, label %829

816:                                              ; preds = %810
  %817 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 1
  store i8 0, ptr %817, align 1, !tbaa !11
  %818 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 2
  store i8 0, ptr %818, align 2, !tbaa !11
  %819 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 3
  store i8 0, ptr %819, align 1, !tbaa !11
  %820 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 5
  store i8 0, ptr %820, align 1, !tbaa !11
  %821 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 6
  store i8 0, ptr %821, align 2, !tbaa !11
  %822 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 7
  store i8 0, ptr %822, align 1, !tbaa !11
  %823 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 9
  store i8 0, ptr %823, align 1, !tbaa !11
  %824 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 10
  store i8 0, ptr %824, align 2, !tbaa !11
  %825 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 11
  store i8 0, ptr %825, align 1, !tbaa !11
  %826 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 13
  store i8 0, ptr %826, align 1, !tbaa !11
  %827 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 14
  store i8 0, ptr %827, align 2, !tbaa !11
  %828 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 15
  store i8 0, ptr %828, align 1, !tbaa !11
  br label %829

829:                                              ; preds = %816, %810
  %830 = load i32, ptr %12, align 4, !tbaa !5
  %831 = icmp ne i32 %830, 0
  %832 = xor i1 %831, true
  %833 = zext i1 %832 to i32
  store i32 %833, ptr %12, align 4, !tbaa !5
  %834 = load i32, ptr %4, align 4, !tbaa !5
  %835 = getelementptr inbounds [32 x i8], ptr %10, i64 0, i64 0
  %836 = load i32, ptr %11, align 4, !tbaa !5
  %837 = call i32 @writen(i32 noundef %834, ptr noundef %835, i32 noundef %836)
  br label %33

838:                                              ; preds = %44
  store i32 0, ptr %13, align 4
  br label %839

839:                                              ; preds = %838, %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4184, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 60, ptr %7) #5
  %840 = load i32, ptr %13, align 4
  switch i32 %840, label %842 [
    i32 0, label %841
    i32 1, label %841
  ]

841:                                              ; preds = %839, %839
  ret void

842:                                              ; preds = %839
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind
declare i32 @tcgetattr(i32 noundef, ptr noundef) #2

; Function Attrs: nounwind
declare i32 @cfsetispeed(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind
declare i32 @cfsetospeed(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind
declare void @cfmakeraw(ptr noundef) #2

; Function Attrs: nounwind
declare i32 @tcsetattr(i32 noundef, i32 noundef, ptr noundef) #2

declare i32 @readn(i32 noundef, ptr noundef, i32 noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare void @ptr_setmotor(ptr noundef, i32 noundef) #3

declare i32 @writen(i32 noundef, ptr noundef, i32 noundef) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

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" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "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" }
attributes #3 = { "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" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }

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


; 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"

%struct.termios = type { i32, i32, i32, i32, i8, [32 x i8], i32, i32 }

; Function Attrs: nounwind uwtable
define dso_local void @talkserial(i32 noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct.termios, align 4
  %5 = alloca i8, align 1
  %6 = alloca [32 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 60, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #5
  %7 = call i32 @tcgetattr(i32 noundef %0, ptr noundef nonnull %4) #5
  %8 = icmp eq i32 %7, 0
  br i1 %8, label %9, label %.preheader179

9:                                                ; preds = %3
  %10 = call i32 @cfsetispeed(ptr noundef nonnull %4, i32 noundef 15) #5
  %11 = call i32 @cfsetospeed(ptr noundef nonnull %4, i32 noundef 15) #5
  call void @cfmakeraw(ptr noundef nonnull %4) #5
  %12 = call i32 @tcsetattr(i32 noundef %0, i32 noundef 0, ptr noundef nonnull %4) #5
  br label %.preheader179

.preheader179:                                    ; preds = %9, %3
  br label %13

13:                                               ; preds = %.preheader179, %13
  %14 = call i32 @readn(i32 noundef %0, ptr noundef nonnull %5, i32 noundef 1) #5
  %15 = load i8, ptr %5, align 1, !tbaa !5
  %.not = icmp eq i8 %15, 13
  br i1 %.not, label %.preheader, label %13, !llvm.loop !8

.preheader:                                       ; preds = %13
  %.sroa.3.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3487
  %16 = icmp eq ptr %1, null
  br i1 %16, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3488
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3489
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3490
  %.sroa.773.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3492
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3493
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3494
  %.sroa.10.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3495
  %.sroa.11.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3496
  %.sroa.12.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3497
  %.sroa.13.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3498
  %.sroa.14.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3499
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3500
  %.sroa.16.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3501
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %1, i64 3491
  %17 = getelementptr inbounds i8, ptr %1, i64 3448
  %18 = getelementptr inbounds i8, ptr %6, i64 1
  %19 = getelementptr inbounds i8, ptr %6, i64 2
  %20 = getelementptr inbounds i8, ptr %6, i64 3
  %21 = getelementptr inbounds i8, ptr %6, i64 4
  %22 = getelementptr inbounds i8, ptr %6, i64 5
  %23 = getelementptr inbounds i8, ptr %1, i64 3464
  %24 = getelementptr inbounds i8, ptr %6, i64 6
  %25 = getelementptr inbounds i8, ptr %6, i64 7
  %26 = getelementptr inbounds i8, ptr %6, i64 8
  %27 = getelementptr inbounds i8, ptr %6, i64 10
  %28 = getelementptr inbounds i8, ptr %6, i64 9
  %29 = getelementptr inbounds i8, ptr %6, i64 11
  %30 = getelementptr inbounds i8, ptr %1, i64 3502
  %31 = getelementptr inbounds i8, ptr %6, i64 12
  %32 = getelementptr inbounds i8, ptr %1, i64 3478
  %33 = getelementptr inbounds i8, ptr %1, i64 3479
  %34 = getelementptr inbounds i8, ptr %1, i64 3480
  %35 = getelementptr inbounds i8, ptr %1, i64 3481
  %36 = getelementptr inbounds i8, ptr %1, i64 3680
  %.not175 = icmp eq ptr %2, null
  %37 = getelementptr inbounds i8, ptr %1, i64 3432
  %38 = getelementptr inbounds i8, ptr %1, i64 3440
  %39 = getelementptr inbounds i8, ptr %1, i64 3456
  %40 = getelementptr inbounds i8, ptr %6, i64 13
  %41 = getelementptr inbounds i8, ptr %6, i64 14
  %42 = getelementptr inbounds i8, ptr %6, i64 15
  %43 = getelementptr inbounds i8, ptr %1, i64 3460
  %44 = getelementptr inbounds i8, ptr %1, i64 3477
  %45 = getelementptr inbounds i8, ptr %1, i64 3514
  %46 = getelementptr inbounds i8, ptr %1, i64 3541
  %47 = getelementptr inbounds i8, ptr %1, i64 3513
  %48 = getelementptr inbounds i8, ptr %1, i64 3516
  %49 = getelementptr inbounds i8, ptr %1, i64 3512
  br label %50

50:                                               ; preds = %255, %.lr.ph
  %.0177 = phi i1 [ false, %.lr.ph ], [ %256, %255 ]
  %.sroa.3.0.copyload = load i8, ptr %.sroa.3.0..sroa_idx, align 1, !tbaa !5
  %.sroa.4.0.copyload = load i8, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !5
  %.sroa.5.0.copyload = load i8, ptr %.sroa.5.0..sroa_idx, align 1, !tbaa !5
  %.sroa.6.0.copyload = load i8, ptr %.sroa.6.0..sroa_idx, align 2, !tbaa !5
  %.sroa.773.0.copyload = load i8, ptr %.sroa.773.0..sroa_idx, align 4, !tbaa !5
  %.sroa.8.0.copyload = load i8, ptr %.sroa.8.0..sroa_idx, align 1, !tbaa !5
  %.sroa.9.0.copyload = load i8, ptr %.sroa.9.0..sroa_idx, align 2, !tbaa !5
  %.sroa.10.0.copyload = load i8, ptr %.sroa.10.0..sroa_idx, align 1, !tbaa !5
  %.sroa.11.0.copyload = load i8, ptr %.sroa.11.0..sroa_idx, align 8, !tbaa !5
  %.sroa.12.0.copyload = load i8, ptr %.sroa.12.0..sroa_idx, align 1, !tbaa !5
  %.sroa.13.0.copyload = load i8, ptr %.sroa.13.0..sroa_idx, align 2, !tbaa !5
  %.sroa.14.0.copyload = load i8, ptr %.sroa.14.0..sroa_idx, align 1, !tbaa !5
  %.sroa.15.0.copyload = load i8, ptr %.sroa.15.0..sroa_idx, align 4, !tbaa !5
  %51 = call i32 @readn(i32 noundef %0, ptr noundef nonnull %6, i32 noundef 15) #5
  %.not158 = icmp eq i32 %51, 0
  br i1 %.not158, label %52, label %._crit_edge

52:                                               ; preds = %50
  %53 = load i8, ptr %6, align 16, !tbaa !5
  %54 = and i8 %53, 63
  %55 = zext nneg i8 %54 to i64
  %56 = shl nuw nsw i64 %55, 30
  %57 = load i8, ptr %18, align 1, !tbaa !5
  %58 = and i8 %57, 63
  %59 = zext nneg i8 %58 to i64
  %60 = shl nuw nsw i64 %59, 24
  %61 = or disjoint i64 %60, %56
  %62 = load i8, ptr %19, align 2, !tbaa !5
  %63 = and i8 %62, 63
  %64 = zext nneg i8 %63 to i64
  %65 = shl nuw nsw i64 %64, 18
  %66 = or disjoint i64 %65, %61
  %67 = load i8, ptr %20, align 1, !tbaa !5
  %68 = and i8 %67, 63
  %69 = zext nneg i8 %68 to i64
  %70 = shl nuw nsw i64 %69, 12
  %71 = or disjoint i64 %70, %66
  %72 = load i8, ptr %21, align 4, !tbaa !5
  %73 = and i8 %72, 63
  %74 = zext nneg i8 %73 to i64
  %75 = shl nuw nsw i64 %74, 6
  %76 = or disjoint i64 %75, %71
  %77 = load i8, ptr %22, align 1, !tbaa !5
  %78 = and i8 %77, 63
  %79 = zext nneg i8 %78 to i64
  %80 = or disjoint i64 %76, %79
  store i64 %80, ptr %17, align 8, !tbaa !10
  %81 = load i8, ptr %24, align 2, !tbaa !5
  %82 = and i8 %81, 63
  %83 = zext nneg i8 %82 to i32
  %84 = shl nuw nsw i32 %83, 12
  %85 = load i8, ptr %25, align 1, !tbaa !5
  %86 = and i8 %85, 63
  %87 = zext nneg i8 %86 to i32
  %88 = shl nuw nsw i32 %87, 6
  %89 = or disjoint i32 %88, %84
  %90 = load i8, ptr %26, align 8, !tbaa !5
  %91 = and i8 %90, 63
  %92 = zext nneg i8 %91 to i32
  %93 = or disjoint i32 %89, %92
  store i32 %93, ptr %23, align 8, !tbaa !20
  %94 = load i8, ptr %27, align 2, !tbaa !5
  %95 = lshr i8 %94, 5
  %.lobit = and i8 %95, 1
  store i8 %.lobit, ptr %.sroa.3.0..sroa_idx, align 1, !tbaa !21
  %96 = load i8, ptr %28, align 1, !tbaa !5
  %97 = lshr i8 %96, 5
  %.lobit159 = and i8 %97, 1
  store i8 %.lobit159, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !22
  %98 = lshr i8 %94, 4
  %.lobit160 = and i8 %98, 1
  store i8 %.lobit160, ptr %.sroa.6.0..sroa_idx, align 2, !tbaa !23
  %99 = lshr i8 %96, 4
  %.lobit161 = and i8 %99, 1
  store i8 %.lobit161, ptr %.sroa.5.0..sroa_idx, align 1, !tbaa !24
  %100 = lshr i8 %94, 3
  %.lobit162 = and i8 %100, 1
  store i8 %.lobit162, ptr %.sroa.773.0..sroa_idx, align 4, !tbaa !25
  %101 = lshr i8 %96, 3
  %.lobit163 = and i8 %101, 1
  store i8 %.lobit163, ptr %.sroa.7.0..sroa_idx, align 1, !tbaa !26
  %102 = lshr i8 %94, 2
  %.lobit164 = and i8 %102, 1
  store i8 %.lobit164, ptr %.sroa.8.0..sroa_idx, align 1, !tbaa !27
  %103 = lshr i8 %96, 2
  %.lobit165 = and i8 %103, 1
  store i8 %.lobit165, ptr %.sroa.9.0..sroa_idx, align 2, !tbaa !28
  %104 = lshr i8 %94, 1
  %.lobit166 = and i8 %104, 1
  store i8 %.lobit166, ptr %.sroa.10.0..sroa_idx, align 1, !tbaa !29
  %105 = lshr i8 %96, 1
  %.lobit167 = and i8 %105, 1
  store i8 %.lobit167, ptr %.sroa.11.0..sroa_idx, align 8, !tbaa !30
  %106 = and i8 %94, 1
  store i8 %106, ptr %.sroa.12.0..sroa_idx, align 1, !tbaa !31
  %107 = and i8 %96, 1
  store i8 %107, ptr %.sroa.13.0..sroa_idx, align 2, !tbaa !32
  %108 = load i8, ptr %29, align 1, !tbaa !5
  %109 = lshr i8 %108, 3
  %.lobit168 = and i8 %109, 1
  store i8 %.lobit168, ptr %.sroa.14.0..sroa_idx, align 1, !tbaa !33
  %110 = lshr i8 %108, 2
  %.lobit169 = and i8 %110, 1
  store i8 %.lobit169, ptr %.sroa.15.0..sroa_idx, align 4, !tbaa !34
  %111 = lshr i8 %108, 1
  %.lobit170 = and i8 %111, 1
  store i8 %.lobit170, ptr %.sroa.16.0..sroa_idx, align 1, !tbaa !35
  %112 = and i8 %108, 1
  store i8 %112, ptr %30, align 2, !tbaa !36
  %113 = load i8, ptr %31, align 4, !tbaa !5
  %114 = lshr i8 %113, 3
  %.lobit171 = and i8 %114, 1
  store i8 %.lobit171, ptr %32, align 2, !tbaa !37
  %115 = lshr i8 %113, 2
  %.lobit172 = and i8 %115, 1
  store i8 %.lobit172, ptr %33, align 1, !tbaa !38
  %116 = lshr i8 %113, 1
  %.lobit173 = and i8 %116, 1
  store i8 %.lobit173, ptr %34, align 8, !tbaa !39
  %117 = and i8 %113, 1
  store i8 %117, ptr %35, align 1, !tbaa !40
  %.not174 = icmp eq i8 %117, 0
  br i1 %.not174, label %167, label %118

118:                                              ; preds = %52
  %119 = icmp eq i8 %.lobit, 0
  %120 = icmp ne i8 %.sroa.3.0.copyload, 0
  %or.cond = select i1 %119, i1 true, i1 %120
  br i1 %or.cond, label %121, label %148

121:                                              ; preds = %118
  %122 = icmp eq i8 %.lobit159, 0
  %123 = icmp ne i8 %.sroa.4.0.copyload, 0
  %or.cond5 = select i1 %122, i1 true, i1 %123
  br i1 %or.cond5, label %124, label %148

124:                                              ; preds = %121
  %125 = icmp eq i8 %.lobit160, 0
  %126 = icmp ne i8 %.sroa.6.0.copyload, 0
  %or.cond8 = select i1 %125, i1 true, i1 %126
  br i1 %or.cond8, label %127, label %148

127:                                              ; preds = %124
  %128 = icmp eq i8 %.lobit161, 0
  %129 = icmp ne i8 %.sroa.5.0.copyload, 0
  %or.cond11 = select i1 %128, i1 true, i1 %129
  br i1 %or.cond11, label %130, label %148

130:                                              ; preds = %127
  %131 = icmp eq i8 %.lobit164, 0
  %132 = icmp ne i8 %.sroa.8.0.copyload, 0
  %or.cond14 = select i1 %131, i1 true, i1 %132
  br i1 %or.cond14, label %133, label %148

133:                                              ; preds = %130
  %134 = icmp eq i8 %.lobit165, 0
  %135 = icmp ne i8 %.sroa.9.0.copyload, 0
  %or.cond17 = select i1 %134, i1 true, i1 %135
  br i1 %or.cond17, label %136, label %148

136:                                              ; preds = %133
  %137 = icmp eq i8 %.lobit166, 0
  %138 = icmp ne i8 %.sroa.10.0.copyload, 0
  %or.cond20 = select i1 %137, i1 true, i1 %138
  br i1 %or.cond20, label %139, label %148

139:                                              ; preds = %136
  %140 = icmp eq i8 %.lobit167, 0
  %141 = icmp ne i8 %.sroa.11.0.copyload, 0
  %or.cond23 = select i1 %140, i1 true, i1 %141
  br i1 %or.cond23, label %142, label %148

142:                                              ; preds = %139
  %143 = icmp eq i8 %106, 0
  %144 = icmp ne i8 %.sroa.12.0.copyload, 0
  %or.cond26 = select i1 %143, i1 true, i1 %144
  br i1 %or.cond26, label %145, label %148

145:                                              ; preds = %142
  %146 = icmp eq i8 %107, 0
  %147 = icmp ne i8 %.sroa.13.0.copyload, 0
  %or.cond29 = select i1 %146, i1 true, i1 %147
  br i1 %or.cond29, label %151, label %148

148:                                              ; preds = %145, %142, %139, %136, %133, %130, %127, %124, %121, %118
  %149 = load i32, ptr %36, align 8, !tbaa !41
  %150 = or i32 %149, 1
  store i32 %150, ptr %36, align 8, !tbaa !41
  br label %151

151:                                              ; preds = %148, %145
  %152 = icmp eq i8 %.lobit162, 0
  %153 = icmp ne i8 %.sroa.773.0.copyload, 0
  %or.cond32 = select i1 %152, i1 true, i1 %153
  br i1 %or.cond32, label %157, label %154

154:                                              ; preds = %151
  %155 = load i32, ptr %36, align 8, !tbaa !41
  %156 = or i32 %155, 2
  store i32 %156, ptr %36, align 8, !tbaa !41
  br label %157

157:                                              ; preds = %154, %151
  br i1 %.not175, label %167, label %158

158:                                              ; preds = %157
  %159 = icmp eq i8 %.lobit169, 0
  %160 = icmp ne i8 %.sroa.15.0.copyload, 0
  %or.cond35 = select i1 %159, i1 true, i1 %160
  br i1 %or.cond35, label %162, label %161

161:                                              ; preds = %158
  call void @ptr_setmotor(ptr noundef nonnull %2, i32 noundef 1) #5
  %.pre = load i8, ptr %.sroa.14.0..sroa_idx, align 1, !tbaa !33
  br label %162

162:                                              ; preds = %161, %158
  %163 = phi i8 [ %.pre, %161 ], [ %.lobit168, %158 ]
  %164 = icmp eq i8 %163, 0
  %165 = icmp ne i8 %.sroa.14.0.copyload, 0
  %or.cond38 = select i1 %164, i1 true, i1 %165
  br i1 %or.cond38, label %167, label %166

166:                                              ; preds = %162
  call void @ptr_setmotor(ptr noundef nonnull %2, i32 noundef 0) #5
  br label %167

167:                                              ; preds = %157, %166, %162, %52
  br i1 %.0177, label %217, label %168

168:                                              ; preds = %167
  store i8 48, ptr %6, align 16, !tbaa !5
  %169 = load i32, ptr %37, align 8, !tbaa !42
  %170 = lshr i32 %169, 12
  %171 = trunc i32 %170 to i8
  %172 = and i8 %171, 63
  %173 = or disjoint i8 %172, 64
  store i8 %173, ptr %18, align 1, !tbaa !5
  %174 = lshr i32 %169, 6
  %175 = trunc i32 %174 to i8
  %176 = and i8 %175, 63
  %177 = or disjoint i8 %176, 64
  store i8 %177, ptr %19, align 2, !tbaa !5
  %178 = trunc i32 %169 to i8
  %179 = and i8 %178, 63
  %180 = or disjoint i8 %179, 64
  store i8 %180, ptr %20, align 1, !tbaa !5
  store i8 49, ptr %21, align 4, !tbaa !5
  %181 = load i64, ptr %38, align 8, !tbaa !43
  %182 = lshr i64 %181, 30
  %183 = trunc i64 %182 to i8
  %184 = and i8 %183, 63
  %185 = or disjoint i8 %184, 64
  store i8 %185, ptr %22, align 1, !tbaa !5
  %186 = lshr i64 %181, 24
  %187 = trunc i64 %186 to i8
  %188 = and i8 %187, 63
  %189 = or disjoint i8 %188, 64
  store i8 %189, ptr %24, align 2, !tbaa !5
  %190 = lshr i64 %181, 18
  %191 = trunc i64 %190 to i8
  %192 = and i8 %191, 63
  %193 = or disjoint i8 %192, 64
  store i8 %193, ptr %25, align 1, !tbaa !5
  store i8 50, ptr %26, align 8, !tbaa !5
  %194 = lshr i64 %181, 12
  %195 = trunc i64 %194 to i8
  %196 = and i8 %195, 63
  %197 = or disjoint i8 %196, 64
  store i8 %197, ptr %28, align 1, !tbaa !5
  %198 = lshr i64 %181, 6
  %199 = trunc i64 %198 to i8
  %200 = and i8 %199, 63
  %201 = or disjoint i8 %200, 64
  store i8 %201, ptr %27, align 2, !tbaa !5
  %202 = trunc i64 %181 to i8
  %203 = and i8 %202, 63
  %204 = or disjoint i8 %203, 64
  store i8 %204, ptr %29, align 1, !tbaa !5
  store i8 51, ptr %31, align 4, !tbaa !5
  %205 = load i32, ptr %39, align 8, !tbaa !44
  %206 = lshr i32 %205, 12
  %207 = trunc i32 %206 to i8
  %208 = and i8 %207, 63
  %209 = or disjoint i8 %208, 64
  store i8 %209, ptr %40, align 1, !tbaa !5
  %210 = lshr i32 %205, 6
  %211 = trunc i32 %210 to i8
  %212 = and i8 %211, 63
  %213 = or disjoint i8 %212, 64
  store i8 %213, ptr %41, align 2, !tbaa !5
  %214 = trunc i32 %205 to i8
  %215 = and i8 %214, 63
  %216 = or disjoint i8 %215, 64
  br label %251

217:                                              ; preds = %167
  store i8 52, ptr %6, align 16, !tbaa !5
  %218 = load i32, ptr %43, align 4, !tbaa !45
  %219 = lshr i32 %218, 12
  %220 = trunc i32 %219 to i8
  %221 = and i8 %220, 63
  %222 = or disjoint i8 %221, 64
  store i8 %222, ptr %18, align 1, !tbaa !5
  %223 = lshr i32 %218, 6
  %224 = trunc i32 %223 to i8
  %225 = and i8 %224, 63
  %226 = or disjoint i8 %225, 64
  store i8 %226, ptr %19, align 2, !tbaa !5
  %227 = trunc i32 %218 to i8
  %228 = and i8 %227, 63
  %229 = or disjoint i8 %228, 64
  store i8 %229, ptr %20, align 1, !tbaa !5
  store i8 53, ptr %21, align 4, !tbaa !5
  %230 = load i8, ptr %44, align 1, !tbaa !46
  %231 = load i8, ptr %45, align 2, !tbaa !47
  %232 = call i8 @llvm.fshl.i8(i8 %230, i8 %231, i8 5)
  %233 = or i8 %232, 64
  store i8 %233, ptr %22, align 1, !tbaa !5
  %234 = shl i8 %231, 3
  %235 = and i8 %234, 56
  %236 = or disjoint i8 %235, 64
  store i8 %236, ptr %24, align 2, !tbaa !5
  store i8 64, ptr %25, align 1, !tbaa !5
  store i8 54, ptr %26, align 8, !tbaa !5
  %237 = load i8, ptr %46, align 1, !tbaa !48
  %238 = load i8, ptr %47, align 1, !tbaa !49
  %239 = call i8 @llvm.fshl.i8(i8 %237, i8 %238, i8 5)
  %240 = or i8 %239, 64
  store i8 %240, ptr %28, align 1, !tbaa !5
  %241 = shl i8 %238, 3
  %242 = and i8 %241, 56
  %243 = or disjoint i8 %242, 64
  store i8 %243, ptr %27, align 2, !tbaa !5
  store i8 64, ptr %29, align 1, !tbaa !5
  store i8 55, ptr %31, align 4, !tbaa !5
  %244 = load i8, ptr %48, align 4, !tbaa !50
  %245 = load i8, ptr %49, align 8, !tbaa !51
  %246 = call i8 @llvm.fshl.i8(i8 %244, i8 %245, i8 5)
  %247 = or i8 %246, 64
  store i8 %247, ptr %40, align 1, !tbaa !5
  %248 = shl i8 %245, 3
  %249 = and i8 %248, 56
  %250 = or disjoint i8 %249, 64
  store i8 %250, ptr %41, align 2, !tbaa !5
  br label %251

251:                                              ; preds = %217, %168
  %storemerge = phi i8 [ %216, %168 ], [ 64, %217 ]
  store i8 %storemerge, ptr %42, align 1, !tbaa !5
  %252 = load i8, ptr %35, align 1, !tbaa !40
  %253 = icmp eq i8 %252, 0
  br i1 %253, label %254, label %255

254:                                              ; preds = %251
  store i8 0, ptr %18, align 1, !tbaa !5
  store i8 0, ptr %19, align 2, !tbaa !5
  store i8 0, ptr %20, align 1, !tbaa !5
  store i8 0, ptr %22, align 1, !tbaa !5
  store i8 0, ptr %24, align 2, !tbaa !5
  store i8 0, ptr %25, align 1, !tbaa !5
  store i8 0, ptr %28, align 1, !tbaa !5
  store i8 0, ptr %27, align 2, !tbaa !5
  store i8 0, ptr %29, align 1, !tbaa !5
  store i8 0, ptr %40, align 1, !tbaa !5
  store i8 0, ptr %41, align 2, !tbaa !5
  store i8 0, ptr %42, align 1, !tbaa !5
  br label %255

255:                                              ; preds = %254, %251
  %256 = xor i1 %.0177, true
  %257 = call i32 @writen(i32 noundef %0, ptr noundef nonnull %6, i32 noundef 16) #5
  br label %50

._crit_edge:                                      ; preds = %50, %.preheader
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 60, ptr nonnull %4) #5
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind
declare i32 @tcgetattr(i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @cfsetispeed(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @cfsetospeed(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare void @cfmakeraw(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @tcsetattr(i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare i32 @readn(i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @ptr_setmotor(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @writen(i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.fshl.i8(i8, i8, i8) #4

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" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "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" }
attributes #3 = { "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" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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


; Effective O3 passes: AggressiveInstCombinePass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass