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

; 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.line_s = type { ptr, ptr, i32, i32, i16, i16, i16, [2 x i16], [4 x i32], i32, ptr, ptr, i32, ptr }
%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 }

@lines = external global ptr, align 8

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

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

; Function Attrs: nounwind uwtable
define dso_local void @P_CrossSpecialLine(i32 noundef %0, i32 noundef %1, ptr noundef %2) #1 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %10 = load ptr, ptr @lines, align 8, !tbaa !9
  %11 = load i32, ptr %4, align 4, !tbaa !5
  %12 = sext i32 %11 to i64
  %13 = getelementptr inbounds %struct.line_s, ptr %10, i64 %12
  store ptr %13, ptr %7, align 8, !tbaa !9
  %14 = load ptr, ptr %6, align 8, !tbaa !9
  %15 = getelementptr inbounds %struct.mobj_s, ptr %14, i32 0, i32 31
  %16 = load ptr, ptr %15, align 8, !tbaa !11
  %17 = icmp ne ptr %16, null
  br i1 %17, label %35, label %18

18:                                               ; preds = %3
  %19 = load ptr, ptr %6, align 8, !tbaa !9
  %20 = getelementptr inbounds %struct.mobj_s, ptr %19, i32 0, i32 20
  %21 = load i32, ptr %20, align 8, !tbaa !16
  switch i32 %21, label %23 [
    i32 33, label %22
    i32 34, label %22
    i32 35, label %22
    i32 31, label %22
    i32 32, label %22
    i32 16, label %22
  ]

22:                                               ; preds = %18, %18, %18, %18, %18, %18
  store i32 1, ptr %9, align 4
  br label %341

23:                                               ; preds = %18
  br label %24

24:                                               ; preds = %23
  store i32 0, ptr %8, align 4, !tbaa !5
  %25 = load ptr, ptr %7, align 8, !tbaa !9
  %26 = getelementptr inbounds %struct.line_s, ptr %25, i32 0, i32 5
  %27 = load i16, ptr %26, align 2, !tbaa !17
  %28 = sext i16 %27 to i32
  switch i32 %28, label %30 [
    i32 39, label %29
    i32 97, label %29
    i32 125, label %29
    i32 126, label %29
    i32 4, label %29
    i32 10, label %29
    i32 88, label %29
  ]

29:                                               ; preds = %24, %24, %24, %24, %24, %24, %24
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %30

30:                                               ; preds = %29, %24
  %31 = load i32, ptr %8, align 4, !tbaa !5
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %34, label %33

33:                                               ; preds = %30
  store i32 1, ptr %9, align 4
  br label %341

34:                                               ; preds = %30
  br label %35

35:                                               ; preds = %34, %3
  %36 = load ptr, ptr %7, align 8, !tbaa !9
  %37 = getelementptr inbounds %struct.line_s, ptr %36, i32 0, i32 5
  %38 = load i16, ptr %37, align 2, !tbaa !17
  %39 = sext i16 %38 to i32
  switch i32 %39, label %340 [
    i32 2, label %40
    i32 3, label %45
    i32 4, label %50
    i32 5, label %55
    i32 6, label %60
    i32 8, label %65
    i32 10, label %70
    i32 12, label %75
    i32 13, label %79
    i32 16, label %83
    i32 17, label %88
    i32 19, label %92
    i32 22, label %97
    i32 25, label %102
    i32 30, label %107
    i32 35, label %112
    i32 36, label %116
    i32 37, label %121
    i32 38, label %126
    i32 39, label %131
    i32 40, label %138
    i32 44, label %145
    i32 52, label %150
    i32 53, label %151
    i32 54, label %156
    i32 56, label %160
    i32 57, label %165
    i32 58, label %170
    i32 59, label %175
    i32 104, label %180
    i32 108, label %184
    i32 109, label %189
    i32 100, label %194
    i32 110, label %199
    i32 119, label %204
    i32 121, label %209
    i32 124, label %214
    i32 125, label %215
    i32 130, label %228
    i32 141, label %233
    i32 72, label %238
    i32 73, label %241
    i32 74, label %244
    i32 75, label %247
    i32 76, label %250
    i32 77, label %253
    i32 79, label %256
    i32 80, label %258
    i32 81, label %260
    i32 82, label %262
    i32 83, label %265
    i32 84, label %268
    i32 86, label %271
    i32 87, label %274
    i32 88, label %277
    i32 89, label %280
    i32 90, label %282
    i32 91, label %285
    i32 92, label %288
    i32 93, label %291
    i32 94, label %294
    i32 95, label %297
    i32 96, label %300
    i32 97, label %303
    i32 98, label %308
    i32 105, label %311
    i32 106, label %314
    i32 107, label %317
    i32 120, label %320
    i32 126, label %323
    i32 128, label %334
    i32 129, label %337
  ]

40:                                               ; preds = %35
  %41 = load ptr, ptr %7, align 8, !tbaa !9
  %42 = call i32 @EV_DoDoor(ptr noundef %41, i32 noundef 3)
  %43 = load ptr, ptr %7, align 8, !tbaa !9
  %44 = getelementptr inbounds %struct.line_s, ptr %43, i32 0, i32 5
  store i16 0, ptr %44, align 2, !tbaa !17
  br label %340

45:                                               ; preds = %35
  %46 = load ptr, ptr %7, align 8, !tbaa !9
  %47 = call i32 @EV_DoDoor(ptr noundef %46, i32 noundef 2)
  %48 = load ptr, ptr %7, align 8, !tbaa !9
  %49 = getelementptr inbounds %struct.line_s, ptr %48, i32 0, i32 5
  store i16 0, ptr %49, align 2, !tbaa !17
  br label %340

50:                                               ; preds = %35
  %51 = load ptr, ptr %7, align 8, !tbaa !9
  %52 = call i32 @EV_DoDoor(ptr noundef %51, i32 noundef 0)
  %53 = load ptr, ptr %7, align 8, !tbaa !9
  %54 = getelementptr inbounds %struct.line_s, ptr %53, i32 0, i32 5
  store i16 0, ptr %54, align 2, !tbaa !17
  br label %340

55:                                               ; preds = %35
  %56 = load ptr, ptr %7, align 8, !tbaa !9
  %57 = call i32 @EV_DoFloor(ptr noundef %56, i32 noundef 3)
  %58 = load ptr, ptr %7, align 8, !tbaa !9
  %59 = getelementptr inbounds %struct.line_s, ptr %58, i32 0, i32 5
  store i16 0, ptr %59, align 2, !tbaa !17
  br label %340

60:                                               ; preds = %35
  %61 = load ptr, ptr %7, align 8, !tbaa !9
  %62 = call i32 @EV_DoCeiling(ptr noundef %61, i32 noundef 4)
  %63 = load ptr, ptr %7, align 8, !tbaa !9
  %64 = getelementptr inbounds %struct.line_s, ptr %63, i32 0, i32 5
  store i16 0, ptr %64, align 2, !tbaa !17
  br label %340

65:                                               ; preds = %35
  %66 = load ptr, ptr %7, align 8, !tbaa !9
  %67 = call i32 @EV_BuildStairs(ptr noundef %66, i32 noundef 0)
  %68 = load ptr, ptr %7, align 8, !tbaa !9
  %69 = getelementptr inbounds %struct.line_s, ptr %68, i32 0, i32 5
  store i16 0, ptr %69, align 2, !tbaa !17
  br label %340

70:                                               ; preds = %35
  %71 = load ptr, ptr %7, align 8, !tbaa !9
  %72 = call i32 @EV_DoPlat(ptr noundef %71, i32 noundef 1, i32 noundef 0)
  %73 = load ptr, ptr %7, align 8, !tbaa !9
  %74 = getelementptr inbounds %struct.line_s, ptr %73, i32 0, i32 5
  store i16 0, ptr %74, align 2, !tbaa !17
  br label %340

75:                                               ; preds = %35
  %76 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %76, i32 noundef 0)
  %77 = load ptr, ptr %7, align 8, !tbaa !9
  %78 = getelementptr inbounds %struct.line_s, ptr %77, i32 0, i32 5
  store i16 0, ptr %78, align 2, !tbaa !17
  br label %340

79:                                               ; preds = %35
  %80 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %80, i32 noundef 255)
  %81 = load ptr, ptr %7, align 8, !tbaa !9
  %82 = getelementptr inbounds %struct.line_s, ptr %81, i32 0, i32 5
  store i16 0, ptr %82, align 2, !tbaa !17
  br label %340

83:                                               ; preds = %35
  %84 = load ptr, ptr %7, align 8, !tbaa !9
  %85 = call i32 @EV_DoDoor(ptr noundef %84, i32 noundef 1)
  %86 = load ptr, ptr %7, align 8, !tbaa !9
  %87 = getelementptr inbounds %struct.line_s, ptr %86, i32 0, i32 5
  store i16 0, ptr %87, align 2, !tbaa !17
  br label %340

88:                                               ; preds = %35
  %89 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_StartLightStrobing(ptr noundef %89)
  %90 = load ptr, ptr %7, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct.line_s, ptr %90, i32 0, i32 5
  store i16 0, ptr %91, align 2, !tbaa !17
  br label %340

92:                                               ; preds = %35
  %93 = load ptr, ptr %7, align 8, !tbaa !9
  %94 = call i32 @EV_DoFloor(ptr noundef %93, i32 noundef 0)
  %95 = load ptr, ptr %7, align 8, !tbaa !9
  %96 = getelementptr inbounds %struct.line_s, ptr %95, i32 0, i32 5
  store i16 0, ptr %96, align 2, !tbaa !17
  br label %340

97:                                               ; preds = %35
  %98 = load ptr, ptr %7, align 8, !tbaa !9
  %99 = call i32 @EV_DoPlat(ptr noundef %98, i32 noundef 3, i32 noundef 0)
  %100 = load ptr, ptr %7, align 8, !tbaa !9
  %101 = getelementptr inbounds %struct.line_s, ptr %100, i32 0, i32 5
  store i16 0, ptr %101, align 2, !tbaa !17
  br label %340

102:                                              ; preds = %35
  %103 = load ptr, ptr %7, align 8, !tbaa !9
  %104 = call i32 @EV_DoCeiling(ptr noundef %103, i32 noundef 3)
  %105 = load ptr, ptr %7, align 8, !tbaa !9
  %106 = getelementptr inbounds %struct.line_s, ptr %105, i32 0, i32 5
  store i16 0, ptr %106, align 2, !tbaa !17
  br label %340

107:                                              ; preds = %35
  %108 = load ptr, ptr %7, align 8, !tbaa !9
  %109 = call i32 @EV_DoFloor(ptr noundef %108, i32 noundef 5)
  %110 = load ptr, ptr %7, align 8, !tbaa !9
  %111 = getelementptr inbounds %struct.line_s, ptr %110, i32 0, i32 5
  store i16 0, ptr %111, align 2, !tbaa !17
  br label %340

112:                                              ; preds = %35
  %113 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %113, i32 noundef 35)
  %114 = load ptr, ptr %7, align 8, !tbaa !9
  %115 = getelementptr inbounds %struct.line_s, ptr %114, i32 0, i32 5
  store i16 0, ptr %115, align 2, !tbaa !17
  br label %340

116:                                              ; preds = %35
  %117 = load ptr, ptr %7, align 8, !tbaa !9
  %118 = call i32 @EV_DoFloor(ptr noundef %117, i32 noundef 2)
  %119 = load ptr, ptr %7, align 8, !tbaa !9
  %120 = getelementptr inbounds %struct.line_s, ptr %119, i32 0, i32 5
  store i16 0, ptr %120, align 2, !tbaa !17
  br label %340

121:                                              ; preds = %35
  %122 = load ptr, ptr %7, align 8, !tbaa !9
  %123 = call i32 @EV_DoFloor(ptr noundef %122, i32 noundef 6)
  %124 = load ptr, ptr %7, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct.line_s, ptr %124, i32 0, i32 5
  store i16 0, ptr %125, align 2, !tbaa !17
  br label %340

126:                                              ; preds = %35
  %127 = load ptr, ptr %7, align 8, !tbaa !9
  %128 = call i32 @EV_DoFloor(ptr noundef %127, i32 noundef 1)
  %129 = load ptr, ptr %7, align 8, !tbaa !9
  %130 = getelementptr inbounds %struct.line_s, ptr %129, i32 0, i32 5
  store i16 0, ptr %130, align 2, !tbaa !17
  br label %340

131:                                              ; preds = %35
  %132 = load ptr, ptr %7, align 8, !tbaa !9
  %133 = load i32, ptr %5, align 4, !tbaa !5
  %134 = load ptr, ptr %6, align 8, !tbaa !9
  %135 = call i32 @EV_Teleport(ptr noundef %132, i32 noundef %133, ptr noundef %134)
  %136 = load ptr, ptr %7, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct.line_s, ptr %136, i32 0, i32 5
  store i16 0, ptr %137, align 2, !tbaa !17
  br label %340

138:                                              ; preds = %35
  %139 = load ptr, ptr %7, align 8, !tbaa !9
  %140 = call i32 @EV_DoCeiling(ptr noundef %139, i32 noundef 1)
  %141 = load ptr, ptr %7, align 8, !tbaa !9
  %142 = call i32 @EV_DoFloor(ptr noundef %141, i32 noundef 1)
  %143 = load ptr, ptr %7, align 8, !tbaa !9
  %144 = getelementptr inbounds %struct.line_s, ptr %143, i32 0, i32 5
  store i16 0, ptr %144, align 2, !tbaa !17
  br label %340

145:                                              ; preds = %35
  %146 = load ptr, ptr %7, align 8, !tbaa !9
  %147 = call i32 @EV_DoCeiling(ptr noundef %146, i32 noundef 2)
  %148 = load ptr, ptr %7, align 8, !tbaa !9
  %149 = getelementptr inbounds %struct.line_s, ptr %148, i32 0, i32 5
  store i16 0, ptr %149, align 2, !tbaa !17
  br label %340

150:                                              ; preds = %35
  call void @G_ExitLevel()
  br label %340

151:                                              ; preds = %35
  %152 = load ptr, ptr %7, align 8, !tbaa !9
  %153 = call i32 @EV_DoPlat(ptr noundef %152, i32 noundef 0, i32 noundef 0)
  %154 = load ptr, ptr %7, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.line_s, ptr %154, i32 0, i32 5
  store i16 0, ptr %155, align 2, !tbaa !17
  br label %340

156:                                              ; preds = %35
  %157 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_StopPlat(ptr noundef %157)
  %158 = load ptr, ptr %7, align 8, !tbaa !9
  %159 = getelementptr inbounds %struct.line_s, ptr %158, i32 0, i32 5
  store i16 0, ptr %159, align 2, !tbaa !17
  br label %340

160:                                              ; preds = %35
  %161 = load ptr, ptr %7, align 8, !tbaa !9
  %162 = call i32 @EV_DoFloor(ptr noundef %161, i32 noundef 9)
  %163 = load ptr, ptr %7, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct.line_s, ptr %163, i32 0, i32 5
  store i16 0, ptr %164, align 2, !tbaa !17
  br label %340

165:                                              ; preds = %35
  %166 = load ptr, ptr %7, align 8, !tbaa !9
  %167 = call i32 @EV_CeilingCrushStop(ptr noundef %166)
  %168 = load ptr, ptr %7, align 8, !tbaa !9
  %169 = getelementptr inbounds %struct.line_s, ptr %168, i32 0, i32 5
  store i16 0, ptr %169, align 2, !tbaa !17
  br label %340

170:                                              ; preds = %35
  %171 = load ptr, ptr %7, align 8, !tbaa !9
  %172 = call i32 @EV_DoFloor(ptr noundef %171, i32 noundef 7)
  %173 = load ptr, ptr %7, align 8, !tbaa !9
  %174 = getelementptr inbounds %struct.line_s, ptr %173, i32 0, i32 5
  store i16 0, ptr %174, align 2, !tbaa !17
  br label %340

175:                                              ; preds = %35
  %176 = load ptr, ptr %7, align 8, !tbaa !9
  %177 = call i32 @EV_DoFloor(ptr noundef %176, i32 noundef 8)
  %178 = load ptr, ptr %7, align 8, !tbaa !9
  %179 = getelementptr inbounds %struct.line_s, ptr %178, i32 0, i32 5
  store i16 0, ptr %179, align 2, !tbaa !17
  br label %340

180:                                              ; preds = %35
  %181 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_TurnTagLightsOff(ptr noundef %181)
  %182 = load ptr, ptr %7, align 8, !tbaa !9
  %183 = getelementptr inbounds %struct.line_s, ptr %182, i32 0, i32 5
  store i16 0, ptr %183, align 2, !tbaa !17
  br label %340

184:                                              ; preds = %35
  %185 = load ptr, ptr %7, align 8, !tbaa !9
  %186 = call i32 @EV_DoDoor(ptr noundef %185, i32 noundef 5)
  %187 = load ptr, ptr %7, align 8, !tbaa !9
  %188 = getelementptr inbounds %struct.line_s, ptr %187, i32 0, i32 5
  store i16 0, ptr %188, align 2, !tbaa !17
  br label %340

189:                                              ; preds = %35
  %190 = load ptr, ptr %7, align 8, !tbaa !9
  %191 = call i32 @EV_DoDoor(ptr noundef %190, i32 noundef 6)
  %192 = load ptr, ptr %7, align 8, !tbaa !9
  %193 = getelementptr inbounds %struct.line_s, ptr %192, i32 0, i32 5
  store i16 0, ptr %193, align 2, !tbaa !17
  br label %340

194:                                              ; preds = %35
  %195 = load ptr, ptr %7, align 8, !tbaa !9
  %196 = call i32 @EV_BuildStairs(ptr noundef %195, i32 noundef 1)
  %197 = load ptr, ptr %7, align 8, !tbaa !9
  %198 = getelementptr inbounds %struct.line_s, ptr %197, i32 0, i32 5
  store i16 0, ptr %198, align 2, !tbaa !17
  br label %340

199:                                              ; preds = %35
  %200 = load ptr, ptr %7, align 8, !tbaa !9
  %201 = call i32 @EV_DoDoor(ptr noundef %200, i32 noundef 7)
  %202 = load ptr, ptr %7, align 8, !tbaa !9
  %203 = getelementptr inbounds %struct.line_s, ptr %202, i32 0, i32 5
  store i16 0, ptr %203, align 2, !tbaa !17
  br label %340

204:                                              ; preds = %35
  %205 = load ptr, ptr %7, align 8, !tbaa !9
  %206 = call i32 @EV_DoFloor(ptr noundef %205, i32 noundef 4)
  %207 = load ptr, ptr %7, align 8, !tbaa !9
  %208 = getelementptr inbounds %struct.line_s, ptr %207, i32 0, i32 5
  store i16 0, ptr %208, align 2, !tbaa !17
  br label %340

209:                                              ; preds = %35
  %210 = load ptr, ptr %7, align 8, !tbaa !9
  %211 = call i32 @EV_DoPlat(ptr noundef %210, i32 noundef 4, i32 noundef 0)
  %212 = load ptr, ptr %7, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.line_s, ptr %212, i32 0, i32 5
  store i16 0, ptr %213, align 2, !tbaa !17
  br label %340

214:                                              ; preds = %35
  call void @G_SecretExitLevel()
  br label %340

215:                                              ; preds = %35
  %216 = load ptr, ptr %6, align 8, !tbaa !9
  %217 = getelementptr inbounds %struct.mobj_s, ptr %216, i32 0, i32 31
  %218 = load ptr, ptr %217, align 8, !tbaa !11
  %219 = icmp ne ptr %218, null
  br i1 %219, label %227, label %220

220:                                              ; preds = %215
  %221 = load ptr, ptr %7, align 8, !tbaa !9
  %222 = load i32, ptr %5, align 4, !tbaa !5
  %223 = load ptr, ptr %6, align 8, !tbaa !9
  %224 = call i32 @EV_Teleport(ptr noundef %221, i32 noundef %222, ptr noundef %223)
  %225 = load ptr, ptr %7, align 8, !tbaa !9
  %226 = getelementptr inbounds %struct.line_s, ptr %225, i32 0, i32 5
  store i16 0, ptr %226, align 2, !tbaa !17
  br label %227

227:                                              ; preds = %220, %215
  br label %340

228:                                              ; preds = %35
  %229 = load ptr, ptr %7, align 8, !tbaa !9
  %230 = call i32 @EV_DoFloor(ptr noundef %229, i32 noundef 10)
  %231 = load ptr, ptr %7, align 8, !tbaa !9
  %232 = getelementptr inbounds %struct.line_s, ptr %231, i32 0, i32 5
  store i16 0, ptr %232, align 2, !tbaa !17
  br label %340

233:                                              ; preds = %35
  %234 = load ptr, ptr %7, align 8, !tbaa !9
  %235 = call i32 @EV_DoCeiling(ptr noundef %234, i32 noundef 5)
  %236 = load ptr, ptr %7, align 8, !tbaa !9
  %237 = getelementptr inbounds %struct.line_s, ptr %236, i32 0, i32 5
  store i16 0, ptr %237, align 2, !tbaa !17
  br label %340

238:                                              ; preds = %35
  %239 = load ptr, ptr %7, align 8, !tbaa !9
  %240 = call i32 @EV_DoCeiling(ptr noundef %239, i32 noundef 2)
  br label %340

241:                                              ; preds = %35
  %242 = load ptr, ptr %7, align 8, !tbaa !9
  %243 = call i32 @EV_DoCeiling(ptr noundef %242, i32 noundef 3)
  br label %340

244:                                              ; preds = %35
  %245 = load ptr, ptr %7, align 8, !tbaa !9
  %246 = call i32 @EV_CeilingCrushStop(ptr noundef %245)
  br label %340

247:                                              ; preds = %35
  %248 = load ptr, ptr %7, align 8, !tbaa !9
  %249 = call i32 @EV_DoDoor(ptr noundef %248, i32 noundef 2)
  br label %340

250:                                              ; preds = %35
  %251 = load ptr, ptr %7, align 8, !tbaa !9
  %252 = call i32 @EV_DoDoor(ptr noundef %251, i32 noundef 1)
  br label %340

253:                                              ; preds = %35
  %254 = load ptr, ptr %7, align 8, !tbaa !9
  %255 = call i32 @EV_DoCeiling(ptr noundef %254, i32 noundef 4)
  br label %340

256:                                              ; preds = %35
  %257 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %257, i32 noundef 35)
  br label %340

258:                                              ; preds = %35
  %259 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %259, i32 noundef 0)
  br label %340

260:                                              ; preds = %35
  %261 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_LightTurnOn(ptr noundef %261, i32 noundef 255)
  br label %340

262:                                              ; preds = %35
  %263 = load ptr, ptr %7, align 8, !tbaa !9
  %264 = call i32 @EV_DoFloor(ptr noundef %263, i32 noundef 1)
  br label %340

265:                                              ; preds = %35
  %266 = load ptr, ptr %7, align 8, !tbaa !9
  %267 = call i32 @EV_DoFloor(ptr noundef %266, i32 noundef 0)
  br label %340

268:                                              ; preds = %35
  %269 = load ptr, ptr %7, align 8, !tbaa !9
  %270 = call i32 @EV_DoFloor(ptr noundef %269, i32 noundef 6)
  br label %340

271:                                              ; preds = %35
  %272 = load ptr, ptr %7, align 8, !tbaa !9
  %273 = call i32 @EV_DoDoor(ptr noundef %272, i32 noundef 3)
  br label %340

274:                                              ; preds = %35
  %275 = load ptr, ptr %7, align 8, !tbaa !9
  %276 = call i32 @EV_DoPlat(ptr noundef %275, i32 noundef 0, i32 noundef 0)
  br label %340

277:                                              ; preds = %35
  %278 = load ptr, ptr %7, align 8, !tbaa !9
  %279 = call i32 @EV_DoPlat(ptr noundef %278, i32 noundef 1, i32 noundef 0)
  br label %340

280:                                              ; preds = %35
  %281 = load ptr, ptr %7, align 8, !tbaa !9
  call void @EV_StopPlat(ptr noundef %281)
  br label %340

282:                                              ; preds = %35
  %283 = load ptr, ptr %7, align 8, !tbaa !9
  %284 = call i32 @EV_DoDoor(ptr noundef %283, i32 noundef 0)
  br label %340

285:                                              ; preds = %35
  %286 = load ptr, ptr %7, align 8, !tbaa !9
  %287 = call i32 @EV_DoFloor(ptr noundef %286, i32 noundef 3)
  br label %340

288:                                              ; preds = %35
  %289 = load ptr, ptr %7, align 8, !tbaa !9
  %290 = call i32 @EV_DoFloor(ptr noundef %289, i32 noundef 7)
  br label %340

291:                                              ; preds = %35
  %292 = load ptr, ptr %7, align 8, !tbaa !9
  %293 = call i32 @EV_DoFloor(ptr noundef %292, i32 noundef 8)
  br label %340

294:                                              ; preds = %35
  %295 = load ptr, ptr %7, align 8, !tbaa !9
  %296 = call i32 @EV_DoFloor(ptr noundef %295, i32 noundef 9)
  br label %340

297:                                              ; preds = %35
  %298 = load ptr, ptr %7, align 8, !tbaa !9
  %299 = call i32 @EV_DoPlat(ptr noundef %298, i32 noundef 3, i32 noundef 0)
  br label %340

300:                                              ; preds = %35
  %301 = load ptr, ptr %7, align 8, !tbaa !9
  %302 = call i32 @EV_DoFloor(ptr noundef %301, i32 noundef 5)
  br label %340

303:                                              ; preds = %35
  %304 = load ptr, ptr %7, align 8, !tbaa !9
  %305 = load i32, ptr %5, align 4, !tbaa !5
  %306 = load ptr, ptr %6, align 8, !tbaa !9
  %307 = call i32 @EV_Teleport(ptr noundef %304, i32 noundef %305, ptr noundef %306)
  br label %340

308:                                              ; preds = %35
  %309 = load ptr, ptr %7, align 8, !tbaa !9
  %310 = call i32 @EV_DoFloor(ptr noundef %309, i32 noundef 2)
  br label %340

311:                                              ; preds = %35
  %312 = load ptr, ptr %7, align 8, !tbaa !9
  %313 = call i32 @EV_DoDoor(ptr noundef %312, i32 noundef 5)
  br label %340

314:                                              ; preds = %35
  %315 = load ptr, ptr %7, align 8, !tbaa !9
  %316 = call i32 @EV_DoDoor(ptr noundef %315, i32 noundef 6)
  br label %340

317:                                              ; preds = %35
  %318 = load ptr, ptr %7, align 8, !tbaa !9
  %319 = call i32 @EV_DoDoor(ptr noundef %318, i32 noundef 7)
  br label %340

320:                                              ; preds = %35
  %321 = load ptr, ptr %7, align 8, !tbaa !9
  %322 = call i32 @EV_DoPlat(ptr noundef %321, i32 noundef 4, i32 noundef 0)
  br label %340

323:                                              ; preds = %35
  %324 = load ptr, ptr %6, align 8, !tbaa !9
  %325 = getelementptr inbounds %struct.mobj_s, ptr %324, i32 0, i32 31
  %326 = load ptr, ptr %325, align 8, !tbaa !11
  %327 = icmp ne ptr %326, null
  br i1 %327, label %333, label %328

328:                                              ; preds = %323
  %329 = load ptr, ptr %7, align 8, !tbaa !9
  %330 = load i32, ptr %5, align 4, !tbaa !5
  %331 = load ptr, ptr %6, align 8, !tbaa !9
  %332 = call i32 @EV_Teleport(ptr noundef %329, i32 noundef %330, ptr noundef %331)
  br label %333

333:                                              ; preds = %328, %323
  br label %340

334:                                              ; preds = %35
  %335 = load ptr, ptr %7, align 8, !tbaa !9
  %336 = call i32 @EV_DoFloor(ptr noundef %335, i32 noundef 4)
  br label %340

337:                                              ; preds = %35
  %338 = load ptr, ptr %7, align 8, !tbaa !9
  %339 = call i32 @EV_DoFloor(ptr noundef %338, i32 noundef 10)
  br label %340

340:                                              ; preds = %337, %334, %333, %320, %317, %314, %311, %308, %303, %300, %297, %294, %291, %288, %285, %282, %280, %277, %274, %271, %268, %265, %262, %260, %258, %256, %253, %250, %247, %244, %241, %238, %233, %228, %227, %214, %209, %204, %199, %194, %189, %184, %180, %175, %170, %165, %160, %156, %151, %150, %145, %138, %131, %126, %121, %116, %112, %107, %102, %97, %92, %88, %83, %79, %75, %70, %65, %60, %55, %50, %45, %40, %35
  store i32 0, ptr %9, align 4
  br label %341

341:                                              ; preds = %340, %33, %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  %342 = load i32, ptr %9, align 4
  switch i32 %342, label %344 [
    i32 0, label %343
    i32 1, label %343
  ]

343:                                              ; preds = %341, %341
  ret void

344:                                              ; preds = %341
  unreachable
}

declare i32 @EV_DoDoor(ptr noundef, i32 noundef) #2

declare i32 @EV_DoFloor(ptr noundef, i32 noundef) #2

declare i32 @EV_DoCeiling(ptr noundef, i32 noundef) #2

declare i32 @EV_BuildStairs(ptr noundef, i32 noundef) #2

declare i32 @EV_DoPlat(ptr noundef, i32 noundef, i32 noundef) #2

declare void @EV_LightTurnOn(ptr noundef, i32 noundef) #2

declare void @EV_StartLightStrobing(ptr noundef) #2

declare i32 @EV_Teleport(ptr noundef, i32 noundef, ptr noundef) #2

declare void @G_ExitLevel() #2

declare void @EV_StopPlat(ptr noundef) #2

declare i32 @EV_CeilingCrushStop(ptr noundef) #2

declare void @EV_TurnTagLightsOff(ptr noundef) #2

declare void @G_SecretExitLevel() #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { 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 = !{!12, !10, i64 192}
!12 = !{!"mobj_s", !13, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !6, i64 60, !6, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !10, i64 136, !6, i64 144, !10, i64 152, !6, i64 160, !6, i64 164, !6, i64 168, !6, i64 172, !10, i64 176, !6, i64 184, !6, i64 188, !10, i64 192, !6, i64 200, !14, i64 204, !10, i64 216}
!13 = !{!"thinker_s", !10, i64 0, !10, i64 8, !7, i64 16}
!14 = !{!"", !15, i64 0, !15, i64 2, !15, i64 4, !15, i64 6, !15, i64 8}
!15 = !{!"short", !7, i64 0}
!16 = !{!12, !6, i64 128}
!17 = !{!18, !15, i64 26}
!18 = !{!"line_s", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !15, i64 24, !15, i64 26, !15, i64 28, !7, i64 30, !7, i64 36, !6, i64 52, !10, i64 56, !10, i64 64, !6, i64 72, !10, i64 80}


; 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.line_s = type { ptr, ptr, i32, i32, i16, i16, i16, [2 x i16], [4 x i32], i32, ptr, ptr, i32, ptr }

@lines = external local_unnamed_addr global ptr, align 8

; Function Attrs: nounwind uwtable
define dso_local void @P_CrossSpecialLine(i32 noundef %0, i32 noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = load ptr, ptr @lines, align 8, !tbaa !5
  %5 = sext i32 %0 to i64
  %6 = getelementptr inbounds %struct.line_s, ptr %4, i64 %5
  %7 = getelementptr inbounds i8, ptr %2, i64 192
  %8 = load ptr, ptr %7, align 8, !tbaa !9
  %.not = icmp eq ptr %8, null
  br i1 %.not, label %9, label %._crit_edge

._crit_edge:                                      ; preds = %3
  %.phi.trans.insert = getelementptr inbounds i8, ptr %6, i64 26
  %.pre = load i16, ptr %.phi.trans.insert, align 2, !tbaa !15
  br label %15

9:                                                ; preds = %3
  %10 = getelementptr inbounds i8, ptr %2, i64 128
  %11 = load i32, ptr %10, align 8, !tbaa !17
  switch i32 %11, label %12 [
    i32 33, label %.critedge
    i32 34, label %.critedge
    i32 35, label %.critedge
    i32 31, label %.critedge
    i32 32, label %.critedge
    i32 16, label %.critedge
  ]

12:                                               ; preds = %9
  %13 = getelementptr inbounds i8, ptr %6, i64 26
  %14 = load i16, ptr %13, align 2, !tbaa !15
  switch i16 %14, label %.critedge [
    i16 39, label %15
    i16 97, label %15
    i16 125, label %15
    i16 126, label %15
    i16 4, label %15
    i16 10, label %15
    i16 88, label %15
  ]

15:                                               ; preds = %._crit_edge, %12, %12, %12, %12, %12, %12, %12
  %16 = phi i16 [ %.pre, %._crit_edge ], [ %14, %12 ], [ %14, %12 ], [ %14, %12 ], [ %14, %12 ], [ %14, %12 ], [ %14, %12 ], [ %14, %12 ]
  %17 = getelementptr inbounds i8, ptr %6, i64 26
  switch i16 %16, label %.critedge [
    i16 2, label %18
    i16 3, label %20
    i16 4, label %22
    i16 5, label %24
    i16 6, label %26
    i16 8, label %28
    i16 10, label %30
    i16 12, label %32
    i16 13, label %33
    i16 16, label %34
    i16 17, label %36
    i16 19, label %37
    i16 22, label %39
    i16 25, label %41
    i16 30, label %43
    i16 35, label %45
    i16 36, label %46
    i16 37, label %48
    i16 38, label %50
    i16 39, label %52
    i16 40, label %54
    i16 44, label %57
    i16 52, label %59
    i16 53, label %60
    i16 54, label %62
    i16 56, label %63
    i16 57, label %65
    i16 58, label %67
    i16 59, label %69
    i16 104, label %71
    i16 108, label %72
    i16 109, label %74
    i16 100, label %76
    i16 110, label %78
    i16 119, label %80
    i16 121, label %82
    i16 124, label %84
    i16 125, label %85
    i16 130, label %88
    i16 141, label %90
    i16 72, label %92
    i16 73, label %94
    i16 74, label %96
    i16 75, label %98
    i16 76, label %100
    i16 77, label %102
    i16 79, label %104
    i16 80, label %105
    i16 81, label %106
    i16 82, label %107
    i16 83, label %109
    i16 84, label %111
    i16 86, label %113
    i16 87, label %115
    i16 88, label %117
    i16 89, label %119
    i16 90, label %120
    i16 91, label %122
    i16 92, label %124
    i16 93, label %126
    i16 94, label %128
    i16 95, label %130
    i16 96, label %132
    i16 97, label %134
    i16 98, label %136
    i16 105, label %138
    i16 106, label %140
    i16 107, label %142
    i16 120, label %144
    i16 126, label %146
    i16 128, label %149
    i16 129, label %151
  ]

18:                                               ; preds = %15
  %19 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 3) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

20:                                               ; preds = %15
  %21 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 2) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

22:                                               ; preds = %15
  %23 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

24:                                               ; preds = %15
  %25 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 3) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

26:                                               ; preds = %15
  %27 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 4) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

28:                                               ; preds = %15
  %29 = tail call i32 @EV_BuildStairs(ptr noundef nonnull %6, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

30:                                               ; preds = %15
  %31 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 1, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

32:                                               ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

33:                                               ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 255) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

34:                                               ; preds = %15
  %35 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 1) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

36:                                               ; preds = %15
  tail call void @EV_StartLightStrobing(ptr noundef nonnull %6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

37:                                               ; preds = %15
  %38 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

39:                                               ; preds = %15
  %40 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 3, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

41:                                               ; preds = %15
  %42 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 3) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

43:                                               ; preds = %15
  %44 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 5) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

45:                                               ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 35) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

46:                                               ; preds = %15
  %47 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 2) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

48:                                               ; preds = %15
  %49 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

50:                                               ; preds = %15
  %51 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 1) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

52:                                               ; preds = %15
  %53 = tail call i32 @EV_Teleport(ptr noundef nonnull %6, i32 noundef %1, ptr noundef nonnull %2) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

54:                                               ; preds = %15
  %55 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 1) #2
  %56 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 1) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

57:                                               ; preds = %15
  %58 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 2) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

59:                                               ; preds = %15
  tail call void @G_ExitLevel() #2
  br label %.critedge

60:                                               ; preds = %15
  %61 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 0, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

62:                                               ; preds = %15
  tail call void @EV_StopPlat(ptr noundef nonnull %6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

63:                                               ; preds = %15
  %64 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 9) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

65:                                               ; preds = %15
  %66 = tail call i32 @EV_CeilingCrushStop(ptr noundef nonnull %6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

67:                                               ; preds = %15
  %68 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 7) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

69:                                               ; preds = %15
  %70 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 8) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

71:                                               ; preds = %15
  tail call void @EV_TurnTagLightsOff(ptr noundef nonnull %6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

72:                                               ; preds = %15
  %73 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 5) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

74:                                               ; preds = %15
  %75 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 6) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

76:                                               ; preds = %15
  %77 = tail call i32 @EV_BuildStairs(ptr noundef nonnull %6, i32 noundef 1) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

78:                                               ; preds = %15
  %79 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 7) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

80:                                               ; preds = %15
  %81 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 4) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

82:                                               ; preds = %15
  %83 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 4, i32 noundef 0) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

84:                                               ; preds = %15
  tail call void @G_SecretExitLevel() #2
  br label %.critedge

85:                                               ; preds = %15
  br i1 %.not, label %86, label %.critedge

86:                                               ; preds = %85
  %87 = tail call i32 @EV_Teleport(ptr noundef nonnull %6, i32 noundef %1, ptr noundef nonnull %2) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

88:                                               ; preds = %15
  %89 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 10) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

90:                                               ; preds = %15
  %91 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 5) #2
  store i16 0, ptr %17, align 2, !tbaa !15
  br label %.critedge

92:                                               ; preds = %15
  %93 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 2) #2
  br label %.critedge

94:                                               ; preds = %15
  %95 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 3) #2
  br label %.critedge

96:                                               ; preds = %15
  %97 = tail call i32 @EV_CeilingCrushStop(ptr noundef nonnull %6) #2
  br label %.critedge

98:                                               ; preds = %15
  %99 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 2) #2
  br label %.critedge

100:                                              ; preds = %15
  %101 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 1) #2
  br label %.critedge

102:                                              ; preds = %15
  %103 = tail call i32 @EV_DoCeiling(ptr noundef nonnull %6, i32 noundef 4) #2
  br label %.critedge

104:                                              ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 35) #2
  br label %.critedge

105:                                              ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 0) #2
  br label %.critedge

106:                                              ; preds = %15
  tail call void @EV_LightTurnOn(ptr noundef nonnull %6, i32 noundef 255) #2
  br label %.critedge

107:                                              ; preds = %15
  %108 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 1) #2
  br label %.critedge

109:                                              ; preds = %15
  %110 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 0) #2
  br label %.critedge

111:                                              ; preds = %15
  %112 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 6) #2
  br label %.critedge

113:                                              ; preds = %15
  %114 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 3) #2
  br label %.critedge

115:                                              ; preds = %15
  %116 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 0, i32 noundef 0) #2
  br label %.critedge

117:                                              ; preds = %15
  %118 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 1, i32 noundef 0) #2
  br label %.critedge

119:                                              ; preds = %15
  tail call void @EV_StopPlat(ptr noundef nonnull %6) #2
  br label %.critedge

120:                                              ; preds = %15
  %121 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 0) #2
  br label %.critedge

122:                                              ; preds = %15
  %123 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 3) #2
  br label %.critedge

124:                                              ; preds = %15
  %125 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 7) #2
  br label %.critedge

126:                                              ; preds = %15
  %127 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 8) #2
  br label %.critedge

128:                                              ; preds = %15
  %129 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 9) #2
  br label %.critedge

130:                                              ; preds = %15
  %131 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 3, i32 noundef 0) #2
  br label %.critedge

132:                                              ; preds = %15
  %133 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 5) #2
  br label %.critedge

134:                                              ; preds = %15
  %135 = tail call i32 @EV_Teleport(ptr noundef nonnull %6, i32 noundef %1, ptr noundef nonnull %2) #2
  br label %.critedge

136:                                              ; preds = %15
  %137 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 2) #2
  br label %.critedge

138:                                              ; preds = %15
  %139 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 5) #2
  br label %.critedge

140:                                              ; preds = %15
  %141 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 6) #2
  br label %.critedge

142:                                              ; preds = %15
  %143 = tail call i32 @EV_DoDoor(ptr noundef nonnull %6, i32 noundef 7) #2
  br label %.critedge

144:                                              ; preds = %15
  %145 = tail call i32 @EV_DoPlat(ptr noundef nonnull %6, i32 noundef 4, i32 noundef 0) #2
  br label %.critedge

146:                                              ; preds = %15
  br i1 %.not, label %147, label %.critedge

147:                                              ; preds = %146
  %148 = tail call i32 @EV_Teleport(ptr noundef nonnull %6, i32 noundef %1, ptr noundef nonnull %2) #2
  br label %.critedge

149:                                              ; preds = %15
  %150 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 4) #2
  br label %.critedge

151:                                              ; preds = %15
  %152 = tail call i32 @EV_DoFloor(ptr noundef nonnull %6, i32 noundef 10) #2
  br label %.critedge

.critedge:                                        ; preds = %12, %15, %18, %20, %22, %24, %26, %28, %30, %32, %33, %34, %36, %37, %39, %41, %43, %45, %46, %48, %50, %52, %54, %57, %59, %60, %62, %63, %65, %67, %69, %71, %72, %74, %76, %78, %80, %82, %84, %88, %90, %92, %94, %96, %98, %100, %102, %104, %105, %106, %107, %109, %111, %113, %115, %117, %119, %120, %122, %124, %126, %128, %130, %132, %134, %136, %138, %140, %142, %144, %149, %151, %86, %85, %147, %146, %9, %9, %9, %9, %9, %9
  ret void
}

declare i32 @EV_DoDoor(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @EV_DoFloor(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @EV_DoCeiling(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @EV_BuildStairs(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @EV_DoPlat(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @EV_LightTurnOn(ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @EV_StartLightStrobing(ptr noundef) local_unnamed_addr #1

declare i32 @EV_Teleport(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare void @G_ExitLevel() local_unnamed_addr #1

declare void @EV_StopPlat(ptr noundef) local_unnamed_addr #1

declare i32 @EV_CeilingCrushStop(ptr noundef) local_unnamed_addr #1

declare void @EV_TurnTagLightsOff(ptr noundef) local_unnamed_addr #1

declare void @G_SecretExitLevel() local_unnamed_addr #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 = { "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 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 192}
!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 = !{!16, !14, i64 26}
!16 = !{!"line_s", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !14, i64 24, !14, i64 26, !14, i64 28, !7, i64 30, !7, i64 36, !12, i64 52, !6, i64 56, !6, i64 64, !12, i64 72, !6, i64 80}
!17 = !{!10, !12, i64 128}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass