; LLVM IR from ASDAlexander77/TypeScriptCompiler :: tsc/tsc-new-parser (parenthesizer_rules)

; 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.ptr.35 = type { %"class.std::shared_ptr.36" }
%"class.std::shared_ptr.36" = type { %"class.std::__shared_ptr.37" }
%"class.std::__shared_ptr.37" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%struct.ptr = type { %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%struct.ptr.116 = type { %"class.std::shared_ptr.117" }
%"class.std::shared_ptr.117" = type { %"class.std::__shared_ptr.118" }
%"class.std::__shared_ptr.118" = type { ptr, %"class.std::__shared_count" }
%"struct.ts::data::BinaryExpression" = type <{ %"struct.ts::data::Declaration", %struct.ptr, %struct.ptr.120, %struct.ptr, i32, [4 x i8] }>
%"struct.ts::data::Declaration" = type { %"struct.ts::data::DeclarationStatement", %struct.ptr.79, %struct.ptr.79 }
%"struct.ts::data::DeclarationStatement" = type { %"struct.ts::data::Statement" }
%"struct.ts::data::Statement" = type { %"struct.ts::data::PrimaryExpression" }
%"struct.ts::data::PrimaryExpression" = type { %"struct.ts::data::MemberExpression" }
%"struct.ts::data::MemberExpression" = type { %"struct.ts::data::LeftHandSideExpression" }
%"struct.ts::data::LeftHandSideExpression" = type { %"struct.ts::data::UpdateExpression" }
%"struct.ts::data::UpdateExpression" = type { %"struct.ts::data::UnaryExpression" }
%"struct.ts::data::UnaryExpression" = type { %"struct.ts::data::ExpressionWithTypeArguments" }
%"struct.ts::data::ExpressionWithTypeArguments" = type { %"struct.ts::data::NodeWithTypeArguments", %struct.ptr.39 }
%"struct.ts::data::NodeWithTypeArguments" = type { %"struct.ts::data::Expression", %"struct.ts::data::NodeArray.71" }
%"struct.ts::data::Expression" = type { %"struct.ts::data::TypeNode" }
%"struct.ts::data::TypeNode" = type { %"struct.ts::data::JSDocContainer" }
%"struct.ts::data::JSDocContainer" = type { %"struct.ts::data::Node.base", [3 x i8], %"struct.ts::data::NodeArray.55", %"struct.ts::data::NodeArray.63" }
%"struct.ts::data::Node.base" = type <{ ptr, %"struct.ts::data::TextRange", i32, i32, i32, i32, [4 x i8], %"struct.ts::data::NodeArray.47", i32, [4 x i8], %struct.ptr.35, %struct.ptr.35, i32, i8 }>
%"struct.ts::data::TextRange" = type { %"struct.ts::pos_type", i32 }
%"struct.ts::pos_type" = type { i32, i32 }
%"struct.ts::data::NodeArray.47" = type <{ %"struct.ts::data::ReadonlyArray.48", %"struct.ts::data::TextRange", i8, i8, i8, i8, i32, [4 x i8] }>
%"struct.ts::data::ReadonlyArray.48" = type { %"class.std::vector.49" }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<ptr<ts::data::Node>, std::allocator<ptr<ts::data::Node>>>::_Vector_impl" }
%"struct.std::_Vector_base<ptr<ts::data::Node>, std::allocator<ptr<ts::data::Node>>>::_Vector_impl" = type { %"struct.std::_Vector_base<ptr<ts::data::Node>, std::allocator<ptr<ts::data::Node>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ptr<ts::data::Node>, std::allocator<ptr<ts::data::Node>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.ts::data::NodeArray.55" = type <{ %"struct.ts::data::ReadonlyArray.56", %"struct.ts::data::TextRange", i8, i8, i8, i8, i32, [4 x i8] }>
%"struct.ts::data::ReadonlyArray.56" = type { %"class.std::vector.57" }
%"class.std::vector.57" = type { %"struct.std::_Vector_base.58" }
%"struct.std::_Vector_base.58" = type { %"struct.std::_Vector_base<ptr<ts::data::JSDoc>, std::allocator<ptr<ts::data::JSDoc>>>::_Vector_impl" }
%"struct.std::_Vector_base<ptr<ts::data::JSDoc>, std::allocator<ptr<ts::data::JSDoc>>>::_Vector_impl" = type { %"struct.std::_Vector_base<ptr<ts::data::JSDoc>, std::allocator<ptr<ts::data::JSDoc>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ptr<ts::data::JSDoc>, std::allocator<ptr<ts::data::JSDoc>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.ts::data::NodeArray.63" = type <{ %"struct.ts::data::ReadonlyArray.64", %"struct.ts::data::TextRange", i8, i8, i8, i8, i32, [4 x i8] }>
%"struct.ts::data::ReadonlyArray.64" = type { %"class.std::vector.65" }
%"class.std::vector.65" = type { %"struct.std::_Vector_base.66" }
%"struct.std::_Vector_base.66" = type { %"struct.std::_Vector_base<ptr<ts::data::JSDocTag>, std::allocator<ptr<ts::data::JSDocTag>>>::_Vector_impl" }
%"struct.std::_Vector_base<ptr<ts::data::JSDocTag>, std::allocator<ptr<ts::data::JSDocTag>>>::_Vector_impl" = type { %"struct.std::_Vector_base<ptr<ts::data::JSDocTag>, std::allocator<ptr<ts::data::JSDocTag>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ptr<ts::data::JSDocTag>, std::allocator<ptr<ts::data::JSDocTag>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.ts::data::NodeArray.71" = type <{ %"struct.ts::data::ReadonlyArray.72", %"struct.ts::data::TextRange", i8, i8, i8, i8, i32, [4 x i8] }>
%"struct.ts::data::ReadonlyArray.72" = type { %"class.std::vector.73" }
%"class.std::vector.73" = type { %"struct.std::_Vector_base.74" }
%"struct.std::_Vector_base.74" = type { %"struct.std::_Vector_base<ptr<ts::data::TypeNode>, std::allocator<ptr<ts::data::TypeNode>>>::_Vector_impl" }
%"struct.std::_Vector_base<ptr<ts::data::TypeNode>, std::allocator<ptr<ts::data::TypeNode>>>::_Vector_impl" = type { %"struct.std::_Vector_base<ptr<ts::data::TypeNode>, std::allocator<ptr<ts::data::TypeNode>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ptr<ts::data::TypeNode>, std::allocator<ptr<ts::data::TypeNode>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.ptr.39 = type { %"class.std::shared_ptr.40" }
%"class.std::shared_ptr.40" = type { %"class.std::__shared_ptr.41" }
%"class.std::__shared_ptr.41" = type { ptr, %"class.std::__shared_count" }
%struct.ptr.79 = type { %"class.std::shared_ptr.80" }
%"class.std::shared_ptr.80" = type { %"class.std::__shared_ptr.81" }
%"class.std::__shared_ptr.81" = type { ptr, %"class.std::__shared_count" }
%struct.ptr.120 = type { %"class.std::shared_ptr.121" }
%"class.std::shared_ptr.121" = type { %"class.std::__shared_ptr.122" }
%"class.std::__shared_ptr.122" = type { ptr, %"class.std::__shared_count" }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2ts31skipPartiallyEmittedExpressionsE3ptrINS_4data4NodeEE(ptr dead_on_unwind noalias writable sret(%struct.ptr.35) align 8, ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3ptrIN2ts4data4NodeEEC2INS1_10ExpressionEEES_IT_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN3ptrIN2ts4data4NodeEEeqE10SyntaxKind(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef %0) #4 personality ptr @__gxx_personality_v0 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca %struct.ptr.35, align 8
  %5 = alloca %struct.ptr.35, align 8
  %6 = alloca %struct.ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %struct.ptr.116, align 8
  %11 = alloca i1, align 1
  %12 = alloca i1, align 1
  %13 = alloca %struct.ptr.116, align 8
  %14 = alloca %struct.ptr.116, align 8
  %15 = alloca i32, align 4
  %16 = alloca %struct.ptr, align 8
  %17 = alloca %struct.ptr.116, align 8
  %18 = alloca i32, align 4
  %19 = alloca %struct.ptr, align 8
  %20 = alloca %struct.ptr.116, align 8
  %21 = alloca i1, align 1
  %22 = alloca i1, align 1
  %23 = alloca i1, align 1
  %24 = alloca %struct.ptr.116, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %4) #5
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %0) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEEC2INS1_10ExpressionEEES_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef %6)
          to label %25 unwind label %34

25:                                               ; preds = %1
  invoke void @_ZN2ts31skipPartiallyEmittedExpressionsE3ptrINS_4data4NodeEE(ptr dead_on_unwind writable sret(%struct.ptr.35) align 8 %4, ptr noundef %5)
          to label %26 unwind label %38

26:                                               ; preds = %25
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #5
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  %27 = invoke noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %28 unwind label %43

28:                                               ; preds = %26
  %29 = invoke noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef %27)
          to label %30 unwind label %43

30:                                               ; preds = %28
  br i1 %29, label %31, label %47

31:                                               ; preds = %30
  %32 = invoke noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %33 unwind label %43

33:                                               ; preds = %31
  store i32 %32, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %203

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

38:                                               ; preds = %25
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %7, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %8, align 4
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #5
  br label %42

42:                                               ; preds = %38, %34
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  br label %206

43:                                               ; preds = %47, %31, %28, %26
  %44 = landingpad { ptr, i32 }
          cleanup
  %45 = extractvalue { ptr, i32 } %44, 0
  store ptr %45, ptr %7, align 8
  %46 = extractvalue { ptr, i32 } %44, 1
  store i32 %46, ptr %8, align 4
  br label %205

47:                                               ; preds = %30
  store i1 false, ptr %11, align 1
  store i1 false, ptr %12, align 1
  %48 = invoke noundef zeroext i1 @_ZN3ptrIN2ts4data4NodeEEeqE10SyntaxKind(ptr noundef nonnull align 8 dereferenceable(16) %4, i32 noundef 226)
          to label %49 unwind label %43

49:                                               ; preds = %47
  br i1 %48, label %50, label %57

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #5
  store i1 true, ptr %11, align 1
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %10, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %51 unwind label %78

51:                                               ; preds = %50
  store i1 true, ptr %12, align 1
  %52 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %53 unwind label %82

53:                                               ; preds = %51
  %54 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %52, i32 0, i32 2
  %55 = invoke noundef zeroext i1 @_ZN3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEEeqES3_(ptr noundef nonnull align 8 dereferenceable(16) %54, i32 noundef 40)
          to label %56 unwind label %82

56:                                               ; preds = %53
  br label %57

57:                                               ; preds = %56, %49
  %58 = phi i1 [ false, %49 ], [ %55, %56 ]
  %59 = load i1, ptr %12, align 1
  br i1 %59, label %60, label %61

60:                                               ; preds = %57
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  br label %61

61:                                               ; preds = %60, %57
  %62 = load i1, ptr %11, align 1
  br i1 %62, label %63, label %64

63:                                               ; preds = %61
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #5
  br label %64

64:                                               ; preds = %63, %61
  br i1 %58, label %65, label %202

65:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %13, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %66 unwind label %93

66:                                               ; preds = %65
  %67 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %68 unwind label %97

68:                                               ; preds = %66
  %69 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %67, i32 0, i32 4
  %70 = load i32, ptr %69, align 8, !tbaa !9
  %71 = icmp ne i32 %70, 0
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  br i1 %71, label %72, label %111

72:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %14, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %73 unwind label %102

73:                                               ; preds = %72
  %74 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %75 unwind label %106

75:                                               ; preds = %73
  %76 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %74, i32 0, i32 4
  %77 = load i32, ptr %76, align 8, !tbaa !9
  store i32 %77, ptr %2, align 4
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  store i32 1, ptr %9, align 4
  br label %203

78:                                               ; preds = %50
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %7, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %8, align 4
  br label %89

82:                                               ; preds = %53, %51
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %7, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %8, align 4
  %86 = load i1, ptr %12, align 1
  br i1 %86, label %87, label %88

87:                                               ; preds = %82
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  br label %88

88:                                               ; preds = %87, %82
  br label %89

89:                                               ; preds = %88, %78
  %90 = load i1, ptr %11, align 1
  br i1 %90, label %91, label %92

91:                                               ; preds = %89
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #5
  br label %92

92:                                               ; preds = %91, %89
  br label %205

93:                                               ; preds = %65
  %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 %101

97:                                               ; preds = %66
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %7, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %8, align 4
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #5
  br label %101

101:                                              ; preds = %97, %93
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  br label %205

102:                                              ; preds = %72
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %7, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %8, align 4
  br label %110

106:                                              ; preds = %73
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %7, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %8, align 4
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #5
  br label %110

110:                                              ; preds = %106, %102
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  br label %205

111:                                              ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %17, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %112 unwind label %150

112:                                              ; preds = %111
  %113 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %114 unwind label %154

114:                                              ; preds = %112
  %115 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %113, i32 0, i32 1
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %115) #5
  %116 = invoke noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef %16)
          to label %117 unwind label %158

117:                                              ; preds = %114
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  store i32 %116, ptr %15, align 4, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %118 = load i32, ptr %15, align 4, !tbaa !74
  store i1 false, ptr %21, align 1
  store i1 false, ptr %22, align 1
  store i1 false, ptr %23, align 1
  %119 = invoke noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef %118)
          to label %120 unwind label %164

120:                                              ; preds = %117
  br i1 %119, label %121, label %132

121:                                              ; preds = %120
  %122 = load i32, ptr %15, align 4, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  store i1 true, ptr %21, align 1
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %20, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %123 unwind label %168

123:                                              ; preds = %121
  store i1 true, ptr %22, align 1
  %124 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %125 unwind label %172

125:                                              ; preds = %123
  %126 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %124, i32 0, i32 3
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %126) #5
  store i1 true, ptr %23, align 1
  %127 = invoke noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef %19)
          to label %128 unwind label %176

128:                                              ; preds = %125
  %129 = icmp eq i32 %122, %127
  br i1 %129, label %130, label %132

130:                                              ; preds = %128
  %131 = load i32, ptr %15, align 4, !tbaa !74
  br label %133

132:                                              ; preds = %128, %120
  br label %133

133:                                              ; preds = %132, %130
  %134 = phi i32 [ %131, %130 ], [ 0, %132 ]
  %135 = load i1, ptr %23, align 1
  br i1 %135, label %136, label %137

136:                                              ; preds = %133
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #5
  br label %137

137:                                              ; preds = %136, %133
  %138 = load i1, ptr %22, align 1
  br i1 %138, label %139, label %140

139:                                              ; preds = %137
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  br label %140

140:                                              ; preds = %139, %137
  %141 = load i1, ptr %21, align 1
  br i1 %141, label %142, label %143

142:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %143

143:                                              ; preds = %142, %140
  store i32 %134, ptr %18, align 4, !tbaa !74
  %144 = load i32, ptr %18, align 4, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind writable sret(%struct.ptr.116) align 8 %24, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %145 unwind label %191

145:                                              ; preds = %143
  %146 = invoke noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %147 unwind label %195

147:                                              ; preds = %145
  %148 = getelementptr inbounds %"struct.ts::data::BinaryExpression", ptr %146, i32 0, i32 4
  store i32 %144, ptr %148, align 8, !tbaa !9
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  %149 = load i32, ptr %18, align 4, !tbaa !74
  store i32 %149, ptr %2, align 4
  store i32 1, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %203

150:                                              ; preds = %111
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %7, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %8, align 4
  br label %163

154:                                              ; preds = %112
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %7, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %8, align 4
  br label %162

158:                                              ; preds = %114
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %7, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %8, align 4
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #5
  br label %162

162:                                              ; preds = %158, %154
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #5
  br label %163

163:                                              ; preds = %162, %150
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  br label %201

164:                                              ; preds = %117
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %7, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %8, align 4
  br label %200

168:                                              ; preds = %121
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %7, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %8, align 4
  br label %187

172:                                              ; preds = %123
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %7, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %8, align 4
  br label %183

176:                                              ; preds = %125
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %7, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %8, align 4
  %180 = load i1, ptr %23, align 1
  br i1 %180, label %181, label %182

181:                                              ; preds = %176
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #5
  br label %182

182:                                              ; preds = %181, %176
  br label %183

183:                                              ; preds = %182, %172
  %184 = load i1, ptr %22, align 1
  br i1 %184, label %185, label %186

185:                                              ; preds = %183
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  br label %186

186:                                              ; preds = %185, %183
  br label %187

187:                                              ; preds = %186, %168
  %188 = load i1, ptr %21, align 1
  br i1 %188, label %189, label %190

189:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %190

190:                                              ; preds = %189, %187
  br label %200

191:                                              ; preds = %143
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %7, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %8, align 4
  br label %199

195:                                              ; preds = %145
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %7, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %8, align 4
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #5
  br label %199

199:                                              ; preds = %195, %191
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %200

200:                                              ; preds = %199, %190, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %201

201:                                              ; preds = %200, %163
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %205

202:                                              ; preds = %64
  store i32 0, ptr %2, align 4
  store i32 1, ptr %9, align 4
  br label %203

203:                                              ; preds = %202, %147, %75, %33
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #5
  %204 = load i32, ptr %2, align 4
  ret i32 %204

205:                                              ; preds = %201, %110, %101, %92, %43
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  br label %206

206:                                              ; preds = %205, %42
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #5
  br label %207

207:                                              ; preds = %206
  %208 = load ptr, ptr %7, align 8
  %209 = load i32, ptr %8, align 4
  %210 = insertvalue { ptr, i32 } poison, ptr %208, 0
  %211 = insertvalue { ptr, i32 } %210, i32 %209, 1
  resume { ptr, i32 } %211
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind noalias writable sret(%struct.ptr.116) align 8, ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEEeqES3_(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #1 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !28, i64 376}
!10 = !{!"_ZTSN2ts4data16BinaryExpressionE", !11, i64 0, !68, i64 328, !71, i64 344, !68, i64 360, !28, i64 376}
!11 = !{!"_ZTSN2ts4data11DeclarationE", !12, i64 0, !65, i64 296, !65, i64 312}
!12 = !{!"_ZTSN2ts4data20DeclarationStatementE", !13, i64 0}
!13 = !{!"_ZTSN2ts4data9StatementE", !14, i64 0}
!14 = !{!"_ZTSN2ts4data17PrimaryExpressionE", !15, i64 0}
!15 = !{!"_ZTSN2ts4data16MemberExpressionE", !16, i64 0}
!16 = !{!"_ZTSN2ts4data22LeftHandSideExpressionE", !17, i64 0}
!17 = !{!"_ZTSN2ts4data16UpdateExpressionE", !18, i64 0}
!18 = !{!"_ZTSN2ts4data15UnaryExpressionE", !19, i64 0}
!19 = !{!"_ZTSN2ts4data27ExpressionWithTypeArgumentsE", !20, i64 0, !62, i64 280}
!20 = !{!"_ZTSN2ts4data21NodeWithTypeArgumentsE", !21, i64 0, !56, i64 232}
!21 = !{!"_ZTSN2ts4data10ExpressionE", !22, i64 0}
!22 = !{!"_ZTSN2ts4data8TypeNodeE", !23, i64 0}
!23 = !{!"_ZTSN2ts4data14JSDocContainerE", !24, i64 0, !44, i64 136, !50, i64 184}
!24 = !{!"_ZTSN2ts4data4NodeE", !25, i64 8, !28, i64 20, !29, i64 24, !30, i64 28, !31, i64 32, !32, i64 40, !27, i64 88, !39, i64 96, !39, i64 112, !43, i64 128, !38, i64 132}
!25 = !{!"_ZTSN2ts4data9TextRangeE", !26, i64 0, !27, i64 8}
!26 = !{!"_ZTSN2ts8pos_typeE", !27, i64 0, !27, i64 4}
!27 = !{!"int", !7, i64 0}
!28 = !{!"_ZTS10SyntaxKind", !7, i64 0}
!29 = !{!"_ZTSN2ts9NodeFlagsE", !7, i64 0}
!30 = !{!"_ZTSN2ts13ModifierFlagsE", !7, i64 0}
!31 = !{!"_ZTSN2ts14TransformFlagsE", !7, i64 0}
!32 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_4NodeEEEE", !33, i64 0, !25, i64 24, !38, i64 36, !38, i64 37, !38, i64 38, !31, i64 40}
!33 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_4NodeEEEE", !34, i64 0}
!34 = !{!"_ZTSSt6vectorI3ptrIN2ts4data4NodeEESaIS4_EE", !35, i64 0}
!35 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE12_Vector_implE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!38 = !{!"bool", !7, i64 0}
!39 = !{!"_ZTS3ptrIN2ts4data4NodeEE", !40, i64 0}
!40 = !{!"_ZTSSt10shared_ptrIN2ts4data4NodeEE", !41, i64 0}
!41 = !{!"_ZTSSt12__shared_ptrIN2ts4data4NodeELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !42, i64 8}
!42 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!43 = !{!"_ZTSN2ts13InternalFlagsE", !7, i64 0}
!44 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_5JSDocEEEE", !45, i64 0, !25, i64 24, !38, i64 36, !38, i64 37, !38, i64 38, !31, i64 40}
!45 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_5JSDocEEEE", !46, i64 0}
!46 = !{!"_ZTSSt6vectorI3ptrIN2ts4data5JSDocEESaIS4_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_8JSDocTagEEEE", !51, i64 0, !25, i64 24, !38, i64 36, !38, i64 37, !38, i64 38, !31, i64 40}
!51 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_8JSDocTagEEEE", !52, i64 0}
!52 = !{!"_ZTSSt6vectorI3ptrIN2ts4data8JSDocTagEESaIS4_EE", !53, i64 0}
!53 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE12_Vector_implE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!56 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_8TypeNodeEEEE", !57, i64 0, !25, i64 24, !38, i64 36, !38, i64 37, !38, i64 38, !31, i64 40}
!57 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_8TypeNodeEEEE", !58, i64 0}
!58 = !{!"_ZTSSt6vectorI3ptrIN2ts4data8TypeNodeEESaIS4_EE", !59, i64 0}
!59 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE12_Vector_implE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!62 = !{!"_ZTS3ptrIN2ts4data22LeftHandSideExpressionEE", !63, i64 0}
!63 = !{!"_ZTSSt10shared_ptrIN2ts4data22LeftHandSideExpressionEE", !64, i64 0}
!64 = !{!"_ZTSSt12__shared_ptrIN2ts4data22LeftHandSideExpressionELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !42, i64 8}
!65 = !{!"_ZTS3ptrIN2ts4data6SymbolEE", !66, i64 0}
!66 = !{!"_ZTSSt10shared_ptrIN2ts4data6SymbolEE", !67, i64 0}
!67 = !{!"_ZTSSt12__shared_ptrIN2ts4data6SymbolELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !42, i64 8}
!68 = !{!"_ZTS3ptrIN2ts4data10ExpressionEE", !69, i64 0}
!69 = !{!"_ZTSSt10shared_ptrIN2ts4data10ExpressionEE", !70, i64 0}
!70 = !{!"_ZTSSt12__shared_ptrIN2ts4data10ExpressionELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !42, i64 8}
!71 = !{!"_ZTS3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEE", !72, i64 0}
!72 = !{!"_ZTSSt10shared_ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEE", !73, i64 0}
!73 = !{!"_ZTSSt12__shared_ptrIN2ts4data5TokenIJL10SyntaxKind43EEEELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !42, i64 8}
!74 = !{!28, !28, i64 0}


; 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.ptr.35 = type { %"class.std::shared_ptr.36" }
%"class.std::shared_ptr.36" = type { %"class.std::__shared_ptr.37" }
%"class.std::__shared_ptr.37" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%struct.ptr = type { %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%struct.ptr.116 = type { %"class.std::shared_ptr.117" }
%"class.std::shared_ptr.117" = type { %"class.std::__shared_ptr.118" }
%"class.std::__shared_ptr.118" = type { ptr, %"class.std::__shared_count" }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2ts31skipPartiallyEmittedExpressionsE3ptrINS_4data4NodeEE(ptr dead_on_unwind noalias writable sret(%struct.ptr.35) align 8, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3ptrIN2ts4data4NodeEEC2INS1_10ExpressionEEES_IT_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN3ptrIN2ts4data4NodeEEeqE10SyntaxKind(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef nonnull %0) local_unnamed_addr #4 personality ptr @__gxx_personality_v0 {
  %2 = alloca %struct.ptr.35, align 8
  %3 = alloca %struct.ptr.35, align 8
  %4 = alloca %struct.ptr, align 8
  %5 = alloca %struct.ptr.116, align 8
  %6 = alloca %struct.ptr.116, align 8
  %7 = alloca %struct.ptr.116, align 8
  %8 = alloca %struct.ptr, align 8
  %9 = alloca %struct.ptr.116, align 8
  %10 = alloca %struct.ptr, align 8
  %11 = alloca %struct.ptr.116, align 8
  %12 = alloca %struct.ptr.116, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #5
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %0) #5
  call void @_ZN3ptrIN2ts4data4NodeEEC2INS1_10ExpressionEEES_IT_E(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull %4)
  invoke void @_ZN2ts31skipPartiallyEmittedExpressionsE3ptrINS_4data4NodeEE(ptr dead_on_unwind nonnull writable sret(%struct.ptr.35) align 8 %2, ptr noundef nonnull %3)
          to label %13 unwind label %18

13:                                               ; preds = %1
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  %14 = call noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %15 = call noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef %14)
  br i1 %15, label %16, label %20

16:                                               ; preds = %13
  %17 = call noundef i32 @_ZN3ptrIN2ts4data4NodeEEcv10SyntaxKindEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  br label %.critedge.thread

18:                                               ; preds = %1
  %19 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  br label %72

20:                                               ; preds = %13
  %21 = call noundef zeroext i1 @_ZN3ptrIN2ts4data4NodeEEeqE10SyntaxKind(ptr noundef nonnull align 8 dereferenceable(16) %2, i32 noundef 226)
  br i1 %21, label %22, label %.critedge.thread

22:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %5, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %.critedge unwind label %36

.critedge:                                        ; preds = %22
  %23 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %5)
  %24 = getelementptr inbounds i8, ptr %23, i64 344
  %25 = call noundef zeroext i1 @_ZN3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEEeqES3_(ptr noundef nonnull align 8 dereferenceable(16) %24, i32 noundef 40)
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  br i1 %25, label %26, label %.critedge.thread

26:                                               ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %6, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %27 unwind label %38

27:                                               ; preds = %26
  %28 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %29 = getelementptr inbounds i8, ptr %28, i64 376
  %30 = load i32, ptr %29, align 8, !tbaa !5
  %.not = icmp eq i32 %30, 0
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  br i1 %.not, label %42, label %31

31:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %7, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %32 unwind label %40

32:                                               ; preds = %31
  %33 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %34 = getelementptr inbounds i8, ptr %33, i64 376
  %35 = load i32, ptr %34, align 8, !tbaa !5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  br label %.critedge.thread

36:                                               ; preds = %22
  %37 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  br label %71

38:                                               ; preds = %26
  %39 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  br label %71

40:                                               ; preds = %31
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  br label %71

42:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %9, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %43 unwind label %59

43:                                               ; preds = %42
  %44 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %9)
  %45 = getelementptr inbounds i8, ptr %44, i64 328
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %45) #5
  %46 = invoke noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef nonnull %8)
          to label %47 unwind label %61

47:                                               ; preds = %43
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  %48 = call noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef %46)
  br i1 %48, label %49, label %.critedge39

49:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %11, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %50 unwind label %64

50:                                               ; preds = %49
  %51 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %11)
  %52 = getelementptr inbounds i8, ptr %51, i64 360
  call void @_ZN3ptrIN2ts4data10ExpressionEEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(16) %52) #5
  %53 = invoke noundef i32 @_ZN2ts33getLiteralKindOfBinaryPlusOperandE3ptrINS_4data10ExpressionEE(ptr noundef nonnull %10)
          to label %.critedge38 unwind label %66

.critedge38:                                      ; preds = %50
  %54 = icmp eq i32 %46, %53
  %spec.select = select i1 %54, i32 %46, i32 0
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  br label %.critedge39

.critedge39:                                      ; preds = %47, %.critedge38
  %55 = phi i32 [ %spec.select, %.critedge38 ], [ 0, %47 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #5
  invoke void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind nonnull writable sret(%struct.ptr.116) align 8 %12, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %56 unwind label %69

56:                                               ; preds = %.critedge39
  %57 = call noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16) %12)
  %58 = getelementptr inbounds i8, ptr %57, i64 376
  store i32 %55, ptr %58, align 8, !tbaa !5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  br label %.critedge.thread

59:                                               ; preds = %42
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %63

61:                                               ; preds = %43
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #5
  br label %63

63:                                               ; preds = %61, %59
  %.pn = phi { ptr, i32 } [ %62, %61 ], [ %60, %59 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  br label %71

64:                                               ; preds = %49
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %68

66:                                               ; preds = %50
  %67 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3ptrIN2ts4data10ExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @_ZN3ptrIN2ts4data16BinaryExpressionEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #5
  br label %68

68:                                               ; preds = %64, %66
  %.pn29 = phi { ptr, i32 } [ %67, %66 ], [ %65, %64 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  br label %71

69:                                               ; preds = %.critedge39
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #5
  br label %71

.critedge.thread:                                 ; preds = %20, %.critedge, %56, %32, %16
  %.018 = phi i32 [ %17, %16 ], [ %35, %32 ], [ %55, %56 ], [ 0, %.critedge ], [ 0, %20 ]
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  ret i32 %.018

71:                                               ; preds = %63, %68, %69, %36, %40, %38
  %.pn34 = phi { ptr, i32 } [ %41, %40 ], [ %39, %38 ], [ %37, %36 ], [ %.pn, %63 ], [ %70, %69 ], [ %.pn29, %68 ]
  call void @_ZN3ptrIN2ts4data4NodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %2) #5
  br label %72

72:                                               ; preds = %71, %18
  %.pn34.pn = phi { ptr, i32 } [ %.pn34, %71 ], [ %19, %18 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #5
  resume { ptr, i32 } %.pn34.pn
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN2ts13isLiteralKindE10SyntaxKind(i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3ptrIN2ts4data4NodeEE2asIS_INS1_16BinaryExpressionEEEET_v(ptr dead_on_unwind noalias writable sret(%struct.ptr.116) align 8, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3ptrIN2ts4data16BinaryExpressionEEptEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEEeqES3_(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !26, i64 376}
!6 = !{!"_ZTSN2ts4data16BinaryExpressionE", !7, i64 0, !67, i64 328, !70, i64 344, !67, i64 360, !26, i64 376}
!7 = !{!"_ZTSN2ts4data11DeclarationE", !8, i64 0, !64, i64 296, !64, i64 312}
!8 = !{!"_ZTSN2ts4data20DeclarationStatementE", !9, i64 0}
!9 = !{!"_ZTSN2ts4data9StatementE", !10, i64 0}
!10 = !{!"_ZTSN2ts4data17PrimaryExpressionE", !11, i64 0}
!11 = !{!"_ZTSN2ts4data16MemberExpressionE", !12, i64 0}
!12 = !{!"_ZTSN2ts4data22LeftHandSideExpressionE", !13, i64 0}
!13 = !{!"_ZTSN2ts4data16UpdateExpressionE", !14, i64 0}
!14 = !{!"_ZTSN2ts4data15UnaryExpressionE", !15, i64 0}
!15 = !{!"_ZTSN2ts4data27ExpressionWithTypeArgumentsE", !16, i64 0, !61, i64 280}
!16 = !{!"_ZTSN2ts4data21NodeWithTypeArgumentsE", !17, i64 0, !55, i64 232}
!17 = !{!"_ZTSN2ts4data10ExpressionE", !18, i64 0}
!18 = !{!"_ZTSN2ts4data8TypeNodeE", !19, i64 0}
!19 = !{!"_ZTSN2ts4data14JSDocContainerE", !20, i64 0, !43, i64 136, !49, i64 184}
!20 = !{!"_ZTSN2ts4data4NodeE", !21, i64 8, !26, i64 20, !27, i64 24, !28, i64 28, !29, i64 32, !30, i64 40, !23, i64 88, !38, i64 96, !38, i64 112, !42, i64 128, !37, i64 132}
!21 = !{!"_ZTSN2ts4data9TextRangeE", !22, i64 0, !23, i64 8}
!22 = !{!"_ZTSN2ts8pos_typeE", !23, i64 0, !23, i64 4}
!23 = !{!"int", !24, i64 0}
!24 = !{!"omnipotent char", !25, i64 0}
!25 = !{!"Simple C++ TBAA"}
!26 = !{!"_ZTS10SyntaxKind", !24, i64 0}
!27 = !{!"_ZTSN2ts9NodeFlagsE", !24, i64 0}
!28 = !{!"_ZTSN2ts13ModifierFlagsE", !24, i64 0}
!29 = !{!"_ZTSN2ts14TransformFlagsE", !24, i64 0}
!30 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_4NodeEEEE", !31, i64 0, !21, i64 24, !37, i64 36, !37, i64 37, !37, i64 38, !29, i64 40}
!31 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_4NodeEEEE", !32, i64 0}
!32 = !{!"_ZTSSt6vectorI3ptrIN2ts4data4NodeEESaIS4_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data4NodeEESaIS4_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!36 = !{!"any pointer", !24, i64 0}
!37 = !{!"bool", !24, i64 0}
!38 = !{!"_ZTS3ptrIN2ts4data4NodeEE", !39, i64 0}
!39 = !{!"_ZTSSt10shared_ptrIN2ts4data4NodeEE", !40, i64 0}
!40 = !{!"_ZTSSt12__shared_ptrIN2ts4data4NodeELN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0, !41, i64 8}
!41 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0}
!42 = !{!"_ZTSN2ts13InternalFlagsE", !24, i64 0}
!43 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_5JSDocEEEE", !44, i64 0, !21, i64 24, !37, i64 36, !37, i64 37, !37, i64 38, !29, i64 40}
!44 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_5JSDocEEEE", !45, i64 0}
!45 = !{!"_ZTSSt6vectorI3ptrIN2ts4data5JSDocEESaIS4_EE", !46, i64 0}
!46 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE12_Vector_implE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data5JSDocEESaIS4_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!49 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_8JSDocTagEEEE", !50, i64 0, !21, i64 24, !37, i64 36, !37, i64 37, !37, i64 38, !29, i64 40}
!50 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_8JSDocTagEEEE", !51, i64 0}
!51 = !{!"_ZTSSt6vectorI3ptrIN2ts4data8JSDocTagEESaIS4_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8JSDocTagEESaIS4_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!55 = !{!"_ZTSN2ts4data9NodeArrayI3ptrINS0_8TypeNodeEEEE", !56, i64 0, !21, i64 24, !37, i64 36, !37, i64 37, !37, i64 38, !29, i64 40}
!56 = !{!"_ZTSN2ts4data13ReadonlyArrayI3ptrINS0_8TypeNodeEEEE", !57, i64 0}
!57 = !{!"_ZTSSt6vectorI3ptrIN2ts4data8TypeNodeEESaIS4_EE", !58, i64 0}
!58 = !{!"_ZTSSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE12_Vector_implE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseI3ptrIN2ts4data8TypeNodeEESaIS4_EE17_Vector_impl_dataE", !36, i64 0, !36, i64 8, !36, i64 16}
!61 = !{!"_ZTS3ptrIN2ts4data22LeftHandSideExpressionEE", !62, i64 0}
!62 = !{!"_ZTSSt10shared_ptrIN2ts4data22LeftHandSideExpressionEE", !63, i64 0}
!63 = !{!"_ZTSSt12__shared_ptrIN2ts4data22LeftHandSideExpressionELN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0, !41, i64 8}
!64 = !{!"_ZTS3ptrIN2ts4data6SymbolEE", !65, i64 0}
!65 = !{!"_ZTSSt10shared_ptrIN2ts4data6SymbolEE", !66, i64 0}
!66 = !{!"_ZTSSt12__shared_ptrIN2ts4data6SymbolELN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0, !41, i64 8}
!67 = !{!"_ZTS3ptrIN2ts4data10ExpressionEE", !68, i64 0}
!68 = !{!"_ZTSSt10shared_ptrIN2ts4data10ExpressionEE", !69, i64 0}
!69 = !{!"_ZTSSt12__shared_ptrIN2ts4data10ExpressionELN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0, !41, i64 8}
!70 = !{!"_ZTS3ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEE", !71, i64 0}
!71 = !{!"_ZTSSt10shared_ptrIN2ts4data5TokenIJL10SyntaxKind43EEEEE", !72, i64 0}
!72 = !{!"_ZTSSt12__shared_ptrIN2ts4data5TokenIJL10SyntaxKind43EEEELN9__gnu_cxx12_Lock_policyE2EE", !36, i64 0, !41, i64 8}


; Effective O3 passes: GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass