; LLVM IR from facebook/hermes :: API/hermes_sandbox/external (hermes_sandbox_impl_compiled_2)

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

; 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 i32 @w2c_hermes_hermes0x3A0x3AisUnicodeOnlySpace0x28unsigned0x20int0x29(ptr noundef %0, i32 noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  store i32 0, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  %8 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %8, ptr %6, align 4, !tbaa !9
  store i32 128, ptr %7, align 4, !tbaa !9
  %9 = load i32, ptr %6, align 4, !tbaa !9
  %10 = load i32, ptr %7, align 4, !tbaa !9
  %11 = icmp ult i32 %9, %10
  %12 = zext i1 %11 to i32
  store i32 %12, ptr %6, align 4, !tbaa !9
  %13 = load i32, ptr %6, align 4, !tbaa !9
  %14 = icmp ne i32 %13, 0
  br i1 %14, label %15, label %16

15:                                               ; preds = %2
  br label %159

16:                                               ; preds = %2
  store i32 1, ptr %6, align 4, !tbaa !9
  %17 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %17, ptr %5, align 4, !tbaa !9
  %18 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %18, ptr %6, align 4, !tbaa !9
  store i32 8191, ptr %7, align 4, !tbaa !9
  %19 = load i32, ptr %6, align 4, !tbaa !9
  %20 = load i32, ptr %7, align 4, !tbaa !9
  %21 = icmp sle i32 %19, %20
  %22 = zext i1 %21 to i32
  store i32 %22, ptr %6, align 4, !tbaa !9
  %23 = load i32, ptr %6, align 4, !tbaa !9
  %24 = icmp ne i32 %23, 0
  br i1 %24, label %25, label %44

25:                                               ; preds = %16
  %26 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %26, ptr %6, align 4, !tbaa !9
  store i32 160, ptr %7, align 4, !tbaa !9
  %27 = load i32, ptr %6, align 4, !tbaa !9
  %28 = load i32, ptr %7, align 4, !tbaa !9
  %29 = icmp eq i32 %27, %28
  %30 = zext i1 %29 to i32
  store i32 %30, ptr %6, align 4, !tbaa !9
  %31 = load i32, ptr %6, align 4, !tbaa !9
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %33, label %34

33:                                               ; preds = %25
  br label %159

34:                                               ; preds = %25
  %35 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %35, ptr %6, align 4, !tbaa !9
  store i32 5760, ptr %7, align 4, !tbaa !9
  %36 = load i32, ptr %6, align 4, !tbaa !9
  %37 = load i32, ptr %7, align 4, !tbaa !9
  %38 = icmp ne i32 %36, %37
  %39 = zext i1 %38 to i32
  store i32 %39, ptr %6, align 4, !tbaa !9
  %40 = load i32, ptr %6, align 4, !tbaa !9
  %41 = icmp ne i32 %40, 0
  br i1 %41, label %42, label %43

42:                                               ; preds = %34
  br label %157

43:                                               ; preds = %34
  br label %159

44:                                               ; preds = %16
  %45 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %45, ptr %6, align 4, !tbaa !9
  store i32 -8192, ptr %7, align 4, !tbaa !9
  %46 = load i32, ptr %7, align 4, !tbaa !9
  %47 = load i32, ptr %6, align 4, !tbaa !9
  %48 = add i32 %47, %46
  store i32 %48, ptr %6, align 4, !tbaa !9
  %49 = load i32, ptr %6, align 4, !tbaa !9
  switch i32 %49, label %146 [
    i32 0, label %50
    i32 1, label %51
    i32 2, label %52
    i32 3, label %53
    i32 4, label %54
    i32 5, label %55
    i32 6, label %56
    i32 7, label %57
    i32 8, label %58
    i32 9, label %59
    i32 10, label %60
    i32 11, label %61
    i32 12, label %62
    i32 13, label %63
    i32 14, label %64
    i32 15, label %65
    i32 16, label %66
    i32 17, label %67
    i32 18, label %68
    i32 19, label %69
    i32 20, label %70
    i32 21, label %71
    i32 22, label %72
    i32 23, label %73
    i32 24, label %74
    i32 25, label %75
    i32 26, label %76
    i32 27, label %77
    i32 28, label %78
    i32 29, label %79
    i32 30, label %80
    i32 31, label %81
    i32 32, label %82
    i32 33, label %83
    i32 34, label %84
    i32 35, label %85
    i32 36, label %86
    i32 37, label %87
    i32 38, label %88
    i32 39, label %89
    i32 40, label %90
    i32 41, label %91
    i32 42, label %92
    i32 43, label %93
    i32 44, label %94
    i32 45, label %95
    i32 46, label %96
    i32 47, label %97
    i32 48, label %98
    i32 49, label %99
    i32 50, label %100
    i32 51, label %101
    i32 52, label %102
    i32 53, label %103
    i32 54, label %104
    i32 55, label %105
    i32 56, label %106
    i32 57, label %107
    i32 58, label %108
    i32 59, label %109
    i32 60, label %110
    i32 61, label %111
    i32 62, label %112
    i32 63, label %113
    i32 64, label %114
    i32 65, label %115
    i32 66, label %116
    i32 67, label %117
    i32 68, label %118
    i32 69, label %119
    i32 70, label %120
    i32 71, label %121
    i32 72, label %122
    i32 73, label %123
    i32 74, label %124
    i32 75, label %125
    i32 76, label %126
    i32 77, label %127
    i32 78, label %128
    i32 79, label %129
    i32 80, label %130
    i32 81, label %131
    i32 82, label %132
    i32 83, label %133
    i32 84, label %134
    i32 85, label %135
    i32 86, label %136
    i32 87, label %137
    i32 88, label %138
    i32 89, label %139
    i32 90, label %140
    i32 91, label %141
    i32 92, label %142
    i32 93, label %143
    i32 94, label %144
    i32 95, label %145
  ]

50:                                               ; preds = %44
  br label %159

51:                                               ; preds = %44
  br label %159

52:                                               ; preds = %44
  br label %159

53:                                               ; preds = %44
  br label %159

54:                                               ; preds = %44
  br label %159

55:                                               ; preds = %44
  br label %159

56:                                               ; preds = %44
  br label %159

57:                                               ; preds = %44
  br label %159

58:                                               ; preds = %44
  br label %159

59:                                               ; preds = %44
  br label %159

60:                                               ; preds = %44
  br label %159

61:                                               ; preds = %44
  br label %157

62:                                               ; preds = %44
  br label %157

63:                                               ; preds = %44
  br label %157

64:                                               ; preds = %44
  br label %157

65:                                               ; preds = %44
  br label %157

66:                                               ; preds = %44
  br label %157

67:                                               ; preds = %44
  br label %157

68:                                               ; preds = %44
  br label %157

69:                                               ; preds = %44
  br label %157

70:                                               ; preds = %44
  br label %157

71:                                               ; preds = %44
  br label %157

72:                                               ; preds = %44
  br label %157

73:                                               ; preds = %44
  br label %157

74:                                               ; preds = %44
  br label %157

75:                                               ; preds = %44
  br label %157

76:                                               ; preds = %44
  br label %157

77:                                               ; preds = %44
  br label %157

78:                                               ; preds = %44
  br label %157

79:                                               ; preds = %44
  br label %157

80:                                               ; preds = %44
  br label %157

81:                                               ; preds = %44
  br label %157

82:                                               ; preds = %44
  br label %157

83:                                               ; preds = %44
  br label %157

84:                                               ; preds = %44
  br label %157

85:                                               ; preds = %44
  br label %157

86:                                               ; preds = %44
  br label %157

87:                                               ; preds = %44
  br label %157

88:                                               ; preds = %44
  br label %157

89:                                               ; preds = %44
  br label %157

90:                                               ; preds = %44
  br label %157

91:                                               ; preds = %44
  br label %157

92:                                               ; preds = %44
  br label %157

93:                                               ; preds = %44
  br label %157

94:                                               ; preds = %44
  br label %157

95:                                               ; preds = %44
  br label %157

96:                                               ; preds = %44
  br label %157

97:                                               ; preds = %44
  br label %159

98:                                               ; preds = %44
  br label %157

99:                                               ; preds = %44
  br label %157

100:                                              ; preds = %44
  br label %157

101:                                              ; preds = %44
  br label %157

102:                                              ; preds = %44
  br label %157

103:                                              ; preds = %44
  br label %157

104:                                              ; preds = %44
  br label %157

105:                                              ; preds = %44
  br label %157

106:                                              ; preds = %44
  br label %157

107:                                              ; preds = %44
  br label %157

108:                                              ; preds = %44
  br label %157

109:                                              ; preds = %44
  br label %157

110:                                              ; preds = %44
  br label %157

111:                                              ; preds = %44
  br label %157

112:                                              ; preds = %44
  br label %157

113:                                              ; preds = %44
  br label %157

114:                                              ; preds = %44
  br label %157

115:                                              ; preds = %44
  br label %157

116:                                              ; preds = %44
  br label %157

117:                                              ; preds = %44
  br label %157

118:                                              ; preds = %44
  br label %157

119:                                              ; preds = %44
  br label %157

120:                                              ; preds = %44
  br label %157

121:                                              ; preds = %44
  br label %157

122:                                              ; preds = %44
  br label %157

123:                                              ; preds = %44
  br label %157

124:                                              ; preds = %44
  br label %157

125:                                              ; preds = %44
  br label %157

126:                                              ; preds = %44
  br label %157

127:                                              ; preds = %44
  br label %157

128:                                              ; preds = %44
  br label %157

129:                                              ; preds = %44
  br label %157

130:                                              ; preds = %44
  br label %157

131:                                              ; preds = %44
  br label %157

132:                                              ; preds = %44
  br label %157

133:                                              ; preds = %44
  br label %157

134:                                              ; preds = %44
  br label %157

135:                                              ; preds = %44
  br label %157

136:                                              ; preds = %44
  br label %157

137:                                              ; preds = %44
  br label %157

138:                                              ; preds = %44
  br label %157

139:                                              ; preds = %44
  br label %157

140:                                              ; preds = %44
  br label %157

141:                                              ; preds = %44
  br label %157

142:                                              ; preds = %44
  br label %157

143:                                              ; preds = %44
  br label %157

144:                                              ; preds = %44
  br label %157

145:                                              ; preds = %44
  br label %159

146:                                              ; preds = %44
  br label %147

147:                                              ; preds = %146
  %148 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %148, ptr %6, align 4, !tbaa !9
  store i32 12288, ptr %7, align 4, !tbaa !9
  %149 = load i32, ptr %6, align 4, !tbaa !9
  %150 = load i32, ptr %7, align 4, !tbaa !9
  %151 = icmp eq i32 %149, %150
  %152 = zext i1 %151 to i32
  store i32 %152, ptr %6, align 4, !tbaa !9
  %153 = load i32, ptr %6, align 4, !tbaa !9
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %156

155:                                              ; preds = %147
  br label %159

156:                                              ; preds = %147
  br label %157

157:                                              ; preds = %156, %144, %143, %142, %141, %140, %139, %138, %137, %136, %135, %134, %133, %132, %131, %130, %129, %128, %127, %126, %125, %124, %123, %122, %121, %120, %119, %118, %117, %116, %115, %114, %113, %112, %111, %110, %109, %108, %107, %106, %105, %104, %103, %102, %101, %100, %99, %98, %96, %95, %94, %93, %92, %91, %90, %89, %88, %87, %86, %85, %84, %83, %82, %81, %80, %79, %78, %77, %76, %75, %74, %73, %72, %71, %70, %69, %68, %67, %66, %65, %64, %63, %62, %61, %42
  store i32 0, ptr %6, align 4, !tbaa !9
  %158 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %158, ptr %5, align 4, !tbaa !9
  br label %159

159:                                              ; preds = %157, %155, %145, %97, %60, %59, %58, %57, %56, %55, %54, %53, %52, %51, %50, %43, %33, %15
  %160 = load i32, ptr %5, align 4, !tbaa !9
  store i32 %160, ptr %6, align 4, !tbaa !9
  %161 = load i32, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #2
  ret i32 %161
}

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 = { 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, !10, i64 0}
!10 = !{!"int", !7, 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"

@switch.table.w2c_hermes_hermes0x3A0x3AisUnicodeOnlySpace0x28unsigned0x20int0x29 = private unnamed_addr constant [96 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], align 4

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable
define dso_local range(i32 0, 2) i32 @w2c_hermes_hermes0x3A0x3AisUnicodeOnlySpace0x28unsigned0x20int0x29(ptr nocapture noundef readnone %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = icmp ult i32 %1, 128
  br i1 %3, label %13, label %4

4:                                                ; preds = %2
  %5 = icmp slt i32 %1, 8192
  br i1 %5, label %6, label %8

6:                                                ; preds = %4
  %switch.selectcmp.case1 = icmp eq i32 %1, 160
  %switch.selectcmp.case2 = icmp eq i32 %1, 5760
  %switch.selectcmp = or i1 %switch.selectcmp.case1, %switch.selectcmp.case2
  %7 = zext i1 %switch.selectcmp to i32
  br label %13

8:                                                ; preds = %4
  %switch.tableidx = add nsw i32 %1, -8192
  %9 = icmp ult i32 %switch.tableidx, 96
  br i1 %9, label %switch.lookup, label %10

10:                                               ; preds = %8
  %11 = icmp eq i32 %1, 12288
  %spec.select = zext i1 %11 to i32
  br label %13

switch.lookup:                                    ; preds = %8
  %12 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [96 x i32], ptr @switch.table.w2c_hermes_hermes0x3A0x3AisUnicodeOnlySpace0x28unsigned0x20int0x29, i64 0, i64 %12
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %13

13:                                               ; preds = %10, %switch.lookup, %6, %2
  %.0 = phi i32 [ 0, %2 ], [ %7, %6 ], [ %switch.load, %switch.lookup ], [ %spec.select, %10 ]
  ret i32 %.0
}

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) 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" }

!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)"}


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