; LLVM IR from BrunoLevy/learn-fpga :: LiteX/software/Doom/mc1-doom/src (p_inter)

; 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.player_s = type { ptr, i32, %struct.ticcmd_t, i32, i32, i32, i32, i32, i32, i32, [6 x i32], [6 x i32], i32, [4 x i32], i32, i32, [9 x i32], [4 x i32], [4 x i32], i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, i32, i32, i32, [2 x %struct.pspdef_t], i32 }
%struct.ticcmd_t = type { i8, i8, i16, i16, i8, i8 }
%struct.pspdef_t = type { ptr, i32, i32, i32 }
%struct.mobj_s = type { %struct.thinker_s, i32, i32, i32, ptr, ptr, i32, i32, i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, ptr, i32, %struct.mapthing_t, ptr }
%struct.thinker_s = type { ptr, ptr, %union.actionf_t }
%union.actionf_t = type { ptr }
%struct.mapthing_t = type { i16, i16, i16, i16, i16 }

@netgame = external global i32, align 4
@players = external global [4 x %struct.player_s], align 16
@consoleplayer = external global i32, align 4
@.str.1 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@gamemode = external global i32, align 4
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [39 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveAmmo(ptr noundef, i32 noundef, i32 noundef) #0

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

; Function Attrs: noreturn
declare void @I_Error(ptr noundef, ...) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveWeapon(ptr noundef, i32 noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveBody(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveArmor(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @P_GiveCard(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GivePower(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local void @P_TouchSpecialThing(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %10 = load ptr, ptr %3, align 8, !tbaa !5
  %11 = getelementptr inbounds %struct.mobj_s, ptr %10, i32 0, i32 3
  %12 = load i32, ptr %11, align 8, !tbaa !9
  %13 = load ptr, ptr %4, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.mobj_s, ptr %13, i32 0, i32 3
  %15 = load i32, ptr %14, align 8, !tbaa !9
  %16 = sub nsw i32 %12, %15
  store i32 %16, ptr %7, align 4, !tbaa !15
  %17 = load i32, ptr %7, align 4, !tbaa !15
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.mobj_s, ptr %18, i32 0, i32 15
  %20 = load i32, ptr %19, align 4, !tbaa !16
  %21 = icmp sgt i32 %17, %20
  br i1 %21, label %25, label %22

22:                                               ; preds = %2
  %23 = load i32, ptr %7, align 4, !tbaa !15
  %24 = icmp slt i32 %23, -524288
  br i1 %24, label %25, label %26

25:                                               ; preds = %22, %2
  store i32 1, ptr %9, align 4
  br label %519

26:                                               ; preds = %22
  store i32 32, ptr %8, align 4, !tbaa !15
  %27 = load ptr, ptr %4, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.mobj_s, ptr %27, i32 0, i32 31
  %29 = load ptr, ptr %28, align 8, !tbaa !17
  store ptr %29, ptr %5, align 8, !tbaa !5
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.mobj_s, ptr %30, i32 0, i32 25
  %32 = load i32, ptr %31, align 4, !tbaa !18
  %33 = icmp sle i32 %32, 0
  br i1 %33, label %34, label %35

34:                                               ; preds = %26
  store i32 1, ptr %9, align 4
  br label %519

35:                                               ; preds = %26
  %36 = load ptr, ptr %3, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.mobj_s, ptr %36, i32 0, i32 7
  %38 = load i32, ptr %37, align 4, !tbaa !19
  switch i32 %38, label %493 [
    i32 55, label %39
    i32 56, label %47
    i32 60, label %55
    i32 61, label %77
    i32 70, label %100
    i32 74, label %122
    i32 62, label %140
    i32 64, label %155
    i32 63, label %170
    i32 65, label %185
    i32 67, label %200
    i32 66, label %215
    i32 68, label %230
    i32 69, label %238
    i32 71, label %255
    i32 72, label %263
    i32 73, label %279
    i32 75, label %287
    i32 76, label %295
    i32 77, label %303
    i32 78, label %311
    i32 79, label %332
    i32 80, label %340
    i32 81, label %348
    i32 82, label %356
    i32 83, label %364
    i32 84, label %372
    i32 85, label %380
    i32 86, label %388
    i32 87, label %425
    i32 88, label %433
    i32 89, label %445
    i32 90, label %453
    i32 91, label %461
    i32 92, label %469
    i32 93, label %481
  ]

39:                                               ; preds = %35
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = call i32 @P_GiveArmor(ptr noundef %40, i32 noundef 1)
  %42 = icmp ne i32 %41, 0
  br i1 %42, label %44, label %43

43:                                               ; preds = %39
  store i32 1, ptr %9, align 4
  br label %519

44:                                               ; preds = %39
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.player_s, ptr %45, i32 0, i32 26
  store ptr @.str.1, ptr %46, align 8, !tbaa !20
  br label %494

47:                                               ; preds = %35
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = call i32 @P_GiveArmor(ptr noundef %48, i32 noundef 2)
  %50 = icmp ne i32 %49, 0
  br i1 %50, label %52, label %51

51:                                               ; preds = %47
  store i32 1, ptr %9, align 4
  br label %519

52:                                               ; preds = %47
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.player_s, ptr %53, i32 0, i32 26
  store ptr @.str.2, ptr %54, align 8, !tbaa !20
  br label %494

55:                                               ; preds = %35
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.player_s, ptr %56, i32 0, i32 7
  %58 = load i32, ptr %57, align 4, !tbaa !23
  %59 = add nsw i32 %58, 1
  store i32 %59, ptr %57, align 4, !tbaa !23
  %60 = load ptr, ptr %5, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.player_s, ptr %60, i32 0, i32 7
  %62 = load i32, ptr %61, align 4, !tbaa !23
  %63 = icmp sgt i32 %62, 200
  br i1 %63, label %64, label %67

64:                                               ; preds = %55
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.player_s, ptr %65, i32 0, i32 7
  store i32 200, ptr %66, align 4, !tbaa !23
  br label %67

67:                                               ; preds = %64, %55
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.player_s, ptr %68, i32 0, i32 7
  %70 = load i32, ptr %69, align 4, !tbaa !23
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.player_s, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !24
  %74 = getelementptr inbounds %struct.mobj_s, ptr %73, i32 0, i32 25
  store i32 %70, ptr %74, align 4, !tbaa !18
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.player_s, ptr %75, i32 0, i32 26
  store ptr @.str.3, ptr %76, align 8, !tbaa !20
  br label %494

77:                                               ; preds = %35
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.player_s, ptr %78, i32 0, i32 8
  %80 = load i32, ptr %79, align 8, !tbaa !25
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %79, align 8, !tbaa !25
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.player_s, ptr %82, i32 0, i32 8
  %84 = load i32, ptr %83, align 8, !tbaa !25
  %85 = icmp sgt i32 %84, 200
  br i1 %85, label %86, label %89

86:                                               ; preds = %77
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.player_s, ptr %87, i32 0, i32 8
  store i32 200, ptr %88, align 8, !tbaa !25
  br label %89

89:                                               ; preds = %86, %77
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.player_s, ptr %90, i32 0, i32 9
  %92 = load i32, ptr %91, align 4, !tbaa !26
  %93 = icmp ne i32 %92, 0
  br i1 %93, label %97, label %94

94:                                               ; preds = %89
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.player_s, ptr %95, i32 0, i32 9
  store i32 1, ptr %96, align 4, !tbaa !26
  br label %97

97:                                               ; preds = %94, %89
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.player_s, ptr %98, i32 0, i32 26
  store ptr @.str.4, ptr %99, align 8, !tbaa !20
  br label %494

100:                                              ; preds = %35
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.player_s, ptr %101, i32 0, i32 7
  %103 = load i32, ptr %102, align 4, !tbaa !23
  %104 = add nsw i32 %103, 100
  store i32 %104, ptr %102, align 4, !tbaa !23
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.player_s, ptr %105, i32 0, i32 7
  %107 = load i32, ptr %106, align 4, !tbaa !23
  %108 = icmp sgt i32 %107, 200
  br i1 %108, label %109, label %112

109:                                              ; preds = %100
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.player_s, ptr %110, i32 0, i32 7
  store i32 200, ptr %111, align 4, !tbaa !23
  br label %112

112:                                              ; preds = %109, %100
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.player_s, ptr %113, i32 0, i32 7
  %115 = load i32, ptr %114, align 4, !tbaa !23
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.player_s, ptr %116, i32 0, i32 0
  %118 = load ptr, ptr %117, align 8, !tbaa !24
  %119 = getelementptr inbounds %struct.mobj_s, ptr %118, i32 0, i32 25
  store i32 %115, ptr %119, align 4, !tbaa !18
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.player_s, ptr %120, i32 0, i32 26
  store ptr @.str.5, ptr %121, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

122:                                              ; preds = %35
  %123 = load i32, ptr @gamemode, align 4, !tbaa !15
  %124 = icmp ne i32 %123, 2
  br i1 %124, label %125, label %126

125:                                              ; preds = %122
  store i32 1, ptr %9, align 4
  br label %519

126:                                              ; preds = %122
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.player_s, ptr %127, i32 0, i32 7
  store i32 200, ptr %128, align 4, !tbaa !23
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.player_s, ptr %129, i32 0, i32 7
  %131 = load i32, ptr %130, align 4, !tbaa !23
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.player_s, ptr %132, i32 0, i32 0
  %134 = load ptr, ptr %133, align 8, !tbaa !24
  %135 = getelementptr inbounds %struct.mobj_s, ptr %134, i32 0, i32 25
  store i32 %131, ptr %135, align 4, !tbaa !18
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = call i32 @P_GiveArmor(ptr noundef %136, i32 noundef 2)
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.player_s, ptr %138, i32 0, i32 26
  store ptr @.str.6, ptr %139, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

140:                                              ; preds = %35
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.player_s, ptr %141, i32 0, i32 11
  %143 = getelementptr inbounds [6 x i32], ptr %142, i64 0, i64 0
  %144 = load i32, ptr %143, align 8, !tbaa !15
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %149, label %146

146:                                              ; preds = %140
  %147 = load ptr, ptr %5, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.player_s, ptr %147, i32 0, i32 26
  store ptr @.str.7, ptr %148, align 8, !tbaa !20
  br label %149

149:                                              ; preds = %146, %140
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %150, i32 noundef 0)
  %151 = load i32, ptr @netgame, align 4, !tbaa !15
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %154, label %153

153:                                              ; preds = %149
  br label %494

154:                                              ; preds = %149
  store i32 1, ptr %9, align 4
  br label %519

155:                                              ; preds = %35
  %156 = load ptr, ptr %5, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.player_s, ptr %156, i32 0, i32 11
  %158 = getelementptr inbounds [6 x i32], ptr %157, i64 0, i64 1
  %159 = load i32, ptr %158, align 4, !tbaa !15
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %164, label %161

161:                                              ; preds = %155
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.player_s, ptr %162, i32 0, i32 26
  store ptr @.str.8, ptr %163, align 8, !tbaa !20
  br label %164

164:                                              ; preds = %161, %155
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %165, i32 noundef 1)
  %166 = load i32, ptr @netgame, align 4, !tbaa !15
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %169, label %168

168:                                              ; preds = %164
  br label %494

169:                                              ; preds = %164
  store i32 1, ptr %9, align 4
  br label %519

170:                                              ; preds = %35
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.player_s, ptr %171, i32 0, i32 11
  %173 = getelementptr inbounds [6 x i32], ptr %172, i64 0, i64 2
  %174 = load i32, ptr %173, align 8, !tbaa !15
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %179, label %176

176:                                              ; preds = %170
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.player_s, ptr %177, i32 0, i32 26
  store ptr @.str.9, ptr %178, align 8, !tbaa !20
  br label %179

179:                                              ; preds = %176, %170
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %180, i32 noundef 2)
  %181 = load i32, ptr @netgame, align 4, !tbaa !15
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %184, label %183

183:                                              ; preds = %179
  br label %494

184:                                              ; preds = %179
  store i32 1, ptr %9, align 4
  br label %519

185:                                              ; preds = %35
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.player_s, ptr %186, i32 0, i32 11
  %188 = getelementptr inbounds [6 x i32], ptr %187, i64 0, i64 3
  %189 = load i32, ptr %188, align 4, !tbaa !15
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %194, label %191

191:                                              ; preds = %185
  %192 = load ptr, ptr %5, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.player_s, ptr %192, i32 0, i32 26
  store ptr @.str.10, ptr %193, align 8, !tbaa !20
  br label %194

194:                                              ; preds = %191, %185
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %195, i32 noundef 3)
  %196 = load i32, ptr @netgame, align 4, !tbaa !15
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %199, label %198

198:                                              ; preds = %194
  br label %494

199:                                              ; preds = %194
  store i32 1, ptr %9, align 4
  br label %519

200:                                              ; preds = %35
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.player_s, ptr %201, i32 0, i32 11
  %203 = getelementptr inbounds [6 x i32], ptr %202, i64 0, i64 4
  %204 = load i32, ptr %203, align 8, !tbaa !15
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %209, label %206

206:                                              ; preds = %200
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.player_s, ptr %207, i32 0, i32 26
  store ptr @.str.11, ptr %208, align 8, !tbaa !20
  br label %209

209:                                              ; preds = %206, %200
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %210, i32 noundef 4)
  %211 = load i32, ptr @netgame, align 4, !tbaa !15
  %212 = icmp ne i32 %211, 0
  br i1 %212, label %214, label %213

213:                                              ; preds = %209
  br label %494

214:                                              ; preds = %209
  store i32 1, ptr %9, align 4
  br label %519

215:                                              ; preds = %35
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.player_s, ptr %216, i32 0, i32 11
  %218 = getelementptr inbounds [6 x i32], ptr %217, i64 0, i64 5
  %219 = load i32, ptr %218, align 4, !tbaa !15
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %224, label %221

221:                                              ; preds = %215
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.player_s, ptr %222, i32 0, i32 26
  store ptr @.str.12, ptr %223, align 8, !tbaa !20
  br label %224

224:                                              ; preds = %221, %215
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  call void @P_GiveCard(ptr noundef %225, i32 noundef 5)
  %226 = load i32, ptr @netgame, align 4, !tbaa !15
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %229, label %228

228:                                              ; preds = %224
  br label %494

229:                                              ; preds = %224
  store i32 1, ptr %9, align 4
  br label %519

230:                                              ; preds = %35
  %231 = load ptr, ptr %5, align 8, !tbaa !5
  %232 = call i32 @P_GiveBody(ptr noundef %231, i32 noundef 10)
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %235, label %234

234:                                              ; preds = %230
  store i32 1, ptr %9, align 4
  br label %519

235:                                              ; preds = %230
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.player_s, ptr %236, i32 0, i32 26
  store ptr @.str.13, ptr %237, align 8, !tbaa !20
  br label %494

238:                                              ; preds = %35
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = call i32 @P_GiveBody(ptr noundef %239, i32 noundef 25)
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %243, label %242

242:                                              ; preds = %238
  store i32 1, ptr %9, align 4
  br label %519

243:                                              ; preds = %238
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.player_s, ptr %244, i32 0, i32 7
  %246 = load i32, ptr %245, align 4, !tbaa !23
  %247 = icmp slt i32 %246, 25
  br i1 %247, label %248, label %251

248:                                              ; preds = %243
  %249 = load ptr, ptr %5, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.player_s, ptr %249, i32 0, i32 26
  store ptr @.str.14, ptr %250, align 8, !tbaa !20
  br label %254

251:                                              ; preds = %243
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.player_s, ptr %252, i32 0, i32 26
  store ptr @.str.15, ptr %253, align 8, !tbaa !20
  br label %254

254:                                              ; preds = %251, %248
  br label %494

255:                                              ; preds = %35
  %256 = load ptr, ptr %5, align 8, !tbaa !5
  %257 = call i32 @P_GivePower(ptr noundef %256, i32 noundef 0)
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %260, label %259

259:                                              ; preds = %255
  store i32 1, ptr %9, align 4
  br label %519

260:                                              ; preds = %255
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.player_s, ptr %261, i32 0, i32 26
  store ptr @.str.16, ptr %262, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

263:                                              ; preds = %35
  %264 = load ptr, ptr %5, align 8, !tbaa !5
  %265 = call i32 @P_GivePower(ptr noundef %264, i32 noundef 1)
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %268, label %267

267:                                              ; preds = %263
  store i32 1, ptr %9, align 4
  br label %519

268:                                              ; preds = %263
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.player_s, ptr %269, i32 0, i32 26
  store ptr @.str.17, ptr %270, align 8, !tbaa !20
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.player_s, ptr %271, i32 0, i32 14
  %273 = load i32, ptr %272, align 4, !tbaa !27
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %278

275:                                              ; preds = %268
  %276 = load ptr, ptr %5, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.player_s, ptr %276, i32 0, i32 15
  store i32 0, ptr %277, align 8, !tbaa !28
  br label %278

278:                                              ; preds = %275, %268
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

279:                                              ; preds = %35
  %280 = load ptr, ptr %5, align 8, !tbaa !5
  %281 = call i32 @P_GivePower(ptr noundef %280, i32 noundef 2)
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %284, label %283

283:                                              ; preds = %279
  store i32 1, ptr %9, align 4
  br label %519

284:                                              ; preds = %279
  %285 = load ptr, ptr %5, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.player_s, ptr %285, i32 0, i32 26
  store ptr @.str.18, ptr %286, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

287:                                              ; preds = %35
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = call i32 @P_GivePower(ptr noundef %288, i32 noundef 3)
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %292, label %291

291:                                              ; preds = %287
  store i32 1, ptr %9, align 4
  br label %519

292:                                              ; preds = %287
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.player_s, ptr %293, i32 0, i32 26
  store ptr @.str.19, ptr %294, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

295:                                              ; preds = %35
  %296 = load ptr, ptr %5, align 8, !tbaa !5
  %297 = call i32 @P_GivePower(ptr noundef %296, i32 noundef 4)
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %300, label %299

299:                                              ; preds = %295
  store i32 1, ptr %9, align 4
  br label %519

300:                                              ; preds = %295
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.player_s, ptr %301, i32 0, i32 26
  store ptr @.str.20, ptr %302, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

303:                                              ; preds = %35
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = call i32 @P_GivePower(ptr noundef %304, i32 noundef 5)
  %306 = icmp ne i32 %305, 0
  br i1 %306, label %308, label %307

307:                                              ; preds = %303
  store i32 1, ptr %9, align 4
  br label %519

308:                                              ; preds = %303
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.player_s, ptr %309, i32 0, i32 26
  store ptr @.str.21, ptr %310, align 8, !tbaa !20
  store i32 93, ptr %8, align 4, !tbaa !15
  br label %494

311:                                              ; preds = %35
  %312 = load ptr, ptr %3, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.mobj_s, ptr %312, i32 0, i32 24
  %314 = load i32, ptr %313, align 8, !tbaa !29
  %315 = and i32 %314, 131072
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %323

317:                                              ; preds = %311
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = call i32 @P_GiveAmmo(ptr noundef %318, i32 noundef 0, i32 noundef 0)
  %320 = icmp ne i32 %319, 0
  br i1 %320, label %322, label %321

321:                                              ; preds = %317
  store i32 1, ptr %9, align 4
  br label %519

322:                                              ; preds = %317
  br label %329

323:                                              ; preds = %311
  %324 = load ptr, ptr %5, align 8, !tbaa !5
  %325 = call i32 @P_GiveAmmo(ptr noundef %324, i32 noundef 0, i32 noundef 1)
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %328, label %327

327:                                              ; preds = %323
  store i32 1, ptr %9, align 4
  br label %519

328:                                              ; preds = %323
  br label %329

329:                                              ; preds = %328, %322
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.player_s, ptr %330, i32 0, i32 26
  store ptr @.str.22, ptr %331, align 8, !tbaa !20
  br label %494

332:                                              ; preds = %35
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = call i32 @P_GiveAmmo(ptr noundef %333, i32 noundef 0, i32 noundef 5)
  %335 = icmp ne i32 %334, 0
  br i1 %335, label %337, label %336

336:                                              ; preds = %332
  store i32 1, ptr %9, align 4
  br label %519

337:                                              ; preds = %332
  %338 = load ptr, ptr %5, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.player_s, ptr %338, i32 0, i32 26
  store ptr @.str.23, ptr %339, align 8, !tbaa !20
  br label %494

340:                                              ; preds = %35
  %341 = load ptr, ptr %5, align 8, !tbaa !5
  %342 = call i32 @P_GiveAmmo(ptr noundef %341, i32 noundef 3, i32 noundef 1)
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %345, label %344

344:                                              ; preds = %340
  store i32 1, ptr %9, align 4
  br label %519

345:                                              ; preds = %340
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.player_s, ptr %346, i32 0, i32 26
  store ptr @.str.24, ptr %347, align 8, !tbaa !20
  br label %494

348:                                              ; preds = %35
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = call i32 @P_GiveAmmo(ptr noundef %349, i32 noundef 3, i32 noundef 5)
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %353, label %352

352:                                              ; preds = %348
  store i32 1, ptr %9, align 4
  br label %519

353:                                              ; preds = %348
  %354 = load ptr, ptr %5, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.player_s, ptr %354, i32 0, i32 26
  store ptr @.str.25, ptr %355, align 8, !tbaa !20
  br label %494

356:                                              ; preds = %35
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = call i32 @P_GiveAmmo(ptr noundef %357, i32 noundef 2, i32 noundef 1)
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %361, label %360

360:                                              ; preds = %356
  store i32 1, ptr %9, align 4
  br label %519

361:                                              ; preds = %356
  %362 = load ptr, ptr %5, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.player_s, ptr %362, i32 0, i32 26
  store ptr @.str.26, ptr %363, align 8, !tbaa !20
  br label %494

364:                                              ; preds = %35
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = call i32 @P_GiveAmmo(ptr noundef %365, i32 noundef 2, i32 noundef 5)
  %367 = icmp ne i32 %366, 0
  br i1 %367, label %369, label %368

368:                                              ; preds = %364
  store i32 1, ptr %9, align 4
  br label %519

369:                                              ; preds = %364
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.player_s, ptr %370, i32 0, i32 26
  store ptr @.str.27, ptr %371, align 8, !tbaa !20
  br label %494

372:                                              ; preds = %35
  %373 = load ptr, ptr %5, align 8, !tbaa !5
  %374 = call i32 @P_GiveAmmo(ptr noundef %373, i32 noundef 1, i32 noundef 1)
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %377, label %376

376:                                              ; preds = %372
  store i32 1, ptr %9, align 4
  br label %519

377:                                              ; preds = %372
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.player_s, ptr %378, i32 0, i32 26
  store ptr @.str.28, ptr %379, align 8, !tbaa !20
  br label %494

380:                                              ; preds = %35
  %381 = load ptr, ptr %5, align 8, !tbaa !5
  %382 = call i32 @P_GiveAmmo(ptr noundef %381, i32 noundef 1, i32 noundef 5)
  %383 = icmp ne i32 %382, 0
  br i1 %383, label %385, label %384

384:                                              ; preds = %380
  store i32 1, ptr %9, align 4
  br label %519

385:                                              ; preds = %380
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.player_s, ptr %386, i32 0, i32 26
  store ptr @.str.29, ptr %387, align 8, !tbaa !20
  br label %494

388:                                              ; preds = %35
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.player_s, ptr %389, i32 0, i32 12
  %391 = load i32, ptr %390, align 8, !tbaa !30
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %411, label %393

393:                                              ; preds = %388
  store i32 0, ptr %6, align 4, !tbaa !15
  br label %394

394:                                              ; preds = %405, %393
  %395 = load i32, ptr %6, align 4, !tbaa !15
  %396 = icmp slt i32 %395, 4
  br i1 %396, label %397, label %408

397:                                              ; preds = %394
  %398 = load ptr, ptr %5, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.player_s, ptr %398, i32 0, i32 18
  %400 = load i32, ptr %6, align 4, !tbaa !15
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds [4 x i32], ptr %399, i64 0, i64 %401
  %403 = load i32, ptr %402, align 4, !tbaa !15
  %404 = mul nsw i32 %403, 2
  store i32 %404, ptr %402, align 4, !tbaa !15
  br label %405

405:                                              ; preds = %397
  %406 = load i32, ptr %6, align 4, !tbaa !15
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %6, align 4, !tbaa !15
  br label %394, !llvm.loop !31

408:                                              ; preds = %394
  %409 = load ptr, ptr %5, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.player_s, ptr %409, i32 0, i32 12
  store i32 1, ptr %410, align 8, !tbaa !30
  br label %411

411:                                              ; preds = %408, %388
  store i32 0, ptr %6, align 4, !tbaa !15
  br label %412

412:                                              ; preds = %419, %411
  %413 = load i32, ptr %6, align 4, !tbaa !15
  %414 = icmp slt i32 %413, 4
  br i1 %414, label %415, label %422

415:                                              ; preds = %412
  %416 = load ptr, ptr %5, align 8, !tbaa !5
  %417 = load i32, ptr %6, align 4, !tbaa !15
  %418 = call i32 @P_GiveAmmo(ptr noundef %416, i32 noundef %417, i32 noundef 1)
  br label %419

419:                                              ; preds = %415
  %420 = load i32, ptr %6, align 4, !tbaa !15
  %421 = add nsw i32 %420, 1
  store i32 %421, ptr %6, align 4, !tbaa !15
  br label %412, !llvm.loop !33

422:                                              ; preds = %412
  %423 = load ptr, ptr %5, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.player_s, ptr %423, i32 0, i32 26
  store ptr @.str.30, ptr %424, align 8, !tbaa !20
  br label %494

425:                                              ; preds = %35
  %426 = load ptr, ptr %5, align 8, !tbaa !5
  %427 = call i32 @P_GiveWeapon(ptr noundef %426, i32 noundef 6, i32 noundef 0)
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %430, label %429

429:                                              ; preds = %425
  store i32 1, ptr %9, align 4
  br label %519

430:                                              ; preds = %425
  %431 = load ptr, ptr %5, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.player_s, ptr %431, i32 0, i32 26
  store ptr @.str.31, ptr %432, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

433:                                              ; preds = %35
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = load ptr, ptr %3, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.mobj_s, ptr %435, i32 0, i32 24
  %437 = load i32, ptr %436, align 8, !tbaa !29
  %438 = and i32 %437, 131072
  %439 = call i32 @P_GiveWeapon(ptr noundef %434, i32 noundef 3, i32 noundef %438)
  %440 = icmp ne i32 %439, 0
  br i1 %440, label %442, label %441

441:                                              ; preds = %433
  store i32 1, ptr %9, align 4
  br label %519

442:                                              ; preds = %433
  %443 = load ptr, ptr %5, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.player_s, ptr %443, i32 0, i32 26
  store ptr @.str.32, ptr %444, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

445:                                              ; preds = %35
  %446 = load ptr, ptr %5, align 8, !tbaa !5
  %447 = call i32 @P_GiveWeapon(ptr noundef %446, i32 noundef 7, i32 noundef 0)
  %448 = icmp ne i32 %447, 0
  br i1 %448, label %450, label %449

449:                                              ; preds = %445
  store i32 1, ptr %9, align 4
  br label %519

450:                                              ; preds = %445
  %451 = load ptr, ptr %5, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.player_s, ptr %451, i32 0, i32 26
  store ptr @.str.33, ptr %452, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

453:                                              ; preds = %35
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = call i32 @P_GiveWeapon(ptr noundef %454, i32 noundef 4, i32 noundef 0)
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %458, label %457

457:                                              ; preds = %453
  store i32 1, ptr %9, align 4
  br label %519

458:                                              ; preds = %453
  %459 = load ptr, ptr %5, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.player_s, ptr %459, i32 0, i32 26
  store ptr @.str.34, ptr %460, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

461:                                              ; preds = %35
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = call i32 @P_GiveWeapon(ptr noundef %462, i32 noundef 5, i32 noundef 0)
  %464 = icmp ne i32 %463, 0
  br i1 %464, label %466, label %465

465:                                              ; preds = %461
  store i32 1, ptr %9, align 4
  br label %519

466:                                              ; preds = %461
  %467 = load ptr, ptr %5, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.player_s, ptr %467, i32 0, i32 26
  store ptr @.str.35, ptr %468, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

469:                                              ; preds = %35
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = load ptr, ptr %3, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.mobj_s, ptr %471, i32 0, i32 24
  %473 = load i32, ptr %472, align 8, !tbaa !29
  %474 = and i32 %473, 131072
  %475 = call i32 @P_GiveWeapon(ptr noundef %470, i32 noundef 2, i32 noundef %474)
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %478, label %477

477:                                              ; preds = %469
  store i32 1, ptr %9, align 4
  br label %519

478:                                              ; preds = %469
  %479 = load ptr, ptr %5, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.player_s, ptr %479, i32 0, i32 26
  store ptr @.str.36, ptr %480, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

481:                                              ; preds = %35
  %482 = load ptr, ptr %5, align 8, !tbaa !5
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.mobj_s, ptr %483, i32 0, i32 24
  %485 = load i32, ptr %484, align 8, !tbaa !29
  %486 = and i32 %485, 131072
  %487 = call i32 @P_GiveWeapon(ptr noundef %482, i32 noundef 8, i32 noundef %486)
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %490, label %489

489:                                              ; preds = %481
  store i32 1, ptr %9, align 4
  br label %519

490:                                              ; preds = %481
  %491 = load ptr, ptr %5, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.player_s, ptr %491, i32 0, i32 26
  store ptr @.str.37, ptr %492, align 8, !tbaa !20
  store i32 33, ptr %8, align 4, !tbaa !15
  br label %494

493:                                              ; preds = %35
  call void (ptr, ...) @I_Error(ptr noundef @.str.38) #5
  unreachable

494:                                              ; preds = %490, %478, %466, %458, %450, %442, %430, %422, %385, %377, %369, %361, %353, %345, %337, %329, %308, %300, %292, %284, %278, %260, %254, %235, %228, %213, %198, %183, %168, %153, %126, %112, %97, %67, %52, %44
  %495 = load ptr, ptr %3, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.mobj_s, ptr %495, i32 0, i32 24
  %497 = load i32, ptr %496, align 8, !tbaa !29
  %498 = and i32 %497, 8388608
  %499 = icmp ne i32 %498, 0
  br i1 %499, label %500, label %505

500:                                              ; preds = %494
  %501 = load ptr, ptr %5, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.player_s, ptr %501, i32 0, i32 24
  %503 = load i32, ptr %502, align 4, !tbaa !34
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %502, align 4, !tbaa !34
  br label %505

505:                                              ; preds = %500, %494
  %506 = load ptr, ptr %3, align 8, !tbaa !5
  call void @P_RemoveMobj(ptr noundef %506)
  %507 = load ptr, ptr %5, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.player_s, ptr %507, i32 0, i32 28
  %509 = load i32, ptr %508, align 4, !tbaa !35
  %510 = add nsw i32 %509, 6
  store i32 %510, ptr %508, align 4, !tbaa !35
  %511 = load ptr, ptr %5, align 8, !tbaa !5
  %512 = load i32, ptr @consoleplayer, align 4, !tbaa !15
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds [4 x %struct.player_s], ptr @players, i64 0, i64 %513
  %515 = icmp eq ptr %511, %514
  br i1 %515, label %516, label %518

516:                                              ; preds = %505
  %517 = load i32, ptr %8, align 4, !tbaa !15
  call void @S_StartSound(ptr noundef null, i32 noundef %517)
  br label %518

518:                                              ; preds = %516, %505
  store i32 0, ptr %9, align 4
  br label %519

519:                                              ; preds = %518, %489, %477, %465, %457, %449, %441, %429, %384, %376, %368, %360, %352, %344, %336, %327, %321, %307, %299, %291, %283, %267, %259, %242, %234, %229, %214, %199, %184, %169, %154, %125, %51, %43, %34, %25
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  %520 = load i32, ptr %9, align 4
  switch i32 %520, label %522 [
    i32 0, label %521
    i32 1, label %521
  ]

521:                                              ; preds = %519, %519
  ret void

522:                                              ; preds = %519
  unreachable
}

declare void @P_RemoveMobj(ptr noundef) #3

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 = { noreturn "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 = { nounwind }
attributes #5 = { noreturn }

!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, !12, i64 32}
!10 = !{!"mobj_s", !11, i64 0, !12, i64 24, !12, i64 28, !12, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 60, !12, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !6, i64 136, !12, i64 144, !6, i64 152, !12, i64 160, !12, i64 164, !12, i64 168, !12, i64 172, !6, i64 176, !12, i64 184, !12, i64 188, !6, i64 192, !12, i64 200, !13, i64 204, !6, i64 216}
!11 = !{!"thinker_s", !6, i64 0, !6, i64 8, !7, i64 16}
!12 = !{!"int", !7, i64 0}
!13 = !{!"", !14, i64 0, !14, i64 2, !14, i64 4, !14, i64 6, !14, i64 8}
!14 = !{!"short", !7, i64 0}
!15 = !{!12, !12, i64 0}
!16 = !{!10, !12, i64 108}
!17 = !{!10, !6, i64 192}
!18 = !{!10, !12, i64 164}
!19 = !{!10, !12, i64 60}
!20 = !{!21, !6, i64 224}
!21 = !{!"player_s", !6, i64 0, !12, i64 8, !22, i64 12, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !7, i64 48, !7, i64 72, !12, i64 96, !7, i64 100, !12, i64 116, !12, i64 120, !7, i64 124, !7, i64 160, !7, i64 176, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !6, i64 224, !12, i64 232, !12, i64 236, !6, i64 240, !12, i64 248, !12, i64 252, !12, i64 256, !7, i64 264, !12, i64 312}
!22 = !{!"", !7, i64 0, !7, i64 1, !14, i64 2, !14, i64 4, !7, i64 6, !7, i64 7}
!23 = !{!21, !12, i64 36}
!24 = !{!21, !6, i64 0}
!25 = !{!21, !12, i64 40}
!26 = !{!21, !12, i64 44}
!27 = !{!21, !12, i64 116}
!28 = !{!21, !12, i64 120}
!29 = !{!10, !12, i64 160}
!30 = !{!21, !12, i64 96}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!21, !12, i64 212}
!35 = !{!21, !12, i64 236}


; 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.player_s = type { ptr, i32, %struct.ticcmd_t, i32, i32, i32, i32, i32, i32, i32, [6 x i32], [6 x i32], i32, [4 x i32], i32, i32, [9 x i32], [4 x i32], [4 x i32], i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, i32, i32, i32, [2 x %struct.pspdef_t], i32 }
%struct.ticcmd_t = type { i8, i8, i16, i16, i8, i8 }
%struct.pspdef_t = type { ptr, i32, i32, i32 }

@netgame = external local_unnamed_addr global i32, align 4
@players = external global [4 x %struct.player_s], align 16
@consoleplayer = external local_unnamed_addr global i32, align 4
@.str.1 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@gamemode = external local_unnamed_addr global i32, align 4
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [39 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveAmmo(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: noreturn
declare void @I_Error(ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveWeapon(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @S_StartSound(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveBody(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GiveArmor(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @P_GiveCard(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @P_GivePower(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @P_TouchSpecialThing(ptr noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 32
  %4 = load i32, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 32
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = sub nsw i32 %4, %6
  %8 = getelementptr inbounds i8, ptr %1, i64 108
  %9 = load i32, ptr %8, align 4, !tbaa !14
  %10 = icmp sgt i32 %7, %9
  %11 = icmp slt i32 %7, -524288
  %or.cond = or i1 %10, %11
  br i1 %or.cond, label %249, label %12

12:                                               ; preds = %2
  %13 = getelementptr inbounds i8, ptr %1, i64 192
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %1, i64 164
  %16 = load i32, ptr %15, align 4, !tbaa !16
  %17 = icmp slt i32 %16, 1
  br i1 %17, label %249, label %18

18:                                               ; preds = %12
  %19 = getelementptr inbounds i8, ptr %0, i64 60
  %20 = load i32, ptr %19, align 4, !tbaa !17
  switch i32 %20, label %231 [
    i32 55, label %21
    i32 56, label %25
    i32 60, label %29
    i32 61, label %36
    i32 70, label %45
    i32 74, label %53
    i32 62, label %61
    i32 64, label %68
    i32 63, label %75
    i32 65, label %82
    i32 67, label %89
    i32 66, label %96
    i32 68, label %103
    i32 69, label %107
    i32 71, label %116
    i32 72, label %120
    i32 73, label %128
    i32 75, label %132
    i32 76, label %136
    i32 77, label %140
    i32 78, label %144
    i32 79, label %154
    i32 80, label %158
    i32 81, label %162
    i32 82, label %166
    i32 83, label %170
    i32 84, label %174
    i32 85, label %178
    i32 86, label %182
    i32 87, label %194
    i32 88, label %198
    i32 89, label %205
    i32 90, label %209
    i32 91, label %213
    i32 92, label %217
    i32 93, label %224
  ]

21:                                               ; preds = %18
  %22 = tail call i32 @P_GiveArmor(ptr noundef %14, i32 noundef 1)
  %.not169 = icmp eq i32 %22, 0
  br i1 %.not169, label %249, label %23

23:                                               ; preds = %21
  %24 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.1, ptr %24, align 8, !tbaa !18
  br label %232

25:                                               ; preds = %18
  %26 = tail call i32 @P_GiveArmor(ptr noundef %14, i32 noundef 2)
  %.not168 = icmp eq i32 %26, 0
  br i1 %.not168, label %249, label %27

27:                                               ; preds = %25
  %28 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.2, ptr %28, align 8, !tbaa !18
  br label %232

29:                                               ; preds = %18
  %30 = getelementptr inbounds i8, ptr %14, i64 36
  %31 = load i32, ptr %30, align 4, !tbaa !21
  %32 = add nsw i32 %31, 1
  %.inv173 = icmp slt i32 %31, 200
  %spec.select = select i1 %.inv173, i32 %32, i32 200
  store i32 %spec.select, ptr %30, align 4, !tbaa !21
  %33 = load ptr, ptr %14, align 8, !tbaa !22
  %34 = getelementptr inbounds i8, ptr %33, i64 164
  store i32 %spec.select, ptr %34, align 4, !tbaa !16
  %35 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.3, ptr %35, align 8, !tbaa !18
  br label %232

36:                                               ; preds = %18
  %37 = getelementptr inbounds i8, ptr %14, i64 40
  %38 = load i32, ptr %37, align 8, !tbaa !23
  %39 = add nsw i32 %38, 1
  %.inv = icmp slt i32 %38, 200
  %spec.select171 = select i1 %.inv, i32 %39, i32 200
  store i32 %spec.select171, ptr %37, align 8, !tbaa !23
  %40 = getelementptr inbounds i8, ptr %14, i64 44
  %41 = load i32, ptr %40, align 4, !tbaa !24
  %.not166 = icmp eq i32 %41, 0
  br i1 %.not166, label %42, label %43

42:                                               ; preds = %36
  store i32 1, ptr %40, align 4, !tbaa !24
  br label %43

43:                                               ; preds = %42, %36
  %44 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.4, ptr %44, align 8, !tbaa !18
  br label %232

45:                                               ; preds = %18
  %46 = getelementptr inbounds i8, ptr %14, i64 36
  %47 = load i32, ptr %46, align 4, !tbaa !21
  %48 = add nsw i32 %47, 100
  %49 = icmp sgt i32 %47, 100
  %spec.select172 = select i1 %49, i32 200, i32 %48
  store i32 %spec.select172, ptr %46, align 4, !tbaa !21
  %50 = load ptr, ptr %14, align 8, !tbaa !22
  %51 = getelementptr inbounds i8, ptr %50, i64 164
  store i32 %spec.select172, ptr %51, align 4, !tbaa !16
  %52 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.5, ptr %52, align 8, !tbaa !18
  br label %232

53:                                               ; preds = %18
  %54 = load i32, ptr @gamemode, align 4, !tbaa !25
  %.not164 = icmp eq i32 %54, 2
  br i1 %.not164, label %55, label %249

55:                                               ; preds = %53
  %56 = getelementptr inbounds i8, ptr %14, i64 36
  store i32 200, ptr %56, align 4, !tbaa !21
  %57 = load ptr, ptr %14, align 8, !tbaa !22
  %58 = getelementptr inbounds i8, ptr %57, i64 164
  store i32 200, ptr %58, align 4, !tbaa !16
  %59 = tail call i32 @P_GiveArmor(ptr noundef %14, i32 noundef 2)
  %60 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.6, ptr %60, align 8, !tbaa !18
  br label %232

61:                                               ; preds = %18
  %62 = getelementptr inbounds i8, ptr %14, i64 72
  %63 = load i32, ptr %62, align 8, !tbaa !25
  %.not162 = icmp eq i32 %63, 0
  br i1 %.not162, label %64, label %66

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.7, ptr %65, align 8, !tbaa !18
  br label %66

66:                                               ; preds = %64, %61
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 0)
  %67 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not163 = icmp eq i32 %67, 0
  br i1 %.not163, label %232, label %249

68:                                               ; preds = %18
  %69 = getelementptr inbounds i8, ptr %14, i64 76
  %70 = load i32, ptr %69, align 4, !tbaa !25
  %.not160 = icmp eq i32 %70, 0
  br i1 %.not160, label %71, label %73

71:                                               ; preds = %68
  %72 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.8, ptr %72, align 8, !tbaa !18
  br label %73

73:                                               ; preds = %71, %68
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 1)
  %74 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not161 = icmp eq i32 %74, 0
  br i1 %.not161, label %232, label %249

75:                                               ; preds = %18
  %76 = getelementptr inbounds i8, ptr %14, i64 80
  %77 = load i32, ptr %76, align 8, !tbaa !25
  %.not158 = icmp eq i32 %77, 0
  br i1 %.not158, label %78, label %80

78:                                               ; preds = %75
  %79 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.9, ptr %79, align 8, !tbaa !18
  br label %80

80:                                               ; preds = %78, %75
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 2)
  %81 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not159 = icmp eq i32 %81, 0
  br i1 %.not159, label %232, label %249

82:                                               ; preds = %18
  %83 = getelementptr inbounds i8, ptr %14, i64 84
  %84 = load i32, ptr %83, align 4, !tbaa !25
  %.not156 = icmp eq i32 %84, 0
  br i1 %.not156, label %85, label %87

85:                                               ; preds = %82
  %86 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.10, ptr %86, align 8, !tbaa !18
  br label %87

87:                                               ; preds = %85, %82
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 3)
  %88 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not157 = icmp eq i32 %88, 0
  br i1 %.not157, label %232, label %249

89:                                               ; preds = %18
  %90 = getelementptr inbounds i8, ptr %14, i64 88
  %91 = load i32, ptr %90, align 8, !tbaa !25
  %.not154 = icmp eq i32 %91, 0
  br i1 %.not154, label %92, label %94

92:                                               ; preds = %89
  %93 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.11, ptr %93, align 8, !tbaa !18
  br label %94

94:                                               ; preds = %92, %89
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 4)
  %95 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not155 = icmp eq i32 %95, 0
  br i1 %.not155, label %232, label %249

96:                                               ; preds = %18
  %97 = getelementptr inbounds i8, ptr %14, i64 92
  %98 = load i32, ptr %97, align 4, !tbaa !25
  %.not152 = icmp eq i32 %98, 0
  br i1 %.not152, label %99, label %101

99:                                               ; preds = %96
  %100 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.12, ptr %100, align 8, !tbaa !18
  br label %101

101:                                              ; preds = %99, %96
  tail call void @P_GiveCard(ptr noundef nonnull %14, i32 noundef 5)
  %102 = load i32, ptr @netgame, align 4, !tbaa !25
  %.not153 = icmp eq i32 %102, 0
  br i1 %.not153, label %232, label %249

103:                                              ; preds = %18
  %104 = tail call i32 @P_GiveBody(ptr noundef %14, i32 noundef 10)
  %.not151 = icmp eq i32 %104, 0
  br i1 %.not151, label %249, label %105

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.13, ptr %106, align 8, !tbaa !18
  br label %232

107:                                              ; preds = %18
  %108 = tail call i32 @P_GiveBody(ptr noundef %14, i32 noundef 25)
  %.not150 = icmp eq i32 %108, 0
  br i1 %.not150, label %249, label %109

109:                                              ; preds = %107
  %110 = getelementptr inbounds i8, ptr %14, i64 36
  %111 = load i32, ptr %110, align 4, !tbaa !21
  %112 = icmp slt i32 %111, 25
  %113 = getelementptr inbounds i8, ptr %14, i64 224
  br i1 %112, label %114, label %115

114:                                              ; preds = %109
  store ptr @.str.14, ptr %113, align 8, !tbaa !18
  br label %232

115:                                              ; preds = %109
  store ptr @.str.15, ptr %113, align 8, !tbaa !18
  br label %232

116:                                              ; preds = %18
  %117 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 0)
  %.not149 = icmp eq i32 %117, 0
  br i1 %.not149, label %249, label %118

118:                                              ; preds = %116
  %119 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.16, ptr %119, align 8, !tbaa !18
  br label %232

120:                                              ; preds = %18
  %121 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 1)
  %.not147 = icmp eq i32 %121, 0
  br i1 %.not147, label %249, label %122

122:                                              ; preds = %120
  %123 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.17, ptr %123, align 8, !tbaa !18
  %124 = getelementptr inbounds i8, ptr %14, i64 116
  %125 = load i32, ptr %124, align 4, !tbaa !26
  %.not148 = icmp eq i32 %125, 0
  br i1 %.not148, label %232, label %126

126:                                              ; preds = %122
  %127 = getelementptr inbounds i8, ptr %14, i64 120
  store i32 0, ptr %127, align 8, !tbaa !27
  br label %232

128:                                              ; preds = %18
  %129 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 2)
  %.not146 = icmp eq i32 %129, 0
  br i1 %.not146, label %249, label %130

130:                                              ; preds = %128
  %131 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.18, ptr %131, align 8, !tbaa !18
  br label %232

132:                                              ; preds = %18
  %133 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 3)
  %.not145 = icmp eq i32 %133, 0
  br i1 %.not145, label %249, label %134

134:                                              ; preds = %132
  %135 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.19, ptr %135, align 8, !tbaa !18
  br label %232

136:                                              ; preds = %18
  %137 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 4)
  %.not144 = icmp eq i32 %137, 0
  br i1 %.not144, label %249, label %138

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.20, ptr %139, align 8, !tbaa !18
  br label %232

140:                                              ; preds = %18
  %141 = tail call i32 @P_GivePower(ptr noundef %14, i32 noundef 5)
  %.not143 = icmp eq i32 %141, 0
  br i1 %.not143, label %249, label %142

142:                                              ; preds = %140
  %143 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.21, ptr %143, align 8, !tbaa !18
  br label %232

144:                                              ; preds = %18
  %145 = getelementptr inbounds i8, ptr %0, i64 160
  %146 = load i32, ptr %145, align 8, !tbaa !28
  %147 = and i32 %146, 131072
  %.not140 = icmp eq i32 %147, 0
  br i1 %.not140, label %150, label %148

148:                                              ; preds = %144
  %149 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 0, i32 noundef 0)
  %.not142 = icmp eq i32 %149, 0
  br i1 %.not142, label %249, label %152

150:                                              ; preds = %144
  %151 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 0, i32 noundef 1)
  %.not141 = icmp eq i32 %151, 0
  br i1 %.not141, label %249, label %152

152:                                              ; preds = %150, %148
  %153 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.22, ptr %153, align 8, !tbaa !18
  br label %232

154:                                              ; preds = %18
  %155 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 0, i32 noundef 5)
  %.not139 = icmp eq i32 %155, 0
  br i1 %.not139, label %249, label %156

156:                                              ; preds = %154
  %157 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.23, ptr %157, align 8, !tbaa !18
  br label %232

158:                                              ; preds = %18
  %159 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 3, i32 noundef 1)
  %.not138 = icmp eq i32 %159, 0
  br i1 %.not138, label %249, label %160

160:                                              ; preds = %158
  %161 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.24, ptr %161, align 8, !tbaa !18
  br label %232

162:                                              ; preds = %18
  %163 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 3, i32 noundef 5)
  %.not137 = icmp eq i32 %163, 0
  br i1 %.not137, label %249, label %164

164:                                              ; preds = %162
  %165 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.25, ptr %165, align 8, !tbaa !18
  br label %232

166:                                              ; preds = %18
  %167 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 2, i32 noundef 1)
  %.not136 = icmp eq i32 %167, 0
  br i1 %.not136, label %249, label %168

168:                                              ; preds = %166
  %169 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.26, ptr %169, align 8, !tbaa !18
  br label %232

170:                                              ; preds = %18
  %171 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 2, i32 noundef 5)
  %.not135 = icmp eq i32 %171, 0
  br i1 %.not135, label %249, label %172

172:                                              ; preds = %170
  %173 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.27, ptr %173, align 8, !tbaa !18
  br label %232

174:                                              ; preds = %18
  %175 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 1, i32 noundef 1)
  %.not134 = icmp eq i32 %175, 0
  br i1 %.not134, label %249, label %176

176:                                              ; preds = %174
  %177 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.28, ptr %177, align 8, !tbaa !18
  br label %232

178:                                              ; preds = %18
  %179 = tail call i32 @P_GiveAmmo(ptr noundef %14, i32 noundef 1, i32 noundef 5)
  %.not133 = icmp eq i32 %179, 0
  br i1 %.not133, label %249, label %180

180:                                              ; preds = %178
  %181 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.29, ptr %181, align 8, !tbaa !18
  br label %232

182:                                              ; preds = %18
  %183 = getelementptr inbounds i8, ptr %14, i64 96
  %184 = load i32, ptr %183, align 8, !tbaa !29
  %.not132 = icmp eq i32 %184, 0
  br i1 %.not132, label %.preheader, label %188

.preheader:                                       ; preds = %182
  %185 = getelementptr inbounds i8, ptr %14, i64 176
  %186 = load <4 x i32>, ptr %185, align 4, !tbaa !25
  %187 = shl nsw <4 x i32> %186, <i32 1, i32 1, i32 1, i32 1>
  store <4 x i32> %187, ptr %185, align 4, !tbaa !25
  store i32 1, ptr %183, align 8, !tbaa !29
  br label %188

188:                                              ; preds = %.preheader, %182
  %189 = tail call i32 @P_GiveAmmo(ptr noundef nonnull %14, i32 noundef 0, i32 noundef 1)
  %190 = tail call i32 @P_GiveAmmo(ptr noundef nonnull %14, i32 noundef 1, i32 noundef 1)
  %191 = tail call i32 @P_GiveAmmo(ptr noundef nonnull %14, i32 noundef 2, i32 noundef 1)
  %192 = tail call i32 @P_GiveAmmo(ptr noundef nonnull %14, i32 noundef 3, i32 noundef 1)
  %193 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.30, ptr %193, align 8, !tbaa !18
  br label %232

194:                                              ; preds = %18
  %195 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 6, i32 noundef 0)
  %.not131 = icmp eq i32 %195, 0
  br i1 %.not131, label %249, label %196

196:                                              ; preds = %194
  %197 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.31, ptr %197, align 8, !tbaa !18
  br label %232

198:                                              ; preds = %18
  %199 = getelementptr inbounds i8, ptr %0, i64 160
  %200 = load i32, ptr %199, align 8, !tbaa !28
  %201 = and i32 %200, 131072
  %202 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 3, i32 noundef %201)
  %.not130 = icmp eq i32 %202, 0
  br i1 %.not130, label %249, label %203

203:                                              ; preds = %198
  %204 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.32, ptr %204, align 8, !tbaa !18
  br label %232

205:                                              ; preds = %18
  %206 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 7, i32 noundef 0)
  %.not129 = icmp eq i32 %206, 0
  br i1 %.not129, label %249, label %207

207:                                              ; preds = %205
  %208 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.33, ptr %208, align 8, !tbaa !18
  br label %232

209:                                              ; preds = %18
  %210 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 4, i32 noundef 0)
  %.not128 = icmp eq i32 %210, 0
  br i1 %.not128, label %249, label %211

211:                                              ; preds = %209
  %212 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.34, ptr %212, align 8, !tbaa !18
  br label %232

213:                                              ; preds = %18
  %214 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 5, i32 noundef 0)
  %.not127 = icmp eq i32 %214, 0
  br i1 %.not127, label %249, label %215

215:                                              ; preds = %213
  %216 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.35, ptr %216, align 8, !tbaa !18
  br label %232

217:                                              ; preds = %18
  %218 = getelementptr inbounds i8, ptr %0, i64 160
  %219 = load i32, ptr %218, align 8, !tbaa !28
  %220 = and i32 %219, 131072
  %221 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 2, i32 noundef %220)
  %.not126 = icmp eq i32 %221, 0
  br i1 %.not126, label %249, label %222

222:                                              ; preds = %217
  %223 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.36, ptr %223, align 8, !tbaa !18
  br label %232

224:                                              ; preds = %18
  %225 = getelementptr inbounds i8, ptr %0, i64 160
  %226 = load i32, ptr %225, align 8, !tbaa !28
  %227 = and i32 %226, 131072
  %228 = tail call i32 @P_GiveWeapon(ptr noundef %14, i32 noundef 8, i32 noundef %227)
  %.not = icmp eq i32 %228, 0
  br i1 %.not, label %249, label %229

229:                                              ; preds = %224
  %230 = getelementptr inbounds i8, ptr %14, i64 224
  store ptr @.str.37, ptr %230, align 8, !tbaa !18
  br label %232

231:                                              ; preds = %18
  tail call void (ptr, ...) @I_Error(ptr noundef nonnull @.str.38) #3
  unreachable

232:                                              ; preds = %122, %126, %114, %115, %101, %94, %87, %80, %73, %66, %229, %222, %215, %211, %207, %203, %196, %188, %180, %176, %172, %168, %164, %160, %156, %152, %142, %138, %134, %130, %118, %105, %55, %45, %43, %29, %27, %23
  %.0 = phi i32 [ 33, %229 ], [ 33, %222 ], [ 33, %215 ], [ 33, %211 ], [ 33, %207 ], [ 33, %203 ], [ 33, %196 ], [ 32, %188 ], [ 32, %180 ], [ 32, %176 ], [ 32, %172 ], [ 32, %168 ], [ 32, %164 ], [ 32, %160 ], [ 32, %156 ], [ 32, %152 ], [ 93, %142 ], [ 93, %138 ], [ 93, %134 ], [ 93, %130 ], [ 93, %118 ], [ 32, %114 ], [ 32, %115 ], [ 32, %105 ], [ 32, %101 ], [ 32, %94 ], [ 32, %87 ], [ 32, %80 ], [ 32, %73 ], [ 32, %66 ], [ 93, %55 ], [ 93, %45 ], [ 32, %43 ], [ 32, %29 ], [ 32, %27 ], [ 32, %23 ], [ 93, %126 ], [ 93, %122 ]
  %233 = getelementptr inbounds i8, ptr %0, i64 160
  %234 = load i32, ptr %233, align 8, !tbaa !28
  %235 = and i32 %234, 8388608
  %.not170 = icmp eq i32 %235, 0
  br i1 %.not170, label %240, label %236

236:                                              ; preds = %232
  %237 = getelementptr inbounds i8, ptr %14, i64 212
  %238 = load i32, ptr %237, align 4, !tbaa !30
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %237, align 4, !tbaa !30
  br label %240

240:                                              ; preds = %236, %232
  tail call void @P_RemoveMobj(ptr noundef nonnull %0) #4
  %241 = getelementptr inbounds i8, ptr %14, i64 236
  %242 = load i32, ptr %241, align 4, !tbaa !31
  %243 = add nsw i32 %242, 6
  store i32 %243, ptr %241, align 4, !tbaa !31
  %244 = load i32, ptr @consoleplayer, align 4, !tbaa !25
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [4 x %struct.player_s], ptr @players, i64 0, i64 %245
  %247 = icmp eq ptr %14, %246
  br i1 %247, label %248, label %249

248:                                              ; preds = %240
  tail call void @S_StartSound(ptr noundef null, i32 noundef %.0) #4
  br label %249

249:                                              ; preds = %240, %248, %224, %217, %213, %209, %205, %198, %194, %178, %174, %170, %166, %162, %158, %154, %150, %148, %140, %136, %132, %128, %120, %116, %107, %103, %101, %94, %87, %80, %73, %66, %53, %25, %21, %12, %2
  ret void
}

declare void @P_RemoveMobj(ptr noundef) local_unnamed_addr #2

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 = { noreturn "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 #2 = { "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 = { noreturn nounwind }
attributes #4 = { 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, !11, i64 32}
!6 = !{!"mobj_s", !7, i64 0, !11, i64 24, !11, i64 28, !11, i64 32, !8, i64 40, !8, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !8, i64 72, !8, i64 80, !8, i64 88, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !8, i64 136, !11, i64 144, !8, i64 152, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !8, i64 176, !11, i64 184, !11, i64 188, !8, i64 192, !11, i64 200, !12, i64 204, !8, i64 216}
!7 = !{!"thinker_s", !8, i64 0, !8, i64 8, !9, i64 16}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 2, !13, i64 4, !13, i64 6, !13, i64 8}
!13 = !{!"short", !9, i64 0}
!14 = !{!6, !11, i64 108}
!15 = !{!6, !8, i64 192}
!16 = !{!6, !11, i64 164}
!17 = !{!6, !11, i64 60}
!18 = !{!19, !8, i64 224}
!19 = !{!"player_s", !8, i64 0, !11, i64 8, !20, i64 12, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !9, i64 48, !9, i64 72, !11, i64 96, !9, i64 100, !11, i64 116, !11, i64 120, !9, i64 124, !9, i64 160, !9, i64 176, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !8, i64 224, !11, i64 232, !11, i64 236, !8, i64 240, !11, i64 248, !11, i64 252, !11, i64 256, !9, i64 264, !11, i64 312}
!20 = !{!"", !9, i64 0, !9, i64 1, !13, i64 2, !13, i64 4, !9, i64 6, !9, i64 7}
!21 = !{!19, !11, i64 36}
!22 = !{!19, !8, i64 0}
!23 = !{!19, !11, i64 40}
!24 = !{!19, !11, i64 44}
!25 = !{!11, !11, i64 0}
!26 = !{!19, !11, i64 116}
!27 = !{!19, !11, i64 120}
!28 = !{!6, !11, i64 160}
!29 = !{!19, !11, i64 96}
!30 = !{!19, !11, i64 212}
!31 = !{!19, !11, i64 236}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass