Skip to content

Instantly share code, notes, and snippets.

@nikic

nikic/test.ll Secret

Created November 15, 2021 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikic/bd117601aedea5f03b5750571d07624e to your computer and use it in GitHub Desktop.
Save nikic/bd117601aedea5f03b5750571d07624e to your computer and use it in GitHub Desktop.
; ModuleID = '../tools/fpcmp.c'
source_filename = "../tools/fpcmp.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, %struct._IO_codecvt*, %struct._IO_wide_data*, %struct._IO_FILE*, i8*, i64, i32, [20 x i8] }
%struct._IO_marker = type opaque
%struct._IO_codecvt = type opaque
%struct._IO_wide_data = type opaque
@.str = private unnamed_addr constant [3 x i8] c"rb\00", align 1
@stderr = external dso_local global %struct._IO_FILE*, align 8
@.str.1 = private unnamed_addr constant [32 x i8] c"%s: error: unable to open '%s'\0A\00", align 1
@g_program = dso_local global i8* null, align 8, !dbg !0
@.str.2 = private unnamed_addr constant [32 x i8] c"%s: error: unable to seek '%s'\0A\00", align 1
@.str.3 = private unnamed_addr constant [47 x i8] c"%s: error: unable to allocate buffer for '%s'\0A\00", align 1
@.str.4 = private unnamed_addr constant [41 x i8] c"%s: error: unable to read data for '%s'\0A\00", align 1
@.str.5 = private unnamed_addr constant [74 x i8] c"%s: FP Comparison failed, not a numeric difference between '%c' and '%c'\0A\00", align 1
@.str.6 = private unnamed_addr constant [62 x i8] c"%s: FP Comparison failed, unexpected end of one of the files\0A\00", align 1
@.str.7 = private unnamed_addr constant [57 x i8] c"usage: %s [-a VALUE] [-r VALUE] [-i] <path-A> <path-B>\0A\0A\00", align 1
@.str.8 = private unnamed_addr constant [58 x i8] c"Compare two files using absolute and relative tolerances\0A\00", align 1
@.str.9 = private unnamed_addr constant [50 x i8] c"when comparing differences between two character\0A\00", align 1
@.str.10 = private unnamed_addr constant [29 x i8] c"which could be real numbers\0A\00", align 1
@.str.11 = private unnamed_addr constant [46 x i8] c"The -i switch ignores whitespace differences\0A\00", align 1
@.str.12 = private unnamed_addr constant [31 x i8] c"error: invalid argument '%s'\0A\0A\00", align 1
@.str.13 = private unnamed_addr constant [34 x i8] c"error: missing argument to '%s'\0A\0A\00", align 1
@.str.14 = private unnamed_addr constant [40 x i8] c"error: invalid argument to '%s': '%s'\0A\0A\00", align 1
@.str.15 = private unnamed_addr constant [37 x i8] c"error: invalid number of arguments\0A\0A\00", align 1
@.str.16 = private unnamed_addr constant [87 x i8] c"%s: Compared: %e and %e\0Aabs. diff = %e rel.diff = %e\0AOut of tolerance: rel/abs: %e/%e\0A\00", align 1
; Function Attrs: nounwind uwtable
define dso_local i8* @load_file(i8* %path, i64* %size_out) #0 !dbg !37 {
entry:
%retval = alloca i8*, align 8
%path.addr = alloca i8*, align 8
%size_out.addr = alloca i64*, align 8
%fp = alloca %struct._IO_FILE*, align 8
%size = alloca i64, align 8
%data = alloca i8*, align 8
%cleanup.dest.slot = alloca i32, align 4
store i8* %path, i8** %path.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %path.addr, metadata !43, metadata !DIExpression()), !dbg !110
store i64* %size_out, i64** %size_out.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i64** %size_out.addr, metadata !44, metadata !DIExpression()), !dbg !111
%0 = bitcast %struct._IO_FILE** %fp to i8*, !dbg !112
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #9, !dbg !112
call void @llvm.dbg.declare(metadata %struct._IO_FILE** %fp, metadata !45, metadata !DIExpression()), !dbg !113
%1 = bitcast i64* %size to i8*, !dbg !114
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #9, !dbg !114
call void @llvm.dbg.declare(metadata i64* %size, metadata !104, metadata !DIExpression()), !dbg !115
%2 = bitcast i8** %data to i8*, !dbg !116
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) #9, !dbg !116
call void @llvm.dbg.declare(metadata i8** %data, metadata !105, metadata !DIExpression()), !dbg !117
%3 = load i8*, i8** %path.addr, align 8, !dbg !118, !tbaa !106
%call = call %struct._IO_FILE* @fopen(i8* %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0)), !dbg !119
store %struct._IO_FILE* %call, %struct._IO_FILE** %fp, align 8, !dbg !120, !tbaa !106
%4 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !121, !tbaa !106
%tobool = icmp ne %struct._IO_FILE* %4, null, !dbg !121
br i1 %tobool, label %if.end, label %if.then, !dbg !123
if.then: ; preds = %entry
%5 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !124, !tbaa !106
%6 = load i8*, i8** @g_program, align 8, !dbg !126, !tbaa !106
%7 = load i8*, i8** %path.addr, align 8, !dbg !127, !tbaa !106
%call1 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %5, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i8* %6, i8* %7), !dbg !128
call void @exit(i32 2) #10, !dbg !129
unreachable, !dbg !129
if.end: ; preds = %entry
%8 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !130, !tbaa !106
%call2 = call i32 @fseek(%struct._IO_FILE* %8, i64 0, i32 2), !dbg !132
%cmp = icmp eq i32 %call2, -1, !dbg !133
br i1 %cmp, label %if.then3, label %if.end5, !dbg !134
if.then3: ; preds = %if.end
%9 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !135, !tbaa !106
%10 = load i8*, i8** @g_program, align 8, !dbg !137, !tbaa !106
%11 = load i8*, i8** %path.addr, align 8, !dbg !138, !tbaa !106
%call4 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %9, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.2, i64 0, i64 0), i8* %10, i8* %11), !dbg !139
call void @exit(i32 2) #10, !dbg !140
unreachable, !dbg !140
if.end5: ; preds = %if.end
%12 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !141, !tbaa !106
%call6 = call i64 @ftell(%struct._IO_FILE* %12), !dbg !142
store i64 %call6, i64* %size, align 8, !dbg !143, !tbaa !144
%13 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !146, !tbaa !106
%call7 = call i32 @fseek(%struct._IO_FILE* %13, i64 0, i32 0), !dbg !148
%cmp8 = icmp eq i32 %call7, -1, !dbg !149
br i1 %cmp8, label %if.then9, label %if.end11, !dbg !150
if.then9: ; preds = %if.end5
%14 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !151, !tbaa !106
%15 = load i8*, i8** @g_program, align 8, !dbg !153, !tbaa !106
%16 = load i8*, i8** %path.addr, align 8, !dbg !154, !tbaa !106
%call10 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %14, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.2, i64 0, i64 0), i8* %15, i8* %16), !dbg !155
call void @exit(i32 2) #10, !dbg !156
unreachable, !dbg !156
if.end11: ; preds = %if.end5
%17 = load i64, i64* %size, align 8, !dbg !157, !tbaa !144
%cmp12 = icmp eq i64 %17, 0, !dbg !159
br i1 %cmp12, label %if.then13, label %if.end14, !dbg !160
if.then13: ; preds = %if.end11
%18 = load i64*, i64** %size_out.addr, align 8, !dbg !161, !tbaa !106
store i64 0, i64* %18, align 8, !dbg !163, !tbaa !144
store i8* null, i8** %retval, align 8, !dbg !164
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !164
if.end14: ; preds = %if.end11
%19 = load i64, i64* %size, align 8, !dbg !165, !tbaa !144
%add = add nsw i64 %19, 1, !dbg !166
%call15 = call noalias align 16 i8* @malloc(i64 %add) #9, !dbg !167
store i8* %call15, i8** %data, align 8, !dbg !168, !tbaa !106
%20 = load i8*, i8** %data, align 8, !dbg !169, !tbaa !106
%tobool16 = icmp ne i8* %20, null, !dbg !169
br i1 %tobool16, label %if.end19, label %if.then17, !dbg !172
if.then17: ; preds = %if.end14
%21 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !173, !tbaa !106
%22 = load i8*, i8** @g_program, align 8, !dbg !175, !tbaa !106
%23 = load i8*, i8** %path.addr, align 8, !dbg !176, !tbaa !106
%call18 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %21, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.3, i64 0, i64 0), i8* %22, i8* %23), !dbg !177
call void @exit(i32 2) #10, !dbg !178
unreachable, !dbg !178
if.end19: ; preds = %if.end14
%24 = load i8*, i8** %data, align 8, !dbg !179, !tbaa !106
%25 = load i64, i64* %size, align 8, !dbg !180, !tbaa !144
%arrayidx = getelementptr inbounds i8, i8* %24, i64 %25, !dbg !179
store i8 0, i8* %arrayidx, align 1, !dbg !181, !tbaa !182
%26 = load i8*, i8** %data, align 8, !dbg !183, !tbaa !106
%27 = load i64, i64* %size, align 8, !dbg !185, !tbaa !144
%28 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !186, !tbaa !106
%call20 = call i64 @fread(i8* %26, i64 %27, i64 1, %struct._IO_FILE* %28), !dbg !187
%cmp21 = icmp ne i64 %call20, 1, !dbg !188
br i1 %cmp21, label %if.then22, label %if.end24, !dbg !189
if.then22: ; preds = %if.end19
%29 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !190, !tbaa !106
%30 = load i8*, i8** @g_program, align 8, !dbg !192, !tbaa !106
%31 = load i8*, i8** %path.addr, align 8, !dbg !193, !tbaa !106
%call23 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %29, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.4, i64 0, i64 0), i8* %30, i8* %31), !dbg !194
call void @exit(i32 2) #10, !dbg !195
unreachable, !dbg !195
if.end24: ; preds = %if.end19
%32 = load %struct._IO_FILE*, %struct._IO_FILE** %fp, align 8, !dbg !196, !tbaa !106
%call25 = call i32 @fclose(%struct._IO_FILE* %32), !dbg !197
%33 = load i64, i64* %size, align 8, !dbg !198, !tbaa !144
%34 = load i64*, i64** %size_out.addr, align 8, !dbg !199, !tbaa !106
store i64 %33, i64* %34, align 8, !dbg !200, !tbaa !144
%35 = load i8*, i8** %data, align 8, !dbg !201, !tbaa !106
store i8* %35, i8** %retval, align 8, !dbg !202
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !202
cleanup: ; preds = %if.end24, %if.then13
%36 = bitcast i8** %data to i8*, !dbg !203
call void @llvm.lifetime.end.p0i8(i64 8, i8* %36) #9, !dbg !203
%37 = bitcast i64* %size to i8*, !dbg !203
call void @llvm.lifetime.end.p0i8(i64 8, i8* %37) #9, !dbg !203
%38 = bitcast %struct._IO_FILE** %fp to i8*, !dbg !203
call void @llvm.lifetime.end.p0i8(i64 8, i8* %38) #9, !dbg !203
%39 = load i8*, i8** %retval, align 8, !dbg !203
ret i8* %39, !dbg !203
}
; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2
declare dso_local %struct._IO_FILE* @fopen(i8*, i8*) #3
declare dso_local i32 @fprintf(%struct._IO_FILE*, i8*, ...) #3
; Function Attrs: noreturn nounwind
declare dso_local void @exit(i32) #4
declare !dbg !204 dso_local i32 @fseek(%struct._IO_FILE*, i64, i32) #3
declare !dbg !209 dso_local i64 @ftell(%struct._IO_FILE*) #3
; Function Attrs: nounwind
declare dso_local noalias i8* @malloc(i64) #5
declare dso_local i64 @fread(i8*, i64, i64, %struct._IO_FILE*) #3
declare !dbg !212 dso_local i32 @fclose(%struct._IO_FILE*) #3
; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2
; Function Attrs: nounwind uwtable
define dso_local i32 @diff_files_with_tolerance(i8* %path_a, i8* %path_b, double %absolute_tolerance, double %relative_tolerance, i32 %ignore_whitespace) #0 !dbg !215 {
entry:
%retval = alloca i32, align 4
%path_a.addr = alloca i8*, align 8
%path_b.addr = alloca i8*, align 8
%absolute_tolerance.addr = alloca double, align 8
%relative_tolerance.addr = alloca double, align 8
%ignore_whitespace.addr = alloca i32, align 4
%A_size = alloca i64, align 8
%B_size = alloca i64, align 8
%data_a = alloca i8*, align 8
%data_b = alloca i8*, align 8
%cleanup.dest.slot = alloca i32, align 4
%File1Start = alloca i8*, align 8
%File2Start = alloca i8*, align 8
%File1End = alloca i8*, align 8
%File2End = alloca i8*, align 8
%F1P = alloca i8*, align 8
%F2P = alloca i8*, align 8
%F1NumStart = alloca i8*, align 8
%F2NumStart = alloca i8*, align 8
%F1NumEnd = alloca i8*, align 8
%F2NumEnd = alloca i8*, align 8
%F1AtEnd = alloca i32, align 4
%F2AtEnd = alloca i32, align 4
store i8* %path_a, i8** %path_a.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %path_a.addr, metadata !220, metadata !DIExpression()), !dbg !242
store i8* %path_b, i8** %path_b.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %path_b.addr, metadata !221, metadata !DIExpression()), !dbg !243
store double %absolute_tolerance, double* %absolute_tolerance.addr, align 8, !tbaa !244
call void @llvm.dbg.declare(metadata double* %absolute_tolerance.addr, metadata !222, metadata !DIExpression()), !dbg !246
store double %relative_tolerance, double* %relative_tolerance.addr, align 8, !tbaa !244
call void @llvm.dbg.declare(metadata double* %relative_tolerance.addr, metadata !223, metadata !DIExpression()), !dbg !247
store i32 %ignore_whitespace, i32* %ignore_whitespace.addr, align 4, !tbaa !248
call void @llvm.dbg.declare(metadata i32* %ignore_whitespace.addr, metadata !224, metadata !DIExpression()), !dbg !250
%0 = bitcast i64* %A_size to i8*, !dbg !251
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #9, !dbg !251
call void @llvm.dbg.declare(metadata i64* %A_size, metadata !225, metadata !DIExpression()), !dbg !252
%1 = bitcast i64* %B_size to i8*, !dbg !251
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #9, !dbg !251
call void @llvm.dbg.declare(metadata i64* %B_size, metadata !226, metadata !DIExpression()), !dbg !253
%2 = bitcast i8** %data_a to i8*, !dbg !254
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) #9, !dbg !254
call void @llvm.dbg.declare(metadata i8** %data_a, metadata !227, metadata !DIExpression()), !dbg !255
%3 = load i8*, i8** %path_a.addr, align 8, !dbg !256, !tbaa !106
%call = call i8* @load_file(i8* %3, i64* %A_size), !dbg !257
store i8* %call, i8** %data_a, align 8, !dbg !255, !tbaa !106
%4 = bitcast i8** %data_b to i8*, !dbg !258
call void @llvm.lifetime.start.p0i8(i64 8, i8* %4) #9, !dbg !258
call void @llvm.dbg.declare(metadata i8** %data_b, metadata !228, metadata !DIExpression()), !dbg !259
%5 = load i8*, i8** %path_b.addr, align 8, !dbg !260, !tbaa !106
%call1 = call i8* @load_file(i8* %5, i64* %B_size), !dbg !261
store i8* %call1, i8** %data_b, align 8, !dbg !259, !tbaa !106
%6 = load i64, i64* %A_size, align 8, !dbg !262, !tbaa !144
%7 = load i64, i64* %B_size, align 8, !dbg !264, !tbaa !144
%cmp = icmp eq i64 %6, %7, !dbg !265
br i1 %cmp, label %land.lhs.true, label %if.end, !dbg !266
land.lhs.true: ; preds = %entry
%8 = load i8*, i8** %data_a, align 8, !dbg !267, !tbaa !106
%9 = load i8*, i8** %data_b, align 8, !dbg !268, !tbaa !106
%10 = load i64, i64* %A_size, align 8, !dbg !269, !tbaa !144
%call2 = call i32 @memcmp(i8* %8, i8* %9, i64 %10) #11, !dbg !270
%cmp3 = icmp eq i32 %call2, 0, !dbg !271
br i1 %cmp3, label %if.then, label %if.end, !dbg !272
if.then: ; preds = %land.lhs.true
%11 = load i8*, i8** %data_a, align 8, !dbg !273, !tbaa !106
call void @free(i8* %11) #9, !dbg !275
%12 = load i8*, i8** %data_b, align 8, !dbg !276, !tbaa !106
call void @free(i8* %12) #9, !dbg !277
store i32 0, i32* %retval, align 4, !dbg !278
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup81, !dbg !278
if.end: ; preds = %land.lhs.true, %entry
%13 = bitcast i8** %File1Start to i8*, !dbg !279
call void @llvm.lifetime.start.p0i8(i64 8, i8* %13) #9, !dbg !279
call void @llvm.dbg.declare(metadata i8** %File1Start, metadata !229, metadata !DIExpression()), !dbg !280
%14 = load i8*, i8** %data_a, align 8, !dbg !281, !tbaa !106
store i8* %14, i8** %File1Start, align 8, !dbg !280, !tbaa !106
%15 = bitcast i8** %File2Start to i8*, !dbg !282
call void @llvm.lifetime.start.p0i8(i64 8, i8* %15) #9, !dbg !282
call void @llvm.dbg.declare(metadata i8** %File2Start, metadata !230, metadata !DIExpression()), !dbg !283
%16 = load i8*, i8** %data_b, align 8, !dbg !284, !tbaa !106
store i8* %16, i8** %File2Start, align 8, !dbg !283, !tbaa !106
%17 = bitcast i8** %File1End to i8*, !dbg !285
call void @llvm.lifetime.start.p0i8(i64 8, i8* %17) #9, !dbg !285
call void @llvm.dbg.declare(metadata i8** %File1End, metadata !231, metadata !DIExpression()), !dbg !286
%18 = load i8*, i8** %data_a, align 8, !dbg !287, !tbaa !106
%19 = load i64, i64* %A_size, align 8, !dbg !288, !tbaa !144
%add.ptr = getelementptr inbounds i8, i8* %18, i64 %19, !dbg !289
store i8* %add.ptr, i8** %File1End, align 8, !dbg !286, !tbaa !106
%20 = bitcast i8** %File2End to i8*, !dbg !290
call void @llvm.lifetime.start.p0i8(i64 8, i8* %20) #9, !dbg !290
call void @llvm.dbg.declare(metadata i8** %File2End, metadata !232, metadata !DIExpression()), !dbg !291
%21 = load i8*, i8** %data_b, align 8, !dbg !292, !tbaa !106
%22 = load i64, i64* %B_size, align 8, !dbg !293, !tbaa !144
%add.ptr4 = getelementptr inbounds i8, i8* %21, i64 %22, !dbg !294
store i8* %add.ptr4, i8** %File2End, align 8, !dbg !291, !tbaa !106
%23 = bitcast i8** %F1P to i8*, !dbg !295
call void @llvm.lifetime.start.p0i8(i64 8, i8* %23) #9, !dbg !295
call void @llvm.dbg.declare(metadata i8** %F1P, metadata !233, metadata !DIExpression()), !dbg !296
%24 = load i8*, i8** %File1Start, align 8, !dbg !297, !tbaa !106
store i8* %24, i8** %F1P, align 8, !dbg !296, !tbaa !106
%25 = bitcast i8** %F2P to i8*, !dbg !298
call void @llvm.lifetime.start.p0i8(i64 8, i8* %25) #9, !dbg !298
call void @llvm.dbg.declare(metadata i8** %F2P, metadata !234, metadata !DIExpression()), !dbg !299
%26 = load i8*, i8** %File2Start, align 8, !dbg !300, !tbaa !106
store i8* %26, i8** %F2P, align 8, !dbg !299, !tbaa !106
br label %while.cond, !dbg !301
while.cond: ; preds = %cleanup.cont, %cleanup52, %if.then19, %if.end
br label %while.body, !dbg !301
while.body: ; preds = %while.cond
%27 = load i8*, i8** %F1P, align 8, !dbg !302, !tbaa !106
%28 = load i8*, i8** %File1End, align 8, !dbg !304, !tbaa !106
%cmp5 = icmp uge i8* %27, %28, !dbg !305
br i1 %cmp5, label %if.then7, label %lor.lhs.false, !dbg !306
lor.lhs.false: ; preds = %while.body
%29 = load i8*, i8** %F2P, align 8, !dbg !307, !tbaa !106
%30 = load i8*, i8** %File2End, align 8, !dbg !308, !tbaa !106
%cmp6 = icmp uge i8* %29, %30, !dbg !309
br i1 %cmp6, label %if.then7, label %if.end12, !dbg !310
if.then7: ; preds = %lor.lhs.false, %while.body
%31 = load i32, i32* %ignore_whitespace.addr, align 4, !dbg !311, !tbaa !248
%tobool = icmp ne i32 %31, 0, !dbg !311
br i1 %tobool, label %if.then8, label %if.end11, !dbg !314
if.then8: ; preds = %if.then7
%32 = load i8*, i8** %File1End, align 8, !dbg !315, !tbaa !106
%call9 = call i32 @skip_whitespace(i8** %F1P, i8* %32), !dbg !317
%33 = load i8*, i8** %File2End, align 8, !dbg !318, !tbaa !106
%call10 = call i32 @skip_whitespace(i8** %F2P, i8* %33), !dbg !319
br label %if.end11, !dbg !320
if.end11: ; preds = %if.then8, %if.then7
br label %while.end, !dbg !321
if.end12: ; preds = %lor.lhs.false
%34 = load i8*, i8** %F1P, align 8, !dbg !322, !tbaa !106
%35 = load i8, i8* %34, align 1, !dbg !324, !tbaa !182
%conv = sext i8 %35 to i32, !dbg !324
%36 = load i8*, i8** %F2P, align 8, !dbg !325, !tbaa !106
%37 = load i8, i8* %36, align 1, !dbg !326, !tbaa !182
%conv13 = sext i8 %37 to i32, !dbg !326
%cmp14 = icmp eq i32 %conv, %conv13, !dbg !327
br i1 %cmp14, label %land.lhs.true16, label %if.end21, !dbg !328
land.lhs.true16: ; preds = %if.end12
%38 = load i8*, i8** %F1P, align 8, !dbg !329, !tbaa !106
%39 = load i8, i8* %38, align 1, !dbg !330, !tbaa !182
%call17 = call i32 @isPossibleStartOfNumber(i8 signext %39), !dbg !331
%tobool18 = icmp ne i32 %call17, 0, !dbg !331
br i1 %tobool18, label %if.end21, label %if.then19, !dbg !332
if.then19: ; preds = %land.lhs.true16
%40 = load i8*, i8** %F1P, align 8, !dbg !333, !tbaa !106
%incdec.ptr = getelementptr inbounds i8, i8* %40, i32 1, !dbg !333
store i8* %incdec.ptr, i8** %F1P, align 8, !dbg !333, !tbaa !106
%41 = load i8*, i8** %F2P, align 8, !dbg !335, !tbaa !106
%incdec.ptr20 = getelementptr inbounds i8, i8* %41, i32 1, !dbg !335
store i8* %incdec.ptr20, i8** %F2P, align 8, !dbg !335, !tbaa !106
br label %while.cond, !dbg !336, !llvm.loop !337
if.end21: ; preds = %land.lhs.true16, %if.end12
%42 = bitcast i8** %F1NumStart to i8*, !dbg !339
call void @llvm.lifetime.start.p0i8(i64 8, i8* %42) #9, !dbg !339
call void @llvm.dbg.declare(metadata i8** %F1NumStart, metadata !235, metadata !DIExpression()), !dbg !340
%43 = load i8*, i8** %F1P, align 8, !dbg !341, !tbaa !106
store i8* %43, i8** %F1NumStart, align 8, !dbg !340, !tbaa !106
%44 = bitcast i8** %F2NumStart to i8*, !dbg !342
call void @llvm.lifetime.start.p0i8(i64 8, i8* %44) #9, !dbg !342
call void @llvm.dbg.declare(metadata i8** %F2NumStart, metadata !237, metadata !DIExpression()), !dbg !343
%45 = load i8*, i8** %F2P, align 8, !dbg !344, !tbaa !106
store i8* %45, i8** %F2NumStart, align 8, !dbg !343, !tbaa !106
%46 = load i32, i32* %ignore_whitespace.addr, align 4, !dbg !345, !tbaa !248
%tobool22 = icmp ne i32 %46, 0, !dbg !345
br i1 %tobool22, label %if.then23, label %if.else, !dbg !347
if.then23: ; preds = %if.end21
%47 = load i8*, i8** %File1End, align 8, !dbg !348, !tbaa !106
%call24 = call i32 @skip_whitespace(i8** %F1P, i8* %47), !dbg !351
%48 = load i8*, i8** %File2End, align 8, !dbg !352, !tbaa !106
%call25 = call i32 @skip_whitespace(i8** %F2P, i8* %48), !dbg !353
%or = or i32 %call24, %call25, !dbg !354
%tobool26 = icmp ne i32 %or, 0, !dbg !354
br i1 %tobool26, label %if.then27, label %if.end28, !dbg !355
if.then27: ; preds = %if.then23
store i32 2, i32* %cleanup.dest.slot, align 4
br label %cleanup52, !dbg !356, !llvm.loop !337
if.end28: ; preds = %if.then23
br label %if.end31, !dbg !357
if.else: ; preds = %if.end21
%49 = load i8*, i8** %File1End, align 8, !dbg !358, !tbaa !106
%call29 = call i32 @skip_whitespace(i8** %F1NumStart, i8* %49), !dbg !360
%50 = load i8*, i8** %File2End, align 8, !dbg !361, !tbaa !106
%call30 = call i32 @skip_whitespace(i8** %F2NumStart, i8* %50), !dbg !362
br label %if.end31
if.end31: ; preds = %if.else, %if.end28
%51 = bitcast i8** %F1NumEnd to i8*, !dbg !363
call void @llvm.lifetime.start.p0i8(i64 8, i8* %51) #9, !dbg !363
call void @llvm.dbg.declare(metadata i8** %F1NumEnd, metadata !238, metadata !DIExpression()), !dbg !364
%52 = load i8*, i8** %F1NumStart, align 8, !dbg !365, !tbaa !106
%53 = load i8*, i8** %File1End, align 8, !dbg !366, !tbaa !106
%call32 = call i8* @AdvanceNumber(i8* %52, i8* %53), !dbg !367
store i8* %call32, i8** %F1NumEnd, align 8, !dbg !364, !tbaa !106
%54 = bitcast i8** %F2NumEnd to i8*, !dbg !368
call void @llvm.lifetime.start.p0i8(i64 8, i8* %54) #9, !dbg !368
call void @llvm.dbg.declare(metadata i8** %F2NumEnd, metadata !239, metadata !DIExpression()), !dbg !369
%55 = load i8*, i8** %F2NumStart, align 8, !dbg !370, !tbaa !106
%56 = load i8*, i8** %File2End, align 8, !dbg !371, !tbaa !106
%call33 = call i8* @AdvanceNumber(i8* %55, i8* %56), !dbg !372
store i8* %call33, i8** %F2NumEnd, align 8, !dbg !369, !tbaa !106
%57 = load i8*, i8** %F1NumEnd, align 8, !dbg !373, !tbaa !106
%tobool34 = icmp ne i8* %57, null, !dbg !373
br i1 %tobool34, label %lor.lhs.false35, label %if.then37, !dbg !375
lor.lhs.false35: ; preds = %if.end31
%58 = load i8*, i8** %F2NumEnd, align 8, !dbg !376, !tbaa !106
%tobool36 = icmp ne i8* %58, null, !dbg !376
br i1 %tobool36, label %if.end46, label %if.then37, !dbg !377
if.then37: ; preds = %lor.lhs.false35, %if.end31
%59 = load i8*, i8** %F1P, align 8, !dbg !378, !tbaa !106
%60 = load i8, i8* %59, align 1, !dbg !381, !tbaa !182
%conv38 = sext i8 %60 to i32, !dbg !381
%61 = load i8*, i8** %F2P, align 8, !dbg !382, !tbaa !106
%62 = load i8, i8* %61, align 1, !dbg !383, !tbaa !182
%conv39 = sext i8 %62 to i32, !dbg !383
%cmp40 = icmp ne i32 %conv38, %conv39, !dbg !384
br i1 %cmp40, label %if.then42, label %if.end43, !dbg !385
if.then42: ; preds = %if.then37
store i32 3, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !386
if.end43: ; preds = %if.then37
%63 = load i8*, i8** %F1P, align 8, !dbg !387, !tbaa !106
%incdec.ptr44 = getelementptr inbounds i8, i8* %63, i32 1, !dbg !387
store i8* %incdec.ptr44, i8** %F1P, align 8, !dbg !387, !tbaa !106
%64 = load i8*, i8** %F2P, align 8, !dbg !388, !tbaa !106
%incdec.ptr45 = getelementptr inbounds i8, i8* %64, i32 1, !dbg !388
store i8* %incdec.ptr45, i8** %F2P, align 8, !dbg !388, !tbaa !106
store i32 2, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !389, !llvm.loop !337
if.end46: ; preds = %lor.lhs.false35
%65 = load i8*, i8** %F1NumStart, align 8, !dbg !390, !tbaa !106
%66 = load i8*, i8** %F2NumStart, align 8, !dbg !392, !tbaa !106
%67 = load i8*, i8** %F1NumEnd, align 8, !dbg !393, !tbaa !106
%68 = load i8*, i8** %F2NumEnd, align 8, !dbg !394, !tbaa !106
%69 = load double, double* %absolute_tolerance.addr, align 8, !dbg !395, !tbaa !244
%70 = load double, double* %relative_tolerance.addr, align 8, !dbg !396, !tbaa !244
%call47 = call i32 @CompareNumbers(i8* %65, i8* %66, i8* %67, i8* %68, double %69, double %70), !dbg !397
%tobool48 = icmp ne i32 %call47, 0, !dbg !397
br i1 %tobool48, label %if.then49, label %if.end50, !dbg !398
if.then49: ; preds = %if.end46
%71 = load i8*, i8** %data_a, align 8, !dbg !399, !tbaa !106
call void @free(i8* %71) #9, !dbg !401
%72 = load i8*, i8** %data_b, align 8, !dbg !402, !tbaa !106
call void @free(i8* %72) #9, !dbg !403
store i32 1, i32* %retval, align 4, !dbg !404
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !404
if.end50: ; preds = %if.end46
%73 = load i8*, i8** %F1NumEnd, align 8, !dbg !405, !tbaa !106
store i8* %73, i8** %F1P, align 8, !dbg !406, !tbaa !106
%74 = load i8*, i8** %F2NumEnd, align 8, !dbg !407, !tbaa !106
store i8* %74, i8** %F2P, align 8, !dbg !408, !tbaa !106
store i32 0, i32* %cleanup.dest.slot, align 4, !dbg !338
br label %cleanup, !dbg !338
cleanup: ; preds = %if.end50, %if.then49, %if.end43, %if.then42
%75 = bitcast i8** %F2NumEnd to i8*, !dbg !338
call void @llvm.lifetime.end.p0i8(i64 8, i8* %75) #9, !dbg !338
%76 = bitcast i8** %F1NumEnd to i8*, !dbg !338
call void @llvm.lifetime.end.p0i8(i64 8, i8* %76) #9, !dbg !338
br label %cleanup52
cleanup52: ; preds = %cleanup, %if.then27
%77 = bitcast i8** %F2NumStart to i8*, !dbg !338
call void @llvm.lifetime.end.p0i8(i64 8, i8* %77) #9, !dbg !338
%78 = bitcast i8** %F1NumStart to i8*, !dbg !338
call void @llvm.lifetime.end.p0i8(i64 8, i8* %78) #9, !dbg !338
%cleanup.dest = load i32, i32* %cleanup.dest.slot, align 4
switch i32 %cleanup.dest, label %cleanup75 [
i32 0, label %cleanup.cont
i32 2, label %while.cond
i32 3, label %while.end
]
cleanup.cont: ; preds = %cleanup52
br label %while.cond, !dbg !301, !llvm.loop !337
while.end: ; preds = %cleanup52, %if.end11
%79 = bitcast i32* %F1AtEnd to i8*, !dbg !409
call void @llvm.lifetime.start.p0i8(i64 4, i8* %79) #9, !dbg !409
call void @llvm.dbg.declare(metadata i32* %F1AtEnd, metadata !240, metadata !DIExpression()), !dbg !410
%80 = load i8*, i8** %F1P, align 8, !dbg !411, !tbaa !106
%81 = load i8*, i8** %File1End, align 8, !dbg !412, !tbaa !106
%cmp54 = icmp uge i8* %80, %81, !dbg !413
%conv55 = zext i1 %cmp54 to i32, !dbg !413
store i32 %conv55, i32* %F1AtEnd, align 4, !dbg !410, !tbaa !248
%82 = bitcast i32* %F2AtEnd to i8*, !dbg !414
call void @llvm.lifetime.start.p0i8(i64 4, i8* %82) #9, !dbg !414
call void @llvm.dbg.declare(metadata i32* %F2AtEnd, metadata !241, metadata !DIExpression()), !dbg !415
%83 = load i8*, i8** %F2P, align 8, !dbg !416, !tbaa !106
%84 = load i8*, i8** %File2End, align 8, !dbg !417, !tbaa !106
%cmp56 = icmp uge i8* %83, %84, !dbg !418
%conv57 = zext i1 %cmp56 to i32, !dbg !418
store i32 %conv57, i32* %F2AtEnd, align 4, !dbg !415, !tbaa !248
%85 = load i32, i32* %F1AtEnd, align 4, !dbg !419, !tbaa !248
%tobool58 = icmp ne i32 %85, 0, !dbg !419
br i1 %tobool58, label %if.end66, label %land.lhs.true59, !dbg !421
land.lhs.true59: ; preds = %while.end
%86 = load i32, i32* %F2AtEnd, align 4, !dbg !422, !tbaa !248
%tobool60 = icmp ne i32 %86, 0, !dbg !422
br i1 %tobool60, label %if.end66, label %if.then61, !dbg !423
if.then61: ; preds = %land.lhs.true59
%87 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !424, !tbaa !106
%88 = load i8*, i8** @g_program, align 8, !dbg !426, !tbaa !106
%89 = load i8*, i8** %F1P, align 8, !dbg !427, !tbaa !106
%arrayidx = getelementptr inbounds i8, i8* %89, i64 0, !dbg !427
%90 = load i8, i8* %arrayidx, align 1, !dbg !427, !tbaa !182
%conv62 = sext i8 %90 to i32, !dbg !427
%91 = load i8*, i8** %F2P, align 8, !dbg !428, !tbaa !106
%arrayidx63 = getelementptr inbounds i8, i8* %91, i64 0, !dbg !428
%92 = load i8, i8* %arrayidx63, align 1, !dbg !428, !tbaa !182
%conv64 = sext i8 %92 to i32, !dbg !428
%call65 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %87, i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.5, i64 0, i64 0), i8* %88, i32 %conv62, i32 %conv64), !dbg !429
%93 = load i8*, i8** %data_a, align 8, !dbg !430, !tbaa !106
call void @free(i8* %93) #9, !dbg !431
%94 = load i8*, i8** %data_b, align 8, !dbg !432, !tbaa !106
call void @free(i8* %94) #9, !dbg !433
store i32 1, i32* %retval, align 4, !dbg !434
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup73, !dbg !434
if.end66: ; preds = %land.lhs.true59, %while.end
%95 = load i32, i32* %F1AtEnd, align 4, !dbg !435, !tbaa !248
%tobool67 = icmp ne i32 %95, 0, !dbg !435
br i1 %tobool67, label %lor.lhs.false68, label %if.then70, !dbg !437
lor.lhs.false68: ; preds = %if.end66
%96 = load i32, i32* %F2AtEnd, align 4, !dbg !438, !tbaa !248
%tobool69 = icmp ne i32 %96, 0, !dbg !438
br i1 %tobool69, label %if.end72, label %if.then70, !dbg !439
if.then70: ; preds = %lor.lhs.false68, %if.end66
%97 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !440, !tbaa !106
%98 = load i8*, i8** @g_program, align 8, !dbg !442, !tbaa !106
%call71 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %97, i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.6, i64 0, i64 0), i8* %98), !dbg !443
%99 = load i8*, i8** %data_a, align 8, !dbg !444, !tbaa !106
call void @free(i8* %99) #9, !dbg !445
%100 = load i8*, i8** %data_b, align 8, !dbg !446, !tbaa !106
call void @free(i8* %100) #9, !dbg !447
store i32 1, i32* %retval, align 4, !dbg !448
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup73, !dbg !448
if.end72: ; preds = %lor.lhs.false68
%101 = load i8*, i8** %data_a, align 8, !dbg !449, !tbaa !106
call void @free(i8* %101) #9, !dbg !450
%102 = load i8*, i8** %data_b, align 8, !dbg !451, !tbaa !106
call void @free(i8* %102) #9, !dbg !452
store i32 0, i32* %retval, align 4, !dbg !453
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup73, !dbg !453
cleanup73: ; preds = %if.end72, %if.then70, %if.then61
%103 = bitcast i32* %F2AtEnd to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 4, i8* %103) #9, !dbg !454
%104 = bitcast i32* %F1AtEnd to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 4, i8* %104) #9, !dbg !454
br label %cleanup75
cleanup75: ; preds = %cleanup73, %cleanup52
%105 = bitcast i8** %F2P to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %105) #9, !dbg !454
%106 = bitcast i8** %F1P to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %106) #9, !dbg !454
%107 = bitcast i8** %File2End to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %107) #9, !dbg !454
%108 = bitcast i8** %File1End to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %108) #9, !dbg !454
%109 = bitcast i8** %File2Start to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %109) #9, !dbg !454
%110 = bitcast i8** %File1Start to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %110) #9, !dbg !454
br label %cleanup81
cleanup81: ; preds = %cleanup75, %if.then
%111 = bitcast i8** %data_b to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %111) #9, !dbg !454
%112 = bitcast i8** %data_a to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %112) #9, !dbg !454
%113 = bitcast i64* %B_size to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %113) #9, !dbg !454
%114 = bitcast i64* %A_size to i8*, !dbg !454
call void @llvm.lifetime.end.p0i8(i64 8, i8* %114) #9, !dbg !454
%115 = load i32, i32* %retval, align 4, !dbg !454
ret i32 %115, !dbg !454
}
; Function Attrs: nounwind readonly willreturn
declare dso_local i32 @memcmp(i8*, i8*, i64) #6
; Function Attrs: nounwind
declare dso_local void @free(i8*) #5
; Function Attrs: nounwind uwtable
define internal i32 @skip_whitespace(i8** %FP, i8* %FEnd) #0 !dbg !455 {
entry:
%FP.addr = alloca i8**, align 8
%FEnd.addr = alloca i8*, align 8
%skipped_some = alloca i32, align 4
store i8** %FP, i8*** %FP.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8*** %FP.addr, metadata !460, metadata !DIExpression()), !dbg !463
store i8* %FEnd, i8** %FEnd.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %FEnd.addr, metadata !461, metadata !DIExpression()), !dbg !464
%0 = bitcast i32* %skipped_some to i8*, !dbg !465
call void @llvm.lifetime.start.p0i8(i64 4, i8* %0) #9, !dbg !465
call void @llvm.dbg.declare(metadata i32* %skipped_some, metadata !462, metadata !DIExpression()), !dbg !466
store i32 0, i32* %skipped_some, align 4, !dbg !466, !tbaa !248
br label %while.cond, !dbg !467
while.cond: ; preds = %while.body, %entry
%1 = load i8**, i8*** %FP.addr, align 8, !dbg !468, !tbaa !106
%2 = load i8*, i8** %1, align 8, !dbg !469, !tbaa !106
%3 = load i8*, i8** %FEnd.addr, align 8, !dbg !470, !tbaa !106
%cmp = icmp ult i8* %2, %3, !dbg !471
br i1 %cmp, label %land.rhs, label %land.end, !dbg !472
land.rhs: ; preds = %while.cond
%call = call i16** @__ctype_b_loc() #12, !dbg !473
%4 = load i16*, i16** %call, align 8, !dbg !473, !tbaa !106
%5 = load i8**, i8*** %FP.addr, align 8, !dbg !473, !tbaa !106
%6 = load i8*, i8** %5, align 8, !dbg !473, !tbaa !106
%7 = load i8, i8* %6, align 1, !dbg !473, !tbaa !182
%conv = zext i8 %7 to i32, !dbg !473
%idxprom = sext i32 %conv to i64, !dbg !473
%arrayidx = getelementptr inbounds i16, i16* %4, i64 %idxprom, !dbg !473
%8 = load i16, i16* %arrayidx, align 2, !dbg !473, !tbaa !474
%conv1 = zext i16 %8 to i32, !dbg !473
%and = and i32 %conv1, 8192, !dbg !473
%tobool = icmp ne i32 %and, 0, !dbg !472
br label %land.end
land.end: ; preds = %land.rhs, %while.cond
%9 = phi i1 [ false, %while.cond ], [ %tobool, %land.rhs ], !dbg !476
br i1 %9, label %while.body, label %while.end, !dbg !467
while.body: ; preds = %land.end
store i32 1, i32* %skipped_some, align 4, !dbg !477, !tbaa !248
%10 = load i8**, i8*** %FP.addr, align 8, !dbg !479, !tbaa !106
%11 = load i8*, i8** %10, align 8, !dbg !480, !tbaa !106
%incdec.ptr = getelementptr inbounds i8, i8* %11, i32 1, !dbg !480
store i8* %incdec.ptr, i8** %10, align 8, !dbg !480, !tbaa !106
br label %while.cond, !dbg !467, !llvm.loop !481
while.end: ; preds = %land.end
%12 = load i32, i32* %skipped_some, align 4, !dbg !484, !tbaa !248
%13 = bitcast i32* %skipped_some to i8*, !dbg !485
call void @llvm.lifetime.end.p0i8(i64 4, i8* %13) #9, !dbg !485
ret i32 %12, !dbg !486
}
; Function Attrs: nounwind uwtable
define internal i32 @isPossibleStartOfNumber(i8 signext %C) #0 !dbg !487 {
entry:
%C.addr = alloca i8, align 1
store i8 %C, i8* %C.addr, align 1, !tbaa !182
call void @llvm.dbg.declare(metadata i8* %C.addr, metadata !491, metadata !DIExpression()), !dbg !492
%0 = load i8, i8* %C.addr, align 1, !dbg !493, !tbaa !182
%call = call i32 @isDigitChar(i8 signext %0), !dbg !494
%tobool = icmp ne i32 %call, 0, !dbg !494
br i1 %tobool, label %lor.end, label %lor.lhs.false, !dbg !495
lor.lhs.false: ; preds = %entry
%1 = load i8, i8* %C.addr, align 1, !dbg !496, !tbaa !182
%call1 = call i32 @isSignedChar(i8 signext %1), !dbg !497
%tobool2 = icmp ne i32 %call1, 0, !dbg !497
br i1 %tobool2, label %lor.end, label %lor.rhs, !dbg !498
lor.rhs: ; preds = %lor.lhs.false
%2 = load i8, i8* %C.addr, align 1, !dbg !499, !tbaa !182
%conv = sext i8 %2 to i32, !dbg !499
%cmp = icmp eq i32 %conv, 46, !dbg !500
br label %lor.end, !dbg !498
lor.end: ; preds = %lor.rhs, %lor.lhs.false, %entry
%3 = phi i1 [ true, %lor.lhs.false ], [ true, %entry ], [ %cmp, %lor.rhs ]
%lor.ext = zext i1 %3 to i32, !dbg !498
ret i32 %lor.ext, !dbg !501
}
; Function Attrs: nounwind uwtable
define internal i8* @AdvanceNumber(i8* %StartPos, i8* %End) #0 !dbg !502 {
entry:
%retval = alloca i8*, align 8
%StartPos.addr = alloca i8*, align 8
%End.addr = alloca i8*, align 8
%Pos = alloca i8*, align 8
%EndOfNumber = alloca i8*, align 8
%HasPostDecimalDigit = alloca i32, align 4
%cleanup.dest.slot = alloca i32, align 4
store i8* %StartPos, i8** %StartPos.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %StartPos.addr, metadata !506, metadata !DIExpression()), !dbg !513
store i8* %End, i8** %End.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %End.addr, metadata !507, metadata !DIExpression()), !dbg !514
%0 = bitcast i8** %Pos to i8*, !dbg !515
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #9, !dbg !515
call void @llvm.dbg.declare(metadata i8** %Pos, metadata !508, metadata !DIExpression()), !dbg !516
%1 = load i8*, i8** %StartPos.addr, align 8, !dbg !517, !tbaa !106
store i8* %1, i8** %Pos, align 8, !dbg !516, !tbaa !106
%2 = bitcast i8** %EndOfNumber to i8*, !dbg !518
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) #9, !dbg !518
call void @llvm.dbg.declare(metadata i8** %EndOfNumber, metadata !509, metadata !DIExpression()), !dbg !519
store i8* null, i8** %EndOfNumber, align 8, !dbg !519, !tbaa !106
%3 = load i8*, i8** %Pos, align 8, !dbg !520, !tbaa !106
%4 = load i8*, i8** %End.addr, align 8, !dbg !522, !tbaa !106
%cmp = icmp ult i8* %3, %4, !dbg !523
br i1 %cmp, label %land.lhs.true, label %if.end, !dbg !524
land.lhs.true: ; preds = %entry
%5 = load i8*, i8** %Pos, align 8, !dbg !525, !tbaa !106
%6 = load i8, i8* %5, align 1, !dbg !526, !tbaa !182
%call = call i32 @isSignedChar(i8 signext %6), !dbg !527
%tobool = icmp ne i32 %call, 0, !dbg !527
br i1 %tobool, label %if.then, label %if.end, !dbg !528
if.then: ; preds = %land.lhs.true
%7 = load i8*, i8** %Pos, align 8, !dbg !529, !tbaa !106
%incdec.ptr = getelementptr inbounds i8, i8* %7, i32 1, !dbg !529
store i8* %incdec.ptr, i8** %Pos, align 8, !dbg !529, !tbaa !106
br label %if.end, !dbg !529
if.end: ; preds = %if.then, %land.lhs.true, %entry
br label %while.cond, !dbg !530
while.cond: ; preds = %while.body, %if.end
%8 = load i8*, i8** %Pos, align 8, !dbg !531, !tbaa !106
%9 = load i8*, i8** %End.addr, align 8, !dbg !532, !tbaa !106
%cmp1 = icmp ult i8* %8, %9, !dbg !533
br i1 %cmp1, label %land.rhs, label %land.end, !dbg !534
land.rhs: ; preds = %while.cond
%10 = load i8*, i8** %Pos, align 8, !dbg !535, !tbaa !106
%11 = load i8, i8* %10, align 1, !dbg !536, !tbaa !182
%call2 = call i32 @isDigitChar(i8 signext %11), !dbg !537
%tobool3 = icmp ne i32 %call2, 0, !dbg !534
br label %land.end
land.end: ; preds = %land.rhs, %while.cond
%12 = phi i1 [ false, %while.cond ], [ %tobool3, %land.rhs ], !dbg !538
br i1 %12, label %while.body, label %while.end, !dbg !530
while.body: ; preds = %land.end
%13 = load i8*, i8** %Pos, align 8, !dbg !539, !tbaa !106
%incdec.ptr4 = getelementptr inbounds i8, i8* %13, i32 1, !dbg !539
store i8* %incdec.ptr4, i8** %Pos, align 8, !dbg !539, !tbaa !106
%14 = load i8*, i8** %Pos, align 8, !dbg !541, !tbaa !106
store i8* %14, i8** %EndOfNumber, align 8, !dbg !542, !tbaa !106
br label %while.cond, !dbg !530, !llvm.loop !543
while.end: ; preds = %land.end
%15 = load i8*, i8** %Pos, align 8, !dbg !545, !tbaa !106
%16 = load i8*, i8** %End.addr, align 8, !dbg !546, !tbaa !106
%cmp5 = icmp ult i8* %15, %16, !dbg !547
br i1 %cmp5, label %land.lhs.true6, label %if.end24, !dbg !548
land.lhs.true6: ; preds = %while.end
%17 = load i8*, i8** %Pos, align 8, !dbg !549, !tbaa !106
%18 = load i8, i8* %17, align 1, !dbg !550, !tbaa !182
%conv = sext i8 %18 to i32, !dbg !550
%cmp7 = icmp eq i32 %conv, 46, !dbg !551
br i1 %cmp7, label %if.then9, label %if.end24, !dbg !552
if.then9: ; preds = %land.lhs.true6
%19 = load i8*, i8** %Pos, align 8, !dbg !553, !tbaa !106
%incdec.ptr10 = getelementptr inbounds i8, i8* %19, i32 1, !dbg !553
store i8* %incdec.ptr10, i8** %Pos, align 8, !dbg !553, !tbaa !106
%20 = bitcast i32* %HasPostDecimalDigit to i8*, !dbg !554
call void @llvm.lifetime.start.p0i8(i64 4, i8* %20) #9, !dbg !554
call void @llvm.dbg.declare(metadata i32* %HasPostDecimalDigit, metadata !510, metadata !DIExpression()), !dbg !555
store i32 0, i32* %HasPostDecimalDigit, align 4, !dbg !555, !tbaa !248
br label %while.cond11, !dbg !556
while.cond11: ; preds = %while.body18, %if.then9
%21 = load i8*, i8** %Pos, align 8, !dbg !557, !tbaa !106
%22 = load i8*, i8** %End.addr, align 8, !dbg !558, !tbaa !106
%cmp12 = icmp ult i8* %21, %22, !dbg !559
br i1 %cmp12, label %land.rhs14, label %land.end17, !dbg !560
land.rhs14: ; preds = %while.cond11
%23 = load i8*, i8** %Pos, align 8, !dbg !561, !tbaa !106
%24 = load i8, i8* %23, align 1, !dbg !562, !tbaa !182
%call15 = call i32 @isDigitChar(i8 signext %24), !dbg !563
%tobool16 = icmp ne i32 %call15, 0, !dbg !560
br label %land.end17
land.end17: ; preds = %land.rhs14, %while.cond11
%25 = phi i1 [ false, %while.cond11 ], [ %tobool16, %land.rhs14 ], !dbg !564
br i1 %25, label %while.body18, label %while.end20, !dbg !556
while.body18: ; preds = %land.end17
store i32 1, i32* %HasPostDecimalDigit, align 4, !dbg !565, !tbaa !248
%26 = load i8*, i8** %Pos, align 8, !dbg !567, !tbaa !106
%incdec.ptr19 = getelementptr inbounds i8, i8* %26, i32 1, !dbg !567
store i8* %incdec.ptr19, i8** %Pos, align 8, !dbg !567, !tbaa !106
%27 = load i8*, i8** %Pos, align 8, !dbg !568, !tbaa !106
store i8* %27, i8** %EndOfNumber, align 8, !dbg !569, !tbaa !106
br label %while.cond11, !dbg !556, !llvm.loop !570
while.end20: ; preds = %land.end17
%28 = load i32, i32* %HasPostDecimalDigit, align 4, !dbg !572, !tbaa !248
%tobool21 = icmp ne i32 %28, 0, !dbg !572
br i1 %tobool21, label %if.end23, label %if.then22, !dbg !574
if.then22: ; preds = %while.end20
%29 = load i8*, i8** %EndOfNumber, align 8, !dbg !575, !tbaa !106
store i8* %29, i8** %retval, align 8, !dbg !576
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !576
if.end23: ; preds = %while.end20
store i32 0, i32* %cleanup.dest.slot, align 4, !dbg !577
br label %cleanup, !dbg !577
cleanup: ; preds = %if.end23, %if.then22
%30 = bitcast i32* %HasPostDecimalDigit to i8*, !dbg !577
call void @llvm.lifetime.end.p0i8(i64 4, i8* %30) #9, !dbg !577
%cleanup.dest = load i32, i32* %cleanup.dest.slot, align 4
switch i32 %cleanup.dest, label %cleanup54 [
i32 0, label %cleanup.cont
]
cleanup.cont: ; preds = %cleanup
br label %if.end24, !dbg !578
if.end24: ; preds = %cleanup.cont, %land.lhs.true6, %while.end
%31 = load i8*, i8** %EndOfNumber, align 8, !dbg !579, !tbaa !106
%tobool25 = icmp ne i8* %31, null, !dbg !579
br i1 %tobool25, label %if.end27, label %if.then26, !dbg !581
if.then26: ; preds = %if.end24
%32 = load i8*, i8** %EndOfNumber, align 8, !dbg !582, !tbaa !106
store i8* %32, i8** %retval, align 8, !dbg !583
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup54, !dbg !583
if.end27: ; preds = %if.end24
%33 = load i8*, i8** %Pos, align 8, !dbg !584, !tbaa !106
%34 = load i8*, i8** %End.addr, align 8, !dbg !586, !tbaa !106
%cmp28 = icmp ult i8* %33, %34, !dbg !587
br i1 %cmp28, label %land.lhs.true30, label %if.end53, !dbg !588
land.lhs.true30: ; preds = %if.end27
%35 = load i8*, i8** %Pos, align 8, !dbg !589, !tbaa !106
%36 = load i8, i8* %35, align 1, !dbg !590, !tbaa !182
%call31 = call i32 @isExponentChar(i8 signext %36), !dbg !591
%tobool32 = icmp ne i32 %call31, 0, !dbg !591
br i1 %tobool32, label %if.then33, label %if.end53, !dbg !592
if.then33: ; preds = %land.lhs.true30
%37 = load i8*, i8** %Pos, align 8, !dbg !593, !tbaa !106
%incdec.ptr34 = getelementptr inbounds i8, i8* %37, i32 1, !dbg !593
store i8* %incdec.ptr34, i8** %Pos, align 8, !dbg !593, !tbaa !106
%38 = load i8*, i8** %Pos, align 8, !dbg !595, !tbaa !106
%39 = load i8*, i8** %End.addr, align 8, !dbg !597, !tbaa !106
%cmp35 = icmp ult i8* %38, %39, !dbg !598
br i1 %cmp35, label %land.lhs.true37, label %if.end42, !dbg !599
land.lhs.true37: ; preds = %if.then33
%40 = load i8*, i8** %Pos, align 8, !dbg !600, !tbaa !106
%41 = load i8, i8* %40, align 1, !dbg !601, !tbaa !182
%call38 = call i32 @isSignedChar(i8 signext %41), !dbg !602
%tobool39 = icmp ne i32 %call38, 0, !dbg !602
br i1 %tobool39, label %if.then40, label %if.end42, !dbg !603
if.then40: ; preds = %land.lhs.true37
%42 = load i8*, i8** %Pos, align 8, !dbg !604, !tbaa !106
%incdec.ptr41 = getelementptr inbounds i8, i8* %42, i32 1, !dbg !604
store i8* %incdec.ptr41, i8** %Pos, align 8, !dbg !604, !tbaa !106
br label %if.end42, !dbg !604
if.end42: ; preds = %if.then40, %land.lhs.true37, %if.then33
br label %while.cond43, !dbg !605
while.cond43: ; preds = %while.body50, %if.end42
%43 = load i8*, i8** %Pos, align 8, !dbg !606, !tbaa !106
%44 = load i8*, i8** %End.addr, align 8, !dbg !607, !tbaa !106
%cmp44 = icmp ult i8* %43, %44, !dbg !608
br i1 %cmp44, label %land.rhs46, label %land.end49, !dbg !609
land.rhs46: ; preds = %while.cond43
%45 = load i8*, i8** %Pos, align 8, !dbg !610, !tbaa !106
%46 = load i8, i8* %45, align 1, !dbg !611, !tbaa !182
%call47 = call i32 @isDigitChar(i8 signext %46), !dbg !612
%tobool48 = icmp ne i32 %call47, 0, !dbg !609
br label %land.end49
land.end49: ; preds = %land.rhs46, %while.cond43
%47 = phi i1 [ false, %while.cond43 ], [ %tobool48, %land.rhs46 ], !dbg !613
br i1 %47, label %while.body50, label %while.end52, !dbg !605
while.body50: ; preds = %land.end49
%48 = load i8*, i8** %Pos, align 8, !dbg !614, !tbaa !106
%incdec.ptr51 = getelementptr inbounds i8, i8* %48, i32 1, !dbg !614
store i8* %incdec.ptr51, i8** %Pos, align 8, !dbg !614, !tbaa !106
%49 = load i8*, i8** %Pos, align 8, !dbg !616, !tbaa !106
store i8* %49, i8** %EndOfNumber, align 8, !dbg !617, !tbaa !106
br label %while.cond43, !dbg !605, !llvm.loop !618
while.end52: ; preds = %land.end49
br label %if.end53, !dbg !620
if.end53: ; preds = %while.end52, %land.lhs.true30, %if.end27
%50 = load i8*, i8** %EndOfNumber, align 8, !dbg !621, !tbaa !106
store i8* %50, i8** %retval, align 8, !dbg !622
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup54, !dbg !622
cleanup54: ; preds = %if.end53, %if.then26, %cleanup
%51 = bitcast i8** %EndOfNumber to i8*, !dbg !623
call void @llvm.lifetime.end.p0i8(i64 8, i8* %51) #9, !dbg !623
%52 = bitcast i8** %Pos to i8*, !dbg !623
call void @llvm.lifetime.end.p0i8(i64 8, i8* %52) #9, !dbg !623
%53 = load i8*, i8** %retval, align 8, !dbg !623
ret i8* %53, !dbg !623
}
; Function Attrs: nounwind uwtable
define internal i32 @CompareNumbers(i8* %F1P, i8* %F2P, i8* %F1End, i8* %F2End, double %AbsTolerance, double %RelTolerance) #0 !dbg !624 {
entry:
%retval = alloca i32, align 4
%F1P.addr = alloca i8*, align 8
%F2P.addr = alloca i8*, align 8
%F1End.addr = alloca i8*, align 8
%F2End.addr = alloca i8*, align 8
%AbsTolerance.addr = alloca double, align 8
%RelTolerance.addr = alloca double, align 8
%F1NumEnd = alloca i8*, align 8
%F2NumEnd = alloca i8*, align 8
%F1Len = alloca i64, align 8
%F2Len = alloca i64, align 8
%V1 = alloca double, align 8
%V2 = alloca double, align 8
%cleanup.dest.slot = alloca i32, align 4
%StrTmp = alloca i8*, align 8
%StrTmp34 = alloca i8*, align 8
%Diff = alloca double, align 8
store i8* %F1P, i8** %F1P.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %F1P.addr, metadata !628, metadata !DIExpression()), !dbg !651
store i8* %F2P, i8** %F2P.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %F2P.addr, metadata !629, metadata !DIExpression()), !dbg !652
store i8* %F1End, i8** %F1End.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %F1End.addr, metadata !630, metadata !DIExpression()), !dbg !653
store i8* %F2End, i8** %F2End.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8** %F2End.addr, metadata !631, metadata !DIExpression()), !dbg !654
store double %AbsTolerance, double* %AbsTolerance.addr, align 8, !tbaa !244
call void @llvm.dbg.declare(metadata double* %AbsTolerance.addr, metadata !632, metadata !DIExpression()), !dbg !655
store double %RelTolerance, double* %RelTolerance.addr, align 8, !tbaa !244
call void @llvm.dbg.declare(metadata double* %RelTolerance.addr, metadata !633, metadata !DIExpression()), !dbg !656
%0 = bitcast i8** %F1NumEnd to i8*, !dbg !657
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #9, !dbg !657
call void @llvm.dbg.declare(metadata i8** %F1NumEnd, metadata !634, metadata !DIExpression()), !dbg !658
%1 = bitcast i8** %F2NumEnd to i8*, !dbg !657
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #9, !dbg !657
call void @llvm.dbg.declare(metadata i8** %F2NumEnd, metadata !635, metadata !DIExpression()), !dbg !659
%2 = bitcast i64* %F1Len to i8*, !dbg !660
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) #9, !dbg !660
call void @llvm.dbg.declare(metadata i64* %F1Len, metadata !636, metadata !DIExpression()), !dbg !661
%3 = load i8*, i8** %F1End.addr, align 8, !dbg !662, !tbaa !106
%4 = load i8*, i8** %F1P.addr, align 8, !dbg !663, !tbaa !106
%sub.ptr.lhs.cast = ptrtoint i8* %3 to i64, !dbg !664
%sub.ptr.rhs.cast = ptrtoint i8* %4 to i64, !dbg !664
%sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast, !dbg !664
store i64 %sub.ptr.sub, i64* %F1Len, align 8, !dbg !661, !tbaa !144
%5 = bitcast i64* %F2Len to i8*, !dbg !665
call void @llvm.lifetime.start.p0i8(i64 8, i8* %5) #9, !dbg !665
call void @llvm.dbg.declare(metadata i64* %F2Len, metadata !639, metadata !DIExpression()), !dbg !666
%6 = load i8*, i8** %F2End.addr, align 8, !dbg !667, !tbaa !106
%7 = load i8*, i8** %F2P.addr, align 8, !dbg !668, !tbaa !106
%sub.ptr.lhs.cast1 = ptrtoint i8* %6 to i64, !dbg !669
%sub.ptr.rhs.cast2 = ptrtoint i8* %7 to i64, !dbg !669
%sub.ptr.sub3 = sub i64 %sub.ptr.lhs.cast1, %sub.ptr.rhs.cast2, !dbg !669
store i64 %sub.ptr.sub3, i64* %F2Len, align 8, !dbg !666, !tbaa !144
%8 = bitcast double* %V1 to i8*, !dbg !670
call void @llvm.lifetime.start.p0i8(i64 8, i8* %8) #9, !dbg !670
call void @llvm.dbg.declare(metadata double* %V1, metadata !640, metadata !DIExpression()), !dbg !671
store double 0.000000e+00, double* %V1, align 8, !dbg !671, !tbaa !244
%9 = bitcast double* %V2 to i8*, !dbg !670
call void @llvm.lifetime.start.p0i8(i64 8, i8* %9) #9, !dbg !670
call void @llvm.dbg.declare(metadata double* %V2, metadata !641, metadata !DIExpression()), !dbg !672
store double 0.000000e+00, double* %V2, align 8, !dbg !672, !tbaa !244
%10 = load i64, i64* %F1Len, align 8, !dbg !673, !tbaa !144
%11 = load i64, i64* %F2Len, align 8, !dbg !675, !tbaa !144
%cmp = icmp eq i64 %10, %11, !dbg !676
br i1 %cmp, label %land.lhs.true, label %if.end, !dbg !677
land.lhs.true: ; preds = %entry
%12 = load i8*, i8** %F1P.addr, align 8, !dbg !678, !tbaa !106
%13 = load i8*, i8** %F2P.addr, align 8, !dbg !679, !tbaa !106
%14 = load i64, i64* %F1Len, align 8, !dbg !680, !tbaa !144
%call = call i32 @memcmp(i8* %12, i8* %13, i64 %14) #11, !dbg !681
%cmp4 = icmp eq i32 %call, 0, !dbg !682
br i1 %cmp4, label %if.then, label %if.end, !dbg !683
if.then: ; preds = %land.lhs.true
store i32 0, i32* %retval, align 4, !dbg !684
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup93, !dbg !684
if.end: ; preds = %land.lhs.true, %entry
%15 = load i8*, i8** %F1P.addr, align 8, !dbg !685, !tbaa !106
%call5 = call double @strtod(i8* %15, i8** %F1NumEnd) #9, !dbg !686
store double %call5, double* %V1, align 8, !dbg !687, !tbaa !244
%16 = load i8*, i8** %F2P.addr, align 8, !dbg !688, !tbaa !106
%call6 = call double @strtod(i8* %16, i8** %F2NumEnd) #9, !dbg !689
store double %call6, double* %V2, align 8, !dbg !690, !tbaa !244
%17 = load i8*, i8** %F1NumEnd, align 8, !dbg !691, !tbaa !106
%18 = load i8, i8* %17, align 1, !dbg !692, !tbaa !182
%conv = sext i8 %18 to i32, !dbg !692
%cmp7 = icmp eq i32 %conv, 68, !dbg !693
br i1 %cmp7, label %if.then12, label %lor.lhs.false, !dbg !694
lor.lhs.false: ; preds = %if.end
%19 = load i8*, i8** %F1NumEnd, align 8, !dbg !695, !tbaa !106
%20 = load i8, i8* %19, align 1, !dbg !696, !tbaa !182
%conv9 = sext i8 %20 to i32, !dbg !696
%cmp10 = icmp eq i32 %conv9, 100, !dbg !697
br i1 %cmp10, label %if.then12, label %if.end25, !dbg !698
if.then12: ; preds = %lor.lhs.false, %if.end
%21 = bitcast i8** %StrTmp to i8*, !dbg !699
call void @llvm.lifetime.start.p0i8(i64 8, i8* %21) #9, !dbg !699
call void @llvm.dbg.declare(metadata i8** %StrTmp, metadata !642, metadata !DIExpression()), !dbg !700
%22 = load i64, i64* %F1Len, align 8, !dbg !701, !tbaa !144
%add = add nsw i64 %22, 1, !dbg !702
%call13 = call noalias align 16 i8* @malloc(i64 %add) #9, !dbg !703
store i8* %call13, i8** %StrTmp, align 8, !dbg !700, !tbaa !106
%23 = load i8*, i8** %StrTmp, align 8, !dbg !704, !tbaa !106
%24 = load i8*, i8** %F1P.addr, align 8, !dbg !706, !tbaa !106
%25 = load i64, i64* %F1Len, align 8, !dbg !707, !tbaa !144
%add14 = add nsw i64 %25, 1, !dbg !708
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %23, i8* align 1 %24, i64 %add14, i1 false), !dbg !709
%26 = load i8*, i8** %StrTmp, align 8, !dbg !710, !tbaa !106
%27 = load i8*, i8** %F1NumEnd, align 8, !dbg !711, !tbaa !106
%28 = load i8*, i8** %F1P.addr, align 8, !dbg !712, !tbaa !106
%sub.ptr.lhs.cast15 = ptrtoint i8* %27 to i64, !dbg !713
%sub.ptr.rhs.cast16 = ptrtoint i8* %28 to i64, !dbg !713
%sub.ptr.sub17 = sub i64 %sub.ptr.lhs.cast15, %sub.ptr.rhs.cast16, !dbg !713
%conv18 = trunc i64 %sub.ptr.sub17 to i32, !dbg !714
%idxprom = zext i32 %conv18 to i64, !dbg !710
%arrayidx = getelementptr inbounds i8, i8* %26, i64 %idxprom, !dbg !710
store i8 101, i8* %arrayidx, align 1, !dbg !715, !tbaa !182
%29 = load i8*, i8** %StrTmp, align 8, !dbg !716, !tbaa !106
%arrayidx19 = getelementptr inbounds i8, i8* %29, i64 0, !dbg !716
%call20 = call double @strtod(i8* %arrayidx19, i8** %F1NumEnd) #9, !dbg !717
store double %call20, double* %V1, align 8, !dbg !718, !tbaa !244
%30 = load i8*, i8** %F1P.addr, align 8, !dbg !719, !tbaa !106
%31 = load i8*, i8** %F1NumEnd, align 8, !dbg !720, !tbaa !106
%32 = load i8*, i8** %StrTmp, align 8, !dbg !721, !tbaa !106
%arrayidx21 = getelementptr inbounds i8, i8* %32, i64 0, !dbg !721
%sub.ptr.lhs.cast22 = ptrtoint i8* %31 to i64, !dbg !722
%sub.ptr.rhs.cast23 = ptrtoint i8* %arrayidx21 to i64, !dbg !722
%sub.ptr.sub24 = sub i64 %sub.ptr.lhs.cast22, %sub.ptr.rhs.cast23, !dbg !722
%add.ptr = getelementptr inbounds i8, i8* %30, i64 %sub.ptr.sub24, !dbg !723
store i8* %add.ptr, i8** %F1NumEnd, align 8, !dbg !724, !tbaa !106
%33 = load i8*, i8** %StrTmp, align 8, !dbg !725, !tbaa !106
call void @free(i8* %33) #9, !dbg !726
%34 = bitcast i8** %StrTmp to i8*, !dbg !727
call void @llvm.lifetime.end.p0i8(i64 8, i8* %34) #9, !dbg !727
br label %if.end25, !dbg !728
if.end25: ; preds = %if.then12, %lor.lhs.false
%35 = load i8*, i8** %F2NumEnd, align 8, !dbg !729, !tbaa !106
%36 = load i8, i8* %35, align 1, !dbg !730, !tbaa !182
%conv26 = sext i8 %36 to i32, !dbg !730
%cmp27 = icmp eq i32 %conv26, 68, !dbg !731
br i1 %cmp27, label %if.then33, label %lor.lhs.false29, !dbg !732
lor.lhs.false29: ; preds = %if.end25
%37 = load i8*, i8** %F2NumEnd, align 8, !dbg !733, !tbaa !106
%38 = load i8, i8* %37, align 1, !dbg !734, !tbaa !182
%conv30 = sext i8 %38 to i32, !dbg !734
%cmp31 = icmp eq i32 %conv30, 100, !dbg !735
br i1 %cmp31, label %if.then33, label %if.end51, !dbg !736
if.then33: ; preds = %lor.lhs.false29, %if.end25
%39 = bitcast i8** %StrTmp34 to i8*, !dbg !737
call void @llvm.lifetime.start.p0i8(i64 8, i8* %39) #9, !dbg !737
call void @llvm.dbg.declare(metadata i8** %StrTmp34, metadata !645, metadata !DIExpression()), !dbg !738
%40 = load i64, i64* %F2Len, align 8, !dbg !739, !tbaa !144
%add35 = add nsw i64 %40, 1, !dbg !740
%call36 = call noalias align 16 i8* @malloc(i64 %add35) #9, !dbg !741
store i8* %call36, i8** %StrTmp34, align 8, !dbg !738, !tbaa !106
%41 = load i8*, i8** %StrTmp34, align 8, !dbg !742, !tbaa !106
%42 = load i8*, i8** %F2P.addr, align 8, !dbg !744, !tbaa !106
%43 = load i64, i64* %F2Len, align 8, !dbg !745, !tbaa !144
%add37 = add nsw i64 %43, 1, !dbg !746
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %41, i8* align 1 %42, i64 %add37, i1 false), !dbg !747
%44 = load i8*, i8** %StrTmp34, align 8, !dbg !748, !tbaa !106
%45 = load i8*, i8** %F2NumEnd, align 8, !dbg !749, !tbaa !106
%46 = load i8*, i8** %F2P.addr, align 8, !dbg !750, !tbaa !106
%sub.ptr.lhs.cast38 = ptrtoint i8* %45 to i64, !dbg !751
%sub.ptr.rhs.cast39 = ptrtoint i8* %46 to i64, !dbg !751
%sub.ptr.sub40 = sub i64 %sub.ptr.lhs.cast38, %sub.ptr.rhs.cast39, !dbg !751
%conv41 = trunc i64 %sub.ptr.sub40 to i32, !dbg !752
%idxprom42 = zext i32 %conv41 to i64, !dbg !748
%arrayidx43 = getelementptr inbounds i8, i8* %44, i64 %idxprom42, !dbg !748
store i8 101, i8* %arrayidx43, align 1, !dbg !753, !tbaa !182
%47 = load i8*, i8** %StrTmp34, align 8, !dbg !754, !tbaa !106
%arrayidx44 = getelementptr inbounds i8, i8* %47, i64 0, !dbg !754
%call45 = call double @strtod(i8* %arrayidx44, i8** %F2NumEnd) #9, !dbg !755
store double %call45, double* %V2, align 8, !dbg !756, !tbaa !244
%48 = load i8*, i8** %F2P.addr, align 8, !dbg !757, !tbaa !106
%49 = load i8*, i8** %F2NumEnd, align 8, !dbg !758, !tbaa !106
%50 = load i8*, i8** %StrTmp34, align 8, !dbg !759, !tbaa !106
%arrayidx46 = getelementptr inbounds i8, i8* %50, i64 0, !dbg !759
%sub.ptr.lhs.cast47 = ptrtoint i8* %49 to i64, !dbg !760
%sub.ptr.rhs.cast48 = ptrtoint i8* %arrayidx46 to i64, !dbg !760
%sub.ptr.sub49 = sub i64 %sub.ptr.lhs.cast47, %sub.ptr.rhs.cast48, !dbg !760
%add.ptr50 = getelementptr inbounds i8, i8* %48, i64 %sub.ptr.sub49, !dbg !761
store i8* %add.ptr50, i8** %F2NumEnd, align 8, !dbg !762, !tbaa !106
%51 = load i8*, i8** %StrTmp34, align 8, !dbg !763, !tbaa !106
call void @free(i8* %51) #9, !dbg !764
%52 = bitcast i8** %StrTmp34 to i8*, !dbg !765
call void @llvm.lifetime.end.p0i8(i64 8, i8* %52) #9, !dbg !765
br label %if.end51, !dbg !766
if.end51: ; preds = %if.then33, %lor.lhs.false29
%53 = load i8*, i8** %F1NumEnd, align 8, !dbg !767, !tbaa !106
%54 = load i8*, i8** %F1P.addr, align 8, !dbg !769, !tbaa !106
%cmp52 = icmp eq i8* %53, %54, !dbg !770
br i1 %cmp52, label %if.then57, label %lor.lhs.false54, !dbg !771
lor.lhs.false54: ; preds = %if.end51
%55 = load i8*, i8** %F2NumEnd, align 8, !dbg !772, !tbaa !106
%56 = load i8*, i8** %F2P.addr, align 8, !dbg !773, !tbaa !106
%cmp55 = icmp eq i8* %55, %56, !dbg !774
br i1 %cmp55, label %if.then57, label %if.end63, !dbg !775
if.then57: ; preds = %lor.lhs.false54, %if.end51
%57 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !776, !tbaa !106
%58 = load i8*, i8** @g_program, align 8, !dbg !778, !tbaa !106
%59 = load i8*, i8** %F1P.addr, align 8, !dbg !779, !tbaa !106
%arrayidx58 = getelementptr inbounds i8, i8* %59, i64 0, !dbg !779
%60 = load i8, i8* %arrayidx58, align 1, !dbg !779, !tbaa !182
%conv59 = sext i8 %60 to i32, !dbg !779
%61 = load i8*, i8** %F2P.addr, align 8, !dbg !780, !tbaa !106
%arrayidx60 = getelementptr inbounds i8, i8* %61, i64 0, !dbg !780
%62 = load i8, i8* %arrayidx60, align 1, !dbg !780, !tbaa !182
%conv61 = sext i8 %62 to i32, !dbg !780
%call62 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %57, i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.5, i64 0, i64 0), i8* %58, i32 %conv59, i32 %conv61), !dbg !781
store i32 1, i32* %retval, align 4, !dbg !782
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup93, !dbg !782
if.end63: ; preds = %lor.lhs.false54
%63 = load double, double* %V1, align 8, !dbg !783, !tbaa !244
%64 = load double, double* %V2, align 8, !dbg !785, !tbaa !244
%cmp64 = fcmp oeq double %63, %64, !dbg !786
br i1 %cmp64, label %if.then66, label %if.end67, !dbg !787
if.then66: ; preds = %if.end63
store i32 0, i32* %retval, align 4, !dbg !788
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup93, !dbg !788
if.end67: ; preds = %if.end63
%65 = load double, double* %AbsTolerance.addr, align 8, !dbg !789, !tbaa !244
%cmp68 = fcmp oeq double %65, 0.000000e+00, !dbg !790
br i1 %cmp68, label %if.then73, label %lor.lhs.false70, !dbg !791
lor.lhs.false70: ; preds = %if.end67
%66 = load double, double* %AbsTolerance.addr, align 8, !dbg !792, !tbaa !244
%67 = load double, double* %V1, align 8, !dbg !793, !tbaa !244
%68 = load double, double* %V2, align 8, !dbg !794, !tbaa !244
%sub = fsub double %67, %68, !dbg !795
%69 = call double @llvm.fabs.f64(double %sub), !dbg !796
%cmp71 = fcmp olt double %66, %69, !dbg !797
br i1 %cmp71, label %if.then73, label %if.end92, !dbg !798
if.then73: ; preds = %lor.lhs.false70, %if.end67
%70 = bitcast double* %Diff to i8*, !dbg !799
call void @llvm.lifetime.start.p0i8(i64 8, i8* %70) #9, !dbg !799
call void @llvm.dbg.declare(metadata double* %Diff, metadata !648, metadata !DIExpression()), !dbg !800
%71 = load double, double* %V2, align 8, !dbg !801, !tbaa !244
%tobool = fcmp une double %71, 0.000000e+00, !dbg !801
br i1 %tobool, label %if.then74, label %if.else, !dbg !803
if.then74: ; preds = %if.then73
%72 = load double, double* %V1, align 8, !dbg !804, !tbaa !244
%73 = load double, double* %V2, align 8, !dbg !805, !tbaa !244
%div = fdiv double %72, %73, !dbg !806
%sub75 = fsub double %div, 1.000000e+00, !dbg !807
%74 = call double @llvm.fabs.f64(double %sub75), !dbg !808
store double %74, double* %Diff, align 8, !dbg !809, !tbaa !244
br label %if.end82, !dbg !810
if.else: ; preds = %if.then73
%75 = load double, double* %V1, align 8, !dbg !811, !tbaa !244
%tobool76 = fcmp une double %75, 0.000000e+00, !dbg !811
br i1 %tobool76, label %if.then77, label %if.else80, !dbg !813
if.then77: ; preds = %if.else
%76 = load double, double* %V2, align 8, !dbg !814, !tbaa !244
%77 = load double, double* %V1, align 8, !dbg !815, !tbaa !244
%div78 = fdiv double %76, %77, !dbg !816
%sub79 = fsub double %div78, 1.000000e+00, !dbg !817
%78 = call double @llvm.fabs.f64(double %sub79), !dbg !818
store double %78, double* %Diff, align 8, !dbg !819, !tbaa !244
br label %if.end81, !dbg !820
if.else80: ; preds = %if.else
store double 0.000000e+00, double* %Diff, align 8, !dbg !821, !tbaa !244
br label %if.end81
if.end81: ; preds = %if.else80, %if.then77
br label %if.end82
if.end82: ; preds = %if.end81, %if.then74
%79 = load double, double* %RelTolerance.addr, align 8, !dbg !822, !tbaa !244
%cmp83 = fcmp oeq double %79, 0.000000e+00, !dbg !824
br i1 %cmp83, label %if.then88, label %lor.lhs.false85, !dbg !825
lor.lhs.false85: ; preds = %if.end82
%80 = load double, double* %Diff, align 8, !dbg !826, !tbaa !244
%81 = load double, double* %RelTolerance.addr, align 8, !dbg !827, !tbaa !244
%cmp86 = fcmp ogt double %80, %81, !dbg !828
br i1 %cmp86, label %if.then88, label %if.end91, !dbg !829
if.then88: ; preds = %lor.lhs.false85, %if.end82
%82 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !830, !tbaa !106
%83 = load i8*, i8** @g_program, align 8, !dbg !832, !tbaa !106
%84 = load double, double* %V1, align 8, !dbg !833, !tbaa !244
%85 = load double, double* %V2, align 8, !dbg !834, !tbaa !244
%86 = load double, double* %V1, align 8, !dbg !835, !tbaa !244
%87 = load double, double* %V2, align 8, !dbg !836, !tbaa !244
%sub89 = fsub double %86, %87, !dbg !837
%88 = call double @llvm.fabs.f64(double %sub89), !dbg !838
%89 = load double, double* %Diff, align 8, !dbg !839, !tbaa !244
%90 = load double, double* %RelTolerance.addr, align 8, !dbg !840, !tbaa !244
%91 = load double, double* %AbsTolerance.addr, align 8, !dbg !841, !tbaa !244
%call90 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %82, i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.16, i64 0, i64 0), i8* %83, double %84, double %85, double %88, double %89, double %90, double %91), !dbg !842
store i32 1, i32* %retval, align 4, !dbg !843
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !843
if.end91: ; preds = %lor.lhs.false85
store i32 0, i32* %cleanup.dest.slot, align 4, !dbg !844
br label %cleanup, !dbg !844
cleanup: ; preds = %if.end91, %if.then88
%92 = bitcast double* %Diff to i8*, !dbg !844
call void @llvm.lifetime.end.p0i8(i64 8, i8* %92) #9, !dbg !844
%cleanup.dest = load i32, i32* %cleanup.dest.slot, align 4
switch i32 %cleanup.dest, label %cleanup93 [
i32 0, label %cleanup.cont
]
cleanup.cont: ; preds = %cleanup
br label %if.end92, !dbg !845
if.end92: ; preds = %cleanup.cont, %lor.lhs.false70
store i32 0, i32* %retval, align 4, !dbg !846
store i32 1, i32* %cleanup.dest.slot, align 4
br label %cleanup93, !dbg !846
cleanup93: ; preds = %if.end92, %cleanup, %if.then66, %if.then57, %if.then
%93 = bitcast double* %V2 to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %93) #9, !dbg !847
%94 = bitcast double* %V1 to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %94) #9, !dbg !847
%95 = bitcast i64* %F2Len to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %95) #9, !dbg !847
%96 = bitcast i64* %F1Len to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %96) #9, !dbg !847
%97 = bitcast i8** %F2NumEnd to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %97) #9, !dbg !847
%98 = bitcast i8** %F1NumEnd to i8*, !dbg !847
call void @llvm.lifetime.end.p0i8(i64 8, i8* %98) #9, !dbg !847
%99 = load i32, i32* %retval, align 4, !dbg !847
ret i32 %99, !dbg !847
}
; Function Attrs: nounwind uwtable
define dso_local void @usage() #0 !dbg !848 {
entry:
%0 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !851, !tbaa !106
%1 = load i8*, i8** @g_program, align 8, !dbg !852, !tbaa !106
%call = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %0, i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.7, i64 0, i64 0), i8* %1), !dbg !853
%2 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !854, !tbaa !106
%call1 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %2, i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.8, i64 0, i64 0)), !dbg !855
%3 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !856, !tbaa !106
%call2 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %3, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0)), !dbg !857
%4 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !858, !tbaa !106
%call3 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %4, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.10, i64 0, i64 0)), !dbg !859
%5 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !860, !tbaa !106
%call4 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %5, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0)), !dbg !861
call void @exit(i32 2) #10, !dbg !862
unreachable, !dbg !862
}
; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 %argc, i8** %argv) #0 !dbg !863 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%relative_tolerance = alloca double, align 8
%absolute_tolerance = alloca double, align 8
%ignore_whitespace = alloca i32, align 4
%i = alloca i32, align 4
%arg = alloca i8*, align 8
%cleanup.dest.slot = alloca i32, align 4
%endp = alloca i8*, align 8
%value = alloca double, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4, !tbaa !248
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !869, metadata !DIExpression()), !dbg !884
store i8** %argv, i8*** %argv.addr, align 8, !tbaa !106
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !870, metadata !DIExpression()), !dbg !885
%0 = bitcast double* %relative_tolerance to i8*, !dbg !886
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #9, !dbg !886
call void @llvm.dbg.declare(metadata double* %relative_tolerance, metadata !871, metadata !DIExpression()), !dbg !887
store double 0.000000e+00, double* %relative_tolerance, align 8, !dbg !887, !tbaa !244
%1 = bitcast double* %absolute_tolerance to i8*, !dbg !888
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #9, !dbg !888
call void @llvm.dbg.declare(metadata double* %absolute_tolerance, metadata !872, metadata !DIExpression()), !dbg !889
store double 0.000000e+00, double* %absolute_tolerance, align 8, !dbg !889, !tbaa !244
%2 = bitcast i32* %ignore_whitespace to i8*, !dbg !890
call void @llvm.lifetime.start.p0i8(i64 4, i8* %2) #9, !dbg !890
call void @llvm.dbg.declare(metadata i32* %ignore_whitespace, metadata !873, metadata !DIExpression()), !dbg !891
store i32 0, i32* %ignore_whitespace, align 4, !dbg !891, !tbaa !248
%3 = bitcast i32* %i to i8*, !dbg !892
call void @llvm.lifetime.start.p0i8(i64 4, i8* %3) #9, !dbg !892
call void @llvm.dbg.declare(metadata i32* %i, metadata !874, metadata !DIExpression()), !dbg !893
%4 = load i8**, i8*** %argv.addr, align 8, !dbg !894, !tbaa !106
%arrayidx = getelementptr inbounds i8*, i8** %4, i64 0, !dbg !894
%5 = load i8*, i8** %arrayidx, align 8, !dbg !894, !tbaa !106
store i8* %5, i8** @g_program, align 8, !dbg !895, !tbaa !106
store i32 1, i32* %i, align 4, !dbg !896, !tbaa !248
br label %for.cond, !dbg !897
for.cond: ; preds = %for.inc, %entry
%6 = load i32, i32* %i, align 4, !dbg !898, !tbaa !248
%7 = load i32, i32* %argc.addr, align 4, !dbg !899, !tbaa !248
%cmp = icmp ne i32 %6, %7, !dbg !900
br i1 %cmp, label %for.body, label %for.end, !dbg !901
for.body: ; preds = %for.cond
%8 = bitcast i8** %arg to i8*, !dbg !902
call void @llvm.lifetime.start.p0i8(i64 8, i8* %8) #9, !dbg !902
call void @llvm.dbg.declare(metadata i8** %arg, metadata !875, metadata !DIExpression()), !dbg !903
%9 = load i8**, i8*** %argv.addr, align 8, !dbg !904, !tbaa !106
%10 = load i32, i32* %i, align 4, !dbg !905, !tbaa !248
%idxprom = sext i32 %10 to i64, !dbg !904
%arrayidx1 = getelementptr inbounds i8*, i8** %9, i64 %idxprom, !dbg !904
%11 = load i8*, i8** %arrayidx1, align 8, !dbg !904, !tbaa !106
store i8* %11, i8** %arg, align 8, !dbg !903, !tbaa !106
%12 = load i8*, i8** %arg, align 8, !dbg !906, !tbaa !106
%arrayidx2 = getelementptr inbounds i8, i8* %12, i64 0, !dbg !906
%13 = load i8, i8* %arrayidx2, align 1, !dbg !906, !tbaa !182
%conv = sext i8 %13 to i32, !dbg !906
%cmp3 = icmp ne i32 %conv, 45, !dbg !908
br i1 %cmp3, label %if.then, label %if.end, !dbg !909
if.then: ; preds = %for.body
store i32 2, i32* %cleanup.dest.slot, align 4
br label %cleanup, !dbg !910
if.end: ; preds = %for.body
%14 = load i8*, i8** %arg, align 8, !dbg !911, !tbaa !106
%call = call i64 @strlen(i8* %14) #11, !dbg !913
%cmp5 = icmp ne i64 %call, 2, !dbg !914
br i1 %cmp5, label %if.then7, label %if.end9, !dbg !915
if.then7: ; preds = %if.end
%15 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !916, !tbaa !106
%16 = load i8*, i8** %arg, align 8, !dbg !918, !tbaa !106
%call8 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %15, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.12, i64 0, i64 0), i8* %16), !dbg !919
call void @usage(), !dbg !920
br label %if.end9, !dbg !921
if.end9: ; preds = %if.then7, %if.end
%17 = load i8*, i8** %arg, align 8, !dbg !922, !tbaa !106
%arrayidx10 = getelementptr inbounds i8, i8* %17, i64 1, !dbg !922
%18 = load i8, i8* %arrayidx10, align 1, !dbg !922, !tbaa !182
%conv11 = sext i8 %18 to i32, !dbg !922
switch i32 %conv11, label %sw.default [
i32 97, label %sw.bb
i32 114, label %sw.bb
i32 105, label %sw.bb37
], !dbg !923
sw.bb: ; preds = %if.end9, %if.end9
%19 = load i32, i32* %i, align 4, !dbg !924, !tbaa !248
%add = add nsw i32 %19, 1, !dbg !925
%20 = load i32, i32* %argc.addr, align 4, !dbg !926, !tbaa !248
%cmp12 = icmp eq i32 %add, %20, !dbg !927
br i1 %cmp12, label %if.then14, label %if.else, !dbg !928
if.then14: ; preds = %sw.bb
%21 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !929, !tbaa !106
%22 = load i8*, i8** %arg, align 8, !dbg !931, !tbaa !106
%call15 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %21, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.13, i64 0, i64 0), i8* %22), !dbg !932
call void @usage(), !dbg !933
br label %if.end36, !dbg !934
if.else: ; preds = %sw.bb
%23 = bitcast i8** %endp to i8*, !dbg !935
call void @llvm.lifetime.start.p0i8(i64 8, i8* %23) #9, !dbg !935
call void @llvm.dbg.declare(metadata i8** %endp, metadata !879, metadata !DIExpression()), !dbg !936
store i8* null, i8** %endp, align 8, !dbg !936, !tbaa !106
%24 = bitcast double* %value to i8*, !dbg !937
call void @llvm.lifetime.start.p0i8(i64 8, i8* %24) #9, !dbg !937
call void @llvm.dbg.declare(metadata double* %value, metadata !883, metadata !DIExpression()), !dbg !938
%25 = load i8**, i8*** %argv.addr, align 8, !dbg !939, !tbaa !106
%26 = load i32, i32* %i, align 4, !dbg !940, !tbaa !248
%inc = add nsw i32 %26, 1, !dbg !940
store i32 %inc, i32* %i, align 4, !dbg !940, !tbaa !248
%idxprom16 = sext i32 %inc to i64, !dbg !939
%arrayidx17 = getelementptr inbounds i8*, i8** %25, i64 %idxprom16, !dbg !939
%27 = load i8*, i8** %arrayidx17, align 8, !dbg !939, !tbaa !106
%call18 = call double @strtod(i8* %27, i8** %endp) #9, !dbg !941
store double %call18, double* %value, align 8, !dbg !938, !tbaa !244
%28 = load i8*, i8** %endp, align 8, !dbg !942, !tbaa !106
%cmp19 = icmp eq i8* %28, null, !dbg !944
br i1 %cmp19, label %if.then24, label %lor.lhs.false, !dbg !945
lor.lhs.false: ; preds = %if.else
%29 = load i8*, i8** %endp, align 8, !dbg !946, !tbaa !106
%30 = load i8, i8* %29, align 1, !dbg !947, !tbaa !182
%conv21 = sext i8 %30 to i32, !dbg !947
%cmp22 = icmp ne i32 %conv21, 0, !dbg !948
br i1 %cmp22, label %if.then24, label %if.end28, !dbg !949
if.then24: ; preds = %lor.lhs.false, %if.else
%31 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !950, !tbaa !106
%32 = load i8*, i8** %arg, align 8, !dbg !952, !tbaa !106
%33 = load i8**, i8*** %argv.addr, align 8, !dbg !953, !tbaa !106
%34 = load i32, i32* %i, align 4, !dbg !954, !tbaa !248
%idxprom25 = sext i32 %34 to i64, !dbg !953
%arrayidx26 = getelementptr inbounds i8*, i8** %33, i64 %idxprom25, !dbg !953
%35 = load i8*, i8** %arrayidx26, align 8, !dbg !953, !tbaa !106
%call27 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %31, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.14, i64 0, i64 0), i8* %32, i8* %35), !dbg !955
call void @usage(), !dbg !956
br label %if.end28, !dbg !957
if.end28: ; preds = %if.then24, %lor.lhs.false
%36 = load i8*, i8** %arg, align 8, !dbg !958, !tbaa !106
%arrayidx29 = getelementptr inbounds i8, i8* %36, i64 1, !dbg !958
%37 = load i8, i8* %arrayidx29, align 1, !dbg !958, !tbaa !182
%conv30 = sext i8 %37 to i32, !dbg !958
%cmp31 = icmp eq i32 %conv30, 97, !dbg !960
br i1 %cmp31, label %if.then33, label %if.else34, !dbg !961
if.then33: ; preds = %if.end28
%38 = load double, double* %value, align 8, !dbg !962, !tbaa !244
store double %38, double* %absolute_tolerance, align 8, !dbg !963, !tbaa !244
br label %if.end35, !dbg !964
if.else34: ; preds = %if.end28
%39 = load double, double* %value, align 8, !dbg !965, !tbaa !244
store double %39, double* %relative_tolerance, align 8, !dbg !966, !tbaa !244
br label %if.end35
if.end35: ; preds = %if.else34, %if.then33
%40 = bitcast double* %value to i8*, !dbg !967
call void @llvm.lifetime.end.p0i8(i64 8, i8* %40) #9, !dbg !967
%41 = bitcast i8** %endp to i8*, !dbg !967
call void @llvm.lifetime.end.p0i8(i64 8, i8* %41) #9, !dbg !967
br label %if.end36
if.end36: ; preds = %if.end35, %if.then14
br label %sw.epilog, !dbg !968
sw.bb37: ; preds = %if.end9
store i32 1, i32* %ignore_whitespace, align 4, !dbg !969, !tbaa !248
br label %sw.epilog, !dbg !970
sw.default: ; preds = %if.end9
%42 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !971, !tbaa !106
%43 = load i8*, i8** %arg, align 8, !dbg !972, !tbaa !106
%call38 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %42, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.12, i64 0, i64 0), i8* %43), !dbg !973
call void @usage(), !dbg !974
br label %sw.epilog, !dbg !975
sw.epilog: ; preds = %sw.default, %sw.bb37, %if.end36
store i32 0, i32* %cleanup.dest.slot, align 4, !dbg !976
br label %cleanup, !dbg !976
cleanup: ; preds = %sw.epilog, %if.then
%44 = bitcast i8** %arg to i8*, !dbg !976
call void @llvm.lifetime.end.p0i8(i64 8, i8* %44) #9, !dbg !976
%cleanup.dest = load i32, i32* %cleanup.dest.slot, align 4
switch i32 %cleanup.dest, label %unreachable [
i32 0, label %cleanup.cont
i32 2, label %for.end
]
cleanup.cont: ; preds = %cleanup
br label %for.inc, !dbg !977
for.inc: ; preds = %cleanup.cont
%45 = load i32, i32* %i, align 4, !dbg !978, !tbaa !248
%inc39 = add nsw i32 %45, 1, !dbg !978
store i32 %inc39, i32* %i, align 4, !dbg !978, !tbaa !248
br label %for.cond, !dbg !979, !llvm.loop !980
for.end: ; preds = %cleanup, %for.cond
%46 = load i32, i32* %i, align 4, !dbg !982, !tbaa !248
%add40 = add nsw i32 %46, 2, !dbg !984
%47 = load i32, i32* %argc.addr, align 4, !dbg !985, !tbaa !248
%cmp41 = icmp ne i32 %add40, %47, !dbg !986
br i1 %cmp41, label %if.then43, label %if.end45, !dbg !987
if.then43: ; preds = %for.end
%48 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !dbg !988, !tbaa !106
%call44 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %48, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.15, i64 0, i64 0)), !dbg !990
call void @usage(), !dbg !991
br label %if.end45, !dbg !992
if.end45: ; preds = %if.then43, %for.end
%49 = load i8**, i8*** %argv.addr, align 8, !dbg !993, !tbaa !106
%50 = load i32, i32* %i, align 4, !dbg !994, !tbaa !248
%idxprom46 = sext i32 %50 to i64, !dbg !993
%arrayidx47 = getelementptr inbounds i8*, i8** %49, i64 %idxprom46, !dbg !993
%51 = load i8*, i8** %arrayidx47, align 8, !dbg !993, !tbaa !106
%52 = load i8**, i8*** %argv.addr, align 8, !dbg !995, !tbaa !106
%53 = load i32, i32* %i, align 4, !dbg !996, !tbaa !248
%add48 = add nsw i32 %53, 1, !dbg !997
%idxprom49 = sext i32 %add48 to i64, !dbg !995
%arrayidx50 = getelementptr inbounds i8*, i8** %52, i64 %idxprom49, !dbg !995
%54 = load i8*, i8** %arrayidx50, align 8, !dbg !995, !tbaa !106
%55 = load double, double* %absolute_tolerance, align 8, !dbg !998, !tbaa !244
%56 = load double, double* %relative_tolerance, align 8, !dbg !999, !tbaa !244
%57 = load i32, i32* %ignore_whitespace, align 4, !dbg !1000, !tbaa !248
%call51 = call i32 @diff_files_with_tolerance(i8* %51, i8* %54, double %55, double %56, i32 %57), !dbg !1001
store i32 %call51, i32* %retval, align 4, !dbg !1002
store i32 1, i32* %cleanup.dest.slot, align 4
%58 = bitcast i32* %i to i8*, !dbg !1003
call void @llvm.lifetime.end.p0i8(i64 4, i8* %58) #9, !dbg !1003
%59 = bitcast i32* %ignore_whitespace to i8*, !dbg !1003
call void @llvm.lifetime.end.p0i8(i64 4, i8* %59) #9, !dbg !1003
%60 = bitcast double* %absolute_tolerance to i8*, !dbg !1003
call void @llvm.lifetime.end.p0i8(i64 8, i8* %60) #9, !dbg !1003
%61 = bitcast double* %relative_tolerance to i8*, !dbg !1003
call void @llvm.lifetime.end.p0i8(i64 8, i8* %61) #9, !dbg !1003
%62 = load i32, i32* %retval, align 4, !dbg !1003
ret i32 %62, !dbg !1003
unreachable: ; preds = %cleanup
unreachable
}
; Function Attrs: nounwind readonly willreturn
declare dso_local i64 @strlen(i8*) #6
; Function Attrs: nounwind
declare dso_local double @strtod(i8*, i8**) #5
; Function Attrs: nounwind readnone willreturn
declare dso_local i16** @__ctype_b_loc() #7
; Function Attrs: nounwind uwtable
define internal i32 @isDigitChar(i8 signext %C) #0 !dbg !1004 {
entry:
%retval = alloca i32, align 4
%C.addr = alloca i8, align 1
store i8 %C, i8* %C.addr, align 1, !tbaa !182
call void @llvm.dbg.declare(metadata i8* %C.addr, metadata !1006, metadata !DIExpression()), !dbg !1007
%0 = load i8, i8* %C.addr, align 1, !dbg !1008, !tbaa !182
%conv = sext i8 %0 to i32, !dbg !1008
switch i32 %conv, label %sw.default [
i32 48, label %sw.bb
i32 49, label %sw.bb
i32 50, label %sw.bb
i32 51, label %sw.bb
i32 52, label %sw.bb
i32 53, label %sw.bb
i32 54, label %sw.bb
i32 55, label %sw.bb
i32 56, label %sw.bb
i32 57, label %sw.bb
], !dbg !1009
sw.bb: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
store i32 1, i32* %retval, align 4, !dbg !1010
br label %return, !dbg !1010
sw.default: ; preds = %entry
store i32 0, i32* %retval, align 4, !dbg !1012
br label %return, !dbg !1012
return: ; preds = %sw.default, %sw.bb
%1 = load i32, i32* %retval, align 4, !dbg !1013
ret i32 %1, !dbg !1013
}
; Function Attrs: nounwind uwtable
define internal i32 @isSignedChar(i8 signext %C) #0 !dbg !1014 {
entry:
%C.addr = alloca i8, align 1
store i8 %C, i8* %C.addr, align 1, !tbaa !182
call void @llvm.dbg.declare(metadata i8* %C.addr, metadata !1016, metadata !DIExpression()), !dbg !1017
%0 = load i8, i8* %C.addr, align 1, !dbg !1018, !tbaa !182
%conv = sext i8 %0 to i32, !dbg !1018
%cmp = icmp eq i32 %conv, 43, !dbg !1019
br i1 %cmp, label %lor.end, label %lor.rhs, !dbg !1020
lor.rhs: ; preds = %entry
%1 = load i8, i8* %C.addr, align 1, !dbg !1021, !tbaa !182
%conv2 = sext i8 %1 to i32, !dbg !1021
%cmp3 = icmp eq i32 %conv2, 45, !dbg !1022
br label %lor.end, !dbg !1020
lor.end: ; preds = %lor.rhs, %entry
%2 = phi i1 [ true, %entry ], [ %cmp3, %lor.rhs ]
%lor.ext = zext i1 %2 to i32, !dbg !1020
ret i32 %lor.ext, !dbg !1023
}
; Function Attrs: nounwind uwtable
define internal i32 @isExponentChar(i8 signext %C) #0 !dbg !1024 {
entry:
%retval = alloca i32, align 4
%C.addr = alloca i8, align 1
store i8 %C, i8* %C.addr, align 1, !tbaa !182
call void @llvm.dbg.declare(metadata i8* %C.addr, metadata !1026, metadata !DIExpression()), !dbg !1027
%0 = load i8, i8* %C.addr, align 1, !dbg !1028, !tbaa !182
%conv = sext i8 %0 to i32, !dbg !1028
switch i32 %conv, label %sw.default [
i32 68, label %sw.bb
i32 100, label %sw.bb
i32 101, label %sw.bb
i32 69, label %sw.bb
], !dbg !1029
sw.bb: ; preds = %entry, %entry, %entry, %entry
store i32 1, i32* %retval, align 4, !dbg !1030
br label %return, !dbg !1030
sw.default: ; preds = %entry
store i32 0, i32* %retval, align 4, !dbg !1032
br label %return, !dbg !1032
return: ; preds = %sw.default, %sw.bb
%1 = load i32, i32* %retval, align 4, !dbg !1033
ret i32 %1, !dbg !1033
}
; Function Attrs: argmemonly nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #8
; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare double @llvm.fabs.f64(double) #1
attributes #0 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #2 = { argmemonly nofree nosync nounwind willreturn }
attributes #3 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind readonly willreturn "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind readnone willreturn "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { argmemonly nofree nounwind willreturn }
attributes #9 = { nounwind }
attributes #10 = { noreturn nounwind }
attributes #11 = { nounwind readonly willreturn }
attributes #12 = { nounwind readnone willreturn }
!llvm.dbg.cu = !{!2}
!llvm.module.flags = !{!32, !33, !34, !35}
!llvm.ident = !{!36}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "g_program", scope: !2, file: !3, line: 20, type: !30, isLocal: false, isDefinition: true)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 14.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !21, globals: !29, splitDebugInlining: false, nameTableKind: None)
!3 = !DIFile(filename: "../tools/fpcmp.c", directory: "/home/nikic/llvm-test-suite/build-O3")
!4 = !{!5}
!5 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !6, line: 46, baseType: !7, size: 32, elements: !8)
!6 = !DIFile(filename: "/usr/include/ctype.h", directory: "")
!7 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
!8 = !{!9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20}
!9 = !DIEnumerator(name: "_ISupper", value: 256)
!10 = !DIEnumerator(name: "_ISlower", value: 512)
!11 = !DIEnumerator(name: "_ISalpha", value: 1024)
!12 = !DIEnumerator(name: "_ISdigit", value: 2048)
!13 = !DIEnumerator(name: "_ISxdigit", value: 4096)
!14 = !DIEnumerator(name: "_ISspace", value: 8192)
!15 = !DIEnumerator(name: "_ISprint", value: 16384)
!16 = !DIEnumerator(name: "_ISgraph", value: 32768)
!17 = !DIEnumerator(name: "_ISblank", value: 1)
!18 = !DIEnumerator(name: "_IScntrl", value: 2)
!19 = !DIEnumerator(name: "_ISpunct", value: 4)
!20 = !DIEnumerator(name: "_ISalnum", value: 8)
!21 = !{!22, !23, !24, !25, !26, !7}
!22 = !DIDerivedType(tag: DW_TAG_typedef, name: "bool", file: !3, line: 24, baseType: !23)
!23 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!24 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
!25 = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !27, size: 64)
!27 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !28, size: 64)
!28 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
!29 = !{!0}
!30 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !31, size: 64)
!31 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !28)
!32 = !{i32 7, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !{i32 1, !"wchar_size", i32 4}
!35 = !{i32 7, !"uwtable", i32 1}
!36 = !{!"clang version 14.0.0"}
!37 = distinct !DISubprogram(name: "load_file", scope: !3, file: !3, line: 199, type: !38, scopeLine: 199, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !42)
!38 = !DISubroutineType(types: !39)
!39 = !{!27, !30, !40}
!40 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !41, size: 64)
!41 = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
!42 = !{!43, !44, !45, !104, !105}
!43 = !DILocalVariable(name: "path", arg: 1, scope: !37, file: !3, line: 199, type: !30)
!44 = !DILocalVariable(name: "size_out", arg: 2, scope: !37, file: !3, line: 199, type: !40)
!45 = !DILocalVariable(name: "fp", scope: !37, file: !3, line: 200, type: !46)
!46 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !47, size: 64)
!47 = !DIDerivedType(tag: DW_TAG_typedef, name: "FILE", file: !48, line: 7, baseType: !49)
!48 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types/FILE.h", directory: "")
!49 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "_IO_FILE", file: !50, line: 49, size: 1728, elements: !51)
!50 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h", directory: "")
!51 = !{!52, !53, !54, !55, !56, !57, !58, !59, !60, !61, !62, !63, !64, !67, !69, !70, !71, !74, !75, !77, !81, !84, !86, !89, !92, !93, !95, !99, !100}
!52 = !DIDerivedType(tag: DW_TAG_member, name: "_flags", scope: !49, file: !50, line: 51, baseType: !23, size: 32)
!53 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_read_ptr", scope: !49, file: !50, line: 54, baseType: !27, size: 64, offset: 64)
!54 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_read_end", scope: !49, file: !50, line: 55, baseType: !27, size: 64, offset: 128)
!55 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_read_base", scope: !49, file: !50, line: 56, baseType: !27, size: 64, offset: 192)
!56 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_write_base", scope: !49, file: !50, line: 57, baseType: !27, size: 64, offset: 256)
!57 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_write_ptr", scope: !49, file: !50, line: 58, baseType: !27, size: 64, offset: 320)
!58 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_write_end", scope: !49, file: !50, line: 59, baseType: !27, size: 64, offset: 384)
!59 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_buf_base", scope: !49, file: !50, line: 60, baseType: !27, size: 64, offset: 448)
!60 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_buf_end", scope: !49, file: !50, line: 61, baseType: !27, size: 64, offset: 512)
!61 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_save_base", scope: !49, file: !50, line: 64, baseType: !27, size: 64, offset: 576)
!62 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_backup_base", scope: !49, file: !50, line: 65, baseType: !27, size: 64, offset: 640)
!63 = !DIDerivedType(tag: DW_TAG_member, name: "_IO_save_end", scope: !49, file: !50, line: 66, baseType: !27, size: 64, offset: 704)
!64 = !DIDerivedType(tag: DW_TAG_member, name: "_markers", scope: !49, file: !50, line: 68, baseType: !65, size: 64, offset: 768)
!65 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !66, size: 64)
!66 = !DICompositeType(tag: DW_TAG_structure_type, name: "_IO_marker", file: !50, line: 36, flags: DIFlagFwdDecl)
!67 = !DIDerivedType(tag: DW_TAG_member, name: "_chain", scope: !49, file: !50, line: 70, baseType: !68, size: 64, offset: 832)
!68 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !49, size: 64)
!69 = !DIDerivedType(tag: DW_TAG_member, name: "_fileno", scope: !49, file: !50, line: 72, baseType: !23, size: 32, offset: 896)
!70 = !DIDerivedType(tag: DW_TAG_member, name: "_flags2", scope: !49, file: !50, line: 73, baseType: !23, size: 32, offset: 928)
!71 = !DIDerivedType(tag: DW_TAG_member, name: "_old_offset", scope: !49, file: !50, line: 74, baseType: !72, size: 64, offset: 960)
!72 = !DIDerivedType(tag: DW_TAG_typedef, name: "__off_t", file: !73, line: 152, baseType: !41)
!73 = !DIFile(filename: "/usr/include/x86_64-linux-gnu/bits/types.h", directory: "")
!74 = !DIDerivedType(tag: DW_TAG_member, name: "_cur_column", scope: !49, file: !50, line: 77, baseType: !25, size: 16, offset: 1024)
!75 = !DIDerivedType(tag: DW_TAG_member, name: "_vtable_offset", scope: !49, file: !50, line: 78, baseType: !76, size: 8, offset: 1040)
!76 = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char)
!77 = !DIDerivedType(tag: DW_TAG_member, name: "_shortbuf", scope: !49, file: !50, line: 79, baseType: !78, size: 8, offset: 1048)
!78 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 8, elements: !79)
!79 = !{!80}
!80 = !DISubrange(count: 1)
!81 = !DIDerivedType(tag: DW_TAG_member, name: "_lock", scope: !49, file: !50, line: 81, baseType: !82, size: 64, offset: 1088)
!82 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !83, size: 64)
!83 = !DIDerivedType(tag: DW_TAG_typedef, name: "_IO_lock_t", file: !50, line: 43, baseType: null)
!84 = !DIDerivedType(tag: DW_TAG_member, name: "_offset", scope: !49, file: !50, line: 89, baseType: !85, size: 64, offset: 1152)
!85 = !DIDerivedType(tag: DW_TAG_typedef, name: "__off64_t", file: !73, line: 153, baseType: !41)
!86 = !DIDerivedType(tag: DW_TAG_member, name: "_codecvt", scope: !49, file: !50, line: 91, baseType: !87, size: 64, offset: 1216)
!87 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !88, size: 64)
!88 = !DICompositeType(tag: DW_TAG_structure_type, name: "_IO_codecvt", file: !50, line: 37, flags: DIFlagFwdDecl)
!89 = !DIDerivedType(tag: DW_TAG_member, name: "_wide_data", scope: !49, file: !50, line: 92, baseType: !90, size: 64, offset: 1280)
!90 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !91, size: 64)
!91 = !DICompositeType(tag: DW_TAG_structure_type, name: "_IO_wide_data", file: !50, line: 38, flags: DIFlagFwdDecl)
!92 = !DIDerivedType(tag: DW_TAG_member, name: "_freeres_list", scope: !49, file: !50, line: 93, baseType: !68, size: 64, offset: 1344)
!93 = !DIDerivedType(tag: DW_TAG_member, name: "_freeres_buf", scope: !49, file: !50, line: 94, baseType: !94, size: 64, offset: 1408)
!94 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
!95 = !DIDerivedType(tag: DW_TAG_member, name: "__pad5", scope: !49, file: !50, line: 95, baseType: !96, size: 64, offset: 1472)
!96 = !DIDerivedType(tag: DW_TAG_typedef, name: "size_t", file: !97, line: 46, baseType: !98)
!97 = !DIFile(filename: "llvm-project/build/lib/clang/14.0.0/include/stddef.h", directory: "/home/nikic")
!98 = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned)
!99 = !DIDerivedType(tag: DW_TAG_member, name: "_mode", scope: !49, file: !50, line: 96, baseType: !23, size: 32, offset: 1536)
!100 = !DIDerivedType(tag: DW_TAG_member, name: "_unused2", scope: !49, file: !50, line: 98, baseType: !101, size: 160, offset: 1568)
!101 = !DICompositeType(tag: DW_TAG_array_type, baseType: !28, size: 160, elements: !102)
!102 = !{!103}
!103 = !DISubrange(count: 20)
!104 = !DILocalVariable(name: "size", scope: !37, file: !3, line: 201, type: !41)
!105 = !DILocalVariable(name: "data", scope: !37, file: !3, line: 202, type: !27)
!106 = !{!107, !107, i64 0}
!107 = !{!"any pointer", !108, i64 0}
!108 = !{!"omnipotent char", !109, i64 0}
!109 = !{!"Simple C/C++ TBAA"}
!110 = !DILocation(line: 199, column: 29, scope: !37)
!111 = !DILocation(line: 199, column: 41, scope: !37)
!112 = !DILocation(line: 200, column: 3, scope: !37)
!113 = !DILocation(line: 200, column: 9, scope: !37)
!114 = !DILocation(line: 201, column: 3, scope: !37)
!115 = !DILocation(line: 201, column: 8, scope: !37)
!116 = !DILocation(line: 202, column: 3, scope: !37)
!117 = !DILocation(line: 202, column: 9, scope: !37)
!118 = !DILocation(line: 205, column: 14, scope: !37)
!119 = !DILocation(line: 205, column: 8, scope: !37)
!120 = !DILocation(line: 205, column: 6, scope: !37)
!121 = !DILocation(line: 206, column: 8, scope: !122)
!122 = distinct !DILexicalBlock(scope: !37, file: !3, line: 206, column: 7)
!123 = !DILocation(line: 206, column: 7, scope: !37)
!124 = !DILocation(line: 207, column: 13, scope: !125)
!125 = distinct !DILexicalBlock(scope: !122, file: !3, line: 206, column: 12)
!126 = !DILocation(line: 207, column: 57, scope: !125)
!127 = !DILocation(line: 207, column: 68, scope: !125)
!128 = !DILocation(line: 207, column: 5, scope: !125)
!129 = !DILocation(line: 208, column: 5, scope: !125)
!130 = !DILocation(line: 212, column: 13, scope: !131)
!131 = distinct !DILexicalBlock(scope: !37, file: !3, line: 212, column: 7)
!132 = !DILocation(line: 212, column: 7, scope: !131)
!133 = !DILocation(line: 212, column: 30, scope: !131)
!134 = !DILocation(line: 212, column: 7, scope: !37)
!135 = !DILocation(line: 213, column: 13, scope: !136)
!136 = distinct !DILexicalBlock(scope: !131, file: !3, line: 212, column: 37)
!137 = !DILocation(line: 213, column: 57, scope: !136)
!138 = !DILocation(line: 213, column: 68, scope: !136)
!139 = !DILocation(line: 213, column: 5, scope: !136)
!140 = !DILocation(line: 214, column: 5, scope: !136)
!141 = !DILocation(line: 216, column: 16, scope: !37)
!142 = !DILocation(line: 216, column: 10, scope: !37)
!143 = !DILocation(line: 216, column: 8, scope: !37)
!144 = !{!145, !145, i64 0}
!145 = !{!"long", !108, i64 0}
!146 = !DILocation(line: 217, column: 13, scope: !147)
!147 = distinct !DILexicalBlock(scope: !37, file: !3, line: 217, column: 7)
!148 = !DILocation(line: 217, column: 7, scope: !147)
!149 = !DILocation(line: 217, column: 30, scope: !147)
!150 = !DILocation(line: 217, column: 7, scope: !37)
!151 = !DILocation(line: 218, column: 13, scope: !152)
!152 = distinct !DILexicalBlock(scope: !147, file: !3, line: 217, column: 37)
!153 = !DILocation(line: 218, column: 57, scope: !152)
!154 = !DILocation(line: 218, column: 68, scope: !152)
!155 = !DILocation(line: 218, column: 5, scope: !152)
!156 = !DILocation(line: 219, column: 5, scope: !152)
!157 = !DILocation(line: 223, column: 7, scope: !158)
!158 = distinct !DILexicalBlock(scope: !37, file: !3, line: 223, column: 7)
!159 = !DILocation(line: 223, column: 12, scope: !158)
!160 = !DILocation(line: 223, column: 7, scope: !37)
!161 = !DILocation(line: 224, column: 6, scope: !162)
!162 = distinct !DILexicalBlock(scope: !158, file: !3, line: 223, column: 18)
!163 = !DILocation(line: 224, column: 15, scope: !162)
!164 = !DILocation(line: 225, column: 5, scope: !162)
!165 = !DILocation(line: 229, column: 17, scope: !37)
!166 = !DILocation(line: 229, column: 22, scope: !37)
!167 = !DILocation(line: 229, column: 10, scope: !37)
!168 = !DILocation(line: 229, column: 8, scope: !37)
!169 = !DILocation(line: 230, column: 8, scope: !170)
!170 = distinct !DILexicalBlock(scope: !171, file: !3, line: 230, column: 7)
!171 = !DILexicalBlockFile(scope: !37, file: !3, discriminator: 0)
!172 = !DILocation(line: 230, column: 7, scope: !171)
!173 = !DILocation(line: 231, column: 13, scope: !174)
!174 = distinct !DILexicalBlock(scope: !170, file: !3, line: 230, column: 14)
!175 = !DILocation(line: 232, column: 13, scope: !174)
!176 = !DILocation(line: 232, column: 24, scope: !174)
!177 = !DILocation(line: 231, column: 5, scope: !174)
!178 = !DILocation(line: 233, column: 5, scope: !174)
!179 = !DILocation(line: 237, column: 3, scope: !171)
!180 = !DILocation(line: 237, column: 8, scope: !171)
!181 = !DILocation(line: 237, column: 14, scope: !171)
!182 = !{!108, !108, i64 0}
!183 = !DILocation(line: 238, column: 13, scope: !184)
!184 = distinct !DILexicalBlock(scope: !171, file: !3, line: 238, column: 7)
!185 = !DILocation(line: 238, column: 19, scope: !184)
!186 = !DILocation(line: 238, column: 28, scope: !184)
!187 = !DILocation(line: 238, column: 7, scope: !184)
!188 = !DILocation(line: 238, column: 32, scope: !184)
!189 = !DILocation(line: 238, column: 7, scope: !171)
!190 = !DILocation(line: 239, column: 13, scope: !191)
!191 = distinct !DILexicalBlock(scope: !184, file: !3, line: 238, column: 38)
!192 = !DILocation(line: 240, column: 13, scope: !191)
!193 = !DILocation(line: 240, column: 24, scope: !191)
!194 = !DILocation(line: 239, column: 5, scope: !191)
!195 = !DILocation(line: 241, column: 5, scope: !191)
!196 = !DILocation(line: 245, column: 10, scope: !171)
!197 = !DILocation(line: 245, column: 3, scope: !171)
!198 = !DILocation(line: 246, column: 15, scope: !171)
!199 = !DILocation(line: 246, column: 4, scope: !171)
!200 = !DILocation(line: 246, column: 13, scope: !171)
!201 = !DILocation(line: 247, column: 10, scope: !171)
!202 = !DILocation(line: 247, column: 3, scope: !171)
!203 = !DILocation(line: 248, column: 1, scope: !171)
!204 = !DISubprogram(name: "fseek", scope: !205, file: !205, line: 684, type: !206, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !208)
!205 = !DIFile(filename: "/usr/include/stdio.h", directory: "")
!206 = !DISubroutineType(types: !207)
!207 = !{!23, !46, !41, !23}
!208 = !{}
!209 = !DISubprogram(name: "ftell", scope: !205, file: !205, line: 689, type: !210, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !208)
!210 = !DISubroutineType(types: !211)
!211 = !{!41, !46}
!212 = !DISubprogram(name: "fclose", scope: !205, file: !205, line: 213, type: !213, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !208)
!213 = !DISubroutineType(types: !214)
!214 = !{!23, !46}
!215 = distinct !DISubprogram(name: "diff_files_with_tolerance", scope: !3, file: !3, line: 250, type: !216, scopeLine: 253, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !219)
!216 = !DISubroutineType(types: !217)
!217 = !{!23, !30, !30, !218, !218, !22}
!218 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float)
!219 = !{!220, !221, !222, !223, !224, !225, !226, !227, !228, !229, !230, !231, !232, !233, !234, !235, !237, !238, !239, !240, !241}
!220 = !DILocalVariable(name: "path_a", arg: 1, scope: !215, file: !3, line: 250, type: !30)
!221 = !DILocalVariable(name: "path_b", arg: 2, scope: !215, file: !3, line: 250, type: !30)
!222 = !DILocalVariable(name: "absolute_tolerance", arg: 3, scope: !215, file: !3, line: 251, type: !218)
!223 = !DILocalVariable(name: "relative_tolerance", arg: 4, scope: !215, file: !3, line: 252, type: !218)
!224 = !DILocalVariable(name: "ignore_whitespace", arg: 5, scope: !215, file: !3, line: 253, type: !22)
!225 = !DILocalVariable(name: "A_size", scope: !215, file: !3, line: 255, type: !41)
!226 = !DILocalVariable(name: "B_size", scope: !215, file: !3, line: 255, type: !41)
!227 = !DILocalVariable(name: "data_a", scope: !215, file: !3, line: 256, type: !27)
!228 = !DILocalVariable(name: "data_b", scope: !215, file: !3, line: 257, type: !27)
!229 = !DILocalVariable(name: "File1Start", scope: !215, file: !3, line: 269, type: !30)
!230 = !DILocalVariable(name: "File2Start", scope: !215, file: !3, line: 270, type: !30)
!231 = !DILocalVariable(name: "File1End", scope: !215, file: !3, line: 271, type: !30)
!232 = !DILocalVariable(name: "File2End", scope: !215, file: !3, line: 272, type: !30)
!233 = !DILocalVariable(name: "F1P", scope: !215, file: !3, line: 273, type: !30)
!234 = !DILocalVariable(name: "F2P", scope: !215, file: !3, line: 274, type: !30)
!235 = !DILocalVariable(name: "F1NumStart", scope: !236, file: !3, line: 295, type: !30)
!236 = distinct !DILexicalBlock(scope: !215, file: !3, line: 276, column: 13)
!237 = !DILocalVariable(name: "F2NumStart", scope: !236, file: !3, line: 296, type: !30)
!238 = !DILocalVariable(name: "F1NumEnd", scope: !236, file: !3, line: 305, type: !30)
!239 = !DILocalVariable(name: "F2NumEnd", scope: !236, file: !3, line: 306, type: !30)
!240 = !DILocalVariable(name: "F1AtEnd", scope: !215, file: !3, line: 344, type: !22)
!241 = !DILocalVariable(name: "F2AtEnd", scope: !215, file: !3, line: 345, type: !22)
!242 = !DILocation(line: 250, column: 43, scope: !215)
!243 = !DILocation(line: 250, column: 63, scope: !215)
!244 = !{!245, !245, i64 0}
!245 = !{!"double", !108, i64 0}
!246 = !DILocation(line: 251, column: 38, scope: !215)
!247 = !DILocation(line: 252, column: 38, scope: !215)
!248 = !{!249, !249, i64 0}
!249 = !{!"int", !108, i64 0}
!250 = !DILocation(line: 253, column: 36, scope: !215)
!251 = !DILocation(line: 255, column: 3, scope: !215)
!252 = !DILocation(line: 255, column: 8, scope: !215)
!253 = !DILocation(line: 255, column: 16, scope: !215)
!254 = !DILocation(line: 256, column: 3, scope: !215)
!255 = !DILocation(line: 256, column: 9, scope: !215)
!256 = !DILocation(line: 256, column: 28, scope: !215)
!257 = !DILocation(line: 256, column: 18, scope: !215)
!258 = !DILocation(line: 257, column: 3, scope: !215)
!259 = !DILocation(line: 257, column: 9, scope: !215)
!260 = !DILocation(line: 257, column: 28, scope: !215)
!261 = !DILocation(line: 257, column: 18, scope: !215)
!262 = !DILocation(line: 260, column: 7, scope: !263)
!263 = distinct !DILexicalBlock(scope: !215, file: !3, line: 260, column: 7)
!264 = !DILocation(line: 260, column: 17, scope: !263)
!265 = !DILocation(line: 260, column: 14, scope: !263)
!266 = !DILocation(line: 260, column: 24, scope: !263)
!267 = !DILocation(line: 260, column: 34, scope: !263)
!268 = !DILocation(line: 260, column: 42, scope: !263)
!269 = !DILocation(line: 260, column: 50, scope: !263)
!270 = !DILocation(line: 260, column: 27, scope: !263)
!271 = !DILocation(line: 260, column: 58, scope: !263)
!272 = !DILocation(line: 260, column: 7, scope: !215)
!273 = !DILocation(line: 261, column: 10, scope: !274)
!274 = distinct !DILexicalBlock(scope: !263, file: !3, line: 260, column: 64)
!275 = !DILocation(line: 261, column: 5, scope: !274)
!276 = !DILocation(line: 262, column: 10, scope: !274)
!277 = !DILocation(line: 262, column: 5, scope: !274)
!278 = !DILocation(line: 263, column: 5, scope: !274)
!279 = !DILocation(line: 269, column: 3, scope: !215)
!280 = !DILocation(line: 269, column: 15, scope: !215)
!281 = !DILocation(line: 269, column: 28, scope: !215)
!282 = !DILocation(line: 270, column: 3, scope: !215)
!283 = !DILocation(line: 270, column: 15, scope: !215)
!284 = !DILocation(line: 270, column: 28, scope: !215)
!285 = !DILocation(line: 271, column: 3, scope: !215)
!286 = !DILocation(line: 271, column: 15, scope: !215)
!287 = !DILocation(line: 271, column: 26, scope: !215)
!288 = !DILocation(line: 271, column: 35, scope: !215)
!289 = !DILocation(line: 271, column: 33, scope: !215)
!290 = !DILocation(line: 272, column: 3, scope: !215)
!291 = !DILocation(line: 272, column: 15, scope: !215)
!292 = !DILocation(line: 272, column: 26, scope: !215)
!293 = !DILocation(line: 272, column: 35, scope: !215)
!294 = !DILocation(line: 272, column: 33, scope: !215)
!295 = !DILocation(line: 273, column: 3, scope: !215)
!296 = !DILocation(line: 273, column: 15, scope: !215)
!297 = !DILocation(line: 273, column: 21, scope: !215)
!298 = !DILocation(line: 274, column: 3, scope: !215)
!299 = !DILocation(line: 274, column: 15, scope: !215)
!300 = !DILocation(line: 274, column: 21, scope: !215)
!301 = !DILocation(line: 276, column: 3, scope: !215)
!302 = !DILocation(line: 278, column: 9, scope: !303)
!303 = distinct !DILexicalBlock(scope: !236, file: !3, line: 278, column: 9)
!304 = !DILocation(line: 278, column: 16, scope: !303)
!305 = !DILocation(line: 278, column: 13, scope: !303)
!306 = !DILocation(line: 278, column: 25, scope: !303)
!307 = !DILocation(line: 278, column: 28, scope: !303)
!308 = !DILocation(line: 278, column: 35, scope: !303)
!309 = !DILocation(line: 278, column: 32, scope: !303)
!310 = !DILocation(line: 278, column: 9, scope: !236)
!311 = !DILocation(line: 280, column: 11, scope: !312)
!312 = distinct !DILexicalBlock(scope: !313, file: !3, line: 280, column: 11)
!313 = distinct !DILexicalBlock(scope: !303, file: !3, line: 278, column: 45)
!314 = !DILocation(line: 280, column: 11, scope: !313)
!315 = !DILocation(line: 281, column: 31, scope: !316)
!316 = distinct !DILexicalBlock(scope: !312, file: !3, line: 280, column: 30)
!317 = !DILocation(line: 281, column: 9, scope: !316)
!318 = !DILocation(line: 282, column: 31, scope: !316)
!319 = !DILocation(line: 282, column: 9, scope: !316)
!320 = !DILocation(line: 283, column: 7, scope: !316)
!321 = !DILocation(line: 284, column: 7, scope: !313)
!322 = !DILocation(line: 288, column: 10, scope: !323)
!323 = distinct !DILexicalBlock(scope: !236, file: !3, line: 288, column: 9)
!324 = !DILocation(line: 288, column: 9, scope: !323)
!325 = !DILocation(line: 288, column: 18, scope: !323)
!326 = !DILocation(line: 288, column: 17, scope: !323)
!327 = !DILocation(line: 288, column: 14, scope: !323)
!328 = !DILocation(line: 288, column: 22, scope: !323)
!329 = !DILocation(line: 288, column: 51, scope: !323)
!330 = !DILocation(line: 288, column: 50, scope: !323)
!331 = !DILocation(line: 288, column: 26, scope: !323)
!332 = !DILocation(line: 288, column: 9, scope: !236)
!333 = !DILocation(line: 289, column: 7, scope: !334)
!334 = distinct !DILexicalBlock(scope: !323, file: !3, line: 288, column: 57)
!335 = !DILocation(line: 289, column: 14, scope: !334)
!336 = !DILocation(line: 290, column: 7, scope: !334)
!337 = distinct !{!337, !301, !338}
!338 = !DILocation(line: 340, column: 3, scope: !215)
!339 = !DILocation(line: 295, column: 5, scope: !236)
!340 = !DILocation(line: 295, column: 17, scope: !236)
!341 = !DILocation(line: 295, column: 30, scope: !236)
!342 = !DILocation(line: 296, column: 5, scope: !236)
!343 = !DILocation(line: 296, column: 17, scope: !236)
!344 = !DILocation(line: 296, column: 30, scope: !236)
!345 = !DILocation(line: 297, column: 9, scope: !346)
!346 = distinct !DILexicalBlock(scope: !236, file: !3, line: 297, column: 9)
!347 = !DILocation(line: 297, column: 9, scope: !236)
!348 = !DILocation(line: 298, column: 33, scope: !349)
!349 = distinct !DILexicalBlock(scope: !350, file: !3, line: 298, column: 11)
!350 = distinct !DILexicalBlock(scope: !346, file: !3, line: 297, column: 28)
!351 = !DILocation(line: 298, column: 11, scope: !349)
!352 = !DILocation(line: 298, column: 67, scope: !349)
!353 = !DILocation(line: 298, column: 45, scope: !349)
!354 = !DILocation(line: 298, column: 43, scope: !349)
!355 = !DILocation(line: 298, column: 11, scope: !350)
!356 = !DILocation(line: 299, column: 9, scope: !349)
!357 = !DILocation(line: 300, column: 5, scope: !350)
!358 = !DILocation(line: 301, column: 36, scope: !359)
!359 = distinct !DILexicalBlock(scope: !346, file: !3, line: 300, column: 12)
!360 = !DILocation(line: 301, column: 7, scope: !359)
!361 = !DILocation(line: 302, column: 36, scope: !359)
!362 = !DILocation(line: 302, column: 7, scope: !359)
!363 = !DILocation(line: 305, column: 5, scope: !236)
!364 = !DILocation(line: 305, column: 17, scope: !236)
!365 = !DILocation(line: 305, column: 42, scope: !236)
!366 = !DILocation(line: 305, column: 54, scope: !236)
!367 = !DILocation(line: 305, column: 28, scope: !236)
!368 = !DILocation(line: 306, column: 5, scope: !236)
!369 = !DILocation(line: 306, column: 17, scope: !236)
!370 = !DILocation(line: 306, column: 42, scope: !236)
!371 = !DILocation(line: 306, column: 54, scope: !236)
!372 = !DILocation(line: 306, column: 28, scope: !236)
!373 = !DILocation(line: 309, column: 10, scope: !374)
!374 = distinct !DILexicalBlock(scope: !236, file: !3, line: 309, column: 9)
!375 = !DILocation(line: 309, column: 19, scope: !374)
!376 = !DILocation(line: 309, column: 23, scope: !374)
!377 = !DILocation(line: 309, column: 9, scope: !236)
!378 = !DILocation(line: 312, column: 12, scope: !379)
!379 = distinct !DILexicalBlock(scope: !380, file: !3, line: 312, column: 11)
!380 = distinct !DILexicalBlock(scope: !374, file: !3, line: 309, column: 33)
!381 = !DILocation(line: 312, column: 11, scope: !379)
!382 = !DILocation(line: 312, column: 20, scope: !379)
!383 = !DILocation(line: 312, column: 19, scope: !379)
!384 = !DILocation(line: 312, column: 16, scope: !379)
!385 = !DILocation(line: 312, column: 11, scope: !380)
!386 = !DILocation(line: 313, column: 9, scope: !379)
!387 = !DILocation(line: 324, column: 7, scope: !380)
!388 = !DILocation(line: 324, column: 14, scope: !380)
!389 = !DILocation(line: 325, column: 7, scope: !380)
!390 = !DILocation(line: 330, column: 24, scope: !391)
!391 = distinct !DILexicalBlock(scope: !236, file: !3, line: 330, column: 9)
!392 = !DILocation(line: 330, column: 36, scope: !391)
!393 = !DILocation(line: 330, column: 48, scope: !391)
!394 = !DILocation(line: 330, column: 58, scope: !391)
!395 = !DILocation(line: 331, column: 24, scope: !391)
!396 = !DILocation(line: 331, column: 44, scope: !391)
!397 = !DILocation(line: 330, column: 9, scope: !391)
!398 = !DILocation(line: 330, column: 9, scope: !236)
!399 = !DILocation(line: 332, column: 12, scope: !400)
!400 = distinct !DILexicalBlock(scope: !391, file: !3, line: 331, column: 65)
!401 = !DILocation(line: 332, column: 7, scope: !400)
!402 = !DILocation(line: 333, column: 12, scope: !400)
!403 = !DILocation(line: 333, column: 7, scope: !400)
!404 = !DILocation(line: 334, column: 7, scope: !400)
!405 = !DILocation(line: 338, column: 11, scope: !236)
!406 = !DILocation(line: 338, column: 9, scope: !236)
!407 = !DILocation(line: 339, column: 11, scope: !236)
!408 = !DILocation(line: 339, column: 9, scope: !236)
!409 = !DILocation(line: 344, column: 3, scope: !215)
!410 = !DILocation(line: 344, column: 8, scope: !215)
!411 = !DILocation(line: 344, column: 18, scope: !215)
!412 = !DILocation(line: 344, column: 25, scope: !215)
!413 = !DILocation(line: 344, column: 22, scope: !215)
!414 = !DILocation(line: 345, column: 3, scope: !215)
!415 = !DILocation(line: 345, column: 8, scope: !215)
!416 = !DILocation(line: 345, column: 18, scope: !215)
!417 = !DILocation(line: 345, column: 25, scope: !215)
!418 = !DILocation(line: 345, column: 22, scope: !215)
!419 = !DILocation(line: 346, column: 8, scope: !420)
!420 = distinct !DILexicalBlock(scope: !215, file: !3, line: 346, column: 7)
!421 = !DILocation(line: 346, column: 16, scope: !420)
!422 = !DILocation(line: 346, column: 20, scope: !420)
!423 = !DILocation(line: 346, column: 7, scope: !215)
!424 = !DILocation(line: 347, column: 13, scope: !425)
!425 = distinct !DILexicalBlock(scope: !420, file: !3, line: 346, column: 29)
!426 = !DILocation(line: 350, column: 13, scope: !425)
!427 = !DILocation(line: 350, column: 24, scope: !425)
!428 = !DILocation(line: 350, column: 32, scope: !425)
!429 = !DILocation(line: 347, column: 5, scope: !425)
!430 = !DILocation(line: 351, column: 10, scope: !425)
!431 = !DILocation(line: 351, column: 5, scope: !425)
!432 = !DILocation(line: 352, column: 10, scope: !425)
!433 = !DILocation(line: 352, column: 5, scope: !425)
!434 = !DILocation(line: 353, column: 5, scope: !425)
!435 = !DILocation(line: 355, column: 8, scope: !436)
!436 = distinct !DILexicalBlock(scope: !215, file: !3, line: 355, column: 7)
!437 = !DILocation(line: 355, column: 16, scope: !436)
!438 = !DILocation(line: 355, column: 20, scope: !436)
!439 = !DILocation(line: 355, column: 7, scope: !215)
!440 = !DILocation(line: 356, column: 13, scope: !441)
!441 = distinct !DILexicalBlock(scope: !436, file: !3, line: 355, column: 29)
!442 = !DILocation(line: 358, column: 13, scope: !441)
!443 = !DILocation(line: 356, column: 5, scope: !441)
!444 = !DILocation(line: 359, column: 10, scope: !441)
!445 = !DILocation(line: 359, column: 5, scope: !441)
!446 = !DILocation(line: 360, column: 10, scope: !441)
!447 = !DILocation(line: 360, column: 5, scope: !441)
!448 = !DILocation(line: 361, column: 5, scope: !441)
!449 = !DILocation(line: 364, column: 8, scope: !215)
!450 = !DILocation(line: 364, column: 3, scope: !215)
!451 = !DILocation(line: 365, column: 8, scope: !215)
!452 = !DILocation(line: 365, column: 3, scope: !215)
!453 = !DILocation(line: 367, column: 3, scope: !215)
!454 = !DILocation(line: 368, column: 1, scope: !215)
!455 = distinct !DISubprogram(name: "skip_whitespace", scope: !3, file: !3, line: 109, type: !456, scopeLine: 109, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !459)
!456 = !DISubroutineType(types: !457)
!457 = !{!22, !458, !30}
!458 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64)
!459 = !{!460, !461, !462}
!460 = !DILocalVariable(name: "FP", arg: 1, scope: !455, file: !3, line: 109, type: !458)
!461 = !DILocalVariable(name: "FEnd", arg: 2, scope: !455, file: !3, line: 109, type: !30)
!462 = !DILocalVariable(name: "skipped_some", scope: !455, file: !3, line: 110, type: !22)
!463 = !DILocation(line: 109, column: 42, scope: !455)
!464 = !DILocation(line: 109, column: 58, scope: !455)
!465 = !DILocation(line: 110, column: 3, scope: !455)
!466 = !DILocation(line: 110, column: 8, scope: !455)
!467 = !DILocation(line: 111, column: 3, scope: !455)
!468 = !DILocation(line: 111, column: 11, scope: !455)
!469 = !DILocation(line: 111, column: 10, scope: !455)
!470 = !DILocation(line: 111, column: 16, scope: !455)
!471 = !DILocation(line: 111, column: 14, scope: !455)
!472 = !DILocation(line: 111, column: 21, scope: !455)
!473 = !DILocation(line: 111, column: 24, scope: !455)
!474 = !{!475, !475, i64 0}
!475 = !{!"short", !108, i64 0}
!476 = !DILocation(line: 0, scope: !455)
!477 = !DILocation(line: 112, column: 18, scope: !478)
!478 = distinct !DILexicalBlock(scope: !455, file: !3, line: 111, column: 54)
!479 = !DILocation(line: 113, column: 8, scope: !478)
!480 = !DILocation(line: 113, column: 5, scope: !478)
!481 = distinct !{!481, !467, !482, !483}
!482 = !DILocation(line: 114, column: 3, scope: !455)
!483 = !{!"llvm.loop.mustprogress"}
!484 = !DILocation(line: 115, column: 10, scope: !455)
!485 = !DILocation(line: 116, column: 1, scope: !455)
!486 = !DILocation(line: 115, column: 3, scope: !455)
!487 = distinct !DISubprogram(name: "isPossibleStartOfNumber", scope: !3, file: !3, line: 52, type: !488, scopeLine: 52, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !490)
!488 = !DISubroutineType(types: !489)
!489 = !{!22, !28}
!490 = !{!491}
!491 = !DILocalVariable(name: "C", arg: 1, scope: !487, file: !3, line: 52, type: !28)
!492 = !DILocation(line: 52, column: 42, scope: !487)
!493 = !DILocation(line: 53, column: 22, scope: !487)
!494 = !DILocation(line: 53, column: 10, scope: !487)
!495 = !DILocation(line: 53, column: 25, scope: !487)
!496 = !DILocation(line: 53, column: 41, scope: !487)
!497 = !DILocation(line: 53, column: 28, scope: !487)
!498 = !DILocation(line: 53, column: 44, scope: !487)
!499 = !DILocation(line: 53, column: 47, scope: !487)
!500 = !DILocation(line: 53, column: 49, scope: !487)
!501 = !DILocation(line: 53, column: 3, scope: !487)
!502 = distinct !DISubprogram(name: "AdvanceNumber", scope: !3, file: !3, line: 56, type: !503, scopeLine: 56, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !505)
!503 = !DISubroutineType(types: !504)
!504 = !{!30, !30, !30}
!505 = !{!506, !507, !508, !509, !510}
!506 = !DILocalVariable(name: "StartPos", arg: 1, scope: !502, file: !3, line: 56, type: !30)
!507 = !DILocalVariable(name: "End", arg: 2, scope: !502, file: !3, line: 56, type: !30)
!508 = !DILocalVariable(name: "Pos", scope: !502, file: !3, line: 57, type: !30)
!509 = !DILocalVariable(name: "EndOfNumber", scope: !502, file: !3, line: 58, type: !30)
!510 = !DILocalVariable(name: "HasPostDecimalDigit", scope: !511, file: !3, line: 75, type: !22)
!511 = distinct !DILexicalBlock(scope: !512, file: !3, line: 71, column: 33)
!512 = distinct !DILexicalBlock(scope: !502, file: !3, line: 71, column: 7)
!513 = !DILocation(line: 56, column: 46, scope: !502)
!514 = !DILocation(line: 56, column: 68, scope: !502)
!515 = !DILocation(line: 57, column: 3, scope: !502)
!516 = !DILocation(line: 57, column: 15, scope: !502)
!517 = !DILocation(line: 57, column: 21, scope: !502)
!518 = !DILocation(line: 58, column: 3, scope: !502)
!519 = !DILocation(line: 58, column: 15, scope: !502)
!520 = !DILocation(line: 61, column: 7, scope: !521)
!521 = distinct !DILexicalBlock(scope: !502, file: !3, line: 61, column: 7)
!522 = !DILocation(line: 61, column: 13, scope: !521)
!523 = !DILocation(line: 61, column: 11, scope: !521)
!524 = !DILocation(line: 61, column: 17, scope: !521)
!525 = !DILocation(line: 61, column: 34, scope: !521)
!526 = !DILocation(line: 61, column: 33, scope: !521)
!527 = !DILocation(line: 61, column: 20, scope: !521)
!528 = !DILocation(line: 61, column: 7, scope: !502)
!529 = !DILocation(line: 62, column: 5, scope: !521)
!530 = !DILocation(line: 65, column: 3, scope: !502)
!531 = !DILocation(line: 65, column: 10, scope: !502)
!532 = !DILocation(line: 65, column: 16, scope: !502)
!533 = !DILocation(line: 65, column: 14, scope: !502)
!534 = !DILocation(line: 65, column: 20, scope: !502)
!535 = !DILocation(line: 65, column: 36, scope: !502)
!536 = !DILocation(line: 65, column: 35, scope: !502)
!537 = !DILocation(line: 65, column: 23, scope: !502)
!538 = !DILocation(line: 0, scope: !502)
!539 = !DILocation(line: 66, column: 5, scope: !540)
!540 = distinct !DILexicalBlock(scope: !502, file: !3, line: 65, column: 42)
!541 = !DILocation(line: 67, column: 19, scope: !540)
!542 = !DILocation(line: 67, column: 17, scope: !540)
!543 = distinct !{!543, !530, !544, !483}
!544 = !DILocation(line: 68, column: 3, scope: !502)
!545 = !DILocation(line: 71, column: 7, scope: !512)
!546 = !DILocation(line: 71, column: 13, scope: !512)
!547 = !DILocation(line: 71, column: 11, scope: !512)
!548 = !DILocation(line: 71, column: 17, scope: !512)
!549 = !DILocation(line: 71, column: 21, scope: !512)
!550 = !DILocation(line: 71, column: 20, scope: !512)
!551 = !DILocation(line: 71, column: 25, scope: !512)
!552 = !DILocation(line: 71, column: 7, scope: !502)
!553 = !DILocation(line: 72, column: 5, scope: !511)
!554 = !DILocation(line: 75, column: 5, scope: !511)
!555 = !DILocation(line: 75, column: 10, scope: !511)
!556 = !DILocation(line: 76, column: 5, scope: !511)
!557 = !DILocation(line: 76, column: 12, scope: !511)
!558 = !DILocation(line: 76, column: 18, scope: !511)
!559 = !DILocation(line: 76, column: 16, scope: !511)
!560 = !DILocation(line: 76, column: 22, scope: !511)
!561 = !DILocation(line: 76, column: 38, scope: !511)
!562 = !DILocation(line: 76, column: 37, scope: !511)
!563 = !DILocation(line: 76, column: 25, scope: !511)
!564 = !DILocation(line: 0, scope: !511)
!565 = !DILocation(line: 77, column: 27, scope: !566)
!566 = distinct !DILexicalBlock(scope: !511, file: !3, line: 76, column: 44)
!567 = !DILocation(line: 79, column: 7, scope: !566)
!568 = !DILocation(line: 80, column: 21, scope: !566)
!569 = !DILocation(line: 80, column: 19, scope: !566)
!570 = distinct !{!570, !556, !571, !483}
!571 = !DILocation(line: 81, column: 5, scope: !511)
!572 = !DILocation(line: 82, column: 10, scope: !573)
!573 = distinct !DILexicalBlock(scope: !511, file: !3, line: 82, column: 9)
!574 = !DILocation(line: 82, column: 9, scope: !511)
!575 = !DILocation(line: 83, column: 14, scope: !573)
!576 = !DILocation(line: 83, column: 7, scope: !573)
!577 = !DILocation(line: 84, column: 3, scope: !512)
!578 = !DILocation(line: 84, column: 3, scope: !511)
!579 = !DILocation(line: 88, column: 8, scope: !580)
!580 = distinct !DILexicalBlock(scope: !502, file: !3, line: 88, column: 7)
!581 = !DILocation(line: 88, column: 7, scope: !502)
!582 = !DILocation(line: 89, column: 12, scope: !580)
!583 = !DILocation(line: 89, column: 5, scope: !580)
!584 = !DILocation(line: 92, column: 7, scope: !585)
!585 = distinct !DILexicalBlock(scope: !502, file: !3, line: 92, column: 7)
!586 = !DILocation(line: 92, column: 13, scope: !585)
!587 = !DILocation(line: 92, column: 11, scope: !585)
!588 = !DILocation(line: 92, column: 17, scope: !585)
!589 = !DILocation(line: 92, column: 36, scope: !585)
!590 = !DILocation(line: 92, column: 35, scope: !585)
!591 = !DILocation(line: 92, column: 20, scope: !585)
!592 = !DILocation(line: 92, column: 7, scope: !502)
!593 = !DILocation(line: 93, column: 5, scope: !594)
!594 = distinct !DILexicalBlock(scope: !585, file: !3, line: 92, column: 42)
!595 = !DILocation(line: 96, column: 9, scope: !596)
!596 = distinct !DILexicalBlock(scope: !594, file: !3, line: 96, column: 9)
!597 = !DILocation(line: 96, column: 15, scope: !596)
!598 = !DILocation(line: 96, column: 13, scope: !596)
!599 = !DILocation(line: 96, column: 19, scope: !596)
!600 = !DILocation(line: 96, column: 36, scope: !596)
!601 = !DILocation(line: 96, column: 35, scope: !596)
!602 = !DILocation(line: 96, column: 22, scope: !596)
!603 = !DILocation(line: 96, column: 9, scope: !594)
!604 = !DILocation(line: 97, column: 7, scope: !596)
!605 = !DILocation(line: 100, column: 5, scope: !594)
!606 = !DILocation(line: 100, column: 12, scope: !594)
!607 = !DILocation(line: 100, column: 18, scope: !594)
!608 = !DILocation(line: 100, column: 16, scope: !594)
!609 = !DILocation(line: 100, column: 22, scope: !594)
!610 = !DILocation(line: 100, column: 38, scope: !594)
!611 = !DILocation(line: 100, column: 37, scope: !594)
!612 = !DILocation(line: 100, column: 25, scope: !594)
!613 = !DILocation(line: 0, scope: !594)
!614 = !DILocation(line: 101, column: 7, scope: !615)
!615 = distinct !DILexicalBlock(scope: !594, file: !3, line: 100, column: 44)
!616 = !DILocation(line: 102, column: 21, scope: !615)
!617 = !DILocation(line: 102, column: 19, scope: !615)
!618 = distinct !{!618, !605, !619, !483}
!619 = !DILocation(line: 103, column: 5, scope: !594)
!620 = !DILocation(line: 104, column: 3, scope: !594)
!621 = !DILocation(line: 106, column: 10, scope: !502)
!622 = !DILocation(line: 106, column: 3, scope: !502)
!623 = !DILocation(line: 107, column: 1, scope: !502)
!624 = distinct !DISubprogram(name: "CompareNumbers", scope: !3, file: !3, line: 119, type: !625, scopeLine: 121, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !627)
!625 = !DISubroutineType(types: !626)
!626 = !{!22, !30, !30, !30, !30, !218, !218}
!627 = !{!628, !629, !630, !631, !632, !633, !634, !635, !636, !639, !640, !641, !642, !645, !648}
!628 = !DILocalVariable(name: "F1P", arg: 1, scope: !624, file: !3, line: 119, type: !30)
!629 = !DILocalVariable(name: "F2P", arg: 2, scope: !624, file: !3, line: 119, type: !30)
!630 = !DILocalVariable(name: "F1End", arg: 3, scope: !624, file: !3, line: 119, type: !30)
!631 = !DILocalVariable(name: "F2End", arg: 4, scope: !624, file: !3, line: 120, type: !30)
!632 = !DILocalVariable(name: "AbsTolerance", arg: 5, scope: !624, file: !3, line: 120, type: !218)
!633 = !DILocalVariable(name: "RelTolerance", arg: 6, scope: !624, file: !3, line: 121, type: !218)
!634 = !DILocalVariable(name: "F1NumEnd", scope: !624, file: !3, line: 122, type: !30)
!635 = !DILocalVariable(name: "F2NumEnd", scope: !624, file: !3, line: 122, type: !30)
!636 = !DILocalVariable(name: "F1Len", scope: !624, file: !3, line: 123, type: !637)
!637 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !638)
!638 = !DIDerivedType(tag: DW_TAG_typedef, name: "ptrdiff_t", file: !97, line: 35, baseType: !41)
!639 = !DILocalVariable(name: "F2Len", scope: !624, file: !3, line: 124, type: !637)
!640 = !DILocalVariable(name: "V1", scope: !624, file: !3, line: 125, type: !218)
!641 = !DILocalVariable(name: "V2", scope: !624, file: !3, line: 125, type: !218)
!642 = !DILocalVariable(name: "StrTmp", scope: !643, file: !3, line: 139, type: !27)
!643 = distinct !DILexicalBlock(scope: !644, file: !3, line: 137, column: 45)
!644 = distinct !DILexicalBlock(scope: !624, file: !3, line: 137, column: 7)
!645 = !DILocalVariable(name: "StrTmp", scope: !646, file: !3, line: 153, type: !27)
!646 = distinct !DILexicalBlock(scope: !647, file: !3, line: 151, column: 45)
!647 = distinct !DILexicalBlock(scope: !624, file: !3, line: 151, column: 7)
!648 = !DILocalVariable(name: "Diff", scope: !649, file: !3, line: 178, type: !218)
!649 = distinct !DILexicalBlock(scope: !650, file: !3, line: 176, column: 60)
!650 = distinct !DILexicalBlock(scope: !624, file: !3, line: 176, column: 7)
!651 = !DILocation(line: 119, column: 40, scope: !624)
!652 = !DILocation(line: 119, column: 57, scope: !624)
!653 = !DILocation(line: 119, column: 74, scope: !624)
!654 = !DILocation(line: 120, column: 40, scope: !624)
!655 = !DILocation(line: 120, column: 54, scope: !624)
!656 = !DILocation(line: 121, column: 35, scope: !624)
!657 = !DILocation(line: 122, column: 3, scope: !624)
!658 = !DILocation(line: 122, column: 15, scope: !624)
!659 = !DILocation(line: 122, column: 26, scope: !624)
!660 = !DILocation(line: 123, column: 3, scope: !624)
!661 = !DILocation(line: 123, column: 19, scope: !624)
!662 = !DILocation(line: 123, column: 27, scope: !624)
!663 = !DILocation(line: 123, column: 35, scope: !624)
!664 = !DILocation(line: 123, column: 33, scope: !624)
!665 = !DILocation(line: 124, column: 3, scope: !624)
!666 = !DILocation(line: 124, column: 19, scope: !624)
!667 = !DILocation(line: 124, column: 27, scope: !624)
!668 = !DILocation(line: 124, column: 35, scope: !624)
!669 = !DILocation(line: 124, column: 33, scope: !624)
!670 = !DILocation(line: 125, column: 3, scope: !624)
!671 = !DILocation(line: 125, column: 10, scope: !624)
!672 = !DILocation(line: 125, column: 20, scope: !624)
!673 = !DILocation(line: 128, column: 7, scope: !674)
!674 = distinct !DILexicalBlock(scope: !624, file: !3, line: 128, column: 7)
!675 = !DILocation(line: 128, column: 16, scope: !674)
!676 = !DILocation(line: 128, column: 13, scope: !674)
!677 = !DILocation(line: 128, column: 22, scope: !674)
!678 = !DILocation(line: 128, column: 32, scope: !674)
!679 = !DILocation(line: 128, column: 37, scope: !674)
!680 = !DILocation(line: 128, column: 42, scope: !674)
!681 = !DILocation(line: 128, column: 25, scope: !674)
!682 = !DILocation(line: 128, column: 49, scope: !674)
!683 = !DILocation(line: 128, column: 7, scope: !624)
!684 = !DILocation(line: 129, column: 5, scope: !674)
!685 = !DILocation(line: 134, column: 15, scope: !624)
!686 = !DILocation(line: 134, column: 8, scope: !624)
!687 = !DILocation(line: 134, column: 6, scope: !624)
!688 = !DILocation(line: 135, column: 15, scope: !624)
!689 = !DILocation(line: 135, column: 8, scope: !624)
!690 = !DILocation(line: 135, column: 6, scope: !624)
!691 = !DILocation(line: 137, column: 8, scope: !644)
!692 = !DILocation(line: 137, column: 7, scope: !644)
!693 = !DILocation(line: 137, column: 17, scope: !644)
!694 = !DILocation(line: 137, column: 24, scope: !644)
!695 = !DILocation(line: 137, column: 28, scope: !644)
!696 = !DILocation(line: 137, column: 27, scope: !644)
!697 = !DILocation(line: 137, column: 37, scope: !644)
!698 = !DILocation(line: 137, column: 7, scope: !624)
!699 = !DILocation(line: 139, column: 5, scope: !643)
!700 = !DILocation(line: 139, column: 11, scope: !643)
!701 = !DILocation(line: 139, column: 27, scope: !643)
!702 = !DILocation(line: 139, column: 33, scope: !643)
!703 = !DILocation(line: 139, column: 20, scope: !643)
!704 = !DILocation(line: 140, column: 12, scope: !705)
!705 = !DILexicalBlockFile(scope: !643, file: !3, discriminator: 0)
!706 = !DILocation(line: 140, column: 20, scope: !705)
!707 = !DILocation(line: 140, column: 25, scope: !705)
!708 = !DILocation(line: 140, column: 31, scope: !705)
!709 = !DILocation(line: 140, column: 5, scope: !705)
!710 = !DILocation(line: 143, column: 5, scope: !705)
!711 = !DILocation(line: 143, column: 23, scope: !705)
!712 = !DILocation(line: 143, column: 34, scope: !705)
!713 = !DILocation(line: 143, column: 32, scope: !705)
!714 = !DILocation(line: 143, column: 12, scope: !705)
!715 = !DILocation(line: 143, column: 40, scope: !705)
!716 = !DILocation(line: 145, column: 18, scope: !705)
!717 = !DILocation(line: 145, column: 10, scope: !705)
!718 = !DILocation(line: 145, column: 8, scope: !705)
!719 = !DILocation(line: 146, column: 16, scope: !705)
!720 = !DILocation(line: 146, column: 23, scope: !705)
!721 = !DILocation(line: 146, column: 35, scope: !705)
!722 = !DILocation(line: 146, column: 32, scope: !705)
!723 = !DILocation(line: 146, column: 20, scope: !705)
!724 = !DILocation(line: 146, column: 14, scope: !705)
!725 = !DILocation(line: 148, column: 10, scope: !705)
!726 = !DILocation(line: 148, column: 5, scope: !705)
!727 = !DILocation(line: 149, column: 3, scope: !644)
!728 = !DILocation(line: 149, column: 3, scope: !705)
!729 = !DILocation(line: 151, column: 8, scope: !647)
!730 = !DILocation(line: 151, column: 7, scope: !647)
!731 = !DILocation(line: 151, column: 17, scope: !647)
!732 = !DILocation(line: 151, column: 24, scope: !647)
!733 = !DILocation(line: 151, column: 28, scope: !647)
!734 = !DILocation(line: 151, column: 27, scope: !647)
!735 = !DILocation(line: 151, column: 37, scope: !647)
!736 = !DILocation(line: 151, column: 7, scope: !624)
!737 = !DILocation(line: 153, column: 5, scope: !646)
!738 = !DILocation(line: 153, column: 11, scope: !646)
!739 = !DILocation(line: 153, column: 27, scope: !646)
!740 = !DILocation(line: 153, column: 33, scope: !646)
!741 = !DILocation(line: 153, column: 20, scope: !646)
!742 = !DILocation(line: 154, column: 12, scope: !743)
!743 = !DILexicalBlockFile(scope: !646, file: !3, discriminator: 0)
!744 = !DILocation(line: 154, column: 20, scope: !743)
!745 = !DILocation(line: 154, column: 25, scope: !743)
!746 = !DILocation(line: 154, column: 31, scope: !743)
!747 = !DILocation(line: 154, column: 5, scope: !743)
!748 = !DILocation(line: 157, column: 5, scope: !743)
!749 = !DILocation(line: 157, column: 23, scope: !743)
!750 = !DILocation(line: 157, column: 34, scope: !743)
!751 = !DILocation(line: 157, column: 32, scope: !743)
!752 = !DILocation(line: 157, column: 12, scope: !743)
!753 = !DILocation(line: 157, column: 40, scope: !743)
!754 = !DILocation(line: 159, column: 18, scope: !743)
!755 = !DILocation(line: 159, column: 10, scope: !743)
!756 = !DILocation(line: 159, column: 8, scope: !743)
!757 = !DILocation(line: 160, column: 16, scope: !743)
!758 = !DILocation(line: 160, column: 23, scope: !743)
!759 = !DILocation(line: 160, column: 35, scope: !743)
!760 = !DILocation(line: 160, column: 32, scope: !743)
!761 = !DILocation(line: 160, column: 20, scope: !743)
!762 = !DILocation(line: 160, column: 14, scope: !743)
!763 = !DILocation(line: 162, column: 10, scope: !743)
!764 = !DILocation(line: 162, column: 5, scope: !743)
!765 = !DILocation(line: 163, column: 3, scope: !647)
!766 = !DILocation(line: 163, column: 3, scope: !743)
!767 = !DILocation(line: 165, column: 7, scope: !768)
!768 = distinct !DILexicalBlock(scope: !624, file: !3, line: 165, column: 7)
!769 = !DILocation(line: 165, column: 19, scope: !768)
!770 = !DILocation(line: 165, column: 16, scope: !768)
!771 = !DILocation(line: 165, column: 23, scope: !768)
!772 = !DILocation(line: 165, column: 26, scope: !768)
!773 = !DILocation(line: 165, column: 38, scope: !768)
!774 = !DILocation(line: 165, column: 35, scope: !768)
!775 = !DILocation(line: 165, column: 7, scope: !624)
!776 = !DILocation(line: 166, column: 13, scope: !777)
!777 = distinct !DILexicalBlock(scope: !768, file: !3, line: 165, column: 43)
!778 = !DILocation(line: 167, column: 50, scope: !777)
!779 = !DILocation(line: 167, column: 61, scope: !777)
!780 = !DILocation(line: 167, column: 69, scope: !777)
!781 = !DILocation(line: 166, column: 5, scope: !777)
!782 = !DILocation(line: 168, column: 5, scope: !777)
!783 = !DILocation(line: 172, column: 7, scope: !784)
!784 = distinct !DILexicalBlock(scope: !624, file: !3, line: 172, column: 7)
!785 = !DILocation(line: 172, column: 13, scope: !784)
!786 = !DILocation(line: 172, column: 10, scope: !784)
!787 = !DILocation(line: 172, column: 7, scope: !624)
!788 = !DILocation(line: 173, column: 5, scope: !784)
!789 = !DILocation(line: 176, column: 7, scope: !650)
!790 = !DILocation(line: 176, column: 20, scope: !650)
!791 = !DILocation(line: 176, column: 27, scope: !650)
!792 = !DILocation(line: 176, column: 30, scope: !650)
!793 = !DILocation(line: 176, column: 50, scope: !650)
!794 = !DILocation(line: 176, column: 55, scope: !650)
!795 = !DILocation(line: 176, column: 53, scope: !650)
!796 = !DILocation(line: 176, column: 45, scope: !650)
!797 = !DILocation(line: 176, column: 43, scope: !650)
!798 = !DILocation(line: 176, column: 7, scope: !624)
!799 = !DILocation(line: 178, column: 5, scope: !649)
!800 = !DILocation(line: 178, column: 12, scope: !649)
!801 = !DILocation(line: 179, column: 9, scope: !802)
!802 = distinct !DILexicalBlock(scope: !649, file: !3, line: 179, column: 9)
!803 = !DILocation(line: 179, column: 9, scope: !649)
!804 = !DILocation(line: 180, column: 19, scope: !802)
!805 = !DILocation(line: 180, column: 22, scope: !802)
!806 = !DILocation(line: 180, column: 21, scope: !802)
!807 = !DILocation(line: 180, column: 25, scope: !802)
!808 = !DILocation(line: 180, column: 14, scope: !802)
!809 = !DILocation(line: 180, column: 12, scope: !802)
!810 = !DILocation(line: 180, column: 7, scope: !802)
!811 = !DILocation(line: 181, column: 14, scope: !812)
!812 = distinct !DILexicalBlock(scope: !802, file: !3, line: 181, column: 14)
!813 = !DILocation(line: 181, column: 14, scope: !802)
!814 = !DILocation(line: 182, column: 19, scope: !812)
!815 = !DILocation(line: 182, column: 22, scope: !812)
!816 = !DILocation(line: 182, column: 21, scope: !812)
!817 = !DILocation(line: 182, column: 25, scope: !812)
!818 = !DILocation(line: 182, column: 14, scope: !812)
!819 = !DILocation(line: 182, column: 12, scope: !812)
!820 = !DILocation(line: 182, column: 7, scope: !812)
!821 = !DILocation(line: 184, column: 12, scope: !812)
!822 = !DILocation(line: 185, column: 9, scope: !823)
!823 = distinct !DILexicalBlock(scope: !649, file: !3, line: 185, column: 9)
!824 = !DILocation(line: 185, column: 22, scope: !823)
!825 = !DILocation(line: 185, column: 29, scope: !823)
!826 = !DILocation(line: 185, column: 32, scope: !823)
!827 = !DILocation(line: 185, column: 39, scope: !823)
!828 = !DILocation(line: 185, column: 37, scope: !823)
!829 = !DILocation(line: 185, column: 9, scope: !649)
!830 = !DILocation(line: 186, column: 15, scope: !831)
!831 = distinct !DILexicalBlock(scope: !823, file: !3, line: 185, column: 53)
!832 = !DILocation(line: 189, column: 15, scope: !831)
!833 = !DILocation(line: 189, column: 26, scope: !831)
!834 = !DILocation(line: 189, column: 30, scope: !831)
!835 = !DILocation(line: 189, column: 39, scope: !831)
!836 = !DILocation(line: 189, column: 42, scope: !831)
!837 = !DILocation(line: 189, column: 41, scope: !831)
!838 = !DILocation(line: 189, column: 34, scope: !831)
!839 = !DILocation(line: 189, column: 47, scope: !831)
!840 = !DILocation(line: 189, column: 53, scope: !831)
!841 = !DILocation(line: 189, column: 67, scope: !831)
!842 = !DILocation(line: 186, column: 7, scope: !831)
!843 = !DILocation(line: 190, column: 7, scope: !831)
!844 = !DILocation(line: 192, column: 3, scope: !650)
!845 = !DILocation(line: 192, column: 3, scope: !649)
!846 = !DILocation(line: 194, column: 3, scope: !624)
!847 = !DILocation(line: 195, column: 1, scope: !624)
!848 = distinct !DISubprogram(name: "usage", scope: !3, file: !3, line: 370, type: !849, scopeLine: 370, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !208)
!849 = !DISubroutineType(types: !850)
!850 = !{null}
!851 = !DILocation(line: 371, column: 11, scope: !848)
!852 = !DILocation(line: 372, column: 11, scope: !848)
!853 = !DILocation(line: 371, column: 3, scope: !848)
!854 = !DILocation(line: 373, column: 11, scope: !848)
!855 = !DILocation(line: 373, column: 3, scope: !848)
!856 = !DILocation(line: 374, column: 11, scope: !848)
!857 = !DILocation(line: 374, column: 3, scope: !848)
!858 = !DILocation(line: 375, column: 11, scope: !848)
!859 = !DILocation(line: 375, column: 3, scope: !848)
!860 = !DILocation(line: 376, column: 11, scope: !848)
!861 = !DILocation(line: 376, column: 3, scope: !848)
!862 = !DILocation(line: 377, column: 3, scope: !848)
!863 = distinct !DISubprogram(name: "main", scope: !3, file: !3, line: 380, type: !864, scopeLine: 380, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !868)
!864 = !DISubroutineType(types: !865)
!865 = !{!23, !23, !866}
!866 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !867, size: 64)
!867 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
!868 = !{!869, !870, !871, !872, !873, !874, !875, !879, !883}
!869 = !DILocalVariable(name: "argc", arg: 1, scope: !863, file: !3, line: 380, type: !23)
!870 = !DILocalVariable(name: "argv", arg: 2, scope: !863, file: !3, line: 380, type: !866)
!871 = !DILocalVariable(name: "relative_tolerance", scope: !863, file: !3, line: 381, type: !218)
!872 = !DILocalVariable(name: "absolute_tolerance", scope: !863, file: !3, line: 382, type: !218)
!873 = !DILocalVariable(name: "ignore_whitespace", scope: !863, file: !3, line: 383, type: !22)
!874 = !DILocalVariable(name: "i", scope: !863, file: !3, line: 384, type: !23)
!875 = !DILocalVariable(name: "arg", scope: !876, file: !3, line: 388, type: !30)
!876 = distinct !DILexicalBlock(scope: !877, file: !3, line: 387, column: 31)
!877 = distinct !DILexicalBlock(scope: !878, file: !3, line: 387, column: 3)
!878 = distinct !DILexicalBlock(scope: !863, file: !3, line: 387, column: 3)
!879 = !DILocalVariable(name: "endp", scope: !880, file: !3, line: 404, type: !27)
!880 = distinct !DILexicalBlock(scope: !881, file: !3, line: 403, column: 14)
!881 = distinct !DILexicalBlock(scope: !882, file: !3, line: 400, column: 11)
!882 = distinct !DILexicalBlock(scope: !876, file: !3, line: 397, column: 21)
!883 = !DILocalVariable(name: "value", scope: !880, file: !3, line: 405, type: !218)
!884 = !DILocation(line: 380, column: 14, scope: !863)
!885 = !DILocation(line: 380, column: 33, scope: !863)
!886 = !DILocation(line: 381, column: 3, scope: !863)
!887 = !DILocation(line: 381, column: 10, scope: !863)
!888 = !DILocation(line: 382, column: 3, scope: !863)
!889 = !DILocation(line: 382, column: 10, scope: !863)
!890 = !DILocation(line: 383, column: 3, scope: !863)
!891 = !DILocation(line: 383, column: 8, scope: !863)
!892 = !DILocation(line: 384, column: 3, scope: !863)
!893 = !DILocation(line: 384, column: 7, scope: !863)
!894 = !DILocation(line: 386, column: 15, scope: !863)
!895 = !DILocation(line: 386, column: 13, scope: !863)
!896 = !DILocation(line: 387, column: 10, scope: !878)
!897 = !DILocation(line: 387, column: 8, scope: !878)
!898 = !DILocation(line: 387, column: 15, scope: !877)
!899 = !DILocation(line: 387, column: 20, scope: !877)
!900 = !DILocation(line: 387, column: 17, scope: !877)
!901 = !DILocation(line: 387, column: 3, scope: !878)
!902 = !DILocation(line: 388, column: 5, scope: !876)
!903 = !DILocation(line: 388, column: 17, scope: !876)
!904 = !DILocation(line: 388, column: 23, scope: !876)
!905 = !DILocation(line: 388, column: 28, scope: !876)
!906 = !DILocation(line: 389, column: 9, scope: !907)
!907 = distinct !DILexicalBlock(scope: !876, file: !3, line: 389, column: 9)
!908 = !DILocation(line: 389, column: 16, scope: !907)
!909 = !DILocation(line: 389, column: 9, scope: !876)
!910 = !DILocation(line: 390, column: 9, scope: !907)
!911 = !DILocation(line: 392, column: 16, scope: !912)
!912 = distinct !DILexicalBlock(scope: !876, file: !3, line: 392, column: 9)
!913 = !DILocation(line: 392, column: 9, scope: !912)
!914 = !DILocation(line: 392, column: 21, scope: !912)
!915 = !DILocation(line: 392, column: 9, scope: !876)
!916 = !DILocation(line: 393, column: 15, scope: !917)
!917 = distinct !DILexicalBlock(scope: !912, file: !3, line: 392, column: 27)
!918 = !DILocation(line: 393, column: 59, scope: !917)
!919 = !DILocation(line: 393, column: 7, scope: !917)
!920 = !DILocation(line: 394, column: 7, scope: !917)
!921 = !DILocation(line: 395, column: 5, scope: !917)
!922 = !DILocation(line: 397, column: 13, scope: !876)
!923 = !DILocation(line: 397, column: 5, scope: !876)
!924 = !DILocation(line: 400, column: 11, scope: !881)
!925 = !DILocation(line: 400, column: 13, scope: !881)
!926 = !DILocation(line: 400, column: 20, scope: !881)
!927 = !DILocation(line: 400, column: 17, scope: !881)
!928 = !DILocation(line: 400, column: 11, scope: !882)
!929 = !DILocation(line: 401, column: 17, scope: !930)
!930 = distinct !DILexicalBlock(scope: !881, file: !3, line: 400, column: 26)
!931 = !DILocation(line: 401, column: 64, scope: !930)
!932 = !DILocation(line: 401, column: 9, scope: !930)
!933 = !DILocation(line: 402, column: 9, scope: !930)
!934 = !DILocation(line: 403, column: 7, scope: !930)
!935 = !DILocation(line: 404, column: 9, scope: !880)
!936 = !DILocation(line: 404, column: 15, scope: !880)
!937 = !DILocation(line: 405, column: 9, scope: !880)
!938 = !DILocation(line: 405, column: 16, scope: !880)
!939 = !DILocation(line: 405, column: 31, scope: !880)
!940 = !DILocation(line: 405, column: 36, scope: !880)
!941 = !DILocation(line: 405, column: 24, scope: !880)
!942 = !DILocation(line: 406, column: 13, scope: !943)
!943 = distinct !DILexicalBlock(scope: !880, file: !3, line: 406, column: 13)
!944 = !DILocation(line: 406, column: 18, scope: !943)
!945 = !DILocation(line: 406, column: 23, scope: !943)
!946 = !DILocation(line: 406, column: 27, scope: !943)
!947 = !DILocation(line: 406, column: 26, scope: !943)
!948 = !DILocation(line: 406, column: 32, scope: !943)
!949 = !DILocation(line: 406, column: 13, scope: !880)
!950 = !DILocation(line: 407, column: 19, scope: !951)
!951 = distinct !DILexicalBlock(scope: !943, file: !3, line: 406, column: 41)
!952 = !DILocation(line: 407, column: 72, scope: !951)
!953 = !DILocation(line: 408, column: 19, scope: !951)
!954 = !DILocation(line: 408, column: 24, scope: !951)
!955 = !DILocation(line: 407, column: 11, scope: !951)
!956 = !DILocation(line: 409, column: 11, scope: !951)
!957 = !DILocation(line: 410, column: 9, scope: !951)
!958 = !DILocation(line: 411, column: 13, scope: !959)
!959 = distinct !DILexicalBlock(scope: !880, file: !3, line: 411, column: 13)
!960 = !DILocation(line: 411, column: 20, scope: !959)
!961 = !DILocation(line: 411, column: 13, scope: !880)
!962 = !DILocation(line: 412, column: 32, scope: !959)
!963 = !DILocation(line: 412, column: 30, scope: !959)
!964 = !DILocation(line: 412, column: 11, scope: !959)
!965 = !DILocation(line: 414, column: 32, scope: !959)
!966 = !DILocation(line: 414, column: 30, scope: !959)
!967 = !DILocation(line: 415, column: 7, scope: !881)
!968 = !DILocation(line: 416, column: 7, scope: !882)
!969 = !DILocation(line: 419, column: 25, scope: !882)
!970 = !DILocation(line: 420, column: 7, scope: !882)
!971 = !DILocation(line: 423, column: 15, scope: !882)
!972 = !DILocation(line: 423, column: 59, scope: !882)
!973 = !DILocation(line: 423, column: 7, scope: !882)
!974 = !DILocation(line: 424, column: 7, scope: !882)
!975 = !DILocation(line: 425, column: 5, scope: !882)
!976 = !DILocation(line: 426, column: 3, scope: !877)
!977 = !DILocation(line: 426, column: 3, scope: !876)
!978 = !DILocation(line: 387, column: 26, scope: !877)
!979 = !DILocation(line: 387, column: 3, scope: !877)
!980 = distinct !{!980, !901, !981, !483}
!981 = !DILocation(line: 426, column: 3, scope: !878)
!982 = !DILocation(line: 428, column: 7, scope: !983)
!983 = distinct !DILexicalBlock(scope: !863, file: !3, line: 428, column: 7)
!984 = !DILocation(line: 428, column: 9, scope: !983)
!985 = !DILocation(line: 428, column: 16, scope: !983)
!986 = !DILocation(line: 428, column: 13, scope: !983)
!987 = !DILocation(line: 428, column: 7, scope: !863)
!988 = !DILocation(line: 429, column: 13, scope: !989)
!989 = distinct !DILexicalBlock(scope: !983, file: !3, line: 428, column: 22)
!990 = !DILocation(line: 429, column: 5, scope: !989)
!991 = !DILocation(line: 430, column: 5, scope: !989)
!992 = !DILocation(line: 431, column: 3, scope: !989)
!993 = !DILocation(line: 433, column: 36, scope: !863)
!994 = !DILocation(line: 433, column: 41, scope: !863)
!995 = !DILocation(line: 433, column: 45, scope: !863)
!996 = !DILocation(line: 433, column: 50, scope: !863)
!997 = !DILocation(line: 433, column: 52, scope: !863)
!998 = !DILocation(line: 433, column: 58, scope: !863)
!999 = !DILocation(line: 434, column: 36, scope: !863)
!1000 = !DILocation(line: 434, column: 56, scope: !863)
!1001 = !DILocation(line: 433, column: 10, scope: !863)
!1002 = !DILocation(line: 433, column: 3, scope: !863)
!1003 = !DILocation(line: 435, column: 1, scope: !863)
!1004 = distinct !DISubprogram(name: "isDigitChar", scope: !3, file: !3, line: 42, type: !488, scopeLine: 42, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !1005)
!1005 = !{!1006}
!1006 = !DILocalVariable(name: "C", arg: 1, scope: !1004, file: !3, line: 42, type: !28)
!1007 = !DILocation(line: 42, column: 30, scope: !1004)
!1008 = !DILocation(line: 43, column: 11, scope: !1004)
!1009 = !DILocation(line: 43, column: 3, scope: !1004)
!1010 = !DILocation(line: 46, column: 5, scope: !1011)
!1011 = distinct !DILexicalBlock(scope: !1004, file: !3, line: 43, column: 14)
!1012 = !DILocation(line: 48, column: 5, scope: !1011)
!1013 = !DILocation(line: 50, column: 1, scope: !1004)
!1014 = distinct !DISubprogram(name: "isSignedChar", scope: !3, file: !3, line: 28, type: !488, scopeLine: 28, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !1015)
!1015 = !{!1016}
!1016 = !DILocalVariable(name: "C", arg: 1, scope: !1014, file: !3, line: 28, type: !28)
!1017 = !DILocation(line: 28, column: 31, scope: !1014)
!1018 = !DILocation(line: 29, column: 11, scope: !1014)
!1019 = !DILocation(line: 29, column: 13, scope: !1014)
!1020 = !DILocation(line: 29, column: 20, scope: !1014)
!1021 = !DILocation(line: 29, column: 23, scope: !1014)
!1022 = !DILocation(line: 29, column: 25, scope: !1014)
!1023 = !DILocation(line: 29, column: 3, scope: !1014)
!1024 = distinct !DISubprogram(name: "isExponentChar", scope: !3, file: !3, line: 32, type: !488, scopeLine: 32, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !1025)
!1025 = !{!1026}
!1026 = !DILocalVariable(name: "C", arg: 1, scope: !1024, file: !3, line: 32, type: !28)
!1027 = !DILocation(line: 32, column: 33, scope: !1024)
!1028 = !DILocation(line: 33, column: 11, scope: !1024)
!1029 = !DILocation(line: 33, column: 3, scope: !1024)
!1030 = !DILocation(line: 37, column: 13, scope: !1031)
!1031 = distinct !DILexicalBlock(scope: !1024, file: !3, line: 33, column: 14)
!1032 = !DILocation(line: 38, column: 12, scope: !1031)
!1033 = !DILocation(line: 40, column: 1, scope: !1024)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment