; LLVM IR from Robert-van-Engelen/lisp :: src (lisp-repl)

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

%class.Lisp = type { ptr, double, double, double, [10240 x double], i32, i32, i32, i32, [128 x i32], i32, [10 x ptr], [256 x i8], i8, ptr, ptr, [20 x i8], ptr }
%"struct.Lisp<8192, 2048>::QUIT" = type { i8 }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZTIi = external constant ptr
@_ZTIN4LispILj8192ELj2048EE4QUITE = external dso_local constant { ptr, ptr }, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %class.Lisp, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"struct.Lisp<8192, 2048>::QUIT", align 1
  %11 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %12 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  call void @llvm.lifetime.start.p0(i64 82880, ptr %6) #9
  call void @_ZN4LispILj8192ELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %6)
  %13 = load i32, ptr %4, align 4, !tbaa !5
  %14 = icmp sgt i32 %13, 1
  br i1 %14, label %15, label %19

15:                                               ; preds = %2
  %16 = load ptr, ptr %5, align 8, !tbaa !9
  %17 = getelementptr inbounds ptr, ptr %16, i64 1
  %18 = load ptr, ptr %17, align 8, !tbaa !9
  br label %20

19:                                               ; preds = %2
  br label %20

20:                                               ; preds = %19, %15
  %21 = phi ptr [ %18, %15 ], [ @.str.1, %19 ]
  %22 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE5inputEPKc(ptr noundef nonnull align 8 dereferenceable(82880) %6, ptr noundef %21)
          to label %23 unwind label %35

23:                                               ; preds = %20
  invoke void @_Z13using_historyv()
          to label %24 unwind label %35

24:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !5
  %25 = load i32, ptr %9, align 4, !tbaa !5
  %26 = icmp ne i32 %25, 0
  br i1 %26, label %27, label %43

27:                                               ; preds = %24
  invoke void @_ZN4LispILj8192ELj2048EE7closeinEv(ptr noundef nonnull align 8 dereferenceable(82880) %6)
          to label %28 unwind label %39

28:                                               ; preds = %27
  %29 = load i32, ptr %9, align 4, !tbaa !5
  %30 = load i32, ptr %9, align 4, !tbaa !5
  %31 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE5errorEi(i32 noundef %30)
          to label %32 unwind label %39

32:                                               ; preds = %28
  %33 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %29, ptr noundef %31)
          to label %34 unwind label %39

34:                                               ; preds = %32
  br label %43

35:                                               ; preds = %23, %20
  %36 = landingpad { ptr, i32 }
          cleanup
  %37 = extractvalue { ptr, i32 } %36, 0
  store ptr %37, ptr %7, align 8
  %38 = extractvalue { ptr, i32 } %36, 1
  store i32 %38, ptr %8, align 4
  br label %106

39:                                               ; preds = %48, %47, %45, %32, %28, %27
  %40 = landingpad { ptr, i32 }
          cleanup
  %41 = extractvalue { ptr, i32 } %40, 0
  store ptr %41, ptr %7, align 8
  %42 = extractvalue { ptr, i32 } %40, 1
  store i32 %42, ptr %8, align 4
  br label %105

43:                                               ; preds = %34, %24
  br label %44

44:                                               ; preds = %79, %43
  br label %45

45:                                               ; preds = %44
  %46 = invoke i32 @putchar(i32 noundef 10)
          to label %47 unwind label %39

47:                                               ; preds = %45
  invoke void @_ZN4LispILj8192ELj2048EE6unwindEj(ptr noundef nonnull align 8 dereferenceable(82880) %6, i32 noundef 10240)
          to label %48 unwind label %39

48:                                               ; preds = %47
  invoke void @_ZN4LispILj8192ELj2048EE6promptEPKc(ptr noundef nonnull align 8 dereferenceable(82880) %6, ptr noundef @.str.3)
          to label %49 unwind label %39

49:                                               ; preds = %48
  %50 = invoke noundef double @_ZN4LispILj8192ELj2048EE4readEv(ptr noundef nonnull align 8 dereferenceable(82880) %6)
          to label %51 unwind label %60

51:                                               ; preds = %49
  %52 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE4pushEd(ptr noundef nonnull align 8 dereferenceable(82880) %6, double noundef %50)
          to label %53 unwind label %60

53:                                               ; preds = %51
  %54 = load double, ptr %52, align 8, !tbaa !11
  %55 = getelementptr inbounds %class.Lisp, ptr %6, i32 0, i32 3
  %56 = load double, ptr %55, align 8, !tbaa !13
  %57 = invoke noundef double @_ZN4LispILj8192ELj2048EE4evalEdd(ptr noundef nonnull align 8 dereferenceable(82880) %6, double noundef %54, double noundef %56)
          to label %58 unwind label %60

58:                                               ; preds = %53
  invoke void @_ZN4LispILj8192ELj2048EE5printEd(ptr noundef nonnull align 8 dereferenceable(82880) %6, double noundef %57)
          to label %59 unwind label %60

59:                                               ; preds = %58
  br label %79

60:                                               ; preds = %58, %53, %51, %49
  %61 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTIi
          catch ptr @_ZTIN4LispILj8192ELj2048EE4QUITE
  %62 = extractvalue { ptr, i32 } %61, 0
  store ptr %62, ptr %7, align 8
  %63 = extractvalue { ptr, i32 } %61, 1
  store i32 %63, ptr %8, align 4
  br label %64

64:                                               ; preds = %60
  %65 = load i32, ptr %8, align 4
  %66 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIi) #9
  %67 = icmp eq i32 %65, %66
  br i1 %67, label %68, label %80

68:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  %69 = load ptr, ptr %7, align 8
  %70 = call ptr @__cxa_begin_catch(ptr %69) #9
  %71 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %71, ptr %11, align 4, !tbaa !5
  invoke void @_ZN4LispILj8192ELj2048EE7closeinEv(ptr noundef nonnull align 8 dereferenceable(82880) %6)
          to label %72 unwind label %99

72:                                               ; preds = %68
  %73 = load i32, ptr %11, align 4, !tbaa !5
  %74 = load i32, ptr %11, align 4, !tbaa !5
  %75 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE5errorEi(i32 noundef %74)
          to label %76 unwind label %99

76:                                               ; preds = %72
  %77 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %73, ptr noundef %75)
          to label %78 unwind label %99

78:                                               ; preds = %76
  call void @__cxa_end_catch() #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %79

79:                                               ; preds = %78, %59
  br label %44, !llvm.loop !15

80:                                               ; preds = %64
  %81 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIN4LispILj8192ELj2048EE4QUITE) #9
  %82 = icmp eq i32 %65, %81
  br i1 %82, label %83, label %105

83:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #9
  %84 = load ptr, ptr %7, align 8
  %85 = call ptr @__cxa_begin_catch(ptr %84) #9
  %86 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.4)
          to label %87 unwind label %88

87:                                               ; preds = %83
  invoke void @__cxa_end_catch()
          to label %92 unwind label %93

88:                                               ; preds = %83
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %7, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %8, align 4
  invoke void @__cxa_end_catch()
          to label %97 unwind label %112

92:                                               ; preds = %87
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  br label %103

93:                                               ; preds = %87
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %7, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %8, align 4
  br label %98

97:                                               ; preds = %88
  br label %98

98:                                               ; preds = %97, %93
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #9
  br label %105

99:                                               ; preds = %76, %72, %68
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %7, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %8, align 4
  call void @__cxa_end_catch() #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  br label %105

103:                                              ; preds = %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %6) #9
  call void @llvm.lifetime.end.p0(i64 82880, ptr %6) #9
  %104 = load i32, ptr %3, align 4
  ret i32 %104

105:                                              ; preds = %99, %98, %80, %39
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %106

106:                                              ; preds = %105, %35
  call void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %6) #9
  call void @llvm.lifetime.end.p0(i64 82880, ptr %6) #9
  br label %107

107:                                              ; preds = %106
  %108 = load ptr, ptr %7, align 8
  %109 = load i32, ptr %8, align 4
  %110 = insertvalue { ptr, i32 } poison, ptr %108, 0
  %111 = insertvalue { ptr, i32 } %110, i32 %109, 1
  resume { ptr, i32 } %111

112:                                              ; preds = %88
  %113 = landingpad { ptr, i32 }
          catch ptr null
  %114 = extractvalue { ptr, i32 } %113, 0
  call void @__clang_call_terminate(ptr %114) #10
  unreachable
}

declare i32 @printf(ptr noundef, ...) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(82880)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE5inputEPKc(ptr noundef nonnull align 8 dereferenceable(82880), ptr noundef) #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z13using_historyv() #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE7closeinEv(ptr noundef nonnull align 8 dereferenceable(82880)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE5errorEi(i32 noundef) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare i32 @putchar(i32 noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE6unwindEj(ptr noundef nonnull align 8 dereferenceable(82880), i32 noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE6promptEPKc(ptr noundef nonnull align 8 dereferenceable(82880), ptr noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE5printEd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN4LispILj8192ELj2048EE4evalEdd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef, double noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE4pushEd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN4LispILj8192ELj2048EE4readEv(ptr noundef nonnull align 8 dereferenceable(82880)) #3 align 2

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #7

declare ptr @__cxa_begin_catch(ptr)

declare void @__cxa_end_catch()

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #8

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880)) unnamed_addr #5 align 2

attributes #0 = { mustprogress norecurse 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { inlinehint mustprogress 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 #5 = { mustprogress 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 #6 = { inlinehint mustprogress 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 #7 = { nounwind memory(none) }
attributes #8 = { noinline noreturn nounwind uwtable "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 #9 = { nounwind }
attributes #10 = { noreturn 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 24}
!14 = !{!"_ZTS4LispILj8192ELj2048EE", !10, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !7, i64 32, !6, i64 81952, !6, i64 81956, !6, i64 81960, !6, i64 81964, !7, i64 81968, !6, i64 82480, !7, i64 82488, !7, i64 82568, !7, i64 82824, !10, i64 82832, !10, i64 82840, !7, i64 82848, !10, i64 82872}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}


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

%class.Lisp = type { ptr, double, double, double, [10240 x double], i32, i32, i32, i32, [128 x i32], i32, [10 x ptr], [256 x i8], i8, ptr, ptr, [20 x i8], ptr }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@_ZTIi = external constant ptr
@_ZTIN4LispILj8192ELj2048EE4QUITE = external dso_local constant { ptr, ptr }, align 8
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca %class.Lisp, align 8
  %4 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  call void @llvm.lifetime.start.p0(i64 82880, ptr nonnull %3) #8
  call void @_ZN4LispILj8192ELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %3)
  %5 = icmp sgt i32 %0, 1
  br i1 %5, label %6, label %9

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = load ptr, ptr %7, align 8, !tbaa !5
  br label %9

9:                                                ; preds = %2, %6
  %10 = phi ptr [ %8, %6 ], [ @.str.1, %2 ]
  %11 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE5inputEPKc(ptr noundef nonnull align 8 dereferenceable(82880) %3, ptr noundef %10)
          to label %12 unwind label %14

12:                                               ; preds = %9
  call void @_Z13using_historyv()
  %13 = getelementptr inbounds i8, ptr %3, i64 24
  br label %18

14:                                               ; preds = %9
  %15 = landingpad { ptr, i32 }
          cleanup
  br label %52

16:                                               ; preds = %18
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %52

18:                                               ; preds = %.backedge, %12
  %19 = call i32 @putchar(i32 noundef 10)
  call void @_ZN4LispILj8192ELj2048EE6unwindEj(ptr noundef nonnull align 8 dereferenceable(82880) %3, i32 noundef 10240)
  invoke void @_ZN4LispILj8192ELj2048EE6promptEPKc(ptr noundef nonnull align 8 dereferenceable(82880) %3, ptr noundef nonnull @.str.3)
          to label %20 unwind label %16

20:                                               ; preds = %18
  %21 = invoke noundef double @_ZN4LispILj8192ELj2048EE4readEv(ptr noundef nonnull align 8 dereferenceable(82880) %3)
          to label %22 unwind label %29

22:                                               ; preds = %20
  %23 = invoke noundef ptr @_ZN4LispILj8192ELj2048EE4pushEd(ptr noundef nonnull align 8 dereferenceable(82880) %3, double noundef %21)
          to label %24 unwind label %29

24:                                               ; preds = %22
  %25 = load double, ptr %23, align 8, !tbaa !9
  %26 = load double, ptr %13, align 8, !tbaa !11
  %27 = invoke noundef double @_ZN4LispILj8192ELj2048EE4evalEdd(ptr noundef nonnull align 8 dereferenceable(82880) %3, double noundef %25, double noundef %26)
          to label %28 unwind label %29

28:                                               ; preds = %24
  invoke void @_ZN4LispILj8192ELj2048EE5printEd(ptr noundef nonnull align 8 dereferenceable(82880) %3, double noundef %27)
          to label %.backedge unwind label %29

.backedge:                                        ; preds = %28, %38
  br label %18, !llvm.loop !14

29:                                               ; preds = %28, %24, %22, %20
  %30 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTIi
          catch ptr @_ZTIN4LispILj8192ELj2048EE4QUITE
  %31 = extractvalue { ptr, i32 } %30, 0
  %32 = extractvalue { ptr, i32 } %30, 1
  %33 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIi) #8
  %34 = icmp eq i32 %32, %33
  br i1 %34, label %35, label %41

35:                                               ; preds = %29
  %36 = call ptr @__cxa_begin_catch(ptr %31) #8
  %37 = load i32, ptr %36, align 4, !tbaa !16
  invoke void @_ZN4LispILj8192ELj2048EE7closeinEv(ptr noundef nonnull align 8 dereferenceable(82880) %3)
          to label %38 unwind label %50

38:                                               ; preds = %35
  %39 = call noundef ptr @_ZN4LispILj8192ELj2048EE5errorEi(i32 noundef %37)
  %40 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %37, ptr noundef %39)
  call void @__cxa_end_catch() #8
  br label %.backedge

41:                                               ; preds = %29
  %42 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIN4LispILj8192ELj2048EE4QUITE) #8
  %43 = icmp eq i32 %32, %42
  br i1 %43, label %44, label %52

44:                                               ; preds = %41
  %45 = call ptr @__cxa_begin_catch(ptr %31) #8
  %46 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  invoke void @__cxa_end_catch()
          to label %47 unwind label %48

47:                                               ; preds = %44
  call void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %3) #8
  call void @llvm.lifetime.end.p0(i64 82880, ptr nonnull %3) #8
  ret i32 0

48:                                               ; preds = %44
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %52

50:                                               ; preds = %35
  %51 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_end_catch() #8
  br label %52

52:                                               ; preds = %16, %41, %48, %50, %14
  %.merged = phi { ptr, i32 } [ %15, %14 ], [ %51, %50 ], [ %49, %48 ], [ %30, %41 ], [ %17, %16 ]
  call void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880) %3) #8
  call void @llvm.lifetime.end.p0(i64 82880, ptr nonnull %3) #8
  resume { ptr, i32 } %.merged
}

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EEC2Ev(ptr noundef nonnull align 8 dereferenceable(82880)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE5inputEPKc(ptr noundef nonnull align 8 dereferenceable(82880), ptr noundef) local_unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z13using_historyv() local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE7closeinEv(ptr noundef nonnull align 8 dereferenceable(82880)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE5errorEi(i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nofree nounwind uwtable
declare noundef i32 @putchar(i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE6unwindEj(ptr noundef nonnull align 8 dereferenceable(82880), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE6promptEPKc(ptr noundef nonnull align 8 dereferenceable(82880), ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EE5printEd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN4LispILj8192ELj2048EE4evalEdd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef, double noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN4LispILj8192ELj2048EE4pushEd(ptr noundef nonnull align 8 dereferenceable(82880), double noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN4LispILj8192ELj2048EE4readEv(ptr noundef nonnull align 8 dereferenceable(82880)) local_unnamed_addr #3 align 2

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #7

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare void @__cxa_end_catch() local_unnamed_addr

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4LispILj8192ELj2048EED2Ev(ptr noundef nonnull align 8 dereferenceable(82880)) unnamed_addr #5 align 2

attributes #0 = { mustprogress norecurse 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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { inlinehint mustprogress 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 #5 = { mustprogress 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 #6 = { inlinehint mustprogress nofree 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 #7 = { nofree nosync nounwind memory(none) }
attributes #8 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"_ZTS4LispILj8192ELj2048EE", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32, !13, i64 81952, !13, i64 81956, !13, i64 81960, !13, i64 81964, !7, i64 81968, !13, i64 82480, !7, i64 82488, !7, i64 82568, !7, i64 82824, !6, i64 82832, !6, i64 82840, !7, i64 82848, !6, i64 82872}
!13 = !{!"int", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!13, !13, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,LCSSAPass,LICMPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass