Skip to content

Instantly share code, notes, and snippets.

@scottcarr
Created February 9, 2016 18:55
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 scottcarr/ce0bb6df1cbb44ec46a5 to your computer and use it in GitHub Desktop.
Save scottcarr/ce0bb6df1cbb44ec46a5 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal void @copy(%struct.vector3* %dst, %struct.vector3* %src) #0 !dbg !14 {
entry:
%dst.addr = alloca %struct.vector3*, align 8
%src.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %dst, %struct.vector3** %dst.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %dst.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %src, %struct.vector3** %src.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %src.addr, metadata !57, metadata !35), !dbg !58
%0 = load %struct.vector3*, %struct.vector3** %dst.addr, align 8, !dbg !59
%1 = bitcast %struct.vector3* %0 to i8*, !dbg !60
%2 = load %struct.vector3*, %struct.vector3** %src.addr, align 8, !dbg !61
%3 = bitcast %struct.vector3* %2 to i8*, !dbg !60
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %3, i64 12, i32 4, i1 false), !dbg !60
ret void, !dbg !62
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !63, metadata !35), !dbg !64
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !65, metadata !35), !dbg !66
call void @llvm.dbg.declare(metadata i32* %x, metadata !67, metadata !35), !dbg !68
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !70
%1 = load i32, i32* %x1, align 4, !dbg !70
store i32 %1, i32* %x, align 4, !dbg !68
call void @llvm.dbg.declare(metadata i32* %y, metadata !71, metadata !35), !dbg !72
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !74
%3 = load i32, i32* %y2, align 4, !dbg !74
store i32 %3, i32* %y, align 4, !dbg !72
call void @llvm.dbg.declare(metadata i32* %z, metadata !75, metadata !35), !dbg !76
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !77
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !78
%5 = load i32, i32* %z3, align 4, !dbg !78
store i32 %5, i32* %z, align 4, !dbg !76
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !79
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !80
%7 = load i32, i32* %x4, align 4, !dbg !80
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !81
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !82
store i32 %7, i32* %x5, align 4, !dbg !83
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !84
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !85
%10 = load i32, i32* %y6, align 4, !dbg !85
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !86
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !87
store i32 %10, i32* %y7, align 4, !dbg !88
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !89
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !90
%13 = load i32, i32* %z8, align 4, !dbg !90
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !91
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !92
store i32 %13, i32* %z9, align 4, !dbg !93
%15 = load i32, i32* %x, align 4, !dbg !94
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !96
store i32 %15, i32* %x10, align 4, !dbg !97
%17 = load i32, i32* %y, align 4, !dbg !98
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !99
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !100
store i32 %17, i32* %y11, align 4, !dbg !101
%19 = load i32, i32* %z, align 4, !dbg !102
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !103
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !104
store i32 %19, i32* %z12, align 4, !dbg !105
ret void, !dbg !106
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !107, metadata !35), !dbg !108
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !109, metadata !35), !dbg !110
call void @llvm.dbg.declare(metadata i32* %i, metadata !111, metadata !35), !dbg !113
store i32 0, i32* %i, align 4, !dbg !113
br label %for.cond, !dbg !114
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !115
%1 = load i32, i32* %N.addr, align 4, !dbg !118
%cmp = icmp slt i32 %0, %1, !dbg !119
br i1 %cmp, label %for.body, label %for.end, !dbg !120
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !121, metadata !35), !dbg !123
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !124
%3 = load i32, i32* %i, align 4, !dbg !125
%4 = load i32, i32* %N.addr, align 4, !dbg !126
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !127
store i32 %call, i32* %idx, align 4, !dbg !123
%5 = load i32, i32* %idx, align 4, !dbg !128
%idxprom = sext i32 %5 to i64, !dbg !129
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !129
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !129
%7 = load i32, i32* %i, align 4, !dbg !130
%idxprom1 = sext i32 %7 to i64, !dbg !131
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !131
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !131
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !132
br label %for.inc, !dbg !133
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !134
%inc = add nsw i32 %9, 1, !dbg !134
store i32 %inc, i32* %i, align 4, !dbg !134
br label %for.cond, !dbg !136
for.end: ; preds = %for.cond
ret void, !dbg !137
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #0 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !138, metadata !35), !dbg !139
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !140, metadata !35), !dbg !141
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !144, metadata !35), !dbg !145
%0 = load i32, i32* %start.addr, align 4, !dbg !146
%idxprom = sext i32 %0 to i64, !dbg !147
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !147
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !147
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !148
%2 = load i32, i32* %x, align 4, !dbg !148
store i32 %2, i32* %smallest, align 4, !dbg !145
call void @llvm.dbg.declare(metadata i32* %idx, metadata !149, metadata !35), !dbg !150
%3 = load i32, i32* %start.addr, align 4, !dbg !151
store i32 %3, i32* %idx, align 4, !dbg !150
call void @llvm.dbg.declare(metadata i32* %i, metadata !152, metadata !35), !dbg !154
%4 = load i32, i32* %start.addr, align 4, !dbg !155
store i32 %4, i32* %i, align 4, !dbg !154
br label %for.cond, !dbg !156
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !157
%6 = load i32, i32* %N.addr, align 4, !dbg !160
%cmp = icmp slt i32 %5, %6, !dbg !161
br i1 %cmp, label %for.body, label %for.end, !dbg !162
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !163
%idxprom1 = sext i32 %7 to i64, !dbg !166
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !166
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !166
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !167
%9 = load i32, i32* %x3, align 4, !dbg !167
%10 = load i32, i32* %smallest, align 4, !dbg !168
%cmp4 = icmp slt i32 %9, %10, !dbg !169
br i1 %cmp4, label %if.then, label %if.end, !dbg !170
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !171
store i32 %11, i32* %idx, align 4, !dbg !173
%12 = load i32, i32* %i, align 4, !dbg !174
%idxprom5 = sext i32 %12 to i64, !dbg !175
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !175
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !175
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !176
%14 = load i32, i32* %x7, align 4, !dbg !176
store i32 %14, i32* %smallest, align 4, !dbg !177
br label %if.end, !dbg !178
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !179
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !180
%inc = add nsw i32 %15, 1, !dbg !180
store i32 %inc, i32* %i, align 4, !dbg !180
br label %for.cond, !dbg !182
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !183
ret i32 %16, !dbg !184
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #0 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !185, metadata !35), !dbg !186
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !187, metadata !35), !dbg !188
%0 = load i32, i32* %N.addr, align 4, !dbg !189
%conv = sext i32 %0 to i64, !dbg !189
%mul = mul i64 12, %conv, !dbg !190
%call = call noalias i8* @malloc(i64 %mul) #5, !dbg !191
%1 = bitcast i8* %call to %struct.vector3*, !dbg !191
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !188
call void @llvm.dbg.declare(metadata i32* %i, metadata !192, metadata !35), !dbg !194
store i32 0, i32* %i, align 4, !dbg !194
br label %for.cond, !dbg !195
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !196
%3 = load i32, i32* %N.addr, align 4, !dbg !199
%cmp = icmp slt i32 %2, %3, !dbg !200
br i1 %cmp, label %for.body, label %for.end, !dbg !201
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #5, !dbg !202
%rem = srem i32 %call2, 100, !dbg !204
%4 = load i32, i32* %i, align 4, !dbg !205
%idxprom = sext i32 %4 to i64, !dbg !206
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !206
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !206
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !207
store i32 %rem, i32* %x, align 4, !dbg !208
%call3 = call i32 @rand() #5, !dbg !209
%rem4 = srem i32 %call3, 100, !dbg !210
%6 = load i32, i32* %i, align 4, !dbg !211
%idxprom5 = sext i32 %6 to i64, !dbg !212
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !212
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
store i32 %rem4, i32* %y, align 4, !dbg !214
%call7 = call i32 @rand() #5, !dbg !215
%rem8 = srem i32 %call7, 100, !dbg !216
%8 = load i32, i32* %i, align 4, !dbg !217
%idxprom9 = sext i32 %8 to i64, !dbg !218
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !218
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !218
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !219
store i32 %rem8, i32* %z, align 4, !dbg !220
br label %for.inc, !dbg !221
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !222
%inc = add nsw i32 %10, 1, !dbg !222
store i32 %inc, i32* %i, align 4, !dbg !222
br label %for.cond, !dbg !224
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !225
ret %struct.vector3* %11, !dbg !226
}
*** IR Dump After Module Verifier ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !227, metadata !35), !dbg !228
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !229, metadata !35), !dbg !230
%0 = load i32, i32* %argc.addr, align 4, !dbg !231
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !232
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !233
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !233
%2 = load i8*, i8** %arrayidx, align 8, !dbg !233
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !234
call void @llvm.dbg.declare(metadata i32* %x, metadata !235, metadata !35), !dbg !236
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !237
%call3 = call i64 @time(i64* null) #5, !dbg !238
%conv = trunc i64 %call3 to i32, !dbg !238
call void @srand(i32 %conv) #5, !dbg !239
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !241, metadata !35), !dbg !242
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !243
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !242
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !244, metadata !35), !dbg !245
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !246
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !245
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !247, metadata !35), !dbg !248
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !249
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !249
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !248
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !250, metadata !35), !dbg !251
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !252
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !252
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !251
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !253, metadata !35), !dbg !254
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !255
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !255
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !254
%6 = load i32, i32* %argc.addr, align 4, !dbg !256
%cmp = icmp eq i32 %6, 1, !dbg !258
br i1 %cmp, label %if.then, label %if.else, !dbg !259
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !260
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !263
br label %if.end, !dbg !264
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !265
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !267
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !268
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !269
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !270
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !271
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !272
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !273
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !274
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !275
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !276
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !277
%16 = load i32, i32* %x10, align 4, !dbg !277
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !278
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !279
%18 = load i32, i32* %y, align 4, !dbg !279
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !280
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !281
%20 = load i32, i32* %z, align 4, !dbg !281
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !282
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !283
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !283
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !284
%22 = load i32, i32* %x13, align 4, !dbg !284
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !285
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !285
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !286
%24 = load i32, i32* %x15, align 4, !dbg !286
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !287
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !287
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !288
%26 = load i32, i32* %x17, align 4, !dbg !288
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !289
ret i32 0, !dbg !290
}
*** IR Dump After Force set function attributes ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: nounwind uwtable
define internal void @copy(%struct.vector3* %dst, %struct.vector3* %src) #0 !dbg !14 {
entry:
%dst.addr = alloca %struct.vector3*, align 8
%src.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %dst, %struct.vector3** %dst.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %dst.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %src, %struct.vector3** %src.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %src.addr, metadata !57, metadata !35), !dbg !58
%0 = load %struct.vector3*, %struct.vector3** %dst.addr, align 8, !dbg !59
%1 = bitcast %struct.vector3* %0 to i8*, !dbg !60
%2 = load %struct.vector3*, %struct.vector3** %src.addr, align 8, !dbg !61
%3 = bitcast %struct.vector3* %2 to i8*, !dbg !60
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %3, i64 12, i32 4, i1 false), !dbg !60
ret void, !dbg !62
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !63, metadata !35), !dbg !64
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !65, metadata !35), !dbg !66
call void @llvm.dbg.declare(metadata i32* %x, metadata !67, metadata !35), !dbg !68
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !70
%1 = load i32, i32* %x1, align 4, !dbg !70
store i32 %1, i32* %x, align 4, !dbg !68
call void @llvm.dbg.declare(metadata i32* %y, metadata !71, metadata !35), !dbg !72
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !74
%3 = load i32, i32* %y2, align 4, !dbg !74
store i32 %3, i32* %y, align 4, !dbg !72
call void @llvm.dbg.declare(metadata i32* %z, metadata !75, metadata !35), !dbg !76
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !77
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !78
%5 = load i32, i32* %z3, align 4, !dbg !78
store i32 %5, i32* %z, align 4, !dbg !76
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !79
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !80
%7 = load i32, i32* %x4, align 4, !dbg !80
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !81
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !82
store i32 %7, i32* %x5, align 4, !dbg !83
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !84
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !85
%10 = load i32, i32* %y6, align 4, !dbg !85
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !86
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !87
store i32 %10, i32* %y7, align 4, !dbg !88
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !89
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !90
%13 = load i32, i32* %z8, align 4, !dbg !90
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !91
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !92
store i32 %13, i32* %z9, align 4, !dbg !93
%15 = load i32, i32* %x, align 4, !dbg !94
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !96
store i32 %15, i32* %x10, align 4, !dbg !97
%17 = load i32, i32* %y, align 4, !dbg !98
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !99
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !100
store i32 %17, i32* %y11, align 4, !dbg !101
%19 = load i32, i32* %z, align 4, !dbg !102
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !103
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !104
store i32 %19, i32* %z12, align 4, !dbg !105
ret void, !dbg !106
}
; Function Attrs: nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !107, metadata !35), !dbg !108
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !109, metadata !35), !dbg !110
call void @llvm.dbg.declare(metadata i32* %i, metadata !111, metadata !35), !dbg !113
store i32 0, i32* %i, align 4, !dbg !113
br label %for.cond, !dbg !114
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !115
%1 = load i32, i32* %N.addr, align 4, !dbg !118
%cmp = icmp slt i32 %0, %1, !dbg !119
br i1 %cmp, label %for.body, label %for.end, !dbg !120
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !121, metadata !35), !dbg !123
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !124
%3 = load i32, i32* %i, align 4, !dbg !125
%4 = load i32, i32* %N.addr, align 4, !dbg !126
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !127
store i32 %call, i32* %idx, align 4, !dbg !123
%5 = load i32, i32* %idx, align 4, !dbg !128
%idxprom = sext i32 %5 to i64, !dbg !129
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !129
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !129
%7 = load i32, i32* %i, align 4, !dbg !130
%idxprom1 = sext i32 %7 to i64, !dbg !131
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !131
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !131
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !132
br label %for.inc, !dbg !133
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !134
%inc = add nsw i32 %9, 1, !dbg !134
store i32 %inc, i32* %i, align 4, !dbg !134
br label %for.cond, !dbg !136
for.end: ; preds = %for.cond
ret void, !dbg !137
}
; Function Attrs: nounwind uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #0 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !138, metadata !35), !dbg !139
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !140, metadata !35), !dbg !141
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !144, metadata !35), !dbg !145
%0 = load i32, i32* %start.addr, align 4, !dbg !146
%idxprom = sext i32 %0 to i64, !dbg !147
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !147
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !147
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !148
%2 = load i32, i32* %x, align 4, !dbg !148
store i32 %2, i32* %smallest, align 4, !dbg !145
call void @llvm.dbg.declare(metadata i32* %idx, metadata !149, metadata !35), !dbg !150
%3 = load i32, i32* %start.addr, align 4, !dbg !151
store i32 %3, i32* %idx, align 4, !dbg !150
call void @llvm.dbg.declare(metadata i32* %i, metadata !152, metadata !35), !dbg !154
%4 = load i32, i32* %start.addr, align 4, !dbg !155
store i32 %4, i32* %i, align 4, !dbg !154
br label %for.cond, !dbg !156
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !157
%6 = load i32, i32* %N.addr, align 4, !dbg !160
%cmp = icmp slt i32 %5, %6, !dbg !161
br i1 %cmp, label %for.body, label %for.end, !dbg !162
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !163
%idxprom1 = sext i32 %7 to i64, !dbg !166
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !166
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !166
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !167
%9 = load i32, i32* %x3, align 4, !dbg !167
%10 = load i32, i32* %smallest, align 4, !dbg !168
%cmp4 = icmp slt i32 %9, %10, !dbg !169
br i1 %cmp4, label %if.then, label %if.end, !dbg !170
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !171
store i32 %11, i32* %idx, align 4, !dbg !173
%12 = load i32, i32* %i, align 4, !dbg !174
%idxprom5 = sext i32 %12 to i64, !dbg !175
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !175
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !175
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !176
%14 = load i32, i32* %x7, align 4, !dbg !176
store i32 %14, i32* %smallest, align 4, !dbg !177
br label %if.end, !dbg !178
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !179
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !180
%inc = add nsw i32 %15, 1, !dbg !180
store i32 %inc, i32* %i, align 4, !dbg !180
br label %for.cond, !dbg !182
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !183
ret i32 %16, !dbg !184
}
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #0 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !185, metadata !35), !dbg !186
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !187, metadata !35), !dbg !188
%0 = load i32, i32* %N.addr, align 4, !dbg !189
%conv = sext i32 %0 to i64, !dbg !189
%mul = mul i64 12, %conv, !dbg !190
%call = call noalias i8* @malloc(i64 %mul) #5, !dbg !191
%1 = bitcast i8* %call to %struct.vector3*, !dbg !191
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !188
call void @llvm.dbg.declare(metadata i32* %i, metadata !192, metadata !35), !dbg !194
store i32 0, i32* %i, align 4, !dbg !194
br label %for.cond, !dbg !195
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !196
%3 = load i32, i32* %N.addr, align 4, !dbg !199
%cmp = icmp slt i32 %2, %3, !dbg !200
br i1 %cmp, label %for.body, label %for.end, !dbg !201
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #5, !dbg !202
%rem = srem i32 %call2, 100, !dbg !204
%4 = load i32, i32* %i, align 4, !dbg !205
%idxprom = sext i32 %4 to i64, !dbg !206
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !206
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !206
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !207
store i32 %rem, i32* %x, align 4, !dbg !208
%call3 = call i32 @rand() #5, !dbg !209
%rem4 = srem i32 %call3, 100, !dbg !210
%6 = load i32, i32* %i, align 4, !dbg !211
%idxprom5 = sext i32 %6 to i64, !dbg !212
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !212
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
store i32 %rem4, i32* %y, align 4, !dbg !214
%call7 = call i32 @rand() #5, !dbg !215
%rem8 = srem i32 %call7, 100, !dbg !216
%8 = load i32, i32* %i, align 4, !dbg !217
%idxprom9 = sext i32 %8 to i64, !dbg !218
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !218
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !218
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !219
store i32 %rem8, i32* %z, align 4, !dbg !220
br label %for.inc, !dbg !221
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !222
%inc = add nsw i32 %10, 1, !dbg !222
store i32 %inc, i32* %i, align 4, !dbg !222
br label %for.cond, !dbg !224
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !225
ret %struct.vector3* %11, !dbg !226
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #3
; Function Attrs: nounwind
declare i32 @rand() #3
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !227, metadata !35), !dbg !228
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !229, metadata !35), !dbg !230
%0 = load i32, i32* %argc.addr, align 4, !dbg !231
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !232
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !233
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !233
%2 = load i8*, i8** %arrayidx, align 8, !dbg !233
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !234
call void @llvm.dbg.declare(metadata i32* %x, metadata !235, metadata !35), !dbg !236
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !237
%call3 = call i64 @time(i64* null) #5, !dbg !238
%conv = trunc i64 %call3 to i32, !dbg !238
call void @srand(i32 %conv) #5, !dbg !239
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !241, metadata !35), !dbg !242
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !243
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !242
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !244, metadata !35), !dbg !245
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !246
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !245
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !247, metadata !35), !dbg !248
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !249
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !249
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !248
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !250, metadata !35), !dbg !251
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !252
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !252
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !251
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !253, metadata !35), !dbg !254
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !255
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !255
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !254
%6 = load i32, i32* %argc.addr, align 4, !dbg !256
%cmp = icmp eq i32 %6, 1, !dbg !258
br i1 %cmp, label %if.then, label %if.else, !dbg !259
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !260
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !263
br label %if.end, !dbg !264
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !265
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !267
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !268
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !269
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !270
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !271
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !272
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !273
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !274
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !275
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !276
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !277
%16 = load i32, i32* %x10, align 4, !dbg !277
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !278
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !279
%18 = load i32, i32* %y, align 4, !dbg !279
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !280
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !281
%20 = load i32, i32* %z, align 4, !dbg !281
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !282
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !283
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !283
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !284
%22 = load i32, i32* %x13, align 4, !dbg !284
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !285
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !285
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !286
%24 = load i32, i32* %x15, align 4, !dbg !286
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !287
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !287
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !288
%26 = load i32, i32* %x17, align 4, !dbg !288
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !289
ret i32 0, !dbg !290
}
declare i32 @printf(i8*, ...) #4
; Function Attrs: nounwind
declare i64 @time(i64*) #3
; Function Attrs: nounwind
declare void @srand(i32) #3
attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 11, scope: !4)
!40 = !DILocation(line: 13, column: 14, scope: !4)
!41 = !DILocation(line: 13, column: 3, scope: !4)
!42 = !DILocation(line: 13, column: 6, scope: !4)
!43 = !DILocation(line: 13, column: 8, scope: !4)
!44 = !DILocation(line: 14, column: 11, scope: !4)
!45 = !DILocation(line: 14, column: 14, scope: !4)
!46 = !DILocation(line: 14, column: 3, scope: !4)
!47 = !DILocation(line: 14, column: 6, scope: !4)
!48 = !DILocation(line: 14, column: 8, scope: !4)
!49 = !DILocation(line: 15, column: 11, scope: !4)
!50 = !DILocation(line: 15, column: 14, scope: !4)
!51 = !DILocation(line: 15, column: 3, scope: !4)
!52 = !DILocation(line: 15, column: 6, scope: !4)
!53 = !DILocation(line: 15, column: 8, scope: !4)
!54 = !DILocation(line: 16, column: 1, scope: !4)
!55 = !DILocalVariable(name: "dst", arg: 1, scope: !14, file: !1, line: 18, type: !7)
!56 = !DILocation(line: 18, column: 27, scope: !14)
!57 = !DILocalVariable(name: "src", arg: 2, scope: !14, file: !1, line: 18, type: !7)
!58 = !DILocation(line: 18, column: 48, scope: !14)
!59 = !DILocation(line: 19, column: 10, scope: !14)
!60 = !DILocation(line: 19, column: 3, scope: !14)
!61 = !DILocation(line: 19, column: 15, scope: !14)
!62 = !DILocation(line: 20, column: 1, scope: !14)
!63 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!64 = !DILocation(line: 22, column: 27, scope: !15)
!65 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!66 = !DILocation(line: 22, column: 46, scope: !15)
!67 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!68 = !DILocation(line: 23, column: 7, scope: !15)
!69 = !DILocation(line: 23, column: 11, scope: !15)
!70 = !DILocation(line: 23, column: 14, scope: !15)
!71 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!72 = !DILocation(line: 24, column: 7, scope: !15)
!73 = !DILocation(line: 24, column: 11, scope: !15)
!74 = !DILocation(line: 24, column: 14, scope: !15)
!75 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!76 = !DILocation(line: 25, column: 7, scope: !15)
!77 = !DILocation(line: 25, column: 11, scope: !15)
!78 = !DILocation(line: 25, column: 14, scope: !15)
!79 = !DILocation(line: 27, column: 10, scope: !15)
!80 = !DILocation(line: 27, column: 13, scope: !15)
!81 = !DILocation(line: 27, column: 3, scope: !15)
!82 = !DILocation(line: 27, column: 6, scope: !15)
!83 = !DILocation(line: 27, column: 8, scope: !15)
!84 = !DILocation(line: 28, column: 10, scope: !15)
!85 = !DILocation(line: 28, column: 13, scope: !15)
!86 = !DILocation(line: 28, column: 3, scope: !15)
!87 = !DILocation(line: 28, column: 6, scope: !15)
!88 = !DILocation(line: 28, column: 8, scope: !15)
!89 = !DILocation(line: 29, column: 10, scope: !15)
!90 = !DILocation(line: 29, column: 13, scope: !15)
!91 = !DILocation(line: 29, column: 3, scope: !15)
!92 = !DILocation(line: 29, column: 6, scope: !15)
!93 = !DILocation(line: 29, column: 8, scope: !15)
!94 = !DILocation(line: 31, column: 10, scope: !15)
!95 = !DILocation(line: 31, column: 3, scope: !15)
!96 = !DILocation(line: 31, column: 6, scope: !15)
!97 = !DILocation(line: 31, column: 8, scope: !15)
!98 = !DILocation(line: 32, column: 10, scope: !15)
!99 = !DILocation(line: 32, column: 3, scope: !15)
!100 = !DILocation(line: 32, column: 6, scope: !15)
!101 = !DILocation(line: 32, column: 8, scope: !15)
!102 = !DILocation(line: 33, column: 10, scope: !15)
!103 = !DILocation(line: 33, column: 3, scope: !15)
!104 = !DILocation(line: 33, column: 6, scope: !15)
!105 = !DILocation(line: 33, column: 8, scope: !15)
!106 = !DILocation(line: 34, column: 1, scope: !15)
!107 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!108 = !DILocation(line: 38, column: 37, scope: !16)
!109 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!110 = !DILocation(line: 38, column: 45, scope: !16)
!111 = !DILocalVariable(name: "i", scope: !112, file: !1, line: 39, type: !11)
!112 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!113 = !DILocation(line: 39, column: 12, scope: !112)
!114 = !DILocation(line: 39, column: 8, scope: !112)
!115 = !DILocation(line: 39, column: 19, scope: !116)
!116 = !DILexicalBlockFile(scope: !117, file: !1, discriminator: 1)
!117 = distinct !DILexicalBlock(scope: !112, file: !1, line: 39, column: 3)
!118 = !DILocation(line: 39, column: 23, scope: !116)
!119 = !DILocation(line: 39, column: 21, scope: !116)
!120 = !DILocation(line: 39, column: 3, scope: !116)
!121 = !DILocalVariable(name: "idx", scope: !122, file: !1, line: 40, type: !11)
!122 = distinct !DILexicalBlock(scope: !117, file: !1, line: 39, column: 31)
!123 = !DILocation(line: 40, column: 9, scope: !122)
!124 = !DILocation(line: 40, column: 28, scope: !122)
!125 = !DILocation(line: 40, column: 32, scope: !122)
!126 = !DILocation(line: 40, column: 35, scope: !122)
!127 = !DILocation(line: 40, column: 15, scope: !122)
!128 = !DILocation(line: 41, column: 14, scope: !122)
!129 = !DILocation(line: 41, column: 11, scope: !122)
!130 = !DILocation(line: 41, column: 24, scope: !122)
!131 = !DILocation(line: 41, column: 21, scope: !122)
!132 = !DILocation(line: 41, column: 5, scope: !122)
!133 = !DILocation(line: 42, column: 3, scope: !122)
!134 = !DILocation(line: 39, column: 27, scope: !135)
!135 = !DILexicalBlockFile(scope: !117, file: !1, discriminator: 2)
!136 = !DILocation(line: 39, column: 3, scope: !135)
!137 = !DILocation(line: 43, column: 1, scope: !16)
!138 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!139 = !DILocation(line: 45, column: 34, scope: !19)
!140 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!141 = !DILocation(line: 45, column: 42, scope: !19)
!142 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!143 = !DILocation(line: 45, column: 53, scope: !19)
!144 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!145 = !DILocation(line: 46, column: 7, scope: !19)
!146 = !DILocation(line: 46, column: 21, scope: !19)
!147 = !DILocation(line: 46, column: 18, scope: !19)
!148 = !DILocation(line: 46, column: 28, scope: !19)
!149 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!150 = !DILocation(line: 47, column: 7, scope: !19)
!151 = !DILocation(line: 47, column: 13, scope: !19)
!152 = !DILocalVariable(name: "i", scope: !153, file: !1, line: 48, type: !11)
!153 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!154 = !DILocation(line: 48, column: 12, scope: !153)
!155 = !DILocation(line: 48, column: 16, scope: !153)
!156 = !DILocation(line: 48, column: 8, scope: !153)
!157 = !DILocation(line: 48, column: 23, scope: !158)
!158 = !DILexicalBlockFile(scope: !159, file: !1, discriminator: 1)
!159 = distinct !DILexicalBlock(scope: !153, file: !1, line: 48, column: 3)
!160 = !DILocation(line: 48, column: 27, scope: !158)
!161 = !DILocation(line: 48, column: 25, scope: !158)
!162 = !DILocation(line: 48, column: 3, scope: !158)
!163 = !DILocation(line: 49, column: 12, scope: !164)
!164 = distinct !DILexicalBlock(scope: !165, file: !1, line: 49, column: 9)
!165 = distinct !DILexicalBlock(scope: !159, file: !1, line: 48, column: 35)
!166 = !DILocation(line: 49, column: 9, scope: !164)
!167 = !DILocation(line: 49, column: 15, scope: !164)
!168 = !DILocation(line: 49, column: 19, scope: !164)
!169 = !DILocation(line: 49, column: 17, scope: !164)
!170 = !DILocation(line: 49, column: 9, scope: !165)
!171 = !DILocation(line: 50, column: 13, scope: !172)
!172 = distinct !DILexicalBlock(scope: !164, file: !1, line: 49, column: 29)
!173 = !DILocation(line: 50, column: 11, scope: !172)
!174 = !DILocation(line: 51, column: 21, scope: !172)
!175 = !DILocation(line: 51, column: 18, scope: !172)
!176 = !DILocation(line: 51, column: 24, scope: !172)
!177 = !DILocation(line: 51, column: 16, scope: !172)
!178 = !DILocation(line: 52, column: 5, scope: !172)
!179 = !DILocation(line: 53, column: 3, scope: !165)
!180 = !DILocation(line: 48, column: 30, scope: !181)
!181 = !DILexicalBlockFile(scope: !159, file: !1, discriminator: 2)
!182 = !DILocation(line: 48, column: 3, scope: !181)
!183 = !DILocation(line: 54, column: 10, scope: !19)
!184 = !DILocation(line: 54, column: 3, scope: !19)
!185 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!186 = !DILocation(line: 57, column: 37, scope: !22)
!187 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!188 = !DILocation(line: 58, column: 19, scope: !22)
!189 = !DILocation(line: 58, column: 55, scope: !22)
!190 = !DILocation(line: 58, column: 54, scope: !22)
!191 = !DILocation(line: 58, column: 25, scope: !22)
!192 = !DILocalVariable(name: "i", scope: !193, file: !1, line: 59, type: !11)
!193 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!194 = !DILocation(line: 59, column: 12, scope: !193)
!195 = !DILocation(line: 59, column: 8, scope: !193)
!196 = !DILocation(line: 59, column: 19, scope: !197)
!197 = !DILexicalBlockFile(scope: !198, file: !1, discriminator: 1)
!198 = distinct !DILexicalBlock(scope: !193, file: !1, line: 59, column: 3)
!199 = !DILocation(line: 59, column: 23, scope: !197)
!200 = !DILocation(line: 59, column: 21, scope: !197)
!201 = !DILocation(line: 59, column: 3, scope: !197)
!202 = !DILocation(line: 60, column: 16, scope: !203)
!203 = distinct !DILexicalBlock(scope: !198, file: !1, line: 59, column: 31)
!204 = !DILocation(line: 60, column: 23, scope: !203)
!205 = !DILocation(line: 60, column: 9, scope: !203)
!206 = !DILocation(line: 60, column: 5, scope: !203)
!207 = !DILocation(line: 60, column: 12, scope: !203)
!208 = !DILocation(line: 60, column: 14, scope: !203)
!209 = !DILocation(line: 61, column: 16, scope: !203)
!210 = !DILocation(line: 61, column: 23, scope: !203)
!211 = !DILocation(line: 61, column: 9, scope: !203)
!212 = !DILocation(line: 61, column: 5, scope: !203)
!213 = !DILocation(line: 61, column: 12, scope: !203)
!214 = !DILocation(line: 61, column: 14, scope: !203)
!215 = !DILocation(line: 62, column: 16, scope: !203)
!216 = !DILocation(line: 62, column: 23, scope: !203)
!217 = !DILocation(line: 62, column: 9, scope: !203)
!218 = !DILocation(line: 62, column: 5, scope: !203)
!219 = !DILocation(line: 62, column: 12, scope: !203)
!220 = !DILocation(line: 62, column: 14, scope: !203)
!221 = !DILocation(line: 63, column: 3, scope: !203)
!222 = !DILocation(line: 59, column: 26, scope: !223)
!223 = !DILexicalBlockFile(scope: !198, file: !1, discriminator: 2)
!224 = !DILocation(line: 59, column: 3, scope: !223)
!225 = !DILocation(line: 64, column: 10, scope: !22)
!226 = !DILocation(line: 64, column: 3, scope: !22)
!227 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!228 = !DILocation(line: 67, column: 14, scope: !25)
!229 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!230 = !DILocation(line: 67, column: 27, scope: !25)
!231 = !DILocation(line: 68, column: 25, scope: !25)
!232 = !DILocation(line: 68, column: 3, scope: !25)
!233 = !DILocation(line: 69, column: 28, scope: !25)
!234 = !DILocation(line: 69, column: 3, scope: !25)
!235 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!236 = !DILocation(line: 71, column: 7, scope: !25)
!237 = !DILocation(line: 72, column: 3, scope: !25)
!238 = !DILocation(line: 74, column: 9, scope: !25)
!239 = !DILocation(line: 74, column: 3, scope: !240)
!240 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!241 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!242 = !DILocation(line: 75, column: 19, scope: !25)
!243 = !DILocation(line: 75, column: 25, scope: !25)
!244 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!245 = !DILocation(line: 76, column: 19, scope: !25)
!246 = !DILocation(line: 76, column: 26, scope: !25)
!247 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!248 = !DILocation(line: 77, column: 19, scope: !25)
!249 = !DILocation(line: 77, column: 24, scope: !25)
!250 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!251 = !DILocation(line: 78, column: 19, scope: !25)
!252 = !DILocation(line: 78, column: 24, scope: !25)
!253 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!254 = !DILocation(line: 79, column: 19, scope: !25)
!255 = !DILocation(line: 79, column: 24, scope: !25)
!256 = !DILocation(line: 81, column: 7, scope: !257)
!257 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!258 = !DILocation(line: 81, column: 12, scope: !257)
!259 = !DILocation(line: 81, column: 7, scope: !25)
!260 = !DILocation(line: 82, column: 9, scope: !261)
!261 = distinct !DILexicalBlock(scope: !257, file: !1, line: 81, column: 18)
!262 = !DILocation(line: 82, column: 12, scope: !261)
!263 = !DILocation(line: 82, column: 5, scope: !261)
!264 = !DILocation(line: 83, column: 3, scope: !261)
!265 = !DILocation(line: 84, column: 9, scope: !266)
!266 = distinct !DILexicalBlock(scope: !257, file: !1, line: 83, column: 10)
!267 = !DILocation(line: 84, column: 12, scope: !266)
!268 = !DILocation(line: 84, column: 5, scope: !266)
!269 = !DILocation(line: 85, column: 9, scope: !266)
!270 = !DILocation(line: 85, column: 12, scope: !266)
!271 = !DILocation(line: 85, column: 5, scope: !266)
!272 = !DILocation(line: 88, column: 18, scope: !25)
!273 = !DILocation(line: 88, column: 3, scope: !25)
!274 = !DILocation(line: 89, column: 18, scope: !25)
!275 = !DILocation(line: 89, column: 3, scope: !25)
!276 = !DILocation(line: 91, column: 42, scope: !25)
!277 = !DILocation(line: 91, column: 45, scope: !25)
!278 = !DILocation(line: 91, column: 48, scope: !25)
!279 = !DILocation(line: 91, column: 51, scope: !25)
!280 = !DILocation(line: 91, column: 54, scope: !25)
!281 = !DILocation(line: 91, column: 57, scope: !25)
!282 = !DILocation(line: 91, column: 3, scope: !25)
!283 = !DILocation(line: 92, column: 42, scope: !25)
!284 = !DILocation(line: 92, column: 50, scope: !25)
!285 = !DILocation(line: 92, column: 53, scope: !25)
!286 = !DILocation(line: 92, column: 61, scope: !25)
!287 = !DILocation(line: 92, column: 64, scope: !25)
!288 = !DILocation(line: 92, column: 72, scope: !25)
!289 = !DILocation(line: 92, column: 3, scope: !25)
!290 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Infer set function attributes ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: nounwind uwtable
define internal void @copy(%struct.vector3* %dst, %struct.vector3* %src) #0 !dbg !14 {
entry:
%dst.addr = alloca %struct.vector3*, align 8
%src.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %dst, %struct.vector3** %dst.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %dst.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %src, %struct.vector3** %src.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %src.addr, metadata !57, metadata !35), !dbg !58
%0 = load %struct.vector3*, %struct.vector3** %dst.addr, align 8, !dbg !59
%1 = bitcast %struct.vector3* %0 to i8*, !dbg !60
%2 = load %struct.vector3*, %struct.vector3** %src.addr, align 8, !dbg !61
%3 = bitcast %struct.vector3* %2 to i8*, !dbg !60
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %3, i64 12, i32 4, i1 false), !dbg !60
ret void, !dbg !62
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !63, metadata !35), !dbg !64
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !65, metadata !35), !dbg !66
call void @llvm.dbg.declare(metadata i32* %x, metadata !67, metadata !35), !dbg !68
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !70
%1 = load i32, i32* %x1, align 4, !dbg !70
store i32 %1, i32* %x, align 4, !dbg !68
call void @llvm.dbg.declare(metadata i32* %y, metadata !71, metadata !35), !dbg !72
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !74
%3 = load i32, i32* %y2, align 4, !dbg !74
store i32 %3, i32* %y, align 4, !dbg !72
call void @llvm.dbg.declare(metadata i32* %z, metadata !75, metadata !35), !dbg !76
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !77
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !78
%5 = load i32, i32* %z3, align 4, !dbg !78
store i32 %5, i32* %z, align 4, !dbg !76
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !79
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !80
%7 = load i32, i32* %x4, align 4, !dbg !80
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !81
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !82
store i32 %7, i32* %x5, align 4, !dbg !83
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !84
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !85
%10 = load i32, i32* %y6, align 4, !dbg !85
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !86
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !87
store i32 %10, i32* %y7, align 4, !dbg !88
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !89
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !90
%13 = load i32, i32* %z8, align 4, !dbg !90
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !91
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !92
store i32 %13, i32* %z9, align 4, !dbg !93
%15 = load i32, i32* %x, align 4, !dbg !94
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !96
store i32 %15, i32* %x10, align 4, !dbg !97
%17 = load i32, i32* %y, align 4, !dbg !98
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !99
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !100
store i32 %17, i32* %y11, align 4, !dbg !101
%19 = load i32, i32* %z, align 4, !dbg !102
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !103
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !104
store i32 %19, i32* %z12, align 4, !dbg !105
ret void, !dbg !106
}
; Function Attrs: nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !107, metadata !35), !dbg !108
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !109, metadata !35), !dbg !110
call void @llvm.dbg.declare(metadata i32* %i, metadata !111, metadata !35), !dbg !113
store i32 0, i32* %i, align 4, !dbg !113
br label %for.cond, !dbg !114
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !115
%1 = load i32, i32* %N.addr, align 4, !dbg !118
%cmp = icmp slt i32 %0, %1, !dbg !119
br i1 %cmp, label %for.body, label %for.end, !dbg !120
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !121, metadata !35), !dbg !123
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !124
%3 = load i32, i32* %i, align 4, !dbg !125
%4 = load i32, i32* %N.addr, align 4, !dbg !126
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !127
store i32 %call, i32* %idx, align 4, !dbg !123
%5 = load i32, i32* %idx, align 4, !dbg !128
%idxprom = sext i32 %5 to i64, !dbg !129
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !129
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !129
%7 = load i32, i32* %i, align 4, !dbg !130
%idxprom1 = sext i32 %7 to i64, !dbg !131
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !131
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !131
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !132
br label %for.inc, !dbg !133
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !134
%inc = add nsw i32 %9, 1, !dbg !134
store i32 %inc, i32* %i, align 4, !dbg !134
br label %for.cond, !dbg !136
for.end: ; preds = %for.cond
ret void, !dbg !137
}
; Function Attrs: nounwind uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #0 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !138, metadata !35), !dbg !139
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !140, metadata !35), !dbg !141
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !144, metadata !35), !dbg !145
%0 = load i32, i32* %start.addr, align 4, !dbg !146
%idxprom = sext i32 %0 to i64, !dbg !147
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !147
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !147
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !148
%2 = load i32, i32* %x, align 4, !dbg !148
store i32 %2, i32* %smallest, align 4, !dbg !145
call void @llvm.dbg.declare(metadata i32* %idx, metadata !149, metadata !35), !dbg !150
%3 = load i32, i32* %start.addr, align 4, !dbg !151
store i32 %3, i32* %idx, align 4, !dbg !150
call void @llvm.dbg.declare(metadata i32* %i, metadata !152, metadata !35), !dbg !154
%4 = load i32, i32* %start.addr, align 4, !dbg !155
store i32 %4, i32* %i, align 4, !dbg !154
br label %for.cond, !dbg !156
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !157
%6 = load i32, i32* %N.addr, align 4, !dbg !160
%cmp = icmp slt i32 %5, %6, !dbg !161
br i1 %cmp, label %for.body, label %for.end, !dbg !162
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !163
%idxprom1 = sext i32 %7 to i64, !dbg !166
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !166
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !166
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !167
%9 = load i32, i32* %x3, align 4, !dbg !167
%10 = load i32, i32* %smallest, align 4, !dbg !168
%cmp4 = icmp slt i32 %9, %10, !dbg !169
br i1 %cmp4, label %if.then, label %if.end, !dbg !170
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !171
store i32 %11, i32* %idx, align 4, !dbg !173
%12 = load i32, i32* %i, align 4, !dbg !174
%idxprom5 = sext i32 %12 to i64, !dbg !175
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !175
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !175
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !176
%14 = load i32, i32* %x7, align 4, !dbg !176
store i32 %14, i32* %smallest, align 4, !dbg !177
br label %if.end, !dbg !178
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !179
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !180
%inc = add nsw i32 %15, 1, !dbg !180
store i32 %inc, i32* %i, align 4, !dbg !180
br label %for.cond, !dbg !182
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !183
ret i32 %16, !dbg !184
}
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #0 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !185, metadata !35), !dbg !186
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !187, metadata !35), !dbg !188
%0 = load i32, i32* %N.addr, align 4, !dbg !189
%conv = sext i32 %0 to i64, !dbg !189
%mul = mul i64 12, %conv, !dbg !190
%call = call noalias i8* @malloc(i64 %mul) #4, !dbg !191
%1 = bitcast i8* %call to %struct.vector3*, !dbg !191
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !188
call void @llvm.dbg.declare(metadata i32* %i, metadata !192, metadata !35), !dbg !194
store i32 0, i32* %i, align 4, !dbg !194
br label %for.cond, !dbg !195
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !196
%3 = load i32, i32* %N.addr, align 4, !dbg !199
%cmp = icmp slt i32 %2, %3, !dbg !200
br i1 %cmp, label %for.body, label %for.end, !dbg !201
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #4, !dbg !202
%rem = srem i32 %call2, 100, !dbg !204
%4 = load i32, i32* %i, align 4, !dbg !205
%idxprom = sext i32 %4 to i64, !dbg !206
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !206
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !206
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !207
store i32 %rem, i32* %x, align 4, !dbg !208
%call3 = call i32 @rand() #4, !dbg !209
%rem4 = srem i32 %call3, 100, !dbg !210
%6 = load i32, i32* %i, align 4, !dbg !211
%idxprom5 = sext i32 %6 to i64, !dbg !212
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !212
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
store i32 %rem4, i32* %y, align 4, !dbg !214
%call7 = call i32 @rand() #4, !dbg !215
%rem8 = srem i32 %call7, 100, !dbg !216
%8 = load i32, i32* %i, align 4, !dbg !217
%idxprom9 = sext i32 %8 to i64, !dbg !218
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !218
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !218
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !219
store i32 %rem8, i32* %z, align 4, !dbg !220
br label %for.inc, !dbg !221
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !222
%inc = add nsw i32 %10, 1, !dbg !222
store i32 %inc, i32* %i, align 4, !dbg !222
br label %for.cond, !dbg !224
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !225
ret %struct.vector3* %11, !dbg !226
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #3
; Function Attrs: nounwind
declare i32 @rand() #3
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !227, metadata !35), !dbg !228
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !229, metadata !35), !dbg !230
%0 = load i32, i32* %argc.addr, align 4, !dbg !231
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !232
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !233
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !233
%2 = load i8*, i8** %arrayidx, align 8, !dbg !233
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !234
call void @llvm.dbg.declare(metadata i32* %x, metadata !235, metadata !35), !dbg !236
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !237
%call3 = call i64 @time(i64* null) #4, !dbg !238
%conv = trunc i64 %call3 to i32, !dbg !238
call void @srand(i32 %conv) #4, !dbg !239
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !241, metadata !35), !dbg !242
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !243
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !242
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !244, metadata !35), !dbg !245
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !246
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !245
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !247, metadata !35), !dbg !248
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !249
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !249
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !248
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !250, metadata !35), !dbg !251
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !252
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !252
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !251
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !253, metadata !35), !dbg !254
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !255
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !255
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !254
%6 = load i32, i32* %argc.addr, align 4, !dbg !256
%cmp = icmp eq i32 %6, 1, !dbg !258
br i1 %cmp, label %if.then, label %if.else, !dbg !259
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !260
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !263
br label %if.end, !dbg !264
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !265
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !267
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !268
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !269
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !270
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !271
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !272
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !273
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !274
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !275
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !276
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !277
%16 = load i32, i32* %x10, align 4, !dbg !277
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !278
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !279
%18 = load i32, i32* %y, align 4, !dbg !279
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !280
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !281
%20 = load i32, i32* %z, align 4, !dbg !281
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !282
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !283
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !283
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !284
%22 = load i32, i32* %x13, align 4, !dbg !284
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !285
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !285
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !286
%24 = load i32, i32* %x15, align 4, !dbg !286
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !287
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !287
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !288
%26 = load i32, i32* %x17, align 4, !dbg !288
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !289
ret i32 0, !dbg !290
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #3
; Function Attrs: nounwind
declare i64 @time(i64*) #3
; Function Attrs: nounwind
declare void @srand(i32) #3
attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 11, scope: !4)
!40 = !DILocation(line: 13, column: 14, scope: !4)
!41 = !DILocation(line: 13, column: 3, scope: !4)
!42 = !DILocation(line: 13, column: 6, scope: !4)
!43 = !DILocation(line: 13, column: 8, scope: !4)
!44 = !DILocation(line: 14, column: 11, scope: !4)
!45 = !DILocation(line: 14, column: 14, scope: !4)
!46 = !DILocation(line: 14, column: 3, scope: !4)
!47 = !DILocation(line: 14, column: 6, scope: !4)
!48 = !DILocation(line: 14, column: 8, scope: !4)
!49 = !DILocation(line: 15, column: 11, scope: !4)
!50 = !DILocation(line: 15, column: 14, scope: !4)
!51 = !DILocation(line: 15, column: 3, scope: !4)
!52 = !DILocation(line: 15, column: 6, scope: !4)
!53 = !DILocation(line: 15, column: 8, scope: !4)
!54 = !DILocation(line: 16, column: 1, scope: !4)
!55 = !DILocalVariable(name: "dst", arg: 1, scope: !14, file: !1, line: 18, type: !7)
!56 = !DILocation(line: 18, column: 27, scope: !14)
!57 = !DILocalVariable(name: "src", arg: 2, scope: !14, file: !1, line: 18, type: !7)
!58 = !DILocation(line: 18, column: 48, scope: !14)
!59 = !DILocation(line: 19, column: 10, scope: !14)
!60 = !DILocation(line: 19, column: 3, scope: !14)
!61 = !DILocation(line: 19, column: 15, scope: !14)
!62 = !DILocation(line: 20, column: 1, scope: !14)
!63 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!64 = !DILocation(line: 22, column: 27, scope: !15)
!65 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!66 = !DILocation(line: 22, column: 46, scope: !15)
!67 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!68 = !DILocation(line: 23, column: 7, scope: !15)
!69 = !DILocation(line: 23, column: 11, scope: !15)
!70 = !DILocation(line: 23, column: 14, scope: !15)
!71 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!72 = !DILocation(line: 24, column: 7, scope: !15)
!73 = !DILocation(line: 24, column: 11, scope: !15)
!74 = !DILocation(line: 24, column: 14, scope: !15)
!75 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!76 = !DILocation(line: 25, column: 7, scope: !15)
!77 = !DILocation(line: 25, column: 11, scope: !15)
!78 = !DILocation(line: 25, column: 14, scope: !15)
!79 = !DILocation(line: 27, column: 10, scope: !15)
!80 = !DILocation(line: 27, column: 13, scope: !15)
!81 = !DILocation(line: 27, column: 3, scope: !15)
!82 = !DILocation(line: 27, column: 6, scope: !15)
!83 = !DILocation(line: 27, column: 8, scope: !15)
!84 = !DILocation(line: 28, column: 10, scope: !15)
!85 = !DILocation(line: 28, column: 13, scope: !15)
!86 = !DILocation(line: 28, column: 3, scope: !15)
!87 = !DILocation(line: 28, column: 6, scope: !15)
!88 = !DILocation(line: 28, column: 8, scope: !15)
!89 = !DILocation(line: 29, column: 10, scope: !15)
!90 = !DILocation(line: 29, column: 13, scope: !15)
!91 = !DILocation(line: 29, column: 3, scope: !15)
!92 = !DILocation(line: 29, column: 6, scope: !15)
!93 = !DILocation(line: 29, column: 8, scope: !15)
!94 = !DILocation(line: 31, column: 10, scope: !15)
!95 = !DILocation(line: 31, column: 3, scope: !15)
!96 = !DILocation(line: 31, column: 6, scope: !15)
!97 = !DILocation(line: 31, column: 8, scope: !15)
!98 = !DILocation(line: 32, column: 10, scope: !15)
!99 = !DILocation(line: 32, column: 3, scope: !15)
!100 = !DILocation(line: 32, column: 6, scope: !15)
!101 = !DILocation(line: 32, column: 8, scope: !15)
!102 = !DILocation(line: 33, column: 10, scope: !15)
!103 = !DILocation(line: 33, column: 3, scope: !15)
!104 = !DILocation(line: 33, column: 6, scope: !15)
!105 = !DILocation(line: 33, column: 8, scope: !15)
!106 = !DILocation(line: 34, column: 1, scope: !15)
!107 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!108 = !DILocation(line: 38, column: 37, scope: !16)
!109 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!110 = !DILocation(line: 38, column: 45, scope: !16)
!111 = !DILocalVariable(name: "i", scope: !112, file: !1, line: 39, type: !11)
!112 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!113 = !DILocation(line: 39, column: 12, scope: !112)
!114 = !DILocation(line: 39, column: 8, scope: !112)
!115 = !DILocation(line: 39, column: 19, scope: !116)
!116 = !DILexicalBlockFile(scope: !117, file: !1, discriminator: 1)
!117 = distinct !DILexicalBlock(scope: !112, file: !1, line: 39, column: 3)
!118 = !DILocation(line: 39, column: 23, scope: !116)
!119 = !DILocation(line: 39, column: 21, scope: !116)
!120 = !DILocation(line: 39, column: 3, scope: !116)
!121 = !DILocalVariable(name: "idx", scope: !122, file: !1, line: 40, type: !11)
!122 = distinct !DILexicalBlock(scope: !117, file: !1, line: 39, column: 31)
!123 = !DILocation(line: 40, column: 9, scope: !122)
!124 = !DILocation(line: 40, column: 28, scope: !122)
!125 = !DILocation(line: 40, column: 32, scope: !122)
!126 = !DILocation(line: 40, column: 35, scope: !122)
!127 = !DILocation(line: 40, column: 15, scope: !122)
!128 = !DILocation(line: 41, column: 14, scope: !122)
!129 = !DILocation(line: 41, column: 11, scope: !122)
!130 = !DILocation(line: 41, column: 24, scope: !122)
!131 = !DILocation(line: 41, column: 21, scope: !122)
!132 = !DILocation(line: 41, column: 5, scope: !122)
!133 = !DILocation(line: 42, column: 3, scope: !122)
!134 = !DILocation(line: 39, column: 27, scope: !135)
!135 = !DILexicalBlockFile(scope: !117, file: !1, discriminator: 2)
!136 = !DILocation(line: 39, column: 3, scope: !135)
!137 = !DILocation(line: 43, column: 1, scope: !16)
!138 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!139 = !DILocation(line: 45, column: 34, scope: !19)
!140 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!141 = !DILocation(line: 45, column: 42, scope: !19)
!142 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!143 = !DILocation(line: 45, column: 53, scope: !19)
!144 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!145 = !DILocation(line: 46, column: 7, scope: !19)
!146 = !DILocation(line: 46, column: 21, scope: !19)
!147 = !DILocation(line: 46, column: 18, scope: !19)
!148 = !DILocation(line: 46, column: 28, scope: !19)
!149 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!150 = !DILocation(line: 47, column: 7, scope: !19)
!151 = !DILocation(line: 47, column: 13, scope: !19)
!152 = !DILocalVariable(name: "i", scope: !153, file: !1, line: 48, type: !11)
!153 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!154 = !DILocation(line: 48, column: 12, scope: !153)
!155 = !DILocation(line: 48, column: 16, scope: !153)
!156 = !DILocation(line: 48, column: 8, scope: !153)
!157 = !DILocation(line: 48, column: 23, scope: !158)
!158 = !DILexicalBlockFile(scope: !159, file: !1, discriminator: 1)
!159 = distinct !DILexicalBlock(scope: !153, file: !1, line: 48, column: 3)
!160 = !DILocation(line: 48, column: 27, scope: !158)
!161 = !DILocation(line: 48, column: 25, scope: !158)
!162 = !DILocation(line: 48, column: 3, scope: !158)
!163 = !DILocation(line: 49, column: 12, scope: !164)
!164 = distinct !DILexicalBlock(scope: !165, file: !1, line: 49, column: 9)
!165 = distinct !DILexicalBlock(scope: !159, file: !1, line: 48, column: 35)
!166 = !DILocation(line: 49, column: 9, scope: !164)
!167 = !DILocation(line: 49, column: 15, scope: !164)
!168 = !DILocation(line: 49, column: 19, scope: !164)
!169 = !DILocation(line: 49, column: 17, scope: !164)
!170 = !DILocation(line: 49, column: 9, scope: !165)
!171 = !DILocation(line: 50, column: 13, scope: !172)
!172 = distinct !DILexicalBlock(scope: !164, file: !1, line: 49, column: 29)
!173 = !DILocation(line: 50, column: 11, scope: !172)
!174 = !DILocation(line: 51, column: 21, scope: !172)
!175 = !DILocation(line: 51, column: 18, scope: !172)
!176 = !DILocation(line: 51, column: 24, scope: !172)
!177 = !DILocation(line: 51, column: 16, scope: !172)
!178 = !DILocation(line: 52, column: 5, scope: !172)
!179 = !DILocation(line: 53, column: 3, scope: !165)
!180 = !DILocation(line: 48, column: 30, scope: !181)
!181 = !DILexicalBlockFile(scope: !159, file: !1, discriminator: 2)
!182 = !DILocation(line: 48, column: 3, scope: !181)
!183 = !DILocation(line: 54, column: 10, scope: !19)
!184 = !DILocation(line: 54, column: 3, scope: !19)
!185 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!186 = !DILocation(line: 57, column: 37, scope: !22)
!187 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!188 = !DILocation(line: 58, column: 19, scope: !22)
!189 = !DILocation(line: 58, column: 55, scope: !22)
!190 = !DILocation(line: 58, column: 54, scope: !22)
!191 = !DILocation(line: 58, column: 25, scope: !22)
!192 = !DILocalVariable(name: "i", scope: !193, file: !1, line: 59, type: !11)
!193 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!194 = !DILocation(line: 59, column: 12, scope: !193)
!195 = !DILocation(line: 59, column: 8, scope: !193)
!196 = !DILocation(line: 59, column: 19, scope: !197)
!197 = !DILexicalBlockFile(scope: !198, file: !1, discriminator: 1)
!198 = distinct !DILexicalBlock(scope: !193, file: !1, line: 59, column: 3)
!199 = !DILocation(line: 59, column: 23, scope: !197)
!200 = !DILocation(line: 59, column: 21, scope: !197)
!201 = !DILocation(line: 59, column: 3, scope: !197)
!202 = !DILocation(line: 60, column: 16, scope: !203)
!203 = distinct !DILexicalBlock(scope: !198, file: !1, line: 59, column: 31)
!204 = !DILocation(line: 60, column: 23, scope: !203)
!205 = !DILocation(line: 60, column: 9, scope: !203)
!206 = !DILocation(line: 60, column: 5, scope: !203)
!207 = !DILocation(line: 60, column: 12, scope: !203)
!208 = !DILocation(line: 60, column: 14, scope: !203)
!209 = !DILocation(line: 61, column: 16, scope: !203)
!210 = !DILocation(line: 61, column: 23, scope: !203)
!211 = !DILocation(line: 61, column: 9, scope: !203)
!212 = !DILocation(line: 61, column: 5, scope: !203)
!213 = !DILocation(line: 61, column: 12, scope: !203)
!214 = !DILocation(line: 61, column: 14, scope: !203)
!215 = !DILocation(line: 62, column: 16, scope: !203)
!216 = !DILocation(line: 62, column: 23, scope: !203)
!217 = !DILocation(line: 62, column: 9, scope: !203)
!218 = !DILocation(line: 62, column: 5, scope: !203)
!219 = !DILocation(line: 62, column: 12, scope: !203)
!220 = !DILocation(line: 62, column: 14, scope: !203)
!221 = !DILocation(line: 63, column: 3, scope: !203)
!222 = !DILocation(line: 59, column: 26, scope: !223)
!223 = !DILexicalBlockFile(scope: !198, file: !1, discriminator: 2)
!224 = !DILocation(line: 59, column: 3, scope: !223)
!225 = !DILocation(line: 64, column: 10, scope: !22)
!226 = !DILocation(line: 64, column: 3, scope: !22)
!227 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!228 = !DILocation(line: 67, column: 14, scope: !25)
!229 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!230 = !DILocation(line: 67, column: 27, scope: !25)
!231 = !DILocation(line: 68, column: 25, scope: !25)
!232 = !DILocation(line: 68, column: 3, scope: !25)
!233 = !DILocation(line: 69, column: 28, scope: !25)
!234 = !DILocation(line: 69, column: 3, scope: !25)
!235 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!236 = !DILocation(line: 71, column: 7, scope: !25)
!237 = !DILocation(line: 72, column: 3, scope: !25)
!238 = !DILocation(line: 74, column: 9, scope: !25)
!239 = !DILocation(line: 74, column: 3, scope: !240)
!240 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!241 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!242 = !DILocation(line: 75, column: 19, scope: !25)
!243 = !DILocation(line: 75, column: 25, scope: !25)
!244 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!245 = !DILocation(line: 76, column: 19, scope: !25)
!246 = !DILocation(line: 76, column: 26, scope: !25)
!247 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!248 = !DILocation(line: 77, column: 19, scope: !25)
!249 = !DILocation(line: 77, column: 24, scope: !25)
!250 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!251 = !DILocation(line: 78, column: 19, scope: !25)
!252 = !DILocation(line: 78, column: 24, scope: !25)
!253 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!254 = !DILocation(line: 79, column: 19, scope: !25)
!255 = !DILocation(line: 79, column: 24, scope: !25)
!256 = !DILocation(line: 81, column: 7, scope: !257)
!257 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!258 = !DILocation(line: 81, column: 12, scope: !257)
!259 = !DILocation(line: 81, column: 7, scope: !25)
!260 = !DILocation(line: 82, column: 9, scope: !261)
!261 = distinct !DILexicalBlock(scope: !257, file: !1, line: 81, column: 18)
!262 = !DILocation(line: 82, column: 12, scope: !261)
!263 = !DILocation(line: 82, column: 5, scope: !261)
!264 = !DILocation(line: 83, column: 3, scope: !261)
!265 = !DILocation(line: 84, column: 9, scope: !266)
!266 = distinct !DILexicalBlock(scope: !257, file: !1, line: 83, column: 10)
!267 = !DILocation(line: 84, column: 12, scope: !266)
!268 = !DILocation(line: 84, column: 5, scope: !266)
!269 = !DILocation(line: 85, column: 9, scope: !266)
!270 = !DILocation(line: 85, column: 12, scope: !266)
!271 = !DILocation(line: 85, column: 5, scope: !266)
!272 = !DILocation(line: 88, column: 18, scope: !25)
!273 = !DILocation(line: 88, column: 3, scope: !25)
!274 = !DILocation(line: 89, column: 18, scope: !25)
!275 = !DILocation(line: 89, column: 3, scope: !25)
!276 = !DILocation(line: 91, column: 42, scope: !25)
!277 = !DILocation(line: 91, column: 45, scope: !25)
!278 = !DILocation(line: 91, column: 48, scope: !25)
!279 = !DILocation(line: 91, column: 51, scope: !25)
!280 = !DILocation(line: 91, column: 54, scope: !25)
!281 = !DILocation(line: 91, column: 57, scope: !25)
!282 = !DILocation(line: 91, column: 3, scope: !25)
!283 = !DILocation(line: 92, column: 42, scope: !25)
!284 = !DILocation(line: 92, column: 50, scope: !25)
!285 = !DILocation(line: 92, column: 53, scope: !25)
!286 = !DILocation(line: 92, column: 61, scope: !25)
!287 = !DILocation(line: 92, column: 64, scope: !25)
!288 = !DILocation(line: 92, column: 72, scope: !25)
!289 = !DILocation(line: 92, column: 3, scope: !25)
!290 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Interprocedural Sparse Conditional Constant Propagation ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: nounwind uwtable
define internal void @copy(%struct.vector3* %dst, %struct.vector3* %src) #0 !dbg !14 {
entry:
unreachable
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !57, metadata !35), !dbg !58
call void @llvm.dbg.declare(metadata i32* %x, metadata !59, metadata !35), !dbg !60
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !61
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !62
%1 = load i32, i32* %x1, align 4, !dbg !62
store i32 %1, i32* %x, align 4, !dbg !60
call void @llvm.dbg.declare(metadata i32* %y, metadata !63, metadata !35), !dbg !64
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !65
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !66
%3 = load i32, i32* %y2, align 4, !dbg !66
store i32 %3, i32* %y, align 4, !dbg !64
call void @llvm.dbg.declare(metadata i32* %z, metadata !67, metadata !35), !dbg !68
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !70
%5 = load i32, i32* %z3, align 4, !dbg !70
store i32 %5, i32* %z, align 4, !dbg !68
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !71
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !72
%7 = load i32, i32* %x4, align 4, !dbg !72
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !74
store i32 %7, i32* %x5, align 4, !dbg !75
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !76
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !77
%10 = load i32, i32* %y6, align 4, !dbg !77
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !78
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !79
store i32 %10, i32* %y7, align 4, !dbg !80
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !81
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !82
%13 = load i32, i32* %z8, align 4, !dbg !82
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !83
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !84
store i32 %13, i32* %z9, align 4, !dbg !85
%15 = load i32, i32* %x, align 4, !dbg !86
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !87
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !88
store i32 %15, i32* %x10, align 4, !dbg !89
%17 = load i32, i32* %y, align 4, !dbg !90
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !91
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !92
store i32 %17, i32* %y11, align 4, !dbg !93
%19 = load i32, i32* %z, align 4, !dbg !94
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !96
store i32 %19, i32* %z12, align 4, !dbg !97
ret void, !dbg !98
}
; Function Attrs: nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !99, metadata !35), !dbg !100
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !101, metadata !35), !dbg !102
call void @llvm.dbg.declare(metadata i32* %i, metadata !103, metadata !35), !dbg !105
store i32 0, i32* %i, align 4, !dbg !105
br label %for.cond, !dbg !106
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !107
%1 = load i32, i32* %N.addr, align 4, !dbg !110
%cmp = icmp slt i32 %0, %1, !dbg !111
br i1 %cmp, label %for.body, label %for.end, !dbg !112
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !113, metadata !35), !dbg !115
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !116
%3 = load i32, i32* %i, align 4, !dbg !117
%4 = load i32, i32* %N.addr, align 4, !dbg !118
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !119
store i32 %call, i32* %idx, align 4, !dbg !115
%5 = load i32, i32* %idx, align 4, !dbg !120
%idxprom = sext i32 %5 to i64, !dbg !121
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !121
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !121
%7 = load i32, i32* %i, align 4, !dbg !122
%idxprom1 = sext i32 %7 to i64, !dbg !123
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !123
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !123
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !124
br label %for.inc, !dbg !125
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !126
%inc = add nsw i32 %9, 1, !dbg !126
store i32 %inc, i32* %i, align 4, !dbg !126
br label %for.cond, !dbg !128
for.end: ; preds = %for.cond
ret void, !dbg !129
}
; Function Attrs: nounwind uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #0 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !130, metadata !35), !dbg !131
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !132, metadata !35), !dbg !133
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !134, metadata !35), !dbg !135
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !136, metadata !35), !dbg !137
%0 = load i32, i32* %start.addr, align 4, !dbg !138
%idxprom = sext i32 %0 to i64, !dbg !139
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !139
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !139
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !140
%2 = load i32, i32* %x, align 4, !dbg !140
store i32 %2, i32* %smallest, align 4, !dbg !137
call void @llvm.dbg.declare(metadata i32* %idx, metadata !141, metadata !35), !dbg !142
%3 = load i32, i32* %start.addr, align 4, !dbg !143
store i32 %3, i32* %idx, align 4, !dbg !142
call void @llvm.dbg.declare(metadata i32* %i, metadata !144, metadata !35), !dbg !146
%4 = load i32, i32* %start.addr, align 4, !dbg !147
store i32 %4, i32* %i, align 4, !dbg !146
br label %for.cond, !dbg !148
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !149
%6 = load i32, i32* %N.addr, align 4, !dbg !152
%cmp = icmp slt i32 %5, %6, !dbg !153
br i1 %cmp, label %for.body, label %for.end, !dbg !154
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !155
%idxprom1 = sext i32 %7 to i64, !dbg !158
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !158
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !158
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !159
%9 = load i32, i32* %x3, align 4, !dbg !159
%10 = load i32, i32* %smallest, align 4, !dbg !160
%cmp4 = icmp slt i32 %9, %10, !dbg !161
br i1 %cmp4, label %if.then, label %if.end, !dbg !162
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !163
store i32 %11, i32* %idx, align 4, !dbg !165
%12 = load i32, i32* %i, align 4, !dbg !166
%idxprom5 = sext i32 %12 to i64, !dbg !167
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !167
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !167
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !168
%14 = load i32, i32* %x7, align 4, !dbg !168
store i32 %14, i32* %smallest, align 4, !dbg !169
br label %if.end, !dbg !170
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !171
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !172
%inc = add nsw i32 %15, 1, !dbg !172
store i32 %inc, i32* %i, align 4, !dbg !172
br label %for.cond, !dbg !174
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !175
ret i32 %16, !dbg !176
}
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #0 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !177, metadata !35), !dbg !178
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !179, metadata !35), !dbg !180
%0 = load i32, i32* %N.addr, align 4, !dbg !181
%conv = sext i32 %0 to i64, !dbg !181
%mul = mul i64 12, %conv, !dbg !182
%call = call noalias i8* @malloc(i64 %mul) #4, !dbg !183
%1 = bitcast i8* %call to %struct.vector3*, !dbg !183
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !180
call void @llvm.dbg.declare(metadata i32* %i, metadata !184, metadata !35), !dbg !186
store i32 0, i32* %i, align 4, !dbg !186
br label %for.cond, !dbg !187
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !188
%3 = load i32, i32* %N.addr, align 4, !dbg !191
%cmp = icmp slt i32 %2, %3, !dbg !192
br i1 %cmp, label %for.body, label %for.end, !dbg !193
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #4, !dbg !194
%rem = srem i32 %call2, 100, !dbg !196
%4 = load i32, i32* %i, align 4, !dbg !197
%idxprom = sext i32 %4 to i64, !dbg !198
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !198
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !198
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !199
store i32 %rem, i32* %x, align 4, !dbg !200
%call3 = call i32 @rand() #4, !dbg !201
%rem4 = srem i32 %call3, 100, !dbg !202
%6 = load i32, i32* %i, align 4, !dbg !203
%idxprom5 = sext i32 %6 to i64, !dbg !204
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !204
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !204
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !205
store i32 %rem4, i32* %y, align 4, !dbg !206
%call7 = call i32 @rand() #4, !dbg !207
%rem8 = srem i32 %call7, 100, !dbg !208
%8 = load i32, i32* %i, align 4, !dbg !209
%idxprom9 = sext i32 %8 to i64, !dbg !210
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !210
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !210
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !211
store i32 %rem8, i32* %z, align 4, !dbg !212
br label %for.inc, !dbg !213
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !214
%inc = add nsw i32 %10, 1, !dbg !214
store i32 %inc, i32* %i, align 4, !dbg !214
br label %for.cond, !dbg !216
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !217
ret %struct.vector3* %11, !dbg !218
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #3
; Function Attrs: nounwind
declare i32 @rand() #3
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !219, metadata !35), !dbg !220
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !221, metadata !35), !dbg !222
%0 = load i32, i32* %argc.addr, align 4, !dbg !223
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !224
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !225
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !225
%2 = load i8*, i8** %arrayidx, align 8, !dbg !225
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !226
call void @llvm.dbg.declare(metadata i32* %x, metadata !227, metadata !35), !dbg !228
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !229
%call3 = call i64 @time(i64* null) #4, !dbg !230
%conv = trunc i64 %call3 to i32, !dbg !230
call void @srand(i32 %conv) #4, !dbg !231
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !233, metadata !35), !dbg !234
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !235
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !234
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !236, metadata !35), !dbg !237
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !238
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !237
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !239, metadata !35), !dbg !240
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !241
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !241
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !240
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !242, metadata !35), !dbg !243
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !244
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !244
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !243
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !245, metadata !35), !dbg !246
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !247
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !247
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !246
%6 = load i32, i32* %argc.addr, align 4, !dbg !248
%cmp = icmp eq i32 %6, 1, !dbg !250
br i1 %cmp, label %if.then, label %if.else, !dbg !251
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !252
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !254
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !255
br label %if.end, !dbg !256
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !257
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !259
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !260
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !261
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !263
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !264
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !265
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !266
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !267
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !268
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !269
%16 = load i32, i32* %x10, align 4, !dbg !269
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !270
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !271
%18 = load i32, i32* %y, align 4, !dbg !271
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !272
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !273
%20 = load i32, i32* %z, align 4, !dbg !273
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !274
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !275
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !275
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !276
%22 = load i32, i32* %x13, align 4, !dbg !276
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !277
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !277
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !278
%24 = load i32, i32* %x15, align 4, !dbg !278
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !279
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !279
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !280
%26 = load i32, i32* %x17, align 4, !dbg !280
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !281
ret i32 0, !dbg !282
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #3
; Function Attrs: nounwind
declare i64 @time(i64*) #3
; Function Attrs: nounwind
declare void @srand(i32) #3
attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 11, scope: !4)
!40 = !DILocation(line: 13, column: 14, scope: !4)
!41 = !DILocation(line: 13, column: 3, scope: !4)
!42 = !DILocation(line: 13, column: 6, scope: !4)
!43 = !DILocation(line: 13, column: 8, scope: !4)
!44 = !DILocation(line: 14, column: 11, scope: !4)
!45 = !DILocation(line: 14, column: 14, scope: !4)
!46 = !DILocation(line: 14, column: 3, scope: !4)
!47 = !DILocation(line: 14, column: 6, scope: !4)
!48 = !DILocation(line: 14, column: 8, scope: !4)
!49 = !DILocation(line: 15, column: 11, scope: !4)
!50 = !DILocation(line: 15, column: 14, scope: !4)
!51 = !DILocation(line: 15, column: 3, scope: !4)
!52 = !DILocation(line: 15, column: 6, scope: !4)
!53 = !DILocation(line: 15, column: 8, scope: !4)
!54 = !DILocation(line: 16, column: 1, scope: !4)
!55 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!56 = !DILocation(line: 22, column: 27, scope: !15)
!57 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!58 = !DILocation(line: 22, column: 46, scope: !15)
!59 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!60 = !DILocation(line: 23, column: 7, scope: !15)
!61 = !DILocation(line: 23, column: 11, scope: !15)
!62 = !DILocation(line: 23, column: 14, scope: !15)
!63 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!64 = !DILocation(line: 24, column: 7, scope: !15)
!65 = !DILocation(line: 24, column: 11, scope: !15)
!66 = !DILocation(line: 24, column: 14, scope: !15)
!67 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!68 = !DILocation(line: 25, column: 7, scope: !15)
!69 = !DILocation(line: 25, column: 11, scope: !15)
!70 = !DILocation(line: 25, column: 14, scope: !15)
!71 = !DILocation(line: 27, column: 10, scope: !15)
!72 = !DILocation(line: 27, column: 13, scope: !15)
!73 = !DILocation(line: 27, column: 3, scope: !15)
!74 = !DILocation(line: 27, column: 6, scope: !15)
!75 = !DILocation(line: 27, column: 8, scope: !15)
!76 = !DILocation(line: 28, column: 10, scope: !15)
!77 = !DILocation(line: 28, column: 13, scope: !15)
!78 = !DILocation(line: 28, column: 3, scope: !15)
!79 = !DILocation(line: 28, column: 6, scope: !15)
!80 = !DILocation(line: 28, column: 8, scope: !15)
!81 = !DILocation(line: 29, column: 10, scope: !15)
!82 = !DILocation(line: 29, column: 13, scope: !15)
!83 = !DILocation(line: 29, column: 3, scope: !15)
!84 = !DILocation(line: 29, column: 6, scope: !15)
!85 = !DILocation(line: 29, column: 8, scope: !15)
!86 = !DILocation(line: 31, column: 10, scope: !15)
!87 = !DILocation(line: 31, column: 3, scope: !15)
!88 = !DILocation(line: 31, column: 6, scope: !15)
!89 = !DILocation(line: 31, column: 8, scope: !15)
!90 = !DILocation(line: 32, column: 10, scope: !15)
!91 = !DILocation(line: 32, column: 3, scope: !15)
!92 = !DILocation(line: 32, column: 6, scope: !15)
!93 = !DILocation(line: 32, column: 8, scope: !15)
!94 = !DILocation(line: 33, column: 10, scope: !15)
!95 = !DILocation(line: 33, column: 3, scope: !15)
!96 = !DILocation(line: 33, column: 6, scope: !15)
!97 = !DILocation(line: 33, column: 8, scope: !15)
!98 = !DILocation(line: 34, column: 1, scope: !15)
!99 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!100 = !DILocation(line: 38, column: 37, scope: !16)
!101 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!102 = !DILocation(line: 38, column: 45, scope: !16)
!103 = !DILocalVariable(name: "i", scope: !104, file: !1, line: 39, type: !11)
!104 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!105 = !DILocation(line: 39, column: 12, scope: !104)
!106 = !DILocation(line: 39, column: 8, scope: !104)
!107 = !DILocation(line: 39, column: 19, scope: !108)
!108 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 1)
!109 = distinct !DILexicalBlock(scope: !104, file: !1, line: 39, column: 3)
!110 = !DILocation(line: 39, column: 23, scope: !108)
!111 = !DILocation(line: 39, column: 21, scope: !108)
!112 = !DILocation(line: 39, column: 3, scope: !108)
!113 = !DILocalVariable(name: "idx", scope: !114, file: !1, line: 40, type: !11)
!114 = distinct !DILexicalBlock(scope: !109, file: !1, line: 39, column: 31)
!115 = !DILocation(line: 40, column: 9, scope: !114)
!116 = !DILocation(line: 40, column: 28, scope: !114)
!117 = !DILocation(line: 40, column: 32, scope: !114)
!118 = !DILocation(line: 40, column: 35, scope: !114)
!119 = !DILocation(line: 40, column: 15, scope: !114)
!120 = !DILocation(line: 41, column: 14, scope: !114)
!121 = !DILocation(line: 41, column: 11, scope: !114)
!122 = !DILocation(line: 41, column: 24, scope: !114)
!123 = !DILocation(line: 41, column: 21, scope: !114)
!124 = !DILocation(line: 41, column: 5, scope: !114)
!125 = !DILocation(line: 42, column: 3, scope: !114)
!126 = !DILocation(line: 39, column: 27, scope: !127)
!127 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 2)
!128 = !DILocation(line: 39, column: 3, scope: !127)
!129 = !DILocation(line: 43, column: 1, scope: !16)
!130 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!131 = !DILocation(line: 45, column: 34, scope: !19)
!132 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!133 = !DILocation(line: 45, column: 42, scope: !19)
!134 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!135 = !DILocation(line: 45, column: 53, scope: !19)
!136 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!137 = !DILocation(line: 46, column: 7, scope: !19)
!138 = !DILocation(line: 46, column: 21, scope: !19)
!139 = !DILocation(line: 46, column: 18, scope: !19)
!140 = !DILocation(line: 46, column: 28, scope: !19)
!141 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!142 = !DILocation(line: 47, column: 7, scope: !19)
!143 = !DILocation(line: 47, column: 13, scope: !19)
!144 = !DILocalVariable(name: "i", scope: !145, file: !1, line: 48, type: !11)
!145 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!146 = !DILocation(line: 48, column: 12, scope: !145)
!147 = !DILocation(line: 48, column: 16, scope: !145)
!148 = !DILocation(line: 48, column: 8, scope: !145)
!149 = !DILocation(line: 48, column: 23, scope: !150)
!150 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 1)
!151 = distinct !DILexicalBlock(scope: !145, file: !1, line: 48, column: 3)
!152 = !DILocation(line: 48, column: 27, scope: !150)
!153 = !DILocation(line: 48, column: 25, scope: !150)
!154 = !DILocation(line: 48, column: 3, scope: !150)
!155 = !DILocation(line: 49, column: 12, scope: !156)
!156 = distinct !DILexicalBlock(scope: !157, file: !1, line: 49, column: 9)
!157 = distinct !DILexicalBlock(scope: !151, file: !1, line: 48, column: 35)
!158 = !DILocation(line: 49, column: 9, scope: !156)
!159 = !DILocation(line: 49, column: 15, scope: !156)
!160 = !DILocation(line: 49, column: 19, scope: !156)
!161 = !DILocation(line: 49, column: 17, scope: !156)
!162 = !DILocation(line: 49, column: 9, scope: !157)
!163 = !DILocation(line: 50, column: 13, scope: !164)
!164 = distinct !DILexicalBlock(scope: !156, file: !1, line: 49, column: 29)
!165 = !DILocation(line: 50, column: 11, scope: !164)
!166 = !DILocation(line: 51, column: 21, scope: !164)
!167 = !DILocation(line: 51, column: 18, scope: !164)
!168 = !DILocation(line: 51, column: 24, scope: !164)
!169 = !DILocation(line: 51, column: 16, scope: !164)
!170 = !DILocation(line: 52, column: 5, scope: !164)
!171 = !DILocation(line: 53, column: 3, scope: !157)
!172 = !DILocation(line: 48, column: 30, scope: !173)
!173 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 2)
!174 = !DILocation(line: 48, column: 3, scope: !173)
!175 = !DILocation(line: 54, column: 10, scope: !19)
!176 = !DILocation(line: 54, column: 3, scope: !19)
!177 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!178 = !DILocation(line: 57, column: 37, scope: !22)
!179 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!180 = !DILocation(line: 58, column: 19, scope: !22)
!181 = !DILocation(line: 58, column: 55, scope: !22)
!182 = !DILocation(line: 58, column: 54, scope: !22)
!183 = !DILocation(line: 58, column: 25, scope: !22)
!184 = !DILocalVariable(name: "i", scope: !185, file: !1, line: 59, type: !11)
!185 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!186 = !DILocation(line: 59, column: 12, scope: !185)
!187 = !DILocation(line: 59, column: 8, scope: !185)
!188 = !DILocation(line: 59, column: 19, scope: !189)
!189 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 1)
!190 = distinct !DILexicalBlock(scope: !185, file: !1, line: 59, column: 3)
!191 = !DILocation(line: 59, column: 23, scope: !189)
!192 = !DILocation(line: 59, column: 21, scope: !189)
!193 = !DILocation(line: 59, column: 3, scope: !189)
!194 = !DILocation(line: 60, column: 16, scope: !195)
!195 = distinct !DILexicalBlock(scope: !190, file: !1, line: 59, column: 31)
!196 = !DILocation(line: 60, column: 23, scope: !195)
!197 = !DILocation(line: 60, column: 9, scope: !195)
!198 = !DILocation(line: 60, column: 5, scope: !195)
!199 = !DILocation(line: 60, column: 12, scope: !195)
!200 = !DILocation(line: 60, column: 14, scope: !195)
!201 = !DILocation(line: 61, column: 16, scope: !195)
!202 = !DILocation(line: 61, column: 23, scope: !195)
!203 = !DILocation(line: 61, column: 9, scope: !195)
!204 = !DILocation(line: 61, column: 5, scope: !195)
!205 = !DILocation(line: 61, column: 12, scope: !195)
!206 = !DILocation(line: 61, column: 14, scope: !195)
!207 = !DILocation(line: 62, column: 16, scope: !195)
!208 = !DILocation(line: 62, column: 23, scope: !195)
!209 = !DILocation(line: 62, column: 9, scope: !195)
!210 = !DILocation(line: 62, column: 5, scope: !195)
!211 = !DILocation(line: 62, column: 12, scope: !195)
!212 = !DILocation(line: 62, column: 14, scope: !195)
!213 = !DILocation(line: 63, column: 3, scope: !195)
!214 = !DILocation(line: 59, column: 26, scope: !215)
!215 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 2)
!216 = !DILocation(line: 59, column: 3, scope: !215)
!217 = !DILocation(line: 64, column: 10, scope: !22)
!218 = !DILocation(line: 64, column: 3, scope: !22)
!219 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!220 = !DILocation(line: 67, column: 14, scope: !25)
!221 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!222 = !DILocation(line: 67, column: 27, scope: !25)
!223 = !DILocation(line: 68, column: 25, scope: !25)
!224 = !DILocation(line: 68, column: 3, scope: !25)
!225 = !DILocation(line: 69, column: 28, scope: !25)
!226 = !DILocation(line: 69, column: 3, scope: !25)
!227 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!228 = !DILocation(line: 71, column: 7, scope: !25)
!229 = !DILocation(line: 72, column: 3, scope: !25)
!230 = !DILocation(line: 74, column: 9, scope: !25)
!231 = !DILocation(line: 74, column: 3, scope: !232)
!232 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!233 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!234 = !DILocation(line: 75, column: 19, scope: !25)
!235 = !DILocation(line: 75, column: 25, scope: !25)
!236 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!237 = !DILocation(line: 76, column: 19, scope: !25)
!238 = !DILocation(line: 76, column: 26, scope: !25)
!239 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!240 = !DILocation(line: 77, column: 19, scope: !25)
!241 = !DILocation(line: 77, column: 24, scope: !25)
!242 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!243 = !DILocation(line: 78, column: 19, scope: !25)
!244 = !DILocation(line: 78, column: 24, scope: !25)
!245 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!246 = !DILocation(line: 79, column: 19, scope: !25)
!247 = !DILocation(line: 79, column: 24, scope: !25)
!248 = !DILocation(line: 81, column: 7, scope: !249)
!249 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!250 = !DILocation(line: 81, column: 12, scope: !249)
!251 = !DILocation(line: 81, column: 7, scope: !25)
!252 = !DILocation(line: 82, column: 9, scope: !253)
!253 = distinct !DILexicalBlock(scope: !249, file: !1, line: 81, column: 18)
!254 = !DILocation(line: 82, column: 12, scope: !253)
!255 = !DILocation(line: 82, column: 5, scope: !253)
!256 = !DILocation(line: 83, column: 3, scope: !253)
!257 = !DILocation(line: 84, column: 9, scope: !258)
!258 = distinct !DILexicalBlock(scope: !249, file: !1, line: 83, column: 10)
!259 = !DILocation(line: 84, column: 12, scope: !258)
!260 = !DILocation(line: 84, column: 5, scope: !258)
!261 = !DILocation(line: 85, column: 9, scope: !258)
!262 = !DILocation(line: 85, column: 12, scope: !258)
!263 = !DILocation(line: 85, column: 5, scope: !258)
!264 = !DILocation(line: 88, column: 18, scope: !25)
!265 = !DILocation(line: 88, column: 3, scope: !25)
!266 = !DILocation(line: 89, column: 18, scope: !25)
!267 = !DILocation(line: 89, column: 3, scope: !25)
!268 = !DILocation(line: 91, column: 42, scope: !25)
!269 = !DILocation(line: 91, column: 45, scope: !25)
!270 = !DILocation(line: 91, column: 48, scope: !25)
!271 = !DILocation(line: 91, column: 51, scope: !25)
!272 = !DILocation(line: 91, column: 54, scope: !25)
!273 = !DILocation(line: 91, column: 57, scope: !25)
!274 = !DILocation(line: 91, column: 3, scope: !25)
!275 = !DILocation(line: 92, column: 42, scope: !25)
!276 = !DILocation(line: 92, column: 50, scope: !25)
!277 = !DILocation(line: 92, column: 53, scope: !25)
!278 = !DILocation(line: 92, column: 61, scope: !25)
!279 = !DILocation(line: 92, column: 64, scope: !25)
!280 = !DILocation(line: 92, column: 72, scope: !25)
!281 = !DILocation(line: 92, column: 3, scope: !25)
!282 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
*** IR Dump After Deduce function attributes ***
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
*** IR Dump After Deduce function attributes ***
Printing <null> Function
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #3
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i32 @rand() #3
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #3
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i64 @time(i64*) #3
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare void @srand(i32) #3
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #0 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !37, metadata !35), !dbg !38
%0 = load i32, i32* %N.addr, align 4, !dbg !39
%conv = sext i32 %0 to i64, !dbg !39
%mul = mul i64 12, %conv, !dbg !40
%call = call noalias i8* @malloc(i64 %mul) #4, !dbg !41
%1 = bitcast i8* %call to %struct.vector3*, !dbg !41
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !38
call void @llvm.dbg.declare(metadata i32* %i, metadata !42, metadata !35), !dbg !44
store i32 0, i32* %i, align 4, !dbg !44
br label %for.cond, !dbg !45
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !46
%3 = load i32, i32* %N.addr, align 4, !dbg !49
%cmp = icmp slt i32 %2, %3, !dbg !50
br i1 %cmp, label %for.body, label %for.end, !dbg !51
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #4, !dbg !52
%rem = srem i32 %call2, 100, !dbg !54
%4 = load i32, i32* %i, align 4, !dbg !55
%idxprom = sext i32 %4 to i64, !dbg !56
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !56
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !56
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !57
store i32 %rem, i32* %x, align 4, !dbg !58
%call3 = call i32 @rand() #4, !dbg !59
%rem4 = srem i32 %call3, 100, !dbg !60
%6 = load i32, i32* %i, align 4, !dbg !61
%idxprom5 = sext i32 %6 to i64, !dbg !62
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !62
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !62
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !63
store i32 %rem4, i32* %y, align 4, !dbg !64
%call7 = call i32 @rand() #4, !dbg !65
%rem8 = srem i32 %call7, 100, !dbg !66
%8 = load i32, i32* %i, align 4, !dbg !67
%idxprom9 = sext i32 %8 to i64, !dbg !68
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !68
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !68
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !69
store i32 %rem8, i32* %z, align 4, !dbg !70
br label %for.inc, !dbg !71
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !72
%inc = add nsw i32 %10, 1, !dbg !72
store i32 %inc, i32* %i, align 4, !dbg !72
br label %for.cond, !dbg !74
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !75
ret %struct.vector3* %11, !dbg !76
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: norecurse nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: norecurse nounwind readonly uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #4 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !34, metadata !35), !dbg !36
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !37, metadata !35), !dbg !38
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !39, metadata !35), !dbg !40
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !41, metadata !35), !dbg !42
%0 = load i32, i32* %start.addr, align 4, !dbg !43
%idxprom = sext i32 %0 to i64, !dbg !44
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !44
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !44
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !45
%2 = load i32, i32* %x, align 4, !dbg !45
store i32 %2, i32* %smallest, align 4, !dbg !42
call void @llvm.dbg.declare(metadata i32* %idx, metadata !46, metadata !35), !dbg !47
%3 = load i32, i32* %start.addr, align 4, !dbg !48
store i32 %3, i32* %idx, align 4, !dbg !47
call void @llvm.dbg.declare(metadata i32* %i, metadata !49, metadata !35), !dbg !51
%4 = load i32, i32* %start.addr, align 4, !dbg !52
store i32 %4, i32* %i, align 4, !dbg !51
br label %for.cond, !dbg !53
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !54
%6 = load i32, i32* %N.addr, align 4, !dbg !57
%cmp = icmp slt i32 %5, %6, !dbg !58
br i1 %cmp, label %for.body, label %for.end, !dbg !59
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !60
%idxprom1 = sext i32 %7 to i64, !dbg !63
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !63
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !63
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !64
%9 = load i32, i32* %x3, align 4, !dbg !64
%10 = load i32, i32* %smallest, align 4, !dbg !65
%cmp4 = icmp slt i32 %9, %10, !dbg !66
br i1 %cmp4, label %if.then, label %if.end, !dbg !67
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !68
store i32 %11, i32* %idx, align 4, !dbg !70
%12 = load i32, i32* %i, align 4, !dbg !71
%idxprom5 = sext i32 %12 to i64, !dbg !72
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !72
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !72
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !73
%14 = load i32, i32* %x7, align 4, !dbg !73
store i32 %14, i32* %smallest, align 4, !dbg !74
br label %if.end, !dbg !75
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !76
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !77
%inc = add nsw i32 %15, 1, !dbg !77
store i32 %inc, i32* %i, align 4, !dbg !77
br label %for.cond, !dbg !79
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !80
ret i32 %16, !dbg !81
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: norecurse nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.declare(metadata i32* %x, metadata !39, metadata !35), !dbg !40
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !42
%1 = load i32, i32* %x1, align 4, !dbg !42
store i32 %1, i32* %x, align 4, !dbg !40
call void @llvm.dbg.declare(metadata i32* %y, metadata !43, metadata !35), !dbg !44
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !45
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !46
%3 = load i32, i32* %y2, align 4, !dbg !46
store i32 %3, i32* %y, align 4, !dbg !44
call void @llvm.dbg.declare(metadata i32* %z, metadata !47, metadata !35), !dbg !48
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !49
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !50
%5 = load i32, i32* %z3, align 4, !dbg !50
store i32 %5, i32* %z, align 4, !dbg !48
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !51
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !52
%7 = load i32, i32* %x4, align 4, !dbg !52
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !53
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !54
store i32 %7, i32* %x5, align 4, !dbg !55
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !56
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !57
%10 = load i32, i32* %y6, align 4, !dbg !57
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !58
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !59
store i32 %10, i32* %y7, align 4, !dbg !60
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !61
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !62
%13 = load i32, i32* %z8, align 4, !dbg !62
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !63
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !64
store i32 %13, i32* %z9, align 4, !dbg !65
%15 = load i32, i32* %x, align 4, !dbg !66
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !67
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !68
store i32 %15, i32* %x10, align 4, !dbg !69
%17 = load i32, i32* %y, align 4, !dbg !70
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !71
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !72
store i32 %17, i32* %y11, align 4, !dbg !73
%19 = load i32, i32* %z, align 4, !dbg !74
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !75
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !76
store i32 %19, i32* %z12, align 4, !dbg !77
ret void, !dbg !78
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: norecurse nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !34, metadata !35), !dbg !36
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.declare(metadata i32* %i, metadata !39, metadata !35), !dbg !41
store i32 0, i32* %i, align 4, !dbg !41
br label %for.cond, !dbg !42
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !43
%1 = load i32, i32* %N.addr, align 4, !dbg !46
%cmp = icmp slt i32 %0, %1, !dbg !47
br i1 %cmp, label %for.body, label %for.end, !dbg !48
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !49, metadata !35), !dbg !51
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !52
%3 = load i32, i32* %i, align 4, !dbg !53
%4 = load i32, i32* %N.addr, align 4, !dbg !54
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !55
store i32 %call, i32* %idx, align 4, !dbg !51
%5 = load i32, i32* %idx, align 4, !dbg !56
%idxprom = sext i32 %5 to i64, !dbg !57
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !57
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !57
%7 = load i32, i32* %i, align 4, !dbg !58
%idxprom1 = sext i32 %7 to i64, !dbg !59
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !59
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !59
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !60
br label %for.inc, !dbg !61
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !62
%inc = add nsw i32 %9, 1, !dbg !62
store i32 %inc, i32* %i, align 4, !dbg !62
br label %for.cond, !dbg !64
for.end: ; preds = %for.cond
ret void, !dbg !65
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #2 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !34, metadata !35), !dbg !36
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !37, metadata !35), !dbg !38
%0 = load i32, i32* %argc.addr, align 4, !dbg !39
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !40
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !41
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !41
%2 = load i8*, i8** %arrayidx, align 8, !dbg !41
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !42
call void @llvm.dbg.declare(metadata i32* %x, metadata !43, metadata !35), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !45
%call3 = call i64 @time(i64* null) #6, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #6, !dbg !47
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !49, metadata !35), !dbg !50
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !51
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !50
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !52, metadata !35), !dbg !53
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !54
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !53
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !55, metadata !35), !dbg !56
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !57
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !57
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !56
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !58, metadata !35), !dbg !59
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !60
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !60
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !59
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !61, metadata !35), !dbg !62
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !63
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !63
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !62
%6 = load i32, i32* %argc.addr, align 4, !dbg !64
%cmp = icmp eq i32 %6, 1, !dbg !66
br i1 %cmp, label %if.then, label %if.else, !dbg !67
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !68
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !70
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !71
br label %if.end, !dbg !72
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !73
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !75
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !76
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !77
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !78
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !79
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !80
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !81
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !82
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !83
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !84
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !85
%16 = load i32, i32* %x10, align 4, !dbg !85
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !86
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !87
%18 = load i32, i32* %y, align 4, !dbg !87
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !88
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !89
%20 = load i32, i32* %z, align 4, !dbg !89
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !90
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !91
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !91
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !92
%22 = load i32, i32* %x13, align 4, !dbg !92
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !93
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !93
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !94
%24 = load i32, i32* %x15, align 4, !dbg !94
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !95
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !95
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !96
%26 = load i32, i32* %x17, align 4, !dbg !96
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !97
ret i32 0, !dbg !98
}
*** IR Dump After Deduce function attributes ***
Printing <null> Function
*** IR Dump After Deduce function attributes in RPO ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: norecurse nounwind uwtable
define internal void @add(%struct.vector3* %v, %struct.vector3* %w) #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: nounwind uwtable
define internal void @copy(%struct.vector3* %dst, %struct.vector3* %src) #2 !dbg !14 {
entry:
unreachable
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #3
; Function Attrs: norecurse nounwind uwtable
define internal void @swap(%struct.vector3* %a, %struct.vector3* %b) #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !57, metadata !35), !dbg !58
call void @llvm.dbg.declare(metadata i32* %x, metadata !59, metadata !35), !dbg !60
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !61
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !62
%1 = load i32, i32* %x1, align 4, !dbg !62
store i32 %1, i32* %x, align 4, !dbg !60
call void @llvm.dbg.declare(metadata i32* %y, metadata !63, metadata !35), !dbg !64
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !65
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !66
%3 = load i32, i32* %y2, align 4, !dbg !66
store i32 %3, i32* %y, align 4, !dbg !64
call void @llvm.dbg.declare(metadata i32* %z, metadata !67, metadata !35), !dbg !68
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !70
%5 = load i32, i32* %z3, align 4, !dbg !70
store i32 %5, i32* %z, align 4, !dbg !68
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !71
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !72
%7 = load i32, i32* %x4, align 4, !dbg !72
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !74
store i32 %7, i32* %x5, align 4, !dbg !75
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !76
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !77
%10 = load i32, i32* %y6, align 4, !dbg !77
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !78
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !79
store i32 %10, i32* %y7, align 4, !dbg !80
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !81
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !82
%13 = load i32, i32* %z8, align 4, !dbg !82
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !83
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !84
store i32 %13, i32* %z9, align 4, !dbg !85
%15 = load i32, i32* %x, align 4, !dbg !86
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !87
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !88
store i32 %15, i32* %x10, align 4, !dbg !89
%17 = load i32, i32* %y, align 4, !dbg !90
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !91
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !92
store i32 %17, i32* %y11, align 4, !dbg !93
%19 = load i32, i32* %z, align 4, !dbg !94
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !96
store i32 %19, i32* %z12, align 4, !dbg !97
ret void, !dbg !98
}
; Function Attrs: norecurse nounwind uwtable
define internal void @selection_sort(%struct.vector3* %vs, i32 %N) #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !99, metadata !35), !dbg !100
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !101, metadata !35), !dbg !102
call void @llvm.dbg.declare(metadata i32* %i, metadata !103, metadata !35), !dbg !105
store i32 0, i32* %i, align 4, !dbg !105
br label %for.cond, !dbg !106
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !107
%1 = load i32, i32* %N.addr, align 4, !dbg !110
%cmp = icmp slt i32 %0, %1, !dbg !111
br i1 %cmp, label %for.body, label %for.end, !dbg !112
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !113, metadata !35), !dbg !115
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !116
%3 = load i32, i32* %i, align 4, !dbg !117
%4 = load i32, i32* %N.addr, align 4, !dbg !118
%call = call i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !119
store i32 %call, i32* %idx, align 4, !dbg !115
%5 = load i32, i32* %idx, align 4, !dbg !120
%idxprom = sext i32 %5 to i64, !dbg !121
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !121
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !121
%7 = load i32, i32* %i, align 4, !dbg !122
%idxprom1 = sext i32 %7 to i64, !dbg !123
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !123
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !123
call void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !124
br label %for.inc, !dbg !125
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !126
%inc = add nsw i32 %9, 1, !dbg !126
store i32 %inc, i32* %i, align 4, !dbg !126
br label %for.cond, !dbg !128
for.end: ; preds = %for.cond
ret void, !dbg !129
}
; Function Attrs: norecurse nounwind readonly uwtable
define internal i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) #4 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !130, metadata !35), !dbg !131
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !132, metadata !35), !dbg !133
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !134, metadata !35), !dbg !135
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !136, metadata !35), !dbg !137
%0 = load i32, i32* %start.addr, align 4, !dbg !138
%idxprom = sext i32 %0 to i64, !dbg !139
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !139
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !139
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !140
%2 = load i32, i32* %x, align 4, !dbg !140
store i32 %2, i32* %smallest, align 4, !dbg !137
call void @llvm.dbg.declare(metadata i32* %idx, metadata !141, metadata !35), !dbg !142
%3 = load i32, i32* %start.addr, align 4, !dbg !143
store i32 %3, i32* %idx, align 4, !dbg !142
call void @llvm.dbg.declare(metadata i32* %i, metadata !144, metadata !35), !dbg !146
%4 = load i32, i32* %start.addr, align 4, !dbg !147
store i32 %4, i32* %i, align 4, !dbg !146
br label %for.cond, !dbg !148
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !149
%6 = load i32, i32* %N.addr, align 4, !dbg !152
%cmp = icmp slt i32 %5, %6, !dbg !153
br i1 %cmp, label %for.body, label %for.end, !dbg !154
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !155
%idxprom1 = sext i32 %7 to i64, !dbg !158
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !158
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !158
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !159
%9 = load i32, i32* %x3, align 4, !dbg !159
%10 = load i32, i32* %smallest, align 4, !dbg !160
%cmp4 = icmp slt i32 %9, %10, !dbg !161
br i1 %cmp4, label %if.then, label %if.end, !dbg !162
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !163
store i32 %11, i32* %idx, align 4, !dbg !165
%12 = load i32, i32* %i, align 4, !dbg !166
%idxprom5 = sext i32 %12 to i64, !dbg !167
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !167
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !167
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !168
%14 = load i32, i32* %x7, align 4, !dbg !168
store i32 %14, i32* %smallest, align 4, !dbg !169
br label %if.end, !dbg !170
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !171
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !172
%inc = add nsw i32 %15, 1, !dbg !172
store i32 %inc, i32* %i, align 4, !dbg !172
br label %for.cond, !dbg !174
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !175
ret i32 %16, !dbg !176
}
; Function Attrs: nounwind uwtable
define internal %struct.vector3* @make_random_arr(i32 %N) #2 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !177, metadata !35), !dbg !178
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !179, metadata !35), !dbg !180
%0 = load i32, i32* %N.addr, align 4, !dbg !181
%conv = sext i32 %0 to i64, !dbg !181
%mul = mul i64 12, %conv, !dbg !182
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !183
%1 = bitcast i8* %call to %struct.vector3*, !dbg !183
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !180
call void @llvm.dbg.declare(metadata i32* %i, metadata !184, metadata !35), !dbg !186
store i32 0, i32* %i, align 4, !dbg !186
br label %for.cond, !dbg !187
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !188
%3 = load i32, i32* %N.addr, align 4, !dbg !191
%cmp = icmp slt i32 %2, %3, !dbg !192
br i1 %cmp, label %for.body, label %for.end, !dbg !193
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !194
%rem = srem i32 %call2, 100, !dbg !196
%4 = load i32, i32* %i, align 4, !dbg !197
%idxprom = sext i32 %4 to i64, !dbg !198
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !198
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !198
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !199
store i32 %rem, i32* %x, align 4, !dbg !200
%call3 = call i32 @rand() #6, !dbg !201
%rem4 = srem i32 %call3, 100, !dbg !202
%6 = load i32, i32* %i, align 4, !dbg !203
%idxprom5 = sext i32 %6 to i64, !dbg !204
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !204
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !204
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !205
store i32 %rem4, i32* %y, align 4, !dbg !206
%call7 = call i32 @rand() #6, !dbg !207
%rem8 = srem i32 %call7, 100, !dbg !208
%8 = load i32, i32* %i, align 4, !dbg !209
%idxprom9 = sext i32 %8 to i64, !dbg !210
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !210
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !210
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !211
store i32 %rem8, i32* %z, align 4, !dbg !212
br label %for.inc, !dbg !213
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !214
%inc = add nsw i32 %10, 1, !dbg !214
store i32 %inc, i32* %i, align 4, !dbg !214
br label %for.cond, !dbg !216
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !217
ret %struct.vector3* %11, !dbg !218
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
; Function Attrs: nounwind
declare i32 @rand() #5
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #2 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !219, metadata !35), !dbg !220
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !221, metadata !35), !dbg !222
%0 = load i32, i32* %argc.addr, align 4, !dbg !223
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !224
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !225
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !225
%2 = load i8*, i8** %arrayidx, align 8, !dbg !225
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !226
call void @llvm.dbg.declare(metadata i32* %x, metadata !227, metadata !35), !dbg !228
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !229
%call3 = call i64 @time(i64* null) #6, !dbg !230
%conv = trunc i64 %call3 to i32, !dbg !230
call void @srand(i32 %conv) #6, !dbg !231
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !233, metadata !35), !dbg !234
%call4 = call %struct.vector3* @make_random_arr(i32 3), !dbg !235
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !234
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !236, metadata !35), !dbg !237
%call5 = call %struct.vector3* @make_random_arr(i32 10), !dbg !238
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !237
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !239, metadata !35), !dbg !240
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !241
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !241
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !240
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !242, metadata !35), !dbg !243
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !244
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !244
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !243
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !245, metadata !35), !dbg !246
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !247
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !247
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !246
%6 = load i32, i32* %argc.addr, align 4, !dbg !248
%cmp = icmp eq i32 %6, 1, !dbg !250
br i1 %cmp, label %if.then, label %if.else, !dbg !251
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !252
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !254
call void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !255
br label %if.end, !dbg !256
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !257
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !259
call void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !260
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !261
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !263
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !264
call void @selection_sort(%struct.vector3* %13, i32 3), !dbg !265
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !266
call void @selection_sort(%struct.vector3* %14, i32 10), !dbg !267
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !268
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !269
%16 = load i32, i32* %x10, align 4, !dbg !269
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !270
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !271
%18 = load i32, i32* %y, align 4, !dbg !271
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !272
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !273
%20 = load i32, i32* %z, align 4, !dbg !273
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !274
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !275
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !275
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !276
%22 = load i32, i32* %x13, align 4, !dbg !276
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !277
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !277
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !278
%24 = load i32, i32* %x15, align 4, !dbg !278
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !279
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !279
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !280
%26 = load i32, i32* %x17, align 4, !dbg !280
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !281
ret i32 0, !dbg !282
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
; Function Attrs: nounwind
declare i64 @time(i64*) #5
; Function Attrs: nounwind
declare void @srand(i32) #5
attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { argmemonly nounwind }
attributes #4 = { norecurse nounwind readonly uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 11, scope: !4)
!40 = !DILocation(line: 13, column: 14, scope: !4)
!41 = !DILocation(line: 13, column: 3, scope: !4)
!42 = !DILocation(line: 13, column: 6, scope: !4)
!43 = !DILocation(line: 13, column: 8, scope: !4)
!44 = !DILocation(line: 14, column: 11, scope: !4)
!45 = !DILocation(line: 14, column: 14, scope: !4)
!46 = !DILocation(line: 14, column: 3, scope: !4)
!47 = !DILocation(line: 14, column: 6, scope: !4)
!48 = !DILocation(line: 14, column: 8, scope: !4)
!49 = !DILocation(line: 15, column: 11, scope: !4)
!50 = !DILocation(line: 15, column: 14, scope: !4)
!51 = !DILocation(line: 15, column: 3, scope: !4)
!52 = !DILocation(line: 15, column: 6, scope: !4)
!53 = !DILocation(line: 15, column: 8, scope: !4)
!54 = !DILocation(line: 16, column: 1, scope: !4)
!55 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!56 = !DILocation(line: 22, column: 27, scope: !15)
!57 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!58 = !DILocation(line: 22, column: 46, scope: !15)
!59 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!60 = !DILocation(line: 23, column: 7, scope: !15)
!61 = !DILocation(line: 23, column: 11, scope: !15)
!62 = !DILocation(line: 23, column: 14, scope: !15)
!63 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!64 = !DILocation(line: 24, column: 7, scope: !15)
!65 = !DILocation(line: 24, column: 11, scope: !15)
!66 = !DILocation(line: 24, column: 14, scope: !15)
!67 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!68 = !DILocation(line: 25, column: 7, scope: !15)
!69 = !DILocation(line: 25, column: 11, scope: !15)
!70 = !DILocation(line: 25, column: 14, scope: !15)
!71 = !DILocation(line: 27, column: 10, scope: !15)
!72 = !DILocation(line: 27, column: 13, scope: !15)
!73 = !DILocation(line: 27, column: 3, scope: !15)
!74 = !DILocation(line: 27, column: 6, scope: !15)
!75 = !DILocation(line: 27, column: 8, scope: !15)
!76 = !DILocation(line: 28, column: 10, scope: !15)
!77 = !DILocation(line: 28, column: 13, scope: !15)
!78 = !DILocation(line: 28, column: 3, scope: !15)
!79 = !DILocation(line: 28, column: 6, scope: !15)
!80 = !DILocation(line: 28, column: 8, scope: !15)
!81 = !DILocation(line: 29, column: 10, scope: !15)
!82 = !DILocation(line: 29, column: 13, scope: !15)
!83 = !DILocation(line: 29, column: 3, scope: !15)
!84 = !DILocation(line: 29, column: 6, scope: !15)
!85 = !DILocation(line: 29, column: 8, scope: !15)
!86 = !DILocation(line: 31, column: 10, scope: !15)
!87 = !DILocation(line: 31, column: 3, scope: !15)
!88 = !DILocation(line: 31, column: 6, scope: !15)
!89 = !DILocation(line: 31, column: 8, scope: !15)
!90 = !DILocation(line: 32, column: 10, scope: !15)
!91 = !DILocation(line: 32, column: 3, scope: !15)
!92 = !DILocation(line: 32, column: 6, scope: !15)
!93 = !DILocation(line: 32, column: 8, scope: !15)
!94 = !DILocation(line: 33, column: 10, scope: !15)
!95 = !DILocation(line: 33, column: 3, scope: !15)
!96 = !DILocation(line: 33, column: 6, scope: !15)
!97 = !DILocation(line: 33, column: 8, scope: !15)
!98 = !DILocation(line: 34, column: 1, scope: !15)
!99 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!100 = !DILocation(line: 38, column: 37, scope: !16)
!101 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!102 = !DILocation(line: 38, column: 45, scope: !16)
!103 = !DILocalVariable(name: "i", scope: !104, file: !1, line: 39, type: !11)
!104 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!105 = !DILocation(line: 39, column: 12, scope: !104)
!106 = !DILocation(line: 39, column: 8, scope: !104)
!107 = !DILocation(line: 39, column: 19, scope: !108)
!108 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 1)
!109 = distinct !DILexicalBlock(scope: !104, file: !1, line: 39, column: 3)
!110 = !DILocation(line: 39, column: 23, scope: !108)
!111 = !DILocation(line: 39, column: 21, scope: !108)
!112 = !DILocation(line: 39, column: 3, scope: !108)
!113 = !DILocalVariable(name: "idx", scope: !114, file: !1, line: 40, type: !11)
!114 = distinct !DILexicalBlock(scope: !109, file: !1, line: 39, column: 31)
!115 = !DILocation(line: 40, column: 9, scope: !114)
!116 = !DILocation(line: 40, column: 28, scope: !114)
!117 = !DILocation(line: 40, column: 32, scope: !114)
!118 = !DILocation(line: 40, column: 35, scope: !114)
!119 = !DILocation(line: 40, column: 15, scope: !114)
!120 = !DILocation(line: 41, column: 14, scope: !114)
!121 = !DILocation(line: 41, column: 11, scope: !114)
!122 = !DILocation(line: 41, column: 24, scope: !114)
!123 = !DILocation(line: 41, column: 21, scope: !114)
!124 = !DILocation(line: 41, column: 5, scope: !114)
!125 = !DILocation(line: 42, column: 3, scope: !114)
!126 = !DILocation(line: 39, column: 27, scope: !127)
!127 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 2)
!128 = !DILocation(line: 39, column: 3, scope: !127)
!129 = !DILocation(line: 43, column: 1, scope: !16)
!130 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!131 = !DILocation(line: 45, column: 34, scope: !19)
!132 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!133 = !DILocation(line: 45, column: 42, scope: !19)
!134 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!135 = !DILocation(line: 45, column: 53, scope: !19)
!136 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!137 = !DILocation(line: 46, column: 7, scope: !19)
!138 = !DILocation(line: 46, column: 21, scope: !19)
!139 = !DILocation(line: 46, column: 18, scope: !19)
!140 = !DILocation(line: 46, column: 28, scope: !19)
!141 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!142 = !DILocation(line: 47, column: 7, scope: !19)
!143 = !DILocation(line: 47, column: 13, scope: !19)
!144 = !DILocalVariable(name: "i", scope: !145, file: !1, line: 48, type: !11)
!145 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!146 = !DILocation(line: 48, column: 12, scope: !145)
!147 = !DILocation(line: 48, column: 16, scope: !145)
!148 = !DILocation(line: 48, column: 8, scope: !145)
!149 = !DILocation(line: 48, column: 23, scope: !150)
!150 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 1)
!151 = distinct !DILexicalBlock(scope: !145, file: !1, line: 48, column: 3)
!152 = !DILocation(line: 48, column: 27, scope: !150)
!153 = !DILocation(line: 48, column: 25, scope: !150)
!154 = !DILocation(line: 48, column: 3, scope: !150)
!155 = !DILocation(line: 49, column: 12, scope: !156)
!156 = distinct !DILexicalBlock(scope: !157, file: !1, line: 49, column: 9)
!157 = distinct !DILexicalBlock(scope: !151, file: !1, line: 48, column: 35)
!158 = !DILocation(line: 49, column: 9, scope: !156)
!159 = !DILocation(line: 49, column: 15, scope: !156)
!160 = !DILocation(line: 49, column: 19, scope: !156)
!161 = !DILocation(line: 49, column: 17, scope: !156)
!162 = !DILocation(line: 49, column: 9, scope: !157)
!163 = !DILocation(line: 50, column: 13, scope: !164)
!164 = distinct !DILexicalBlock(scope: !156, file: !1, line: 49, column: 29)
!165 = !DILocation(line: 50, column: 11, scope: !164)
!166 = !DILocation(line: 51, column: 21, scope: !164)
!167 = !DILocation(line: 51, column: 18, scope: !164)
!168 = !DILocation(line: 51, column: 24, scope: !164)
!169 = !DILocation(line: 51, column: 16, scope: !164)
!170 = !DILocation(line: 52, column: 5, scope: !164)
!171 = !DILocation(line: 53, column: 3, scope: !157)
!172 = !DILocation(line: 48, column: 30, scope: !173)
!173 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 2)
!174 = !DILocation(line: 48, column: 3, scope: !173)
!175 = !DILocation(line: 54, column: 10, scope: !19)
!176 = !DILocation(line: 54, column: 3, scope: !19)
!177 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!178 = !DILocation(line: 57, column: 37, scope: !22)
!179 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!180 = !DILocation(line: 58, column: 19, scope: !22)
!181 = !DILocation(line: 58, column: 55, scope: !22)
!182 = !DILocation(line: 58, column: 54, scope: !22)
!183 = !DILocation(line: 58, column: 25, scope: !22)
!184 = !DILocalVariable(name: "i", scope: !185, file: !1, line: 59, type: !11)
!185 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!186 = !DILocation(line: 59, column: 12, scope: !185)
!187 = !DILocation(line: 59, column: 8, scope: !185)
!188 = !DILocation(line: 59, column: 19, scope: !189)
!189 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 1)
!190 = distinct !DILexicalBlock(scope: !185, file: !1, line: 59, column: 3)
!191 = !DILocation(line: 59, column: 23, scope: !189)
!192 = !DILocation(line: 59, column: 21, scope: !189)
!193 = !DILocation(line: 59, column: 3, scope: !189)
!194 = !DILocation(line: 60, column: 16, scope: !195)
!195 = distinct !DILexicalBlock(scope: !190, file: !1, line: 59, column: 31)
!196 = !DILocation(line: 60, column: 23, scope: !195)
!197 = !DILocation(line: 60, column: 9, scope: !195)
!198 = !DILocation(line: 60, column: 5, scope: !195)
!199 = !DILocation(line: 60, column: 12, scope: !195)
!200 = !DILocation(line: 60, column: 14, scope: !195)
!201 = !DILocation(line: 61, column: 16, scope: !195)
!202 = !DILocation(line: 61, column: 23, scope: !195)
!203 = !DILocation(line: 61, column: 9, scope: !195)
!204 = !DILocation(line: 61, column: 5, scope: !195)
!205 = !DILocation(line: 61, column: 12, scope: !195)
!206 = !DILocation(line: 61, column: 14, scope: !195)
!207 = !DILocation(line: 62, column: 16, scope: !195)
!208 = !DILocation(line: 62, column: 23, scope: !195)
!209 = !DILocation(line: 62, column: 9, scope: !195)
!210 = !DILocation(line: 62, column: 5, scope: !195)
!211 = !DILocation(line: 62, column: 12, scope: !195)
!212 = !DILocation(line: 62, column: 14, scope: !195)
!213 = !DILocation(line: 63, column: 3, scope: !195)
!214 = !DILocation(line: 59, column: 26, scope: !215)
!215 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 2)
!216 = !DILocation(line: 59, column: 3, scope: !215)
!217 = !DILocation(line: 64, column: 10, scope: !22)
!218 = !DILocation(line: 64, column: 3, scope: !22)
!219 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!220 = !DILocation(line: 67, column: 14, scope: !25)
!221 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!222 = !DILocation(line: 67, column: 27, scope: !25)
!223 = !DILocation(line: 68, column: 25, scope: !25)
!224 = !DILocation(line: 68, column: 3, scope: !25)
!225 = !DILocation(line: 69, column: 28, scope: !25)
!226 = !DILocation(line: 69, column: 3, scope: !25)
!227 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!228 = !DILocation(line: 71, column: 7, scope: !25)
!229 = !DILocation(line: 72, column: 3, scope: !25)
!230 = !DILocation(line: 74, column: 9, scope: !25)
!231 = !DILocation(line: 74, column: 3, scope: !232)
!232 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!233 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!234 = !DILocation(line: 75, column: 19, scope: !25)
!235 = !DILocation(line: 75, column: 25, scope: !25)
!236 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!237 = !DILocation(line: 76, column: 19, scope: !25)
!238 = !DILocation(line: 76, column: 26, scope: !25)
!239 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!240 = !DILocation(line: 77, column: 19, scope: !25)
!241 = !DILocation(line: 77, column: 24, scope: !25)
!242 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!243 = !DILocation(line: 78, column: 19, scope: !25)
!244 = !DILocation(line: 78, column: 24, scope: !25)
!245 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!246 = !DILocation(line: 79, column: 19, scope: !25)
!247 = !DILocation(line: 79, column: 24, scope: !25)
!248 = !DILocation(line: 81, column: 7, scope: !249)
!249 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!250 = !DILocation(line: 81, column: 12, scope: !249)
!251 = !DILocation(line: 81, column: 7, scope: !25)
!252 = !DILocation(line: 82, column: 9, scope: !253)
!253 = distinct !DILexicalBlock(scope: !249, file: !1, line: 81, column: 18)
!254 = !DILocation(line: 82, column: 12, scope: !253)
!255 = !DILocation(line: 82, column: 5, scope: !253)
!256 = !DILocation(line: 83, column: 3, scope: !253)
!257 = !DILocation(line: 84, column: 9, scope: !258)
!258 = distinct !DILexicalBlock(scope: !249, file: !1, line: 83, column: 10)
!259 = !DILocation(line: 84, column: 12, scope: !258)
!260 = !DILocation(line: 84, column: 5, scope: !258)
!261 = !DILocation(line: 85, column: 9, scope: !258)
!262 = !DILocation(line: 85, column: 12, scope: !258)
!263 = !DILocation(line: 85, column: 5, scope: !258)
!264 = !DILocation(line: 88, column: 18, scope: !25)
!265 = !DILocation(line: 88, column: 3, scope: !25)
!266 = !DILocation(line: 89, column: 18, scope: !25)
!267 = !DILocation(line: 89, column: 3, scope: !25)
!268 = !DILocation(line: 91, column: 42, scope: !25)
!269 = !DILocation(line: 91, column: 45, scope: !25)
!270 = !DILocation(line: 91, column: 48, scope: !25)
!271 = !DILocation(line: 91, column: 51, scope: !25)
!272 = !DILocation(line: 91, column: 54, scope: !25)
!273 = !DILocation(line: 91, column: 57, scope: !25)
!274 = !DILocation(line: 91, column: 3, scope: !25)
!275 = !DILocation(line: 92, column: 42, scope: !25)
!276 = !DILocation(line: 92, column: 50, scope: !25)
!277 = !DILocation(line: 92, column: 53, scope: !25)
!278 = !DILocation(line: 92, column: 61, scope: !25)
!279 = !DILocation(line: 92, column: 64, scope: !25)
!280 = !DILocation(line: 92, column: 72, scope: !25)
!281 = !DILocation(line: 92, column: 3, scope: !25)
!282 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Global Variable Optimizer ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
%v.addr = alloca %struct.vector3*, align 8
%w.addr = alloca %struct.vector3*, align 8
store %struct.vector3* %v, %struct.vector3** %v.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %v.addr, metadata !34, metadata !35), !dbg !36
store %struct.vector3* %w, %struct.vector3** %w.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %w.addr, metadata !37, metadata !35), !dbg !38
%0 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !39
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x, align 4, !dbg !40
%2 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !41
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 0, !dbg !42
%3 = load i32, i32* %x1, align 4, !dbg !43
%add = add nsw i32 %3, %1, !dbg !43
store i32 %add, i32* %x1, align 4, !dbg !43
%4 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !44
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 1, !dbg !45
%5 = load i32, i32* %y, align 4, !dbg !45
%6 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !46
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 1, !dbg !47
%7 = load i32, i32* %y2, align 4, !dbg !48
%add3 = add nsw i32 %7, %5, !dbg !48
store i32 %add3, i32* %y2, align 4, !dbg !48
%8 = load %struct.vector3*, %struct.vector3** %w.addr, align 8, !dbg !49
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 2, !dbg !50
%9 = load i32, i32* %z, align 4, !dbg !50
%10 = load %struct.vector3*, %struct.vector3** %v.addr, align 8, !dbg !51
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %10, i32 0, i32 2, !dbg !52
%11 = load i32, i32* %z4, align 4, !dbg !53
%add5 = add nsw i32 %11, %9, !dbg !53
store i32 %add5, i32* %z4, align 4, !dbg !53
ret void, !dbg !54
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
%a.addr = alloca %struct.vector3*, align 8
%b.addr = alloca %struct.vector3*, align 8
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i32, align 4
store %struct.vector3* %a, %struct.vector3** %a.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %a.addr, metadata !55, metadata !35), !dbg !56
store %struct.vector3* %b, %struct.vector3** %b.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %b.addr, metadata !57, metadata !35), !dbg !58
call void @llvm.dbg.declare(metadata i32* %x, metadata !59, metadata !35), !dbg !60
%0 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !61
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i32 0, i32 0, !dbg !62
%1 = load i32, i32* %x1, align 4, !dbg !62
store i32 %1, i32* %x, align 4, !dbg !60
call void @llvm.dbg.declare(metadata i32* %y, metadata !63, metadata !35), !dbg !64
%2 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !65
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i32 0, i32 1, !dbg !66
%3 = load i32, i32* %y2, align 4, !dbg !66
store i32 %3, i32* %y, align 4, !dbg !64
call void @llvm.dbg.declare(metadata i32* %z, metadata !67, metadata !35), !dbg !68
%4 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !69
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i32 0, i32 2, !dbg !70
%5 = load i32, i32* %z3, align 4, !dbg !70
store i32 %5, i32* %z, align 4, !dbg !68
%6 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !71
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i32 0, i32 0, !dbg !72
%7 = load i32, i32* %x4, align 4, !dbg !72
%8 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !73
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i32 0, i32 0, !dbg !74
store i32 %7, i32* %x5, align 4, !dbg !75
%9 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !76
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i32 0, i32 1, !dbg !77
%10 = load i32, i32* %y6, align 4, !dbg !77
%11 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !78
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %11, i32 0, i32 1, !dbg !79
store i32 %10, i32* %y7, align 4, !dbg !80
%12 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !81
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %12, i32 0, i32 2, !dbg !82
%13 = load i32, i32* %z8, align 4, !dbg !82
%14 = load %struct.vector3*, %struct.vector3** %a.addr, align 8, !dbg !83
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %14, i32 0, i32 2, !dbg !84
store i32 %13, i32* %z9, align 4, !dbg !85
%15 = load i32, i32* %x, align 4, !dbg !86
%16 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !87
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %16, i32 0, i32 0, !dbg !88
store i32 %15, i32* %x10, align 4, !dbg !89
%17 = load i32, i32* %y, align 4, !dbg !90
%18 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !91
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %18, i32 0, i32 1, !dbg !92
store i32 %17, i32* %y11, align 4, !dbg !93
%19 = load i32, i32* %z, align 4, !dbg !94
%20 = load %struct.vector3*, %struct.vector3** %b.addr, align 8, !dbg !95
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %20, i32 0, i32 2, !dbg !96
store i32 %19, i32* %z12, align 4, !dbg !97
ret void, !dbg !98
}
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%N.addr = alloca i32, align 4
%i = alloca i32, align 4
%idx = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !99, metadata !35), !dbg !100
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !101, metadata !35), !dbg !102
call void @llvm.dbg.declare(metadata i32* %i, metadata !103, metadata !35), !dbg !105
store i32 0, i32* %i, align 4, !dbg !105
br label %for.cond, !dbg !106
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4, !dbg !107
%1 = load i32, i32* %N.addr, align 4, !dbg !110
%cmp = icmp slt i32 %0, %1, !dbg !111
br i1 %cmp, label %for.body, label %for.end, !dbg !112
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata i32* %idx, metadata !113, metadata !35), !dbg !115
%2 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !116
%3 = load i32, i32* %i, align 4, !dbg !117
%4 = load i32, i32* %N.addr, align 4, !dbg !118
%call = call fastcc i32 @get_smallest(%struct.vector3* %2, i32 %3, i32 %4), !dbg !119
store i32 %call, i32* %idx, align 4, !dbg !115
%5 = load i32, i32* %idx, align 4, !dbg !120
%idxprom = sext i32 %5 to i64, !dbg !121
%6 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !121
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %6, i64 %idxprom, !dbg !121
%7 = load i32, i32* %i, align 4, !dbg !122
%idxprom1 = sext i32 %7 to i64, !dbg !123
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !123
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !123
call fastcc void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !124
br label %for.inc, !dbg !125
for.inc: ; preds = %for.body
%9 = load i32, i32* %i, align 4, !dbg !126
%inc = add nsw i32 %9, 1, !dbg !126
store i32 %inc, i32* %i, align 4, !dbg !126
br label %for.cond, !dbg !128
for.end: ; preds = %for.cond
ret void, !dbg !129
}
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
%vs.addr = alloca %struct.vector3*, align 8
%start.addr = alloca i32, align 4
%N.addr = alloca i32, align 4
%smallest = alloca i32, align 4
%idx = alloca i32, align 4
%i = alloca i32, align 4
store %struct.vector3* %vs, %struct.vector3** %vs.addr, align 8
call void @llvm.dbg.declare(metadata %struct.vector3** %vs.addr, metadata !130, metadata !35), !dbg !131
store i32 %start, i32* %start.addr, align 4
call void @llvm.dbg.declare(metadata i32* %start.addr, metadata !132, metadata !35), !dbg !133
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !134, metadata !35), !dbg !135
call void @llvm.dbg.declare(metadata i32* %smallest, metadata !136, metadata !35), !dbg !137
%0 = load i32, i32* %start.addr, align 4, !dbg !138
%idxprom = sext i32 %0 to i64, !dbg !139
%1 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !139
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom, !dbg !139
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !140
%2 = load i32, i32* %x, align 4, !dbg !140
store i32 %2, i32* %smallest, align 4, !dbg !137
call void @llvm.dbg.declare(metadata i32* %idx, metadata !141, metadata !35), !dbg !142
%3 = load i32, i32* %start.addr, align 4, !dbg !143
store i32 %3, i32* %idx, align 4, !dbg !142
call void @llvm.dbg.declare(metadata i32* %i, metadata !144, metadata !35), !dbg !146
%4 = load i32, i32* %start.addr, align 4, !dbg !147
store i32 %4, i32* %i, align 4, !dbg !146
br label %for.cond, !dbg !148
for.cond: ; preds = %for.inc, %entry
%5 = load i32, i32* %i, align 4, !dbg !149
%6 = load i32, i32* %N.addr, align 4, !dbg !152
%cmp = icmp slt i32 %5, %6, !dbg !153
br i1 %cmp, label %for.body, label %for.end, !dbg !154
for.body: ; preds = %for.cond
%7 = load i32, i32* %i, align 4, !dbg !155
%idxprom1 = sext i32 %7 to i64, !dbg !158
%8 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !158
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %8, i64 %idxprom1, !dbg !158
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !159
%9 = load i32, i32* %x3, align 4, !dbg !159
%10 = load i32, i32* %smallest, align 4, !dbg !160
%cmp4 = icmp slt i32 %9, %10, !dbg !161
br i1 %cmp4, label %if.then, label %if.end, !dbg !162
if.then: ; preds = %for.body
%11 = load i32, i32* %i, align 4, !dbg !163
store i32 %11, i32* %idx, align 4, !dbg !165
%12 = load i32, i32* %i, align 4, !dbg !166
%idxprom5 = sext i32 %12 to i64, !dbg !167
%13 = load %struct.vector3*, %struct.vector3** %vs.addr, align 8, !dbg !167
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %13, i64 %idxprom5, !dbg !167
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !168
%14 = load i32, i32* %x7, align 4, !dbg !168
store i32 %14, i32* %smallest, align 4, !dbg !169
br label %if.end, !dbg !170
if.end: ; preds = %if.then, %for.body
br label %for.inc, !dbg !171
for.inc: ; preds = %if.end
%15 = load i32, i32* %i, align 4, !dbg !172
%inc = add nsw i32 %15, 1, !dbg !172
store i32 %inc, i32* %i, align 4, !dbg !172
br label %for.cond, !dbg !174
for.end: ; preds = %for.cond
%16 = load i32, i32* %idx, align 4, !dbg !175
ret i32 %16, !dbg !176
}
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
%N.addr = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%i = alloca i32, align 4
store i32 %N, i32* %N.addr, align 4
call void @llvm.dbg.declare(metadata i32* %N.addr, metadata !177, metadata !35), !dbg !178
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !179, metadata !35), !dbg !180
%0 = load i32, i32* %N.addr, align 4, !dbg !181
%conv = sext i32 %0 to i64, !dbg !181
%mul = mul i64 12, %conv, !dbg !182
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !183
%1 = bitcast i8* %call to %struct.vector3*, !dbg !183
store %struct.vector3* %1, %struct.vector3** %arr, align 8, !dbg !180
call void @llvm.dbg.declare(metadata i32* %i, metadata !184, metadata !35), !dbg !186
store i32 0, i32* %i, align 4, !dbg !186
br label %for.cond, !dbg !187
for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !188
%3 = load i32, i32* %N.addr, align 4, !dbg !191
%cmp = icmp slt i32 %2, %3, !dbg !192
br i1 %cmp, label %for.body, label %for.end, !dbg !193
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !194
%rem = srem i32 %call2, 100, !dbg !196
%4 = load i32, i32* %i, align 4, !dbg !197
%idxprom = sext i32 %4 to i64, !dbg !198
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !198
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 %idxprom, !dbg !198
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !199
store i32 %rem, i32* %x, align 4, !dbg !200
%call3 = call i32 @rand() #6, !dbg !201
%rem4 = srem i32 %call3, 100, !dbg !202
%6 = load i32, i32* %i, align 4, !dbg !203
%idxprom5 = sext i32 %6 to i64, !dbg !204
%7 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !204
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %7, i64 %idxprom5, !dbg !204
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !205
store i32 %rem4, i32* %y, align 4, !dbg !206
%call7 = call i32 @rand() #6, !dbg !207
%rem8 = srem i32 %call7, 100, !dbg !208
%8 = load i32, i32* %i, align 4, !dbg !209
%idxprom9 = sext i32 %8 to i64, !dbg !210
%9 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !210
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %9, i64 %idxprom9, !dbg !210
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !211
store i32 %rem8, i32* %z, align 4, !dbg !212
br label %for.inc, !dbg !213
for.inc: ; preds = %for.body
%10 = load i32, i32* %i, align 4, !dbg !214
%inc = add nsw i32 %10, 1, !dbg !214
store i32 %inc, i32* %i, align 4, !dbg !214
br label %for.cond, !dbg !216
for.end: ; preds = %for.cond
%11 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !217
ret %struct.vector3* %11, !dbg !218
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
; Function Attrs: nounwind
declare i32 @rand() #5
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #4 !dbg !25 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%x = alloca i32, align 4
%arr = alloca %struct.vector3*, align 8
%arr2 = alloca %struct.vector3*, align 8
%a = alloca %struct.vector3*, align 8
%b = alloca %struct.vector3*, align 8
%c = alloca %struct.vector3*, align 8
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !219, metadata !35), !dbg !220
store i8** %argv, i8*** %argv.addr, align 8
call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !221, metadata !35), !dbg !222
%0 = load i32, i32* %argc.addr, align 4, !dbg !223
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !224
%1 = load i8**, i8*** %argv.addr, align 8, !dbg !225
%arrayidx = getelementptr inbounds i8*, i8** %1, i64 0, !dbg !225
%2 = load i8*, i8** %arrayidx, align 8, !dbg !225
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %2), !dbg !226
call void @llvm.dbg.declare(metadata i32* %x, metadata !227, metadata !35), !dbg !228
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !229
%call3 = call i64 @time(i64* null) #6, !dbg !230
%conv = trunc i64 %call3 to i32, !dbg !230
call void @srand(i32 %conv) #6, !dbg !231
call void @llvm.dbg.declare(metadata %struct.vector3** %arr, metadata !233, metadata !35), !dbg !234
%call4 = call fastcc %struct.vector3* @make_random_arr(i32 3), !dbg !235
store %struct.vector3* %call4, %struct.vector3** %arr, align 8, !dbg !234
call void @llvm.dbg.declare(metadata %struct.vector3** %arr2, metadata !236, metadata !35), !dbg !237
%call5 = call fastcc %struct.vector3* @make_random_arr(i32 10), !dbg !238
store %struct.vector3* %call5, %struct.vector3** %arr2, align 8, !dbg !237
call void @llvm.dbg.declare(metadata %struct.vector3** %a, metadata !239, metadata !35), !dbg !240
%3 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !241
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %3, i64 0, !dbg !241
store %struct.vector3* %arrayidx6, %struct.vector3** %a, align 8, !dbg !240
call void @llvm.dbg.declare(metadata %struct.vector3** %b, metadata !242, metadata !35), !dbg !243
%4 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !244
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %4, i64 1, !dbg !244
store %struct.vector3* %arrayidx7, %struct.vector3** %b, align 8, !dbg !243
call void @llvm.dbg.declare(metadata %struct.vector3** %c, metadata !245, metadata !35), !dbg !246
%5 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !247
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %5, i64 2, !dbg !247
store %struct.vector3* %arrayidx8, %struct.vector3** %c, align 8, !dbg !246
%6 = load i32, i32* %argc.addr, align 4, !dbg !248
%cmp = icmp eq i32 %6, 1, !dbg !250
br i1 %cmp, label %if.then, label %if.else, !dbg !251
if.then: ; preds = %entry
%7 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !252
%8 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !254
call fastcc void @add(%struct.vector3* %7, %struct.vector3* %8), !dbg !255
br label %if.end, !dbg !256
if.else: ; preds = %entry
%9 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !257
%10 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !259
call fastcc void @add(%struct.vector3* %9, %struct.vector3* %10), !dbg !260
%11 = load %struct.vector3*, %struct.vector3** %c, align 8, !dbg !261
%12 = load %struct.vector3*, %struct.vector3** %b, align 8, !dbg !262
call fastcc void @add(%struct.vector3* %11, %struct.vector3* %12), !dbg !263
br label %if.end
if.end: ; preds = %if.else, %if.then
%13 = load %struct.vector3*, %struct.vector3** %arr, align 8, !dbg !264
call fastcc void @selection_sort(%struct.vector3* %13, i32 3), !dbg !265
%14 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !266
call fastcc void @selection_sort(%struct.vector3* %14, i32 10), !dbg !267
%15 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !268
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %15, i32 0, i32 0, !dbg !269
%16 = load i32, i32* %x10, align 4, !dbg !269
%17 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !270
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %17, i32 0, i32 1, !dbg !271
%18 = load i32, i32* %y, align 4, !dbg !271
%19 = load %struct.vector3*, %struct.vector3** %a, align 8, !dbg !272
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %19, i32 0, i32 2, !dbg !273
%20 = load i32, i32* %z, align 4, !dbg !273
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %16, i32 %18, i32 %20), !dbg !274
%21 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !275
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %21, i64 0, !dbg !275
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !276
%22 = load i32, i32* %x13, align 4, !dbg !276
%23 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !277
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %23, i64 1, !dbg !277
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !278
%24 = load i32, i32* %x15, align 4, !dbg !278
%25 = load %struct.vector3*, %struct.vector3** %arr2, align 8, !dbg !279
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %25, i64 2, !dbg !279
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !280
%26 = load i32, i32* %x17, align 4, !dbg !280
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %22, i32 %24, i32 %26), !dbg !281
ret i32 0, !dbg !282
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
; Function Attrs: nounwind
declare i64 @time(i64*) #5
; Function Attrs: nounwind
declare void @srand(i32) #5
attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { norecurse nounwind readonly uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 11, scope: !4)
!40 = !DILocation(line: 13, column: 14, scope: !4)
!41 = !DILocation(line: 13, column: 3, scope: !4)
!42 = !DILocation(line: 13, column: 6, scope: !4)
!43 = !DILocation(line: 13, column: 8, scope: !4)
!44 = !DILocation(line: 14, column: 11, scope: !4)
!45 = !DILocation(line: 14, column: 14, scope: !4)
!46 = !DILocation(line: 14, column: 3, scope: !4)
!47 = !DILocation(line: 14, column: 6, scope: !4)
!48 = !DILocation(line: 14, column: 8, scope: !4)
!49 = !DILocation(line: 15, column: 11, scope: !4)
!50 = !DILocation(line: 15, column: 14, scope: !4)
!51 = !DILocation(line: 15, column: 3, scope: !4)
!52 = !DILocation(line: 15, column: 6, scope: !4)
!53 = !DILocation(line: 15, column: 8, scope: !4)
!54 = !DILocation(line: 16, column: 1, scope: !4)
!55 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!56 = !DILocation(line: 22, column: 27, scope: !15)
!57 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!58 = !DILocation(line: 22, column: 46, scope: !15)
!59 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!60 = !DILocation(line: 23, column: 7, scope: !15)
!61 = !DILocation(line: 23, column: 11, scope: !15)
!62 = !DILocation(line: 23, column: 14, scope: !15)
!63 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!64 = !DILocation(line: 24, column: 7, scope: !15)
!65 = !DILocation(line: 24, column: 11, scope: !15)
!66 = !DILocation(line: 24, column: 14, scope: !15)
!67 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!68 = !DILocation(line: 25, column: 7, scope: !15)
!69 = !DILocation(line: 25, column: 11, scope: !15)
!70 = !DILocation(line: 25, column: 14, scope: !15)
!71 = !DILocation(line: 27, column: 10, scope: !15)
!72 = !DILocation(line: 27, column: 13, scope: !15)
!73 = !DILocation(line: 27, column: 3, scope: !15)
!74 = !DILocation(line: 27, column: 6, scope: !15)
!75 = !DILocation(line: 27, column: 8, scope: !15)
!76 = !DILocation(line: 28, column: 10, scope: !15)
!77 = !DILocation(line: 28, column: 13, scope: !15)
!78 = !DILocation(line: 28, column: 3, scope: !15)
!79 = !DILocation(line: 28, column: 6, scope: !15)
!80 = !DILocation(line: 28, column: 8, scope: !15)
!81 = !DILocation(line: 29, column: 10, scope: !15)
!82 = !DILocation(line: 29, column: 13, scope: !15)
!83 = !DILocation(line: 29, column: 3, scope: !15)
!84 = !DILocation(line: 29, column: 6, scope: !15)
!85 = !DILocation(line: 29, column: 8, scope: !15)
!86 = !DILocation(line: 31, column: 10, scope: !15)
!87 = !DILocation(line: 31, column: 3, scope: !15)
!88 = !DILocation(line: 31, column: 6, scope: !15)
!89 = !DILocation(line: 31, column: 8, scope: !15)
!90 = !DILocation(line: 32, column: 10, scope: !15)
!91 = !DILocation(line: 32, column: 3, scope: !15)
!92 = !DILocation(line: 32, column: 6, scope: !15)
!93 = !DILocation(line: 32, column: 8, scope: !15)
!94 = !DILocation(line: 33, column: 10, scope: !15)
!95 = !DILocation(line: 33, column: 3, scope: !15)
!96 = !DILocation(line: 33, column: 6, scope: !15)
!97 = !DILocation(line: 33, column: 8, scope: !15)
!98 = !DILocation(line: 34, column: 1, scope: !15)
!99 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!100 = !DILocation(line: 38, column: 37, scope: !16)
!101 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!102 = !DILocation(line: 38, column: 45, scope: !16)
!103 = !DILocalVariable(name: "i", scope: !104, file: !1, line: 39, type: !11)
!104 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!105 = !DILocation(line: 39, column: 12, scope: !104)
!106 = !DILocation(line: 39, column: 8, scope: !104)
!107 = !DILocation(line: 39, column: 19, scope: !108)
!108 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 1)
!109 = distinct !DILexicalBlock(scope: !104, file: !1, line: 39, column: 3)
!110 = !DILocation(line: 39, column: 23, scope: !108)
!111 = !DILocation(line: 39, column: 21, scope: !108)
!112 = !DILocation(line: 39, column: 3, scope: !108)
!113 = !DILocalVariable(name: "idx", scope: !114, file: !1, line: 40, type: !11)
!114 = distinct !DILexicalBlock(scope: !109, file: !1, line: 39, column: 31)
!115 = !DILocation(line: 40, column: 9, scope: !114)
!116 = !DILocation(line: 40, column: 28, scope: !114)
!117 = !DILocation(line: 40, column: 32, scope: !114)
!118 = !DILocation(line: 40, column: 35, scope: !114)
!119 = !DILocation(line: 40, column: 15, scope: !114)
!120 = !DILocation(line: 41, column: 14, scope: !114)
!121 = !DILocation(line: 41, column: 11, scope: !114)
!122 = !DILocation(line: 41, column: 24, scope: !114)
!123 = !DILocation(line: 41, column: 21, scope: !114)
!124 = !DILocation(line: 41, column: 5, scope: !114)
!125 = !DILocation(line: 42, column: 3, scope: !114)
!126 = !DILocation(line: 39, column: 27, scope: !127)
!127 = !DILexicalBlockFile(scope: !109, file: !1, discriminator: 2)
!128 = !DILocation(line: 39, column: 3, scope: !127)
!129 = !DILocation(line: 43, column: 1, scope: !16)
!130 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!131 = !DILocation(line: 45, column: 34, scope: !19)
!132 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!133 = !DILocation(line: 45, column: 42, scope: !19)
!134 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!135 = !DILocation(line: 45, column: 53, scope: !19)
!136 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!137 = !DILocation(line: 46, column: 7, scope: !19)
!138 = !DILocation(line: 46, column: 21, scope: !19)
!139 = !DILocation(line: 46, column: 18, scope: !19)
!140 = !DILocation(line: 46, column: 28, scope: !19)
!141 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!142 = !DILocation(line: 47, column: 7, scope: !19)
!143 = !DILocation(line: 47, column: 13, scope: !19)
!144 = !DILocalVariable(name: "i", scope: !145, file: !1, line: 48, type: !11)
!145 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!146 = !DILocation(line: 48, column: 12, scope: !145)
!147 = !DILocation(line: 48, column: 16, scope: !145)
!148 = !DILocation(line: 48, column: 8, scope: !145)
!149 = !DILocation(line: 48, column: 23, scope: !150)
!150 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 1)
!151 = distinct !DILexicalBlock(scope: !145, file: !1, line: 48, column: 3)
!152 = !DILocation(line: 48, column: 27, scope: !150)
!153 = !DILocation(line: 48, column: 25, scope: !150)
!154 = !DILocation(line: 48, column: 3, scope: !150)
!155 = !DILocation(line: 49, column: 12, scope: !156)
!156 = distinct !DILexicalBlock(scope: !157, file: !1, line: 49, column: 9)
!157 = distinct !DILexicalBlock(scope: !151, file: !1, line: 48, column: 35)
!158 = !DILocation(line: 49, column: 9, scope: !156)
!159 = !DILocation(line: 49, column: 15, scope: !156)
!160 = !DILocation(line: 49, column: 19, scope: !156)
!161 = !DILocation(line: 49, column: 17, scope: !156)
!162 = !DILocation(line: 49, column: 9, scope: !157)
!163 = !DILocation(line: 50, column: 13, scope: !164)
!164 = distinct !DILexicalBlock(scope: !156, file: !1, line: 49, column: 29)
!165 = !DILocation(line: 50, column: 11, scope: !164)
!166 = !DILocation(line: 51, column: 21, scope: !164)
!167 = !DILocation(line: 51, column: 18, scope: !164)
!168 = !DILocation(line: 51, column: 24, scope: !164)
!169 = !DILocation(line: 51, column: 16, scope: !164)
!170 = !DILocation(line: 52, column: 5, scope: !164)
!171 = !DILocation(line: 53, column: 3, scope: !157)
!172 = !DILocation(line: 48, column: 30, scope: !173)
!173 = !DILexicalBlockFile(scope: !151, file: !1, discriminator: 2)
!174 = !DILocation(line: 48, column: 3, scope: !173)
!175 = !DILocation(line: 54, column: 10, scope: !19)
!176 = !DILocation(line: 54, column: 3, scope: !19)
!177 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!178 = !DILocation(line: 57, column: 37, scope: !22)
!179 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!180 = !DILocation(line: 58, column: 19, scope: !22)
!181 = !DILocation(line: 58, column: 55, scope: !22)
!182 = !DILocation(line: 58, column: 54, scope: !22)
!183 = !DILocation(line: 58, column: 25, scope: !22)
!184 = !DILocalVariable(name: "i", scope: !185, file: !1, line: 59, type: !11)
!185 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!186 = !DILocation(line: 59, column: 12, scope: !185)
!187 = !DILocation(line: 59, column: 8, scope: !185)
!188 = !DILocation(line: 59, column: 19, scope: !189)
!189 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 1)
!190 = distinct !DILexicalBlock(scope: !185, file: !1, line: 59, column: 3)
!191 = !DILocation(line: 59, column: 23, scope: !189)
!192 = !DILocation(line: 59, column: 21, scope: !189)
!193 = !DILocation(line: 59, column: 3, scope: !189)
!194 = !DILocation(line: 60, column: 16, scope: !195)
!195 = distinct !DILexicalBlock(scope: !190, file: !1, line: 59, column: 31)
!196 = !DILocation(line: 60, column: 23, scope: !195)
!197 = !DILocation(line: 60, column: 9, scope: !195)
!198 = !DILocation(line: 60, column: 5, scope: !195)
!199 = !DILocation(line: 60, column: 12, scope: !195)
!200 = !DILocation(line: 60, column: 14, scope: !195)
!201 = !DILocation(line: 61, column: 16, scope: !195)
!202 = !DILocation(line: 61, column: 23, scope: !195)
!203 = !DILocation(line: 61, column: 9, scope: !195)
!204 = !DILocation(line: 61, column: 5, scope: !195)
!205 = !DILocation(line: 61, column: 12, scope: !195)
!206 = !DILocation(line: 61, column: 14, scope: !195)
!207 = !DILocation(line: 62, column: 16, scope: !195)
!208 = !DILocation(line: 62, column: 23, scope: !195)
!209 = !DILocation(line: 62, column: 9, scope: !195)
!210 = !DILocation(line: 62, column: 5, scope: !195)
!211 = !DILocation(line: 62, column: 12, scope: !195)
!212 = !DILocation(line: 62, column: 14, scope: !195)
!213 = !DILocation(line: 63, column: 3, scope: !195)
!214 = !DILocation(line: 59, column: 26, scope: !215)
!215 = !DILexicalBlockFile(scope: !190, file: !1, discriminator: 2)
!216 = !DILocation(line: 59, column: 3, scope: !215)
!217 = !DILocation(line: 64, column: 10, scope: !22)
!218 = !DILocation(line: 64, column: 3, scope: !22)
!219 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!220 = !DILocation(line: 67, column: 14, scope: !25)
!221 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!222 = !DILocation(line: 67, column: 27, scope: !25)
!223 = !DILocation(line: 68, column: 25, scope: !25)
!224 = !DILocation(line: 68, column: 3, scope: !25)
!225 = !DILocation(line: 69, column: 28, scope: !25)
!226 = !DILocation(line: 69, column: 3, scope: !25)
!227 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!228 = !DILocation(line: 71, column: 7, scope: !25)
!229 = !DILocation(line: 72, column: 3, scope: !25)
!230 = !DILocation(line: 74, column: 9, scope: !25)
!231 = !DILocation(line: 74, column: 3, scope: !232)
!232 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!233 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!234 = !DILocation(line: 75, column: 19, scope: !25)
!235 = !DILocation(line: 75, column: 25, scope: !25)
!236 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!237 = !DILocation(line: 76, column: 19, scope: !25)
!238 = !DILocation(line: 76, column: 26, scope: !25)
!239 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!240 = !DILocation(line: 77, column: 19, scope: !25)
!241 = !DILocation(line: 77, column: 24, scope: !25)
!242 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!243 = !DILocation(line: 78, column: 19, scope: !25)
!244 = !DILocation(line: 78, column: 24, scope: !25)
!245 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!246 = !DILocation(line: 79, column: 19, scope: !25)
!247 = !DILocation(line: 79, column: 24, scope: !25)
!248 = !DILocation(line: 81, column: 7, scope: !249)
!249 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!250 = !DILocation(line: 81, column: 12, scope: !249)
!251 = !DILocation(line: 81, column: 7, scope: !25)
!252 = !DILocation(line: 82, column: 9, scope: !253)
!253 = distinct !DILexicalBlock(scope: !249, file: !1, line: 81, column: 18)
!254 = !DILocation(line: 82, column: 12, scope: !253)
!255 = !DILocation(line: 82, column: 5, scope: !253)
!256 = !DILocation(line: 83, column: 3, scope: !253)
!257 = !DILocation(line: 84, column: 9, scope: !258)
!258 = distinct !DILexicalBlock(scope: !249, file: !1, line: 83, column: 10)
!259 = !DILocation(line: 84, column: 12, scope: !258)
!260 = !DILocation(line: 84, column: 5, scope: !258)
!261 = !DILocation(line: 85, column: 9, scope: !258)
!262 = !DILocation(line: 85, column: 12, scope: !258)
!263 = !DILocation(line: 85, column: 5, scope: !258)
!264 = !DILocation(line: 88, column: 18, scope: !25)
!265 = !DILocation(line: 88, column: 3, scope: !25)
!266 = !DILocation(line: 89, column: 18, scope: !25)
!267 = !DILocation(line: 89, column: 3, scope: !25)
!268 = !DILocation(line: 91, column: 42, scope: !25)
!269 = !DILocation(line: 91, column: 45, scope: !25)
!270 = !DILocation(line: 91, column: 48, scope: !25)
!271 = !DILocation(line: 91, column: 51, scope: !25)
!272 = !DILocation(line: 91, column: 54, scope: !25)
!273 = !DILocation(line: 91, column: 57, scope: !25)
!274 = !DILocation(line: 91, column: 3, scope: !25)
!275 = !DILocation(line: 92, column: 42, scope: !25)
!276 = !DILocation(line: 92, column: 50, scope: !25)
!277 = !DILocation(line: 92, column: 53, scope: !25)
!278 = !DILocation(line: 92, column: 61, scope: !25)
!279 = !DILocation(line: 92, column: 64, scope: !25)
!280 = !DILocation(line: 92, column: 72, scope: !25)
!281 = !DILocation(line: 92, column: 3, scope: !25)
!282 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Promote Memory to Register ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
*** IR Dump After Promote Memory to Register ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !49, metadata !35), !dbg !50
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !51, metadata !35), !dbg !52
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !53
%0 = load i32, i32* %x1, align 4, !dbg !53
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !54, metadata !35), !dbg !55
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !56
%1 = load i32, i32* %y2, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !57, metadata !35), !dbg !58
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !59
%2 = load i32, i32* %z3, align 4, !dbg !59
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !60, metadata !35), !dbg !61
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !62
%3 = load i32, i32* %x4, align 4, !dbg !62
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !63
store i32 %3, i32* %x5, align 4, !dbg !64
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !65
%4 = load i32, i32* %y6, align 4, !dbg !65
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !66
store i32 %4, i32* %y7, align 4, !dbg !67
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !68
%5 = load i32, i32* %z8, align 4, !dbg !68
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !69
store i32 %5, i32* %z9, align 4, !dbg !70
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !71
store i32 %0, i32* %x10, align 4, !dbg !72
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !73
store i32 %1, i32* %y11, align 4, !dbg !74
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !75
store i32 %2, i32* %z12, align 4, !dbg !76
ret void, !dbg !77
}
*** IR Dump After Promote Memory to Register ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !80, metadata !35), !dbg !81
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !85
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !86
br i1 %cmp, label %for.body, label %for.end, !dbg !89
for.body: ; preds = %for.cond
%call = call fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %i.0, i32 %N), !dbg !90
call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !92, metadata !35), !dbg !93
%idxprom = sext i32 %call to i64, !dbg !94
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !94
%idxprom1 = sext i32 %i.0 to i64, !dbg !95
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !95
call fastcc void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !96
br label %for.inc, !dbg !97
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !98
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !100
for.end: ; preds = %for.cond
ret void, !dbg !101
}
*** IR Dump After Promote Memory to Register ***
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !102, metadata !35), !dbg !103
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !104, metadata !35), !dbg !105
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !106, metadata !35), !dbg !107
%idxprom = sext i32 %start to i64, !dbg !108
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !108
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !109
%0 = load i32, i32* %x, align 4, !dbg !109
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !110, metadata !35), !dbg !111
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !112, metadata !35), !dbg !113
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !117
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !118
br i1 %cmp, label %for.body, label %for.end, !dbg !121
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !122
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !122
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !125
%1 = load i32, i32* %x3, align 4, !dbg !125
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !126
br i1 %cmp4, label %if.then, label %if.end, !dbg !127
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !112, metadata !35), !dbg !113
%idxprom5 = sext i32 %i.0 to i64, !dbg !128
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, !dbg !128
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !130
%2 = load i32, i32* %x7, align 4, !dbg !130
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !110, metadata !35), !dbg !111
br label %if.end, !dbg !131
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !132
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !133
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !135
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !136
}
*** IR Dump After Promote Memory to Register ***
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !137, metadata !35), !dbg !138
%conv = sext i32 %N to i64, !dbg !139
%mul = mul i64 12, %conv, !dbg !140
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !141
%0 = bitcast i8* %call to %struct.vector3*, !dbg !141
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !147
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !148
br i1 %cmp, label %for.body, label %for.end, !dbg !151
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !152
%rem = srem i32 %call2, 100, !dbg !154
%idxprom = sext i32 %i.0 to i64, !dbg !155
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, !dbg !155
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !156
store i32 %rem, i32* %x, align 4, !dbg !157
%call3 = call i32 @rand() #6, !dbg !158
%rem4 = srem i32 %call3, 100, !dbg !159
%idxprom5 = sext i32 %i.0 to i64, !dbg !160
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, !dbg !160
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !161
store i32 %rem4, i32* %y, align 4, !dbg !162
%call7 = call i32 @rand() #6, !dbg !163
%rem8 = srem i32 %call7, 100, !dbg !164
%idxprom9 = sext i32 %i.0 to i64, !dbg !165
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, !dbg !165
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !166
store i32 %rem8, i32* %z, align 4, !dbg !167
br label %for.inc, !dbg !168
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !169
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !171
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !172
}
*** IR Dump After Promote Memory to Register ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #4 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !173, metadata !35), !dbg !174
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !175, metadata !35), !dbg !176
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %argc), !dbg !177
%arrayidx = getelementptr inbounds i8*, i8** %argv, i64 0, !dbg !178
%0 = load i8*, i8** %arrayidx, align 8, !dbg !178
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %0), !dbg !179
call void @llvm.dbg.declare(metadata i32* %x, metadata !180, metadata !35), !dbg !181
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !182
%call3 = call i64 @time(i64* null) #6, !dbg !183
%conv = trunc i64 %call3 to i32, !dbg !183
call void @srand(i32 %conv) #6, !dbg !184
%call4 = call fastcc %struct.vector3* @make_random_arr(i32 3), !dbg !186
call void @llvm.dbg.value(metadata %struct.vector3* %call4, i64 0, metadata !187, metadata !35), !dbg !188
%call5 = call fastcc %struct.vector3* @make_random_arr(i32 10), !dbg !189
call void @llvm.dbg.value(metadata %struct.vector3* %call5, i64 0, metadata !190, metadata !35), !dbg !191
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx6, i64 0, metadata !193, metadata !35), !dbg !194
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 1, !dbg !195
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !196, metadata !35), !dbg !197
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 2, !dbg !198
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !199, metadata !35), !dbg !200
%cmp = icmp eq i32 %argc, 1, !dbg !201
br i1 %cmp, label %if.then, label %if.else, !dbg !203
if.then: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !204
br label %if.end, !dbg !206
if.else: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !207
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !209
br label %if.end
if.end: ; preds = %if.else, %if.then
call fastcc void @selection_sort(%struct.vector3* %call4, i32 3), !dbg !210
call fastcc void @selection_sort(%struct.vector3* %call5, i32 10), !dbg !211
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !212
%1 = load i32, i32* %x10, align 4, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
%2 = load i32, i32* %y, align 4, !dbg !213
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 2, !dbg !214
%3 = load i32, i32* %z, align 4, !dbg !214
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %1, i32 %2, i32 %3), !dbg !215
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 0, !dbg !216
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !217
%4 = load i32, i32* %x13, align 4, !dbg !217
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 1, !dbg !218
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !219
%5 = load i32, i32* %x15, align 4, !dbg !219
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 2, !dbg !220
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !221
%6 = load i32, i32* %x17, align 4, !dbg !221
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %4, i32 %5, i32 %6), !dbg !222
ret i32 0, !dbg !223
}
*** IR Dump After Merge Duplicate Global Constants ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !49, metadata !35), !dbg !50
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !51, metadata !35), !dbg !52
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !53
%0 = load i32, i32* %x1, align 4, !dbg !53
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !54, metadata !35), !dbg !55
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !56
%1 = load i32, i32* %y2, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !57, metadata !35), !dbg !58
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !59
%2 = load i32, i32* %z3, align 4, !dbg !59
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !60, metadata !35), !dbg !61
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !62
%3 = load i32, i32* %x4, align 4, !dbg !62
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !63
store i32 %3, i32* %x5, align 4, !dbg !64
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !65
%4 = load i32, i32* %y6, align 4, !dbg !65
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !66
store i32 %4, i32* %y7, align 4, !dbg !67
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !68
%5 = load i32, i32* %z8, align 4, !dbg !68
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !69
store i32 %5, i32* %z9, align 4, !dbg !70
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !71
store i32 %0, i32* %x10, align 4, !dbg !72
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !73
store i32 %1, i32* %y11, align 4, !dbg !74
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !75
store i32 %2, i32* %z12, align 4, !dbg !76
ret void, !dbg !77
}
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !80, metadata !35), !dbg !81
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !85
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !86
br i1 %cmp, label %for.body, label %for.end, !dbg !89
for.body: ; preds = %for.cond
%call = call fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %i.0, i32 %N), !dbg !90
call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !92, metadata !35), !dbg !93
%idxprom = sext i32 %call to i64, !dbg !94
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !94
%idxprom1 = sext i32 %i.0 to i64, !dbg !95
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !95
call fastcc void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !96
br label %for.inc, !dbg !97
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !98
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !100
for.end: ; preds = %for.cond
ret void, !dbg !101
}
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !102, metadata !35), !dbg !103
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !104, metadata !35), !dbg !105
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !106, metadata !35), !dbg !107
%idxprom = sext i32 %start to i64, !dbg !108
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !108
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !109
%0 = load i32, i32* %x, align 4, !dbg !109
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !110, metadata !35), !dbg !111
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !112, metadata !35), !dbg !113
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !117
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !118
br i1 %cmp, label %for.body, label %for.end, !dbg !121
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !122
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !122
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !125
%1 = load i32, i32* %x3, align 4, !dbg !125
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !126
br i1 %cmp4, label %if.then, label %if.end, !dbg !127
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !112, metadata !35), !dbg !113
%idxprom5 = sext i32 %i.0 to i64, !dbg !128
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, !dbg !128
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !130
%2 = load i32, i32* %x7, align 4, !dbg !130
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !110, metadata !35), !dbg !111
br label %if.end, !dbg !131
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !132
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !133
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !135
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !136
}
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !137, metadata !35), !dbg !138
%conv = sext i32 %N to i64, !dbg !139
%mul = mul i64 12, %conv, !dbg !140
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !141
%0 = bitcast i8* %call to %struct.vector3*, !dbg !141
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !147
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !148
br i1 %cmp, label %for.body, label %for.end, !dbg !151
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !152
%rem = srem i32 %call2, 100, !dbg !154
%idxprom = sext i32 %i.0 to i64, !dbg !155
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, !dbg !155
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !156
store i32 %rem, i32* %x, align 4, !dbg !157
%call3 = call i32 @rand() #6, !dbg !158
%rem4 = srem i32 %call3, 100, !dbg !159
%idxprom5 = sext i32 %i.0 to i64, !dbg !160
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, !dbg !160
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !161
store i32 %rem4, i32* %y, align 4, !dbg !162
%call7 = call i32 @rand() #6, !dbg !163
%rem8 = srem i32 %call7, 100, !dbg !164
%idxprom9 = sext i32 %i.0 to i64, !dbg !165
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, !dbg !165
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !166
store i32 %rem8, i32* %z, align 4, !dbg !167
br label %for.inc, !dbg !168
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !169
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !171
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !172
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
; Function Attrs: nounwind
declare i32 @rand() #5
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #4 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !173, metadata !35), !dbg !174
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !175, metadata !35), !dbg !176
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %argc), !dbg !177
%arrayidx = getelementptr inbounds i8*, i8** %argv, i64 0, !dbg !178
%0 = load i8*, i8** %arrayidx, align 8, !dbg !178
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %0), !dbg !179
call void @llvm.dbg.declare(metadata i32* %x, metadata !180, metadata !35), !dbg !181
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !182
%call3 = call i64 @time(i64* null) #6, !dbg !183
%conv = trunc i64 %call3 to i32, !dbg !183
call void @srand(i32 %conv) #6, !dbg !184
%call4 = call fastcc %struct.vector3* @make_random_arr(i32 3), !dbg !186
call void @llvm.dbg.value(metadata %struct.vector3* %call4, i64 0, metadata !187, metadata !35), !dbg !188
%call5 = call fastcc %struct.vector3* @make_random_arr(i32 10), !dbg !189
call void @llvm.dbg.value(metadata %struct.vector3* %call5, i64 0, metadata !190, metadata !35), !dbg !191
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx6, i64 0, metadata !193, metadata !35), !dbg !194
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 1, !dbg !195
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !196, metadata !35), !dbg !197
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 2, !dbg !198
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !199, metadata !35), !dbg !200
%cmp = icmp eq i32 %argc, 1, !dbg !201
br i1 %cmp, label %if.then, label %if.else, !dbg !203
if.then: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !204
br label %if.end, !dbg !206
if.else: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !207
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !209
br label %if.end
if.end: ; preds = %if.else, %if.then
call fastcc void @selection_sort(%struct.vector3* %call4, i32 3), !dbg !210
call fastcc void @selection_sort(%struct.vector3* %call5, i32 10), !dbg !211
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !212
%1 = load i32, i32* %x10, align 4, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
%2 = load i32, i32* %y, align 4, !dbg !213
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 2, !dbg !214
%3 = load i32, i32* %z, align 4, !dbg !214
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %1, i32 %2, i32 %3), !dbg !215
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 0, !dbg !216
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !217
%4 = load i32, i32* %x13, align 4, !dbg !217
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 1, !dbg !218
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !219
%5 = load i32, i32* %x15, align 4, !dbg !219
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 2, !dbg !220
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !221
%6 = load i32, i32* %x17, align 4, !dbg !221
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %4, i32 %5, i32 %6), !dbg !222
ret i32 0, !dbg !223
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
; Function Attrs: nounwind
declare i64 @time(i64*) #5
; Function Attrs: nounwind
declare void @srand(i32) #5
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { norecurse nounwind readonly uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 14, scope: !4)
!40 = !DILocation(line: 13, column: 6, scope: !4)
!41 = !DILocation(line: 13, column: 8, scope: !4)
!42 = !DILocation(line: 14, column: 14, scope: !4)
!43 = !DILocation(line: 14, column: 6, scope: !4)
!44 = !DILocation(line: 14, column: 8, scope: !4)
!45 = !DILocation(line: 15, column: 14, scope: !4)
!46 = !DILocation(line: 15, column: 6, scope: !4)
!47 = !DILocation(line: 15, column: 8, scope: !4)
!48 = !DILocation(line: 16, column: 1, scope: !4)
!49 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!50 = !DILocation(line: 22, column: 27, scope: !15)
!51 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!52 = !DILocation(line: 22, column: 46, scope: !15)
!53 = !DILocation(line: 23, column: 14, scope: !15)
!54 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!55 = !DILocation(line: 23, column: 7, scope: !15)
!56 = !DILocation(line: 24, column: 14, scope: !15)
!57 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!58 = !DILocation(line: 24, column: 7, scope: !15)
!59 = !DILocation(line: 25, column: 14, scope: !15)
!60 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!61 = !DILocation(line: 25, column: 7, scope: !15)
!62 = !DILocation(line: 27, column: 13, scope: !15)
!63 = !DILocation(line: 27, column: 6, scope: !15)
!64 = !DILocation(line: 27, column: 8, scope: !15)
!65 = !DILocation(line: 28, column: 13, scope: !15)
!66 = !DILocation(line: 28, column: 6, scope: !15)
!67 = !DILocation(line: 28, column: 8, scope: !15)
!68 = !DILocation(line: 29, column: 13, scope: !15)
!69 = !DILocation(line: 29, column: 6, scope: !15)
!70 = !DILocation(line: 29, column: 8, scope: !15)
!71 = !DILocation(line: 31, column: 6, scope: !15)
!72 = !DILocation(line: 31, column: 8, scope: !15)
!73 = !DILocation(line: 32, column: 6, scope: !15)
!74 = !DILocation(line: 32, column: 8, scope: !15)
!75 = !DILocation(line: 33, column: 6, scope: !15)
!76 = !DILocation(line: 33, column: 8, scope: !15)
!77 = !DILocation(line: 34, column: 1, scope: !15)
!78 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!79 = !DILocation(line: 38, column: 37, scope: !16)
!80 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!81 = !DILocation(line: 38, column: 45, scope: !16)
!82 = !DILocalVariable(name: "i", scope: !83, file: !1, line: 39, type: !11)
!83 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!84 = !DILocation(line: 39, column: 12, scope: !83)
!85 = !DILocation(line: 39, column: 8, scope: !83)
!86 = !DILocation(line: 39, column: 21, scope: !87)
!87 = !DILexicalBlockFile(scope: !88, file: !1, discriminator: 1)
!88 = distinct !DILexicalBlock(scope: !83, file: !1, line: 39, column: 3)
!89 = !DILocation(line: 39, column: 3, scope: !87)
!90 = !DILocation(line: 40, column: 15, scope: !91)
!91 = distinct !DILexicalBlock(scope: !88, file: !1, line: 39, column: 31)
!92 = !DILocalVariable(name: "idx", scope: !91, file: !1, line: 40, type: !11)
!93 = !DILocation(line: 40, column: 9, scope: !91)
!94 = !DILocation(line: 41, column: 11, scope: !91)
!95 = !DILocation(line: 41, column: 21, scope: !91)
!96 = !DILocation(line: 41, column: 5, scope: !91)
!97 = !DILocation(line: 42, column: 3, scope: !91)
!98 = !DILocation(line: 39, column: 27, scope: !99)
!99 = !DILexicalBlockFile(scope: !88, file: !1, discriminator: 2)
!100 = !DILocation(line: 39, column: 3, scope: !99)
!101 = !DILocation(line: 43, column: 1, scope: !16)
!102 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!103 = !DILocation(line: 45, column: 34, scope: !19)
!104 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!105 = !DILocation(line: 45, column: 42, scope: !19)
!106 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!107 = !DILocation(line: 45, column: 53, scope: !19)
!108 = !DILocation(line: 46, column: 18, scope: !19)
!109 = !DILocation(line: 46, column: 28, scope: !19)
!110 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!111 = !DILocation(line: 46, column: 7, scope: !19)
!112 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!113 = !DILocation(line: 47, column: 7, scope: !19)
!114 = !DILocalVariable(name: "i", scope: !115, file: !1, line: 48, type: !11)
!115 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!116 = !DILocation(line: 48, column: 12, scope: !115)
!117 = !DILocation(line: 48, column: 8, scope: !115)
!118 = !DILocation(line: 48, column: 25, scope: !119)
!119 = !DILexicalBlockFile(scope: !120, file: !1, discriminator: 1)
!120 = distinct !DILexicalBlock(scope: !115, file: !1, line: 48, column: 3)
!121 = !DILocation(line: 48, column: 3, scope: !119)
!122 = !DILocation(line: 49, column: 9, scope: !123)
!123 = distinct !DILexicalBlock(scope: !124, file: !1, line: 49, column: 9)
!124 = distinct !DILexicalBlock(scope: !120, file: !1, line: 48, column: 35)
!125 = !DILocation(line: 49, column: 15, scope: !123)
!126 = !DILocation(line: 49, column: 17, scope: !123)
!127 = !DILocation(line: 49, column: 9, scope: !124)
!128 = !DILocation(line: 51, column: 18, scope: !129)
!129 = distinct !DILexicalBlock(scope: !123, file: !1, line: 49, column: 29)
!130 = !DILocation(line: 51, column: 24, scope: !129)
!131 = !DILocation(line: 52, column: 5, scope: !129)
!132 = !DILocation(line: 53, column: 3, scope: !124)
!133 = !DILocation(line: 48, column: 30, scope: !134)
!134 = !DILexicalBlockFile(scope: !120, file: !1, discriminator: 2)
!135 = !DILocation(line: 48, column: 3, scope: !134)
!136 = !DILocation(line: 54, column: 3, scope: !19)
!137 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!138 = !DILocation(line: 57, column: 37, scope: !22)
!139 = !DILocation(line: 58, column: 55, scope: !22)
!140 = !DILocation(line: 58, column: 54, scope: !22)
!141 = !DILocation(line: 58, column: 25, scope: !22)
!142 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!143 = !DILocation(line: 58, column: 19, scope: !22)
!144 = !DILocalVariable(name: "i", scope: !145, file: !1, line: 59, type: !11)
!145 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!146 = !DILocation(line: 59, column: 12, scope: !145)
!147 = !DILocation(line: 59, column: 8, scope: !145)
!148 = !DILocation(line: 59, column: 21, scope: !149)
!149 = !DILexicalBlockFile(scope: !150, file: !1, discriminator: 1)
!150 = distinct !DILexicalBlock(scope: !145, file: !1, line: 59, column: 3)
!151 = !DILocation(line: 59, column: 3, scope: !149)
!152 = !DILocation(line: 60, column: 16, scope: !153)
!153 = distinct !DILexicalBlock(scope: !150, file: !1, line: 59, column: 31)
!154 = !DILocation(line: 60, column: 23, scope: !153)
!155 = !DILocation(line: 60, column: 5, scope: !153)
!156 = !DILocation(line: 60, column: 12, scope: !153)
!157 = !DILocation(line: 60, column: 14, scope: !153)
!158 = !DILocation(line: 61, column: 16, scope: !153)
!159 = !DILocation(line: 61, column: 23, scope: !153)
!160 = !DILocation(line: 61, column: 5, scope: !153)
!161 = !DILocation(line: 61, column: 12, scope: !153)
!162 = !DILocation(line: 61, column: 14, scope: !153)
!163 = !DILocation(line: 62, column: 16, scope: !153)
!164 = !DILocation(line: 62, column: 23, scope: !153)
!165 = !DILocation(line: 62, column: 5, scope: !153)
!166 = !DILocation(line: 62, column: 12, scope: !153)
!167 = !DILocation(line: 62, column: 14, scope: !153)
!168 = !DILocation(line: 63, column: 3, scope: !153)
!169 = !DILocation(line: 59, column: 26, scope: !170)
!170 = !DILexicalBlockFile(scope: !150, file: !1, discriminator: 2)
!171 = !DILocation(line: 59, column: 3, scope: !170)
!172 = !DILocation(line: 64, column: 3, scope: !22)
!173 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!174 = !DILocation(line: 67, column: 14, scope: !25)
!175 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!176 = !DILocation(line: 67, column: 27, scope: !25)
!177 = !DILocation(line: 68, column: 3, scope: !25)
!178 = !DILocation(line: 69, column: 28, scope: !25)
!179 = !DILocation(line: 69, column: 3, scope: !25)
!180 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!181 = !DILocation(line: 71, column: 7, scope: !25)
!182 = !DILocation(line: 72, column: 3, scope: !25)
!183 = !DILocation(line: 74, column: 9, scope: !25)
!184 = !DILocation(line: 74, column: 3, scope: !185)
!185 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!186 = !DILocation(line: 75, column: 25, scope: !25)
!187 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!188 = !DILocation(line: 75, column: 19, scope: !25)
!189 = !DILocation(line: 76, column: 26, scope: !25)
!190 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!191 = !DILocation(line: 76, column: 19, scope: !25)
!192 = !DILocation(line: 77, column: 24, scope: !25)
!193 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!194 = !DILocation(line: 77, column: 19, scope: !25)
!195 = !DILocation(line: 78, column: 24, scope: !25)
!196 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!197 = !DILocation(line: 78, column: 19, scope: !25)
!198 = !DILocation(line: 79, column: 24, scope: !25)
!199 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!200 = !DILocation(line: 79, column: 19, scope: !25)
!201 = !DILocation(line: 81, column: 12, scope: !202)
!202 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!203 = !DILocation(line: 81, column: 7, scope: !25)
!204 = !DILocation(line: 82, column: 5, scope: !205)
!205 = distinct !DILexicalBlock(scope: !202, file: !1, line: 81, column: 18)
!206 = !DILocation(line: 83, column: 3, scope: !205)
!207 = !DILocation(line: 84, column: 5, scope: !208)
!208 = distinct !DILexicalBlock(scope: !202, file: !1, line: 83, column: 10)
!209 = !DILocation(line: 85, column: 5, scope: !208)
!210 = !DILocation(line: 88, column: 3, scope: !25)
!211 = !DILocation(line: 89, column: 3, scope: !25)
!212 = !DILocation(line: 91, column: 45, scope: !25)
!213 = !DILocation(line: 91, column: 51, scope: !25)
!214 = !DILocation(line: 91, column: 57, scope: !25)
!215 = !DILocation(line: 91, column: 3, scope: !25)
!216 = !DILocation(line: 92, column: 42, scope: !25)
!217 = !DILocation(line: 92, column: 50, scope: !25)
!218 = !DILocation(line: 92, column: 53, scope: !25)
!219 = !DILocation(line: 92, column: 61, scope: !25)
!220 = !DILocation(line: 92, column: 64, scope: !25)
!221 = !DILocation(line: 92, column: 72, scope: !25)
!222 = !DILocation(line: 92, column: 3, scope: !25)
!223 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Dead Argument Elimination ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i32 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i32 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !49, metadata !35), !dbg !50
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !51, metadata !35), !dbg !52
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !53
%0 = load i32, i32* %x1, align 4, !dbg !53
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !54, metadata !35), !dbg !55
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !56
%1 = load i32, i32* %y2, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !57, metadata !35), !dbg !58
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !59
%2 = load i32, i32* %z3, align 4, !dbg !59
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !60, metadata !35), !dbg !61
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !62
%3 = load i32, i32* %x4, align 4, !dbg !62
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 0, !dbg !63
store i32 %3, i32* %x5, align 4, !dbg !64
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !65
%4 = load i32, i32* %y6, align 4, !dbg !65
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 1, !dbg !66
store i32 %4, i32* %y7, align 4, !dbg !67
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !68
%5 = load i32, i32* %z8, align 4, !dbg !68
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i32 0, i32 2, !dbg !69
store i32 %5, i32* %z9, align 4, !dbg !70
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 0, !dbg !71
store i32 %0, i32* %x10, align 4, !dbg !72
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 1, !dbg !73
store i32 %1, i32* %y11, align 4, !dbg !74
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i32 0, i32 2, !dbg !75
store i32 %2, i32* %z12, align 4, !dbg !76
ret void, !dbg !77
}
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !80, metadata !35), !dbg !81
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !85
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !86
br i1 %cmp, label %for.body, label %for.end, !dbg !89
for.body: ; preds = %for.cond
%call = call fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %i.0, i32 %N), !dbg !90
call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !92, metadata !35), !dbg !93
%idxprom = sext i32 %call to i64, !dbg !94
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !94
%idxprom1 = sext i32 %i.0 to i64, !dbg !95
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !95
call fastcc void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !96
br label %for.inc, !dbg !97
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !98
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !100
for.end: ; preds = %for.cond
ret void, !dbg !101
}
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !102, metadata !35), !dbg !103
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !104, metadata !35), !dbg !105
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !106, metadata !35), !dbg !107
%idxprom = sext i32 %start to i64, !dbg !108
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !108
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !109
%0 = load i32, i32* %x, align 4, !dbg !109
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !110, metadata !35), !dbg !111
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !112, metadata !35), !dbg !113
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !117
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !118
br i1 %cmp, label %for.body, label %for.end, !dbg !121
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !122
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !122
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i32 0, i32 0, !dbg !125
%1 = load i32, i32* %x3, align 4, !dbg !125
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !126
br i1 %cmp4, label %if.then, label %if.end, !dbg !127
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !112, metadata !35), !dbg !113
%idxprom5 = sext i32 %i.0 to i64, !dbg !128
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, !dbg !128
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !130
%2 = load i32, i32* %x7, align 4, !dbg !130
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !110, metadata !35), !dbg !111
br label %if.end, !dbg !131
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !132
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !133
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !135
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !136
}
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !137, metadata !35), !dbg !138
%conv = sext i32 %N to i64, !dbg !139
%mul = mul i64 12, %conv, !dbg !140
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !141
%0 = bitcast i8* %call to %struct.vector3*, !dbg !141
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !147
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !148
br i1 %cmp, label %for.body, label %for.end, !dbg !151
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !152
%rem = srem i32 %call2, 100, !dbg !154
%idxprom = sext i32 %i.0 to i64, !dbg !155
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, !dbg !155
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i32 0, i32 0, !dbg !156
store i32 %rem, i32* %x, align 4, !dbg !157
%call3 = call i32 @rand() #6, !dbg !158
%rem4 = srem i32 %call3, 100, !dbg !159
%idxprom5 = sext i32 %i.0 to i64, !dbg !160
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, !dbg !160
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !161
store i32 %rem4, i32* %y, align 4, !dbg !162
%call7 = call i32 @rand() #6, !dbg !163
%rem8 = srem i32 %call7, 100, !dbg !164
%idxprom9 = sext i32 %i.0 to i64, !dbg !165
%arrayidx10 = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, !dbg !165
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx10, i32 0, i32 2, !dbg !166
store i32 %rem8, i32* %z, align 4, !dbg !167
br label %for.inc, !dbg !168
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !169
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !171
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !172
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
; Function Attrs: nounwind
declare i32 @rand() #5
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #4 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !173, metadata !35), !dbg !174
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !175, metadata !35), !dbg !176
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %argc), !dbg !177
%arrayidx = getelementptr inbounds i8*, i8** %argv, i64 0, !dbg !178
%0 = load i8*, i8** %arrayidx, align 8, !dbg !178
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i32 0, i32 0), i8* %0), !dbg !179
call void @llvm.dbg.declare(metadata i32* %x, metadata !180, metadata !35), !dbg !181
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i32* %x), !dbg !182
%call3 = call i64 @time(i64* null) #6, !dbg !183
%conv = trunc i64 %call3 to i32, !dbg !183
call void @srand(i32 %conv) #6, !dbg !184
%call4 = call fastcc %struct.vector3* @make_random_arr(i32 3), !dbg !186
call void @llvm.dbg.value(metadata %struct.vector3* %call4, i64 0, metadata !187, metadata !35), !dbg !188
%call5 = call fastcc %struct.vector3* @make_random_arr(i32 10), !dbg !189
call void @llvm.dbg.value(metadata %struct.vector3* %call5, i64 0, metadata !190, metadata !35), !dbg !191
%arrayidx6 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx6, i64 0, metadata !193, metadata !35), !dbg !194
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 1, !dbg !195
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !196, metadata !35), !dbg !197
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 2, !dbg !198
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !199, metadata !35), !dbg !200
%cmp = icmp eq i32 %argc, 1, !dbg !201
br i1 %cmp, label %if.then, label %if.else, !dbg !203
if.then: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !204
br label %if.end, !dbg !206
if.else: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !207
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !209
br label %if.end
if.end: ; preds = %if.else, %if.then
call fastcc void @selection_sort(%struct.vector3* %call4, i32 3), !dbg !210
call fastcc void @selection_sort(%struct.vector3* %call5, i32 10), !dbg !211
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 0, !dbg !212
%1 = load i32, i32* %x10, align 4, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 1, !dbg !213
%2 = load i32, i32* %y, align 4, !dbg !213
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx6, i32 0, i32 2, !dbg !214
%3 = load i32, i32* %z, align 4, !dbg !214
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i32 0, i32 0), i32 %1, i32 %2, i32 %3), !dbg !215
%arrayidx12 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 0, !dbg !216
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx12, i32 0, i32 0, !dbg !217
%4 = load i32, i32* %x13, align 4, !dbg !217
%arrayidx14 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 1, !dbg !218
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx14, i32 0, i32 0, !dbg !219
%5 = load i32, i32* %x15, align 4, !dbg !219
%arrayidx16 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 2, !dbg !220
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx16, i32 0, i32 0, !dbg !221
%6 = load i32, i32* %x17, align 4, !dbg !221
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i32 0, i32 0), i32 %4, i32 %5, i32 %6), !dbg !222
ret i32 0, !dbg !223
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
; Function Attrs: nounwind
declare i64 @time(i64*) #5
; Function Attrs: nounwind
declare void @srand(i32) #5
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
attributes #2 = { argmemonly nounwind }
attributes #3 = { norecurse nounwind readonly uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!35 = !DIExpression()
!36 = !DILocation(line: 12, column: 26, scope: !4)
!37 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!38 = !DILocation(line: 12, column: 45, scope: !4)
!39 = !DILocation(line: 13, column: 14, scope: !4)
!40 = !DILocation(line: 13, column: 6, scope: !4)
!41 = !DILocation(line: 13, column: 8, scope: !4)
!42 = !DILocation(line: 14, column: 14, scope: !4)
!43 = !DILocation(line: 14, column: 6, scope: !4)
!44 = !DILocation(line: 14, column: 8, scope: !4)
!45 = !DILocation(line: 15, column: 14, scope: !4)
!46 = !DILocation(line: 15, column: 6, scope: !4)
!47 = !DILocation(line: 15, column: 8, scope: !4)
!48 = !DILocation(line: 16, column: 1, scope: !4)
!49 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!50 = !DILocation(line: 22, column: 27, scope: !15)
!51 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!52 = !DILocation(line: 22, column: 46, scope: !15)
!53 = !DILocation(line: 23, column: 14, scope: !15)
!54 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!55 = !DILocation(line: 23, column: 7, scope: !15)
!56 = !DILocation(line: 24, column: 14, scope: !15)
!57 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!58 = !DILocation(line: 24, column: 7, scope: !15)
!59 = !DILocation(line: 25, column: 14, scope: !15)
!60 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!61 = !DILocation(line: 25, column: 7, scope: !15)
!62 = !DILocation(line: 27, column: 13, scope: !15)
!63 = !DILocation(line: 27, column: 6, scope: !15)
!64 = !DILocation(line: 27, column: 8, scope: !15)
!65 = !DILocation(line: 28, column: 13, scope: !15)
!66 = !DILocation(line: 28, column: 6, scope: !15)
!67 = !DILocation(line: 28, column: 8, scope: !15)
!68 = !DILocation(line: 29, column: 13, scope: !15)
!69 = !DILocation(line: 29, column: 6, scope: !15)
!70 = !DILocation(line: 29, column: 8, scope: !15)
!71 = !DILocation(line: 31, column: 6, scope: !15)
!72 = !DILocation(line: 31, column: 8, scope: !15)
!73 = !DILocation(line: 32, column: 6, scope: !15)
!74 = !DILocation(line: 32, column: 8, scope: !15)
!75 = !DILocation(line: 33, column: 6, scope: !15)
!76 = !DILocation(line: 33, column: 8, scope: !15)
!77 = !DILocation(line: 34, column: 1, scope: !15)
!78 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!79 = !DILocation(line: 38, column: 37, scope: !16)
!80 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!81 = !DILocation(line: 38, column: 45, scope: !16)
!82 = !DILocalVariable(name: "i", scope: !83, file: !1, line: 39, type: !11)
!83 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!84 = !DILocation(line: 39, column: 12, scope: !83)
!85 = !DILocation(line: 39, column: 8, scope: !83)
!86 = !DILocation(line: 39, column: 21, scope: !87)
!87 = !DILexicalBlockFile(scope: !88, file: !1, discriminator: 1)
!88 = distinct !DILexicalBlock(scope: !83, file: !1, line: 39, column: 3)
!89 = !DILocation(line: 39, column: 3, scope: !87)
!90 = !DILocation(line: 40, column: 15, scope: !91)
!91 = distinct !DILexicalBlock(scope: !88, file: !1, line: 39, column: 31)
!92 = !DILocalVariable(name: "idx", scope: !91, file: !1, line: 40, type: !11)
!93 = !DILocation(line: 40, column: 9, scope: !91)
!94 = !DILocation(line: 41, column: 11, scope: !91)
!95 = !DILocation(line: 41, column: 21, scope: !91)
!96 = !DILocation(line: 41, column: 5, scope: !91)
!97 = !DILocation(line: 42, column: 3, scope: !91)
!98 = !DILocation(line: 39, column: 27, scope: !99)
!99 = !DILexicalBlockFile(scope: !88, file: !1, discriminator: 2)
!100 = !DILocation(line: 39, column: 3, scope: !99)
!101 = !DILocation(line: 43, column: 1, scope: !16)
!102 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!103 = !DILocation(line: 45, column: 34, scope: !19)
!104 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!105 = !DILocation(line: 45, column: 42, scope: !19)
!106 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!107 = !DILocation(line: 45, column: 53, scope: !19)
!108 = !DILocation(line: 46, column: 18, scope: !19)
!109 = !DILocation(line: 46, column: 28, scope: !19)
!110 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!111 = !DILocation(line: 46, column: 7, scope: !19)
!112 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!113 = !DILocation(line: 47, column: 7, scope: !19)
!114 = !DILocalVariable(name: "i", scope: !115, file: !1, line: 48, type: !11)
!115 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!116 = !DILocation(line: 48, column: 12, scope: !115)
!117 = !DILocation(line: 48, column: 8, scope: !115)
!118 = !DILocation(line: 48, column: 25, scope: !119)
!119 = !DILexicalBlockFile(scope: !120, file: !1, discriminator: 1)
!120 = distinct !DILexicalBlock(scope: !115, file: !1, line: 48, column: 3)
!121 = !DILocation(line: 48, column: 3, scope: !119)
!122 = !DILocation(line: 49, column: 9, scope: !123)
!123 = distinct !DILexicalBlock(scope: !124, file: !1, line: 49, column: 9)
!124 = distinct !DILexicalBlock(scope: !120, file: !1, line: 48, column: 35)
!125 = !DILocation(line: 49, column: 15, scope: !123)
!126 = !DILocation(line: 49, column: 17, scope: !123)
!127 = !DILocation(line: 49, column: 9, scope: !124)
!128 = !DILocation(line: 51, column: 18, scope: !129)
!129 = distinct !DILexicalBlock(scope: !123, file: !1, line: 49, column: 29)
!130 = !DILocation(line: 51, column: 24, scope: !129)
!131 = !DILocation(line: 52, column: 5, scope: !129)
!132 = !DILocation(line: 53, column: 3, scope: !124)
!133 = !DILocation(line: 48, column: 30, scope: !134)
!134 = !DILexicalBlockFile(scope: !120, file: !1, discriminator: 2)
!135 = !DILocation(line: 48, column: 3, scope: !134)
!136 = !DILocation(line: 54, column: 3, scope: !19)
!137 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!138 = !DILocation(line: 57, column: 37, scope: !22)
!139 = !DILocation(line: 58, column: 55, scope: !22)
!140 = !DILocation(line: 58, column: 54, scope: !22)
!141 = !DILocation(line: 58, column: 25, scope: !22)
!142 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!143 = !DILocation(line: 58, column: 19, scope: !22)
!144 = !DILocalVariable(name: "i", scope: !145, file: !1, line: 59, type: !11)
!145 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!146 = !DILocation(line: 59, column: 12, scope: !145)
!147 = !DILocation(line: 59, column: 8, scope: !145)
!148 = !DILocation(line: 59, column: 21, scope: !149)
!149 = !DILexicalBlockFile(scope: !150, file: !1, discriminator: 1)
!150 = distinct !DILexicalBlock(scope: !145, file: !1, line: 59, column: 3)
!151 = !DILocation(line: 59, column: 3, scope: !149)
!152 = !DILocation(line: 60, column: 16, scope: !153)
!153 = distinct !DILexicalBlock(scope: !150, file: !1, line: 59, column: 31)
!154 = !DILocation(line: 60, column: 23, scope: !153)
!155 = !DILocation(line: 60, column: 5, scope: !153)
!156 = !DILocation(line: 60, column: 12, scope: !153)
!157 = !DILocation(line: 60, column: 14, scope: !153)
!158 = !DILocation(line: 61, column: 16, scope: !153)
!159 = !DILocation(line: 61, column: 23, scope: !153)
!160 = !DILocation(line: 61, column: 5, scope: !153)
!161 = !DILocation(line: 61, column: 12, scope: !153)
!162 = !DILocation(line: 61, column: 14, scope: !153)
!163 = !DILocation(line: 62, column: 16, scope: !153)
!164 = !DILocation(line: 62, column: 23, scope: !153)
!165 = !DILocation(line: 62, column: 5, scope: !153)
!166 = !DILocation(line: 62, column: 12, scope: !153)
!167 = !DILocation(line: 62, column: 14, scope: !153)
!168 = !DILocation(line: 63, column: 3, scope: !153)
!169 = !DILocation(line: 59, column: 26, scope: !170)
!170 = !DILexicalBlockFile(scope: !150, file: !1, discriminator: 2)
!171 = !DILocation(line: 59, column: 3, scope: !170)
!172 = !DILocation(line: 64, column: 3, scope: !22)
!173 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!174 = !DILocation(line: 67, column: 14, scope: !25)
!175 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!176 = !DILocation(line: 67, column: 27, scope: !25)
!177 = !DILocation(line: 68, column: 3, scope: !25)
!178 = !DILocation(line: 69, column: 28, scope: !25)
!179 = !DILocation(line: 69, column: 3, scope: !25)
!180 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!181 = !DILocation(line: 71, column: 7, scope: !25)
!182 = !DILocation(line: 72, column: 3, scope: !25)
!183 = !DILocation(line: 74, column: 9, scope: !25)
!184 = !DILocation(line: 74, column: 3, scope: !185)
!185 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!186 = !DILocation(line: 75, column: 25, scope: !25)
!187 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!188 = !DILocation(line: 75, column: 19, scope: !25)
!189 = !DILocation(line: 76, column: 26, scope: !25)
!190 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!191 = !DILocation(line: 76, column: 19, scope: !25)
!192 = !DILocation(line: 77, column: 24, scope: !25)
!193 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!194 = !DILocation(line: 77, column: 19, scope: !25)
!195 = !DILocation(line: 78, column: 24, scope: !25)
!196 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!197 = !DILocation(line: 78, column: 19, scope: !25)
!198 = !DILocation(line: 79, column: 24, scope: !25)
!199 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!200 = !DILocation(line: 79, column: 19, scope: !25)
!201 = !DILocation(line: 81, column: 12, scope: !202)
!202 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!203 = !DILocation(line: 81, column: 7, scope: !25)
!204 = !DILocation(line: 82, column: 5, scope: !205)
!205 = distinct !DILexicalBlock(scope: !202, file: !1, line: 81, column: 18)
!206 = !DILocation(line: 83, column: 3, scope: !205)
!207 = !DILocation(line: 84, column: 5, scope: !208)
!208 = distinct !DILexicalBlock(scope: !202, file: !1, line: 83, column: 10)
!209 = !DILocation(line: 85, column: 5, scope: !208)
!210 = !DILocation(line: 88, column: 3, scope: !25)
!211 = !DILocation(line: 89, column: 3, scope: !25)
!212 = !DILocation(line: 91, column: 45, scope: !25)
!213 = !DILocation(line: 91, column: 51, scope: !25)
!214 = !DILocation(line: 91, column: 57, scope: !25)
!215 = !DILocation(line: 91, column: 3, scope: !25)
!216 = !DILocation(line: 92, column: 42, scope: !25)
!217 = !DILocation(line: 92, column: 50, scope: !25)
!218 = !DILocation(line: 92, column: 53, scope: !25)
!219 = !DILocation(line: 92, column: 61, scope: !25)
!220 = !DILocation(line: 92, column: 64, scope: !25)
!221 = !DILocation(line: 92, column: 72, scope: !25)
!222 = !DILocation(line: 92, column: 3, scope: !25)
!223 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Combine redundant instructions ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !49, metadata !35), !dbg !50
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !51, metadata !35), !dbg !52
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !53
%0 = load i32, i32* %x1, align 4, !dbg !53
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !54, metadata !35), !dbg !55
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !56
%1 = load i32, i32* %y2, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !57, metadata !35), !dbg !58
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !59
%2 = load i32, i32* %z3, align 4, !dbg !59
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !60, metadata !35), !dbg !61
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !62
%3 = load i32, i32* %x4, align 4, !dbg !62
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !63
store i32 %3, i32* %x5, align 4, !dbg !64
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !65
%4 = load i32, i32* %y6, align 4, !dbg !65
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !66
store i32 %4, i32* %y7, align 4, !dbg !67
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !68
%5 = load i32, i32* %z8, align 4, !dbg !68
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !69
store i32 %5, i32* %z9, align 4, !dbg !70
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !71
store i32 %0, i32* %x10, align 4, !dbg !72
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !73
store i32 %1, i32* %y11, align 4, !dbg !74
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !75
store i32 %2, i32* %z12, align 4, !dbg !76
ret void, !dbg !77
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !80, metadata !35), !dbg !81
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !85
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !86
br i1 %cmp, label %for.body, label %for.end, !dbg !89
for.body: ; preds = %for.cond
%call = call fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %i.0, i32 %N), !dbg !90
call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !92, metadata !35), !dbg !93
%idxprom = sext i32 %call to i64, !dbg !94
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !94
%idxprom1 = sext i32 %i.0 to i64, !dbg !95
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !95
call fastcc void @swap(%struct.vector3* %arrayidx, %struct.vector3* %arrayidx2), !dbg !96
br label %for.inc, !dbg !97
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !98
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !82, metadata !35), !dbg !84
br label %for.cond, !dbg !100
for.end: ; preds = %for.cond
ret void, !dbg !101
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !102, metadata !35), !dbg !103
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !104, metadata !35), !dbg !105
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !106, metadata !35), !dbg !107
%idxprom = sext i32 %start to i64, !dbg !108
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, i32 0, !dbg !109
%0 = load i32, i32* %x, align 4, !dbg !109
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !110, metadata !35), !dbg !111
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !112, metadata !35), !dbg !113
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !117
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !118
br i1 %cmp, label %for.body, label %for.end, !dbg !121
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !122
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, i32 0, !dbg !125
%1 = load i32, i32* %x3, align 4, !dbg !125
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !126
br i1 %cmp4, label %if.then, label %if.end, !dbg !127
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !112, metadata !35), !dbg !113
%idxprom5 = sext i32 %i.0 to i64, !dbg !128
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, i32 0, !dbg !130
%2 = load i32, i32* %x7, align 4, !dbg !130
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !110, metadata !35), !dbg !111
br label %if.end, !dbg !131
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !132
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !133
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !114, metadata !35), !dbg !116
br label %for.cond, !dbg !135
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !136
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !137, metadata !35), !dbg !138
%conv = sext i32 %N to i64, !dbg !139
%mul = mul nsw i64 %conv, 12, !dbg !140
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !141
%0 = bitcast i8* %call to %struct.vector3*, !dbg !141
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !142, metadata !35), !dbg !143
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !147
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !148
br i1 %cmp, label %for.body, label %for.end, !dbg !151
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !152
%rem = srem i32 %call2, 100, !dbg !154
%idxprom = sext i32 %i.0 to i64, !dbg !155
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, i32 0, !dbg !156
store i32 %rem, i32* %x, align 4, !dbg !157
%call3 = call i32 @rand() #6, !dbg !158
%rem4 = srem i32 %call3, 100, !dbg !159
%idxprom5 = sext i32 %i.0 to i64, !dbg !160
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, i32 1, !dbg !161
store i32 %rem4, i32* %y, align 4, !dbg !162
%call7 = call i32 @rand() #6, !dbg !163
%rem8 = srem i32 %call7, 100, !dbg !164
%idxprom9 = sext i32 %i.0 to i64, !dbg !165
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, i32 2, !dbg !166
store i32 %rem8, i32* %z, align 4, !dbg !167
br label %for.inc, !dbg !168
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !169
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !144, metadata !35), !dbg !146
br label %for.cond, !dbg !171
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !172
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #4 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !173, metadata !35), !dbg !174
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !175, metadata !35), !dbg !176
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !177
%0 = load i8*, i8** %argv, align 8, !dbg !178
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !179
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !180, metadata !181), !dbg !182
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !183
%call3 = call i64 @time(i64* null) #6, !dbg !184
%conv = trunc i64 %call3 to i32, !dbg !184
call void @srand(i32 %conv) #6, !dbg !185
%call4 = call fastcc %struct.vector3* @make_random_arr(i32 3), !dbg !187
call void @llvm.dbg.value(metadata %struct.vector3* %call4, i64 0, metadata !188, metadata !35), !dbg !189
%call5 = call fastcc %struct.vector3* @make_random_arr(i32 10), !dbg !190
call void @llvm.dbg.value(metadata %struct.vector3* %call5, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %call4, i64 0, metadata !193, metadata !35), !dbg !194
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 1, !dbg !195
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !196, metadata !35), !dbg !197
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 2, !dbg !198
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !199, metadata !35), !dbg !200
%cmp = icmp eq i32 %argc, 1, !dbg !201
br i1 %cmp, label %if.then, label %if.else, !dbg !203
if.then: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !204
br label %if.end, !dbg !206
if.else: ; preds = %entry
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !207
call fastcc void @add(%struct.vector3* %arrayidx8, %struct.vector3* %arrayidx7), !dbg !209
br label %if.end
if.end: ; preds = %if.else, %if.then
call fastcc void @selection_sort(%struct.vector3* %call4, i32 3), !dbg !210
call fastcc void @selection_sort(%struct.vector3* %call5, i32 10), !dbg !211
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, i32 0, !dbg !212
%1 = load i32, i32* %x10, align 4, !dbg !212
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, i32 1, !dbg !213
%2 = load i32, i32* %y, align 4, !dbg !213
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %call4, i64 0, i32 2, !dbg !214
%3 = load i32, i32* %z, align 4, !dbg !214
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %1, i32 %2, i32 %3), !dbg !215
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 0, i32 0, !dbg !216
%4 = load i32, i32* %x13, align 4, !dbg !216
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 1, i32 0, !dbg !217
%5 = load i32, i32* %x15, align 4, !dbg !217
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %call5, i64 2, i32 0, !dbg !218
%6 = load i32, i32* %x17, align 4, !dbg !218
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %4, i32 %5, i32 %6), !dbg !219
ret i32 0, !dbg !220
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
*** IR Dump After Function Integration/Inlining ***
Printing <null> Function
*** IR Dump After Remove unused exception handling info ***
Printing <null> Function
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #5
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind
declare i32 @rand() #5
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind
declare i32 @rand() #5
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #5
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind
declare i64 @time(i64*) #5
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind
declare i64 @time(i64*) #5
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind
declare void @srand(i32) #5
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind
declare void @srand(i32) #5
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !34, metadata !35), !dbg !36
%conv = sext i32 %N to i64, !dbg !37
%mul = mul nsw i64 %conv, 12, !dbg !38
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !39
%0 = bitcast i8* %call to %struct.vector3*, !dbg !39
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !40, metadata !35), !dbg !41
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !42, metadata !35), !dbg !44
br label %for.cond, !dbg !45
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !46
br i1 %cmp, label %for.body, label %for.end, !dbg !49
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !50
%rem = srem i32 %call2, 100, !dbg !52
%idxprom = sext i32 %i.0 to i64, !dbg !53
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, i32 0, !dbg !54
store i32 %rem, i32* %x, align 4, !dbg !55
%call3 = call i32 @rand() #6, !dbg !56
%rem4 = srem i32 %call3, 100, !dbg !57
%idxprom5 = sext i32 %i.0 to i64, !dbg !58
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, i32 1, !dbg !59
store i32 %rem4, i32* %y, align 4, !dbg !60
%call7 = call i32 @rand() #6, !dbg !61
%rem8 = srem i32 %call7, 100, !dbg !62
%idxprom9 = sext i32 %i.0 to i64, !dbg !63
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, i32 2, !dbg !64
store i32 %rem8, i32* %z, align 4, !dbg !65
br label %for.inc, !dbg !66
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !67
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !42, metadata !35), !dbg !44
br label %for.cond, !dbg !69
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !70
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind uwtable
define internal fastcc %struct.vector3* @make_random_arr(i32 %N) unnamed_addr #4 !dbg !22 {
entry:
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !34, metadata !35), !dbg !36
%conv = sext i32 %N to i64, !dbg !37
%mul = mul nsw i64 %conv, 12, !dbg !38
%call = call noalias i8* @malloc(i64 %mul) #6, !dbg !39
%0 = bitcast i8* %call to %struct.vector3*, !dbg !39
call void @llvm.dbg.value(metadata %struct.vector3* %0, i64 0, metadata !40, metadata !35), !dbg !41
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !42, metadata !35), !dbg !44
br label %for.cond, !dbg !45
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !46
br i1 %cmp, label %for.body, label %for.end, !dbg !49
for.body: ; preds = %for.cond
%call2 = call i32 @rand() #6, !dbg !50
%rem = srem i32 %call2, 100, !dbg !52
%idxprom = sext i32 %i.0 to i64, !dbg !53
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom, i32 0, !dbg !54
store i32 %rem, i32* %x, align 4, !dbg !55
%call3 = call i32 @rand() #6, !dbg !56
%rem4 = srem i32 %call3, 100, !dbg !57
%idxprom5 = sext i32 %i.0 to i64, !dbg !58
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom5, i32 1, !dbg !59
store i32 %rem4, i32* %y, align 4, !dbg !60
%call7 = call i32 @rand() #6, !dbg !61
%rem8 = srem i32 %call7, 100, !dbg !62
%idxprom9 = sext i32 %i.0 to i64, !dbg !63
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %0, i64 %idxprom9, i32 2, !dbg !64
store i32 %rem8, i32* %z, align 4, !dbg !65
br label %for.inc, !dbg !66
for.inc: ; preds = %for.body
%inc = add nsw i32 %i.0, 1, !dbg !67
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !42, metadata !35), !dbg !44
br label %for.cond, !dbg !69
for.end: ; preds = %for.cond
ret %struct.vector3* %0, !dbg !70
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @add(%struct.vector3* %v, %struct.vector3* %w) unnamed_addr #0 !dbg !4 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %v, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %w, i64 0, metadata !37, metadata !35), !dbg !38
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 0, !dbg !39
%0 = load i32, i32* %x, align 4, !dbg !39
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 0, !dbg !40
%1 = load i32, i32* %x1, align 4, !dbg !41
%add = add nsw i32 %1, %0, !dbg !41
store i32 %add, i32* %x1, align 4, !dbg !41
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 1, !dbg !42
%2 = load i32, i32* %y, align 4, !dbg !42
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 1, !dbg !43
%3 = load i32, i32* %y2, align 4, !dbg !44
%add3 = add nsw i32 %3, %2, !dbg !44
store i32 %add3, i32* %y2, align 4, !dbg !44
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %w, i64 0, i32 2, !dbg !45
%4 = load i32, i32* %z, align 4, !dbg !45
%z4 = getelementptr inbounds %struct.vector3, %struct.vector3* %v, i64 0, i32 2, !dbg !46
%5 = load i32, i32* %z4, align 4, !dbg !47
%add5 = add nsw i32 %5, %4, !dbg !47
store i32 %add5, i32* %z4, align 4, !dbg !47
ret void, !dbg !48
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !39, metadata !35), !dbg !40
%idxprom = sext i32 %start to i64, !dbg !41
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, i32 0, !dbg !42
%0 = load i32, i32* %x, align 4, !dbg !42
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !43, metadata !35), !dbg !44
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !45, metadata !35), !dbg !46
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !47, metadata !35), !dbg !49
br label %for.cond, !dbg !50
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !51
br i1 %cmp, label %for.body, label %for.end, !dbg !54
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !55
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, i32 0, !dbg !58
%1 = load i32, i32* %x3, align 4, !dbg !58
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !59
br i1 %cmp4, label %if.then, label %if.end, !dbg !60
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !45, metadata !35), !dbg !46
%idxprom5 = sext i32 %i.0 to i64, !dbg !61
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, i32 0, !dbg !63
%2 = load i32, i32* %x7, align 4, !dbg !63
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !43, metadata !35), !dbg !44
br label %if.end, !dbg !64
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !65
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !66
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !47, metadata !35), !dbg !49
br label %for.cond, !dbg !68
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !69
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: norecurse nounwind readonly uwtable
define internal fastcc i32 @get_smallest(%struct.vector3* %vs, i32 %start, i32 %N) unnamed_addr #3 !dbg !19 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !39, metadata !35), !dbg !40
%idxprom = sext i32 %start to i64, !dbg !41
%x = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, i32 0, !dbg !42
%0 = load i32, i32* %x, align 4, !dbg !42
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !43, metadata !35), !dbg !44
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !45, metadata !35), !dbg !46
call void @llvm.dbg.value(metadata i32 %start, i64 0, metadata !47, metadata !35), !dbg !49
br label %for.cond, !dbg !50
for.cond: ; preds = %for.inc, %entry
%smallest.0 = phi i32 [ %0, %entry ], [ %smallest.1, %for.inc ]
%idx.0 = phi i32 [ %start, %entry ], [ %idx.1, %for.inc ]
%i.0 = phi i32 [ %start, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !51
br i1 %cmp, label %for.body, label %for.end, !dbg !54
for.body: ; preds = %for.cond
%idxprom1 = sext i32 %i.0 to i64, !dbg !55
%x3 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, i32 0, !dbg !58
%1 = load i32, i32* %x3, align 4, !dbg !58
%cmp4 = icmp slt i32 %1, %smallest.0, !dbg !59
br i1 %cmp4, label %if.then, label %if.end, !dbg !60
if.then: ; preds = %for.body
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !45, metadata !35), !dbg !46
%idxprom5 = sext i32 %i.0 to i64, !dbg !61
%x7 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5, i32 0, !dbg !63
%2 = load i32, i32* %x7, align 4, !dbg !63
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !43, metadata !35), !dbg !44
br label %if.end, !dbg !64
if.end: ; preds = %if.then, %for.body
%smallest.1 = phi i32 [ %2, %if.then ], [ %smallest.0, %for.body ]
%idx.1 = phi i32 [ %i.0, %if.then ], [ %idx.0, %for.body ]
br label %for.inc, !dbg !65
for.inc: ; preds = %if.end
%inc = add nsw i32 %i.0, 1, !dbg !66
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !47, metadata !35), !dbg !49
br label %for.cond, !dbg !68
for.end: ; preds = %for.cond
ret i32 %idx.0, !dbg !69
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !37, metadata !35), !dbg !38
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !39
%0 = load i32, i32* %x1, align 4, !dbg !39
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !40, metadata !35), !dbg !41
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !42
%1 = load i32, i32* %y2, align 4, !dbg !42
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !43, metadata !35), !dbg !44
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !45
%2 = load i32, i32* %z3, align 4, !dbg !45
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !46, metadata !35), !dbg !47
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !48
%3 = load i32, i32* %x4, align 4, !dbg !48
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !49
store i32 %3, i32* %x5, align 4, !dbg !50
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !51
%4 = load i32, i32* %y6, align 4, !dbg !51
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !52
store i32 %4, i32* %y7, align 4, !dbg !53
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !54
%5 = load i32, i32* %z8, align 4, !dbg !54
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !55
store i32 %5, i32* %z9, align 4, !dbg !56
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !57
store i32 %0, i32* %x10, align 4, !dbg !58
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !59
store i32 %1, i32* %y11, align 4, !dbg !60
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !61
store i32 %2, i32* %z12, align 4, !dbg !62
ret void, !dbg !63
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @swap(%struct.vector3* %a, %struct.vector3* %b) unnamed_addr #0 !dbg !15 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %a, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata %struct.vector3* %b, i64 0, metadata !37, metadata !35), !dbg !38
%x1 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !39
%0 = load i32, i32* %x1, align 4, !dbg !39
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !40, metadata !35), !dbg !41
%y2 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !42
%1 = load i32, i32* %y2, align 4, !dbg !42
call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !43, metadata !35), !dbg !44
%z3 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !45
%2 = load i32, i32* %z3, align 4, !dbg !45
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !46, metadata !35), !dbg !47
%x4 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !48
%3 = load i32, i32* %x4, align 4, !dbg !48
%x5 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 0, !dbg !49
store i32 %3, i32* %x5, align 4, !dbg !50
%y6 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !51
%4 = load i32, i32* %y6, align 4, !dbg !51
%y7 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 1, !dbg !52
store i32 %4, i32* %y7, align 4, !dbg !53
%z8 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !54
%5 = load i32, i32* %z8, align 4, !dbg !54
%z9 = getelementptr inbounds %struct.vector3, %struct.vector3* %a, i64 0, i32 2, !dbg !55
store i32 %5, i32* %z9, align 4, !dbg !56
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 0, !dbg !57
store i32 %0, i32* %x10, align 4, !dbg !58
%y11 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 1, !dbg !59
store i32 %1, i32* %y11, align 4, !dbg !60
%z12 = getelementptr inbounds %struct.vector3, %struct.vector3* %b, i64 0, i32 2, !dbg !61
store i32 %2, i32* %z12, align 4, !dbg !62
ret void, !dbg !63
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !39, metadata !35), !dbg !41
br label %for.cond, !dbg !42
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !43
br i1 %cmp, label %for.body, label %for.end, !dbg !46
for.body: ; preds = %for.cond
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !47, metadata !35), !dbg !48
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !51, metadata !35), !dbg !52
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !53, metadata !35), !dbg !54
%idxprom.i = sext i32 %i.0 to i64, !dbg !55
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom.i, i32 0, !dbg !56
%0 = load i32, i32* %x.i, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !57, metadata !35), !dbg !58
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !59, metadata !35), !dbg !60
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !61, metadata !35), !dbg !63
br label %for.cond.i, !dbg !64
for.cond.i: ; preds = %if.end.i, %for.body
%smallest.0.i = phi i32 [ %0, %for.body ], [ %smallest.1.i, %if.end.i ], !dbg !65
%idx.0.i = phi i32 [ %i.0, %for.body ], [ %idx.1.i, %if.end.i ], !dbg !65
%i.0.i = phi i32 [ %i.0, %for.body ], [ %inc.i, %if.end.i ], !dbg !65
%cmp.i = icmp slt i32 %i.0.i, %N, !dbg !66
br i1 %cmp.i, label %for.body.i, label %get_smallest.exit, !dbg !69
for.body.i: ; preds = %for.cond.i
%idxprom1.i = sext i32 %i.0.i to i64, !dbg !70
%x3.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1.i, i32 0, !dbg !73
%1 = load i32, i32* %x3.i, align 4, !dbg !73
%cmp4.i = icmp slt i32 %1, %smallest.0.i, !dbg !74
br i1 %cmp4.i, label %if.then.i, label %if.end.i, !dbg !75
if.then.i: ; preds = %for.body.i
call void @llvm.dbg.value(metadata i32 %i.0.i, i64 0, metadata !59, metadata !35), !dbg !60
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !76
%x7.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5.i, i32 0, !dbg !78
%2 = load i32, i32* %x7.i, align 4, !dbg !78
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !57, metadata !35), !dbg !58
br label %if.end.i, !dbg !79
if.end.i: ; preds = %if.then.i, %for.body.i
%smallest.1.i = phi i32 [ %2, %if.then.i ], [ %smallest.0.i, %for.body.i ], !dbg !65
%idx.1.i = phi i32 [ %i.0.i, %if.then.i ], [ %idx.0.i, %for.body.i ], !dbg !65
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !61, metadata !35), !dbg !63
br label %for.cond.i, !dbg !82
get_smallest.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata i32 %idx.0.i, i64 0, metadata !83, metadata !35), !dbg !84
%idxprom = sext i32 %idx.0.i to i64, !dbg !85
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !85
%idxprom1 = sext i32 %i.0 to i64, !dbg !86
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !86
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx, i64 0, metadata !87, metadata !35), !dbg !88
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2, i64 0, metadata !90, metadata !35), !dbg !91
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 0, !dbg !92
%3 = load i32, i32* %x1.i, align 4, !dbg !92
call void @llvm.dbg.value(metadata i32 %3, i64 0, metadata !93, metadata !35), !dbg !94
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 1, !dbg !95
%4 = load i32, i32* %y2.i, align 4, !dbg !95
call void @llvm.dbg.value(metadata i32 %4, i64 0, metadata !96, metadata !35), !dbg !97
%z3.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 2, !dbg !98
%5 = load i32, i32* %z3.i, align 4, !dbg !98
call void @llvm.dbg.value(metadata i32 %5, i64 0, metadata !99, metadata !35), !dbg !100
%x4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 0, !dbg !101
%6 = load i32, i32* %x4.i, align 4, !dbg !101
%x5.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 0, !dbg !102
store i32 %6, i32* %x5.i, align 4, !dbg !103
%y6.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 1, !dbg !104
%7 = load i32, i32* %y6.i, align 4, !dbg !104
%y7.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 1, !dbg !105
store i32 %7, i32* %y7.i, align 4, !dbg !106
%z8.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 2, !dbg !107
%8 = load i32, i32* %z8.i, align 4, !dbg !107
%z9.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 2, !dbg !108
store i32 %8, i32* %z9.i, align 4, !dbg !109
%x10.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 0, !dbg !110
store i32 %3, i32* %x10.i, align 4, !dbg !111
%y11.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 1, !dbg !112
store i32 %4, i32* %y11.i, align 4, !dbg !113
%z12.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 2, !dbg !114
store i32 %5, i32* %z12.i, align 4, !dbg !115
br label %for.inc, !dbg !116
for.inc: ; preds = %get_smallest.exit
%inc = add nsw i32 %i.0, 1, !dbg !117
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !39, metadata !35), !dbg !41
br label %for.cond, !dbg !119
for.end: ; preds = %for.cond
ret void, !dbg !120
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: norecurse nounwind uwtable
define internal fastcc void @selection_sort(%struct.vector3* %vs, i32 %N) unnamed_addr #0 !dbg !16 {
entry:
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !37, metadata !35), !dbg !38
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !39, metadata !35), !dbg !41
br label %for.cond, !dbg !42
for.cond: ; preds = %for.inc, %entry
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
%cmp = icmp slt i32 %i.0, %N, !dbg !43
br i1 %cmp, label %for.body, label %for.end, !dbg !46
for.body: ; preds = %for.cond
call void @llvm.dbg.value(metadata %struct.vector3* %vs, i64 0, metadata !47, metadata !35), !dbg !48
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !51, metadata !35), !dbg !52
call void @llvm.dbg.value(metadata i32 %N, i64 0, metadata !53, metadata !35), !dbg !54
%idxprom.i = sext i32 %i.0 to i64, !dbg !55
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom.i, i32 0, !dbg !56
%0 = load i32, i32* %x.i, align 4, !dbg !56
call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !57, metadata !35), !dbg !58
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !59, metadata !35), !dbg !60
call void @llvm.dbg.value(metadata i32 %i.0, i64 0, metadata !61, metadata !35), !dbg !63
br label %for.cond.i, !dbg !64
for.cond.i: ; preds = %if.end.i, %for.body
%smallest.0.i = phi i32 [ %0, %for.body ], [ %smallest.1.i, %if.end.i ], !dbg !65
%idx.0.i = phi i32 [ %i.0, %for.body ], [ %idx.1.i, %if.end.i ], !dbg !65
%i.0.i = phi i32 [ %i.0, %for.body ], [ %inc.i, %if.end.i ], !dbg !65
%cmp.i = icmp slt i32 %i.0.i, %N, !dbg !66
br i1 %cmp.i, label %for.body.i, label %get_smallest.exit, !dbg !69
for.body.i: ; preds = %for.cond.i
%idxprom1.i = sext i32 %i.0.i to i64, !dbg !70
%x3.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1.i, i32 0, !dbg !73
%1 = load i32, i32* %x3.i, align 4, !dbg !73
%cmp4.i = icmp slt i32 %1, %smallest.0.i, !dbg !74
br i1 %cmp4.i, label %if.then.i, label %if.end.i, !dbg !75
if.then.i: ; preds = %for.body.i
call void @llvm.dbg.value(metadata i32 %i.0.i, i64 0, metadata !59, metadata !35), !dbg !60
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !76
%x7.i = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom5.i, i32 0, !dbg !78
%2 = load i32, i32* %x7.i, align 4, !dbg !78
call void @llvm.dbg.value(metadata i32 %2, i64 0, metadata !57, metadata !35), !dbg !58
br label %if.end.i, !dbg !79
if.end.i: ; preds = %if.then.i, %for.body.i
%smallest.1.i = phi i32 [ %2, %if.then.i ], [ %smallest.0.i, %for.body.i ], !dbg !65
%idx.1.i = phi i32 [ %i.0.i, %if.then.i ], [ %idx.0.i, %for.body.i ], !dbg !65
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !61, metadata !35), !dbg !63
br label %for.cond.i, !dbg !82
get_smallest.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata i32 %idx.0.i, i64 0, metadata !83, metadata !35), !dbg !84
%idxprom = sext i32 %idx.0.i to i64, !dbg !85
%arrayidx = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom, !dbg !85
%idxprom1 = sext i32 %i.0 to i64, !dbg !86
%arrayidx2 = getelementptr inbounds %struct.vector3, %struct.vector3* %vs, i64 %idxprom1, !dbg !86
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx, i64 0, metadata !87, metadata !35), !dbg !88
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2, i64 0, metadata !90, metadata !35), !dbg !91
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 0, !dbg !92
%3 = load i32, i32* %x1.i, align 4, !dbg !92
call void @llvm.dbg.value(metadata i32 %3, i64 0, metadata !93, metadata !35), !dbg !94
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 1, !dbg !95
%4 = load i32, i32* %y2.i, align 4, !dbg !95
call void @llvm.dbg.value(metadata i32 %4, i64 0, metadata !96, metadata !35), !dbg !97
%z3.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 2, !dbg !98
%5 = load i32, i32* %z3.i, align 4, !dbg !98
call void @llvm.dbg.value(metadata i32 %5, i64 0, metadata !99, metadata !35), !dbg !100
%x4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 0, !dbg !101
%6 = load i32, i32* %x4.i, align 4, !dbg !101
%x5.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 0, !dbg !102
store i32 %6, i32* %x5.i, align 4, !dbg !103
%y6.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 1, !dbg !104
%7 = load i32, i32* %y6.i, align 4, !dbg !104
%y7.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 1, !dbg !105
store i32 %7, i32* %y7.i, align 4, !dbg !106
%z8.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 2, !dbg !107
%8 = load i32, i32* %z8.i, align 4, !dbg !107
%z9.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx, i64 0, i32 2, !dbg !108
store i32 %8, i32* %z9.i, align 4, !dbg !109
%x10.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 0, !dbg !110
store i32 %3, i32* %x10.i, align 4, !dbg !111
%y11.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 1, !dbg !112
store i32 %4, i32* %y11.i, align 4, !dbg !113
%z12.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2, i64 0, i32 2, !dbg !114
store i32 %5, i32* %z12.i, align 4, !dbg !115
br label %for.inc, !dbg !116
for.inc: ; preds = %get_smallest.exit
%inc = add nsw i32 %i.0, 1, !dbg !117
call void @llvm.dbg.value(metadata i32 %inc, i64 0, metadata !39, metadata !35), !dbg !41
br label %for.cond, !dbg !119
for.end: ; preds = %for.cond
ret void, !dbg !120
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #3 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #4, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #4, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #4, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #4, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #4, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #4, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #4, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #4, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #4, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #4, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #4, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #4, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #4, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #4, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 1, !dbg !115
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !116, metadata !35), !dbg !117
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 2, !dbg !118
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !119, metadata !35), !dbg !120
%cmp = icmp eq i32 %argc, 1, !dbg !121
br i1 %cmp, label %if.then, label %if.else, !dbg !123
if.then: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !125
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !129
%x.i20 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !130
%3 = load i32, i32* %x.i20, align 4, !dbg !130
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !131
%4 = load i32, i32* %x1.i, align 4, !dbg !132
%add.i = add nsw i32 %4, %3, !dbg !132
store i32 %add.i, i32* %x1.i, align 4, !dbg !132
%y.i21 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !133
%5 = load i32, i32* %y.i21, align 4, !dbg !133
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !134
%6 = load i32, i32* %y2.i, align 4, !dbg !135
%add3.i = add nsw i32 %6, %5, !dbg !135
store i32 %add3.i, i32* %y2.i, align 4, !dbg !135
%z.i22 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !136
%7 = load i32, i32* %z.i22, align 4, !dbg !136
%z4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !137
%8 = load i32, i32* %z4.i, align 4, !dbg !138
%add5.i = add nsw i32 %8, %7, !dbg !138
store i32 %add5.i, i32* %z4.i, align 4, !dbg !138
br label %if.end, !dbg !139
if.else: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !140
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !143
%x.i23 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !144
%9 = load i32, i32* %x.i23, align 4, !dbg !144
%x1.i24 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !145
%10 = load i32, i32* %x1.i24, align 4, !dbg !146
%add.i25 = add nsw i32 %10, %9, !dbg !146
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !146
%y.i26 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !147
%11 = load i32, i32* %y.i26, align 4, !dbg !147
%y2.i27 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !148
%12 = load i32, i32* %y2.i27, align 4, !dbg !149
%add3.i28 = add nsw i32 %12, %11, !dbg !149
store i32 %add3.i28, i32* %y2.i27, align 4, !dbg !149
%z.i29 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !150
%13 = load i32, i32* %z.i29, align 4, !dbg !150
%z4.i30 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !151
%14 = load i32, i32* %z4.i30, align 4, !dbg !152
%add5.i31 = add nsw i32 %14, %13, !dbg !152
store i32 %add5.i31, i32* %z4.i30, align 4, !dbg !152
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !155
%x.i32 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !156
%15 = load i32, i32* %x.i32, align 4, !dbg !156
%x1.i33 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !157
%16 = load i32, i32* %x1.i33, align 4, !dbg !158
%add.i34 = add nsw i32 %16, %15, !dbg !158
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !158
%y.i35 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !159
%17 = load i32, i32* %y.i35, align 4, !dbg !159
%y2.i36 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !160
%18 = load i32, i32* %y2.i36, align 4, !dbg !161
%add3.i37 = add nsw i32 %18, %17, !dbg !161
store i32 %add3.i37, i32* %y2.i36, align 4, !dbg !161
%z.i38 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !162
%19 = load i32, i32* %z.i38, align 4, !dbg !162
%z4.i39 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !163
%20 = load i32, i32* %z4.i39, align 4, !dbg !164
%add5.i40 = add nsw i32 %20, %19, !dbg !164
store i32 %add5.i40, i32* %z4.i39, align 4, !dbg !164
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !173
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !174
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !175
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !178
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !187
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !188
%21 = load i32, i32* %x.i.i, align 4, !dbg !188
call void @llvm.dbg.value(metadata i32 %21, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !196
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %21, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !197
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !197
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !197
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !198
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !201
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !202
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !205
%22 = load i32, i32* %x3.i.i, align 4, !dbg !205
%cmp4.i.i = icmp slt i32 %22, %smallest.0.i.i, !dbg !206
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !207
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !191, metadata !35), !dbg !192
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !208
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !210
%23 = load i32, i32* %x7.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !189, metadata !35), !dbg !190
br label %if.end.i.i, !dbg !211
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %23, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !197
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !197
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !212
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !214
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !215, metadata !35), !dbg !216
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !217
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !217
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !218
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !218
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !219, metadata !35), !dbg !220
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !222, metadata !35), !dbg !223
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !224
%24 = load i32, i32* %x1.i.i, align 4, !dbg !224
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !225, metadata !35), !dbg !226
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !227
%25 = load i32, i32* %y2.i.i, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !228, metadata !35), !dbg !229
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !230
%26 = load i32, i32* %z3.i.i, align 4, !dbg !230
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !231, metadata !35), !dbg !232
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !233
%27 = load i32, i32* %x4.i.i, align 4, !dbg !233
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !234
store i32 %27, i32* %x5.i.i, align 4, !dbg !235
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !236
%28 = load i32, i32* %y6.i.i, align 4, !dbg !236
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !237
store i32 %28, i32* %y7.i.i, align 4, !dbg !238
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !239
%29 = load i32, i32* %z8.i.i, align 4, !dbg !239
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !240
store i32 %29, i32* %z9.i.i, align 4, !dbg !241
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !242
store i32 %24, i32* %x10.i.i, align 4, !dbg !243
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !244
store i32 %25, i32* %y11.i.i, align 4, !dbg !245
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !246
store i32 %26, i32* %z12.i.i, align 4, !dbg !247
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !248
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !250
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !165, metadata !35), !dbg !251
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !255
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !256
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !257
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !258
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !179, metadata !35), !dbg !259
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !183, metadata !35), !dbg !261
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !185, metadata !35), !dbg !262
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !263
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !264
%30 = load i32, i32* %x.i.i51, align 4, !dbg !264
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !189, metadata !35), !dbg !265
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !191, metadata !35), !dbg !266
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !268
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !269
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !269
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !269
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !270
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !271
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !272
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !273
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !273
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !274
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !275
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !191, metadata !35), !dbg !266
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !276
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !277
%32 = load i32, i32* %x7.i.i63, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !189, metadata !35), !dbg !265
br label %if.end.i.i68, !dbg !278
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !269
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !269
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !279
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !280
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !215, metadata !35), !dbg !281
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !282
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !282
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !283
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !283
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !219, metadata !35), !dbg !284
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !222, metadata !35), !dbg !286
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !287
%33 = load i32, i32* %x1.i.i73, align 4, !dbg !287
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !225, metadata !35), !dbg !288
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !289
%34 = load i32, i32* %y2.i.i74, align 4, !dbg !289
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !228, metadata !35), !dbg !290
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !291
%35 = load i32, i32* %z3.i.i75, align 4, !dbg !291
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !231, metadata !35), !dbg !292
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !293
%36 = load i32, i32* %x4.i.i76, align 4, !dbg !293
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !294
store i32 %36, i32* %x5.i.i77, align 4, !dbg !295
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !296
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !296
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !297
store i32 %37, i32* %y7.i.i79, align 4, !dbg !298
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !299
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !299
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !300
store i32 %38, i32* %z9.i.i81, align 4, !dbg !301
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !302
store i32 %33, i32* %x10.i.i82, align 4, !dbg !303
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !304
store i32 %34, i32* %y11.i.i83, align 4, !dbg !305
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !306
store i32 %35, i32* %z12.i.i84, align 4, !dbg !307
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !308
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !309
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 0, !dbg !310
%39 = load i32, i32* %x10, align 4, !dbg !310
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 1, !dbg !311
%40 = load i32, i32* %y, align 4, !dbg !311
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 2, !dbg !312
%41 = load i32, i32* %z, align 4, !dbg !312
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %39, i32 %40, i32 %41), !dbg !313
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 0, i32 0, !dbg !314
%42 = load i32, i32* %x13, align 4, !dbg !314
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 1, i32 0, !dbg !315
%43 = load i32, i32* %x15, align 4, !dbg !315
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 2, i32 0, !dbg !316
%44 = load i32, i32* %x17, align 4, !dbg !316
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %43, i32 %44), !dbg !317
ret i32 0, !dbg !318
}
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #3 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #4, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #4, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #4, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #4, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #4, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #4, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #4, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #4, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #4, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #4, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #4, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #4, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #4, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #4, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 1, !dbg !115
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !116, metadata !35), !dbg !117
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 2, !dbg !118
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !119, metadata !35), !dbg !120
%cmp = icmp eq i32 %argc, 1, !dbg !121
br i1 %cmp, label %if.then, label %if.else, !dbg !123
if.then: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !125
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !129
%x.i20 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !130
%3 = load i32, i32* %x.i20, align 4, !dbg !130
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !131
%4 = load i32, i32* %x1.i, align 4, !dbg !132
%add.i = add nsw i32 %4, %3, !dbg !132
store i32 %add.i, i32* %x1.i, align 4, !dbg !132
%y.i21 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !133
%5 = load i32, i32* %y.i21, align 4, !dbg !133
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !134
%6 = load i32, i32* %y2.i, align 4, !dbg !135
%add3.i = add nsw i32 %6, %5, !dbg !135
store i32 %add3.i, i32* %y2.i, align 4, !dbg !135
%z.i22 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !136
%7 = load i32, i32* %z.i22, align 4, !dbg !136
%z4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !137
%8 = load i32, i32* %z4.i, align 4, !dbg !138
%add5.i = add nsw i32 %8, %7, !dbg !138
store i32 %add5.i, i32* %z4.i, align 4, !dbg !138
br label %if.end, !dbg !139
if.else: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !140
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !143
%x.i23 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !144
%9 = load i32, i32* %x.i23, align 4, !dbg !144
%x1.i24 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !145
%10 = load i32, i32* %x1.i24, align 4, !dbg !146
%add.i25 = add nsw i32 %10, %9, !dbg !146
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !146
%y.i26 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !147
%11 = load i32, i32* %y.i26, align 4, !dbg !147
%y2.i27 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !148
%12 = load i32, i32* %y2.i27, align 4, !dbg !149
%add3.i28 = add nsw i32 %12, %11, !dbg !149
store i32 %add3.i28, i32* %y2.i27, align 4, !dbg !149
%z.i29 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !150
%13 = load i32, i32* %z.i29, align 4, !dbg !150
%z4.i30 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !151
%14 = load i32, i32* %z4.i30, align 4, !dbg !152
%add5.i31 = add nsw i32 %14, %13, !dbg !152
store i32 %add5.i31, i32* %z4.i30, align 4, !dbg !152
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !155
%x.i32 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !156
%15 = load i32, i32* %x.i32, align 4, !dbg !156
%x1.i33 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !157
%16 = load i32, i32* %x1.i33, align 4, !dbg !158
%add.i34 = add nsw i32 %16, %15, !dbg !158
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !158
%y.i35 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !159
%17 = load i32, i32* %y.i35, align 4, !dbg !159
%y2.i36 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !160
%18 = load i32, i32* %y2.i36, align 4, !dbg !161
%add3.i37 = add nsw i32 %18, %17, !dbg !161
store i32 %add3.i37, i32* %y2.i36, align 4, !dbg !161
%z.i38 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !162
%19 = load i32, i32* %z.i38, align 4, !dbg !162
%z4.i39 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !163
%20 = load i32, i32* %z4.i39, align 4, !dbg !164
%add5.i40 = add nsw i32 %20, %19, !dbg !164
store i32 %add5.i40, i32* %z4.i39, align 4, !dbg !164
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !173
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !174
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !175
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !178
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !187
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !188
%21 = load i32, i32* %x.i.i, align 4, !dbg !188
call void @llvm.dbg.value(metadata i32 %21, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !196
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %21, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !197
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !197
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !197
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !198
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !201
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !202
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !205
%22 = load i32, i32* %x3.i.i, align 4, !dbg !205
%cmp4.i.i = icmp slt i32 %22, %smallest.0.i.i, !dbg !206
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !207
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !191, metadata !35), !dbg !192
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !208
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !210
%23 = load i32, i32* %x7.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !189, metadata !35), !dbg !190
br label %if.end.i.i, !dbg !211
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %23, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !197
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !197
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !212
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !214
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !215, metadata !35), !dbg !216
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !217
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !217
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !218
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !218
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !219, metadata !35), !dbg !220
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !222, metadata !35), !dbg !223
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !224
%24 = load i32, i32* %x1.i.i, align 4, !dbg !224
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !225, metadata !35), !dbg !226
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !227
%25 = load i32, i32* %y2.i.i, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !228, metadata !35), !dbg !229
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !230
%26 = load i32, i32* %z3.i.i, align 4, !dbg !230
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !231, metadata !35), !dbg !232
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !233
%27 = load i32, i32* %x4.i.i, align 4, !dbg !233
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !234
store i32 %27, i32* %x5.i.i, align 4, !dbg !235
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !236
%28 = load i32, i32* %y6.i.i, align 4, !dbg !236
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !237
store i32 %28, i32* %y7.i.i, align 4, !dbg !238
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !239
%29 = load i32, i32* %z8.i.i, align 4, !dbg !239
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !240
store i32 %29, i32* %z9.i.i, align 4, !dbg !241
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !242
store i32 %24, i32* %x10.i.i, align 4, !dbg !243
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !244
store i32 %25, i32* %y11.i.i, align 4, !dbg !245
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !246
store i32 %26, i32* %z12.i.i, align 4, !dbg !247
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !248
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !250
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !165, metadata !35), !dbg !251
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !255
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !256
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !257
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !258
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !179, metadata !35), !dbg !259
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !183, metadata !35), !dbg !261
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !185, metadata !35), !dbg !262
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !263
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !264
%30 = load i32, i32* %x.i.i51, align 4, !dbg !264
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !189, metadata !35), !dbg !265
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !191, metadata !35), !dbg !266
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !268
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !269
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !269
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !269
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !270
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !271
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !272
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !273
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !273
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !274
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !275
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !191, metadata !35), !dbg !266
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !276
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !277
%32 = load i32, i32* %x7.i.i63, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !189, metadata !35), !dbg !265
br label %if.end.i.i68, !dbg !278
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !269
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !269
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !279
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !280
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !215, metadata !35), !dbg !281
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !282
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !282
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !283
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !283
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !219, metadata !35), !dbg !284
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !222, metadata !35), !dbg !286
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !287
%33 = load i32, i32* %x1.i.i73, align 4, !dbg !287
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !225, metadata !35), !dbg !288
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !289
%34 = load i32, i32* %y2.i.i74, align 4, !dbg !289
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !228, metadata !35), !dbg !290
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !291
%35 = load i32, i32* %z3.i.i75, align 4, !dbg !291
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !231, metadata !35), !dbg !292
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !293
%36 = load i32, i32* %x4.i.i76, align 4, !dbg !293
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !294
store i32 %36, i32* %x5.i.i77, align 4, !dbg !295
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !296
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !296
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !297
store i32 %37, i32* %y7.i.i79, align 4, !dbg !298
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !299
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !299
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !300
store i32 %38, i32* %z9.i.i81, align 4, !dbg !301
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !302
store i32 %33, i32* %x10.i.i82, align 4, !dbg !303
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !304
store i32 %34, i32* %y11.i.i83, align 4, !dbg !305
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !306
store i32 %35, i32* %z12.i.i84, align 4, !dbg !307
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !308
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !309
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 0, !dbg !310
%39 = load i32, i32* %x10, align 4, !dbg !310
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 1, !dbg !311
%40 = load i32, i32* %y, align 4, !dbg !311
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 2, !dbg !312
%41 = load i32, i32* %z, align 4, !dbg !312
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %39, i32 %40, i32 %41), !dbg !313
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 0, i32 0, !dbg !314
%42 = load i32, i32* %x13, align 4, !dbg !314
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 1, i32 0, !dbg !315
%43 = load i32, i32* %x15, align 4, !dbg !315
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 2, i32 0, !dbg !316
%44 = load i32, i32* %x17, align 4, !dbg !316
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %43, i32 %44), !dbg !317
ret i32 0, !dbg !318
}
*** IR Dump After Function Integration/Inlining ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #0
*** IR Dump After Remove unused exception handling info ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #0
*** IR Dump After Function Integration/Inlining ***
Printing <null> Function
*** IR Dump After Remove unused exception handling info ***
Printing <null> Function
*** IR Dump After Global Variable Optimizer ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #2
; Function Attrs: nounwind
declare i32 @rand() #2
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #3 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #4, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #4, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #4, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #4, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #4, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #4, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #4, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #4, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #4, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #4, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #4, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #4, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #4, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #4, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #4, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #4, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 1, !dbg !115
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !116, metadata !35), !dbg !117
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 2, !dbg !118
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !119, metadata !35), !dbg !120
%cmp = icmp eq i32 %argc, 1, !dbg !121
br i1 %cmp, label %if.then, label %if.else, !dbg !123
if.then: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !125
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !129
%x.i20 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !130
%3 = load i32, i32* %x.i20, align 4, !dbg !130
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !131
%4 = load i32, i32* %x1.i, align 4, !dbg !132
%add.i = add nsw i32 %4, %3, !dbg !132
store i32 %add.i, i32* %x1.i, align 4, !dbg !132
%y.i21 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !133
%5 = load i32, i32* %y.i21, align 4, !dbg !133
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !134
%6 = load i32, i32* %y2.i, align 4, !dbg !135
%add3.i = add nsw i32 %6, %5, !dbg !135
store i32 %add3.i, i32* %y2.i, align 4, !dbg !135
%z.i22 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !136
%7 = load i32, i32* %z.i22, align 4, !dbg !136
%z4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !137
%8 = load i32, i32* %z4.i, align 4, !dbg !138
%add5.i = add nsw i32 %8, %7, !dbg !138
store i32 %add5.i, i32* %z4.i, align 4, !dbg !138
br label %if.end, !dbg !139
if.else: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !140
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !143
%x.i23 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !144
%9 = load i32, i32* %x.i23, align 4, !dbg !144
%x1.i24 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !145
%10 = load i32, i32* %x1.i24, align 4, !dbg !146
%add.i25 = add nsw i32 %10, %9, !dbg !146
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !146
%y.i26 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !147
%11 = load i32, i32* %y.i26, align 4, !dbg !147
%y2.i27 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !148
%12 = load i32, i32* %y2.i27, align 4, !dbg !149
%add3.i28 = add nsw i32 %12, %11, !dbg !149
store i32 %add3.i28, i32* %y2.i27, align 4, !dbg !149
%z.i29 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !150
%13 = load i32, i32* %z.i29, align 4, !dbg !150
%z4.i30 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !151
%14 = load i32, i32* %z4.i30, align 4, !dbg !152
%add5.i31 = add nsw i32 %14, %13, !dbg !152
store i32 %add5.i31, i32* %z4.i30, align 4, !dbg !152
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !155
%x.i32 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !156
%15 = load i32, i32* %x.i32, align 4, !dbg !156
%x1.i33 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !157
%16 = load i32, i32* %x1.i33, align 4, !dbg !158
%add.i34 = add nsw i32 %16, %15, !dbg !158
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !158
%y.i35 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !159
%17 = load i32, i32* %y.i35, align 4, !dbg !159
%y2.i36 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !160
%18 = load i32, i32* %y2.i36, align 4, !dbg !161
%add3.i37 = add nsw i32 %18, %17, !dbg !161
store i32 %add3.i37, i32* %y2.i36, align 4, !dbg !161
%z.i38 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !162
%19 = load i32, i32* %z.i38, align 4, !dbg !162
%z4.i39 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !163
%20 = load i32, i32* %z4.i39, align 4, !dbg !164
%add5.i40 = add nsw i32 %20, %19, !dbg !164
store i32 %add5.i40, i32* %z4.i39, align 4, !dbg !164
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !173
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !174
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !175
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !178
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !187
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !188
%21 = load i32, i32* %x.i.i, align 4, !dbg !188
call void @llvm.dbg.value(metadata i32 %21, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !196
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %21, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !197
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !197
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !197
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !198
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !201
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !202
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !205
%22 = load i32, i32* %x3.i.i, align 4, !dbg !205
%cmp4.i.i = icmp slt i32 %22, %smallest.0.i.i, !dbg !206
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !207
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !191, metadata !35), !dbg !192
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !208
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !210
%23 = load i32, i32* %x7.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !189, metadata !35), !dbg !190
br label %if.end.i.i, !dbg !211
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %23, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !197
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !197
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !212
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !214
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !215, metadata !35), !dbg !216
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !217
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !217
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !218
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !218
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !219, metadata !35), !dbg !220
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !222, metadata !35), !dbg !223
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !224
%24 = load i32, i32* %x1.i.i, align 4, !dbg !224
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !225, metadata !35), !dbg !226
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !227
%25 = load i32, i32* %y2.i.i, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !228, metadata !35), !dbg !229
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !230
%26 = load i32, i32* %z3.i.i, align 4, !dbg !230
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !231, metadata !35), !dbg !232
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !233
%27 = load i32, i32* %x4.i.i, align 4, !dbg !233
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !234
store i32 %27, i32* %x5.i.i, align 4, !dbg !235
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !236
%28 = load i32, i32* %y6.i.i, align 4, !dbg !236
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !237
store i32 %28, i32* %y7.i.i, align 4, !dbg !238
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !239
%29 = load i32, i32* %z8.i.i, align 4, !dbg !239
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !240
store i32 %29, i32* %z9.i.i, align 4, !dbg !241
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !242
store i32 %24, i32* %x10.i.i, align 4, !dbg !243
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !244
store i32 %25, i32* %y11.i.i, align 4, !dbg !245
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !246
store i32 %26, i32* %z12.i.i, align 4, !dbg !247
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !248
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !250
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !165, metadata !35), !dbg !251
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !255
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !256
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !257
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !258
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !179, metadata !35), !dbg !259
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !183, metadata !35), !dbg !261
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !185, metadata !35), !dbg !262
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !263
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !264
%30 = load i32, i32* %x.i.i51, align 4, !dbg !264
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !189, metadata !35), !dbg !265
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !191, metadata !35), !dbg !266
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !268
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !269
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !269
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !269
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !270
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !271
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !272
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !273
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !273
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !274
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !275
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !191, metadata !35), !dbg !266
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !276
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !277
%32 = load i32, i32* %x7.i.i63, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !189, metadata !35), !dbg !265
br label %if.end.i.i68, !dbg !278
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !269
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !269
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !279
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !280
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !215, metadata !35), !dbg !281
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !282
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !282
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !283
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !283
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !219, metadata !35), !dbg !284
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !222, metadata !35), !dbg !286
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !287
%33 = load i32, i32* %x1.i.i73, align 4, !dbg !287
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !225, metadata !35), !dbg !288
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !289
%34 = load i32, i32* %y2.i.i74, align 4, !dbg !289
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !228, metadata !35), !dbg !290
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !291
%35 = load i32, i32* %z3.i.i75, align 4, !dbg !291
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !231, metadata !35), !dbg !292
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !293
%36 = load i32, i32* %x4.i.i76, align 4, !dbg !293
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !294
store i32 %36, i32* %x5.i.i77, align 4, !dbg !295
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !296
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !296
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !297
store i32 %37, i32* %y7.i.i79, align 4, !dbg !298
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !299
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !299
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !300
store i32 %38, i32* %z9.i.i81, align 4, !dbg !301
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !302
store i32 %33, i32* %x10.i.i82, align 4, !dbg !303
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !304
store i32 %34, i32* %y11.i.i83, align 4, !dbg !305
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !306
store i32 %35, i32* %z12.i.i84, align 4, !dbg !307
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !308
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !309
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 0, !dbg !310
%39 = load i32, i32* %x10, align 4, !dbg !310
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 1, !dbg !311
%40 = load i32, i32* %y, align 4, !dbg !311
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 2, !dbg !312
%41 = load i32, i32* %z, align 4, !dbg !312
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %39, i32 %40, i32 %41), !dbg !313
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 0, i32 0, !dbg !314
%42 = load i32, i32* %x13, align 4, !dbg !314
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 1, i32 0, !dbg !315
%43 = load i32, i32* %x15, align 4, !dbg !315
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 2, i32 0, !dbg !316
%44 = load i32, i32* %x17, align 4, !dbg !316
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %43, i32 %44), !dbg !317
ret i32 0, !dbg !318
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #2
; Function Attrs: nounwind
declare i64 @time(i64*) #2
; Function Attrs: nounwind
declare void @srand(i32) #2
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #0
attributes #0 = { nounwind readnone }
attributes #1 = { argmemonly nounwind }
attributes #2 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!35 = !DIExpression()
!36 = !DILocation(line: 67, column: 14, scope: !25)
!37 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!38 = !DILocation(line: 67, column: 27, scope: !25)
!39 = !DILocation(line: 68, column: 3, scope: !25)
!40 = !DILocation(line: 69, column: 28, scope: !25)
!41 = !DILocation(line: 69, column: 3, scope: !25)
!42 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!43 = !DIExpression(DW_OP_deref)
!44 = !DILocation(line: 71, column: 7, scope: !25)
!45 = !DILocation(line: 72, column: 3, scope: !25)
!46 = !DILocation(line: 74, column: 9, scope: !25)
!47 = !DILocation(line: 74, column: 3, scope: !48)
!48 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!49 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!50 = !DILocation(line: 57, column: 37, scope: !22, inlinedAt: !51)
!51 = distinct !DILocation(line: 75, column: 25, scope: !25)
!52 = !DILocation(line: 58, column: 25, scope: !22, inlinedAt: !51)
!53 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!54 = !DILocation(line: 58, column: 19, scope: !22, inlinedAt: !51)
!55 = !DILocalVariable(name: "i", scope: !56, file: !1, line: 59, type: !11)
!56 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!57 = !DILocation(line: 59, column: 12, scope: !56, inlinedAt: !51)
!58 = !DILocation(line: 59, column: 8, scope: !56, inlinedAt: !51)
!59 = !DILocation(line: 75, column: 25, scope: !25)
!60 = !DILocation(line: 59, column: 21, scope: !61, inlinedAt: !51)
!61 = !DILexicalBlockFile(scope: !62, file: !1, discriminator: 1)
!62 = distinct !DILexicalBlock(scope: !56, file: !1, line: 59, column: 3)
!63 = !DILocation(line: 59, column: 3, scope: !61, inlinedAt: !51)
!64 = !DILocation(line: 60, column: 16, scope: !65, inlinedAt: !51)
!65 = distinct !DILexicalBlock(scope: !62, file: !1, line: 59, column: 31)
!66 = !DILocation(line: 60, column: 23, scope: !65, inlinedAt: !51)
!67 = !DILocation(line: 60, column: 5, scope: !65, inlinedAt: !51)
!68 = !DILocation(line: 60, column: 12, scope: !65, inlinedAt: !51)
!69 = !DILocation(line: 60, column: 14, scope: !65, inlinedAt: !51)
!70 = !DILocation(line: 61, column: 16, scope: !65, inlinedAt: !51)
!71 = !DILocation(line: 61, column: 23, scope: !65, inlinedAt: !51)
!72 = !DILocation(line: 61, column: 5, scope: !65, inlinedAt: !51)
!73 = !DILocation(line: 61, column: 12, scope: !65, inlinedAt: !51)
!74 = !DILocation(line: 61, column: 14, scope: !65, inlinedAt: !51)
!75 = !DILocation(line: 62, column: 16, scope: !65, inlinedAt: !51)
!76 = !DILocation(line: 62, column: 23, scope: !65, inlinedAt: !51)
!77 = !DILocation(line: 62, column: 5, scope: !65, inlinedAt: !51)
!78 = !DILocation(line: 62, column: 12, scope: !65, inlinedAt: !51)
!79 = !DILocation(line: 62, column: 14, scope: !65, inlinedAt: !51)
!80 = !DILocation(line: 59, column: 26, scope: !81, inlinedAt: !51)
!81 = !DILexicalBlockFile(scope: !62, file: !1, discriminator: 2)
!82 = !DILocation(line: 59, column: 3, scope: !81, inlinedAt: !51)
!83 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!84 = !DILocation(line: 75, column: 19, scope: !25)
!85 = !DILocation(line: 57, column: 37, scope: !22, inlinedAt: !86)
!86 = distinct !DILocation(line: 76, column: 26, scope: !25)
!87 = !DILocation(line: 58, column: 25, scope: !22, inlinedAt: !86)
!88 = !DILocation(line: 58, column: 19, scope: !22, inlinedAt: !86)
!89 = !DILocation(line: 59, column: 12, scope: !56, inlinedAt: !86)
!90 = !DILocation(line: 59, column: 8, scope: !56, inlinedAt: !86)
!91 = !DILocation(line: 76, column: 26, scope: !25)
!92 = !DILocation(line: 59, column: 21, scope: !61, inlinedAt: !86)
!93 = !DILocation(line: 59, column: 3, scope: !61, inlinedAt: !86)
!94 = !DILocation(line: 60, column: 16, scope: !65, inlinedAt: !86)
!95 = !DILocation(line: 60, column: 23, scope: !65, inlinedAt: !86)
!96 = !DILocation(line: 60, column: 5, scope: !65, inlinedAt: !86)
!97 = !DILocation(line: 60, column: 12, scope: !65, inlinedAt: !86)
!98 = !DILocation(line: 60, column: 14, scope: !65, inlinedAt: !86)
!99 = !DILocation(line: 61, column: 16, scope: !65, inlinedAt: !86)
!100 = !DILocation(line: 61, column: 23, scope: !65, inlinedAt: !86)
!101 = !DILocation(line: 61, column: 5, scope: !65, inlinedAt: !86)
!102 = !DILocation(line: 61, column: 12, scope: !65, inlinedAt: !86)
!103 = !DILocation(line: 61, column: 14, scope: !65, inlinedAt: !86)
!104 = !DILocation(line: 62, column: 16, scope: !65, inlinedAt: !86)
!105 = !DILocation(line: 62, column: 23, scope: !65, inlinedAt: !86)
!106 = !DILocation(line: 62, column: 5, scope: !65, inlinedAt: !86)
!107 = !DILocation(line: 62, column: 12, scope: !65, inlinedAt: !86)
!108 = !DILocation(line: 62, column: 14, scope: !65, inlinedAt: !86)
!109 = !DILocation(line: 59, column: 26, scope: !81, inlinedAt: !86)
!110 = !DILocation(line: 59, column: 3, scope: !81, inlinedAt: !86)
!111 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!112 = !DILocation(line: 76, column: 19, scope: !25)
!113 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!114 = !DILocation(line: 77, column: 19, scope: !25)
!115 = !DILocation(line: 78, column: 24, scope: !25)
!116 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!117 = !DILocation(line: 78, column: 19, scope: !25)
!118 = !DILocation(line: 79, column: 24, scope: !25)
!119 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!120 = !DILocation(line: 79, column: 19, scope: !25)
!121 = !DILocation(line: 81, column: 12, scope: !122)
!122 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!123 = !DILocation(line: 81, column: 7, scope: !25)
!124 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!125 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !126)
!126 = distinct !DILocation(line: 82, column: 5, scope: !127)
!127 = distinct !DILexicalBlock(scope: !122, file: !1, line: 81, column: 18)
!128 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!129 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !126)
!130 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !126)
!131 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !126)
!132 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !126)
!133 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !126)
!134 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !126)
!135 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !126)
!136 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !126)
!137 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !126)
!138 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !126)
!139 = !DILocation(line: 83, column: 3, scope: !127)
!140 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !141)
!141 = distinct !DILocation(line: 84, column: 5, scope: !142)
!142 = distinct !DILexicalBlock(scope: !122, file: !1, line: 83, column: 10)
!143 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !141)
!144 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !141)
!145 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !141)
!146 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !141)
!147 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !141)
!148 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !141)
!149 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !141)
!150 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !141)
!151 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !141)
!152 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !141)
!153 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !154)
!154 = distinct !DILocation(line: 85, column: 5, scope: !142)
!155 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !154)
!156 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !154)
!157 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !154)
!158 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !154)
!159 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !154)
!160 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !154)
!161 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !154)
!162 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !154)
!163 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !154)
!164 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !154)
!165 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!166 = !DILocation(line: 38, column: 37, scope: !16, inlinedAt: !167)
!167 = distinct !DILocation(line: 88, column: 3, scope: !25)
!168 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!169 = !DILocation(line: 38, column: 45, scope: !16, inlinedAt: !167)
!170 = !DILocalVariable(name: "i", scope: !171, file: !1, line: 39, type: !11)
!171 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!172 = !DILocation(line: 39, column: 12, scope: !171, inlinedAt: !167)
!173 = !DILocation(line: 39, column: 8, scope: !171, inlinedAt: !167)
!174 = !DILocation(line: 88, column: 3, scope: !25)
!175 = !DILocation(line: 39, column: 21, scope: !176, inlinedAt: !167)
!176 = !DILexicalBlockFile(scope: !177, file: !1, discriminator: 1)
!177 = distinct !DILexicalBlock(scope: !171, file: !1, line: 39, column: 3)
!178 = !DILocation(line: 39, column: 3, scope: !176, inlinedAt: !167)
!179 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!180 = !DILocation(line: 45, column: 34, scope: !19, inlinedAt: !181)
!181 = distinct !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !167)
!182 = distinct !DILexicalBlock(scope: !177, file: !1, line: 39, column: 31)
!183 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!184 = !DILocation(line: 45, column: 42, scope: !19, inlinedAt: !181)
!185 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!186 = !DILocation(line: 45, column: 53, scope: !19, inlinedAt: !181)
!187 = !DILocation(line: 46, column: 18, scope: !19, inlinedAt: !181)
!188 = !DILocation(line: 46, column: 28, scope: !19, inlinedAt: !181)
!189 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!190 = !DILocation(line: 46, column: 7, scope: !19, inlinedAt: !181)
!191 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!192 = !DILocation(line: 47, column: 7, scope: !19, inlinedAt: !181)
!193 = !DILocalVariable(name: "i", scope: !194, file: !1, line: 48, type: !11)
!194 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!195 = !DILocation(line: 48, column: 12, scope: !194, inlinedAt: !181)
!196 = !DILocation(line: 48, column: 8, scope: !194, inlinedAt: !181)
!197 = !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !167)
!198 = !DILocation(line: 48, column: 25, scope: !199, inlinedAt: !181)
!199 = !DILexicalBlockFile(scope: !200, file: !1, discriminator: 1)
!200 = distinct !DILexicalBlock(scope: !194, file: !1, line: 48, column: 3)
!201 = !DILocation(line: 48, column: 3, scope: !199, inlinedAt: !181)
!202 = !DILocation(line: 49, column: 9, scope: !203, inlinedAt: !181)
!203 = distinct !DILexicalBlock(scope: !204, file: !1, line: 49, column: 9)
!204 = distinct !DILexicalBlock(scope: !200, file: !1, line: 48, column: 35)
!205 = !DILocation(line: 49, column: 15, scope: !203, inlinedAt: !181)
!206 = !DILocation(line: 49, column: 17, scope: !203, inlinedAt: !181)
!207 = !DILocation(line: 49, column: 9, scope: !204, inlinedAt: !181)
!208 = !DILocation(line: 51, column: 18, scope: !209, inlinedAt: !181)
!209 = distinct !DILexicalBlock(scope: !203, file: !1, line: 49, column: 29)
!210 = !DILocation(line: 51, column: 24, scope: !209, inlinedAt: !181)
!211 = !DILocation(line: 52, column: 5, scope: !209, inlinedAt: !181)
!212 = !DILocation(line: 48, column: 30, scope: !213, inlinedAt: !181)
!213 = !DILexicalBlockFile(scope: !200, file: !1, discriminator: 2)
!214 = !DILocation(line: 48, column: 3, scope: !213, inlinedAt: !181)
!215 = !DILocalVariable(name: "idx", scope: !182, file: !1, line: 40, type: !11)
!216 = !DILocation(line: 40, column: 9, scope: !182, inlinedAt: !167)
!217 = !DILocation(line: 41, column: 11, scope: !182, inlinedAt: !167)
!218 = !DILocation(line: 41, column: 21, scope: !182, inlinedAt: !167)
!219 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!220 = !DILocation(line: 22, column: 27, scope: !15, inlinedAt: !221)
!221 = distinct !DILocation(line: 41, column: 5, scope: !182, inlinedAt: !167)
!222 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!223 = !DILocation(line: 22, column: 46, scope: !15, inlinedAt: !221)
!224 = !DILocation(line: 23, column: 14, scope: !15, inlinedAt: !221)
!225 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!226 = !DILocation(line: 23, column: 7, scope: !15, inlinedAt: !221)
!227 = !DILocation(line: 24, column: 14, scope: !15, inlinedAt: !221)
!228 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!229 = !DILocation(line: 24, column: 7, scope: !15, inlinedAt: !221)
!230 = !DILocation(line: 25, column: 14, scope: !15, inlinedAt: !221)
!231 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!232 = !DILocation(line: 25, column: 7, scope: !15, inlinedAt: !221)
!233 = !DILocation(line: 27, column: 13, scope: !15, inlinedAt: !221)
!234 = !DILocation(line: 27, column: 6, scope: !15, inlinedAt: !221)
!235 = !DILocation(line: 27, column: 8, scope: !15, inlinedAt: !221)
!236 = !DILocation(line: 28, column: 13, scope: !15, inlinedAt: !221)
!237 = !DILocation(line: 28, column: 6, scope: !15, inlinedAt: !221)
!238 = !DILocation(line: 28, column: 8, scope: !15, inlinedAt: !221)
!239 = !DILocation(line: 29, column: 13, scope: !15, inlinedAt: !221)
!240 = !DILocation(line: 29, column: 6, scope: !15, inlinedAt: !221)
!241 = !DILocation(line: 29, column: 8, scope: !15, inlinedAt: !221)
!242 = !DILocation(line: 31, column: 6, scope: !15, inlinedAt: !221)
!243 = !DILocation(line: 31, column: 8, scope: !15, inlinedAt: !221)
!244 = !DILocation(line: 32, column: 6, scope: !15, inlinedAt: !221)
!245 = !DILocation(line: 32, column: 8, scope: !15, inlinedAt: !221)
!246 = !DILocation(line: 33, column: 6, scope: !15, inlinedAt: !221)
!247 = !DILocation(line: 33, column: 8, scope: !15, inlinedAt: !221)
!248 = !DILocation(line: 39, column: 27, scope: !249, inlinedAt: !167)
!249 = !DILexicalBlockFile(scope: !177, file: !1, discriminator: 2)
!250 = !DILocation(line: 39, column: 3, scope: !249, inlinedAt: !167)
!251 = !DILocation(line: 38, column: 37, scope: !16, inlinedAt: !252)
!252 = distinct !DILocation(line: 89, column: 3, scope: !25)
!253 = !DILocation(line: 38, column: 45, scope: !16, inlinedAt: !252)
!254 = !DILocation(line: 39, column: 12, scope: !171, inlinedAt: !252)
!255 = !DILocation(line: 39, column: 8, scope: !171, inlinedAt: !252)
!256 = !DILocation(line: 89, column: 3, scope: !25)
!257 = !DILocation(line: 39, column: 21, scope: !176, inlinedAt: !252)
!258 = !DILocation(line: 39, column: 3, scope: !176, inlinedAt: !252)
!259 = !DILocation(line: 45, column: 34, scope: !19, inlinedAt: !260)
!260 = distinct !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !252)
!261 = !DILocation(line: 45, column: 42, scope: !19, inlinedAt: !260)
!262 = !DILocation(line: 45, column: 53, scope: !19, inlinedAt: !260)
!263 = !DILocation(line: 46, column: 18, scope: !19, inlinedAt: !260)
!264 = !DILocation(line: 46, column: 28, scope: !19, inlinedAt: !260)
!265 = !DILocation(line: 46, column: 7, scope: !19, inlinedAt: !260)
!266 = !DILocation(line: 47, column: 7, scope: !19, inlinedAt: !260)
!267 = !DILocation(line: 48, column: 12, scope: !194, inlinedAt: !260)
!268 = !DILocation(line: 48, column: 8, scope: !194, inlinedAt: !260)
!269 = !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !252)
!270 = !DILocation(line: 48, column: 25, scope: !199, inlinedAt: !260)
!271 = !DILocation(line: 48, column: 3, scope: !199, inlinedAt: !260)
!272 = !DILocation(line: 49, column: 9, scope: !203, inlinedAt: !260)
!273 = !DILocation(line: 49, column: 15, scope: !203, inlinedAt: !260)
!274 = !DILocation(line: 49, column: 17, scope: !203, inlinedAt: !260)
!275 = !DILocation(line: 49, column: 9, scope: !204, inlinedAt: !260)
!276 = !DILocation(line: 51, column: 18, scope: !209, inlinedAt: !260)
!277 = !DILocation(line: 51, column: 24, scope: !209, inlinedAt: !260)
!278 = !DILocation(line: 52, column: 5, scope: !209, inlinedAt: !260)
!279 = !DILocation(line: 48, column: 30, scope: !213, inlinedAt: !260)
!280 = !DILocation(line: 48, column: 3, scope: !213, inlinedAt: !260)
!281 = !DILocation(line: 40, column: 9, scope: !182, inlinedAt: !252)
!282 = !DILocation(line: 41, column: 11, scope: !182, inlinedAt: !252)
!283 = !DILocation(line: 41, column: 21, scope: !182, inlinedAt: !252)
!284 = !DILocation(line: 22, column: 27, scope: !15, inlinedAt: !285)
!285 = distinct !DILocation(line: 41, column: 5, scope: !182, inlinedAt: !252)
!286 = !DILocation(line: 22, column: 46, scope: !15, inlinedAt: !285)
!287 = !DILocation(line: 23, column: 14, scope: !15, inlinedAt: !285)
!288 = !DILocation(line: 23, column: 7, scope: !15, inlinedAt: !285)
!289 = !DILocation(line: 24, column: 14, scope: !15, inlinedAt: !285)
!290 = !DILocation(line: 24, column: 7, scope: !15, inlinedAt: !285)
!291 = !DILocation(line: 25, column: 14, scope: !15, inlinedAt: !285)
!292 = !DILocation(line: 25, column: 7, scope: !15, inlinedAt: !285)
!293 = !DILocation(line: 27, column: 13, scope: !15, inlinedAt: !285)
!294 = !DILocation(line: 27, column: 6, scope: !15, inlinedAt: !285)
!295 = !DILocation(line: 27, column: 8, scope: !15, inlinedAt: !285)
!296 = !DILocation(line: 28, column: 13, scope: !15, inlinedAt: !285)
!297 = !DILocation(line: 28, column: 6, scope: !15, inlinedAt: !285)
!298 = !DILocation(line: 28, column: 8, scope: !15, inlinedAt: !285)
!299 = !DILocation(line: 29, column: 13, scope: !15, inlinedAt: !285)
!300 = !DILocation(line: 29, column: 6, scope: !15, inlinedAt: !285)
!301 = !DILocation(line: 29, column: 8, scope: !15, inlinedAt: !285)
!302 = !DILocation(line: 31, column: 6, scope: !15, inlinedAt: !285)
!303 = !DILocation(line: 31, column: 8, scope: !15, inlinedAt: !285)
!304 = !DILocation(line: 32, column: 6, scope: !15, inlinedAt: !285)
!305 = !DILocation(line: 32, column: 8, scope: !15, inlinedAt: !285)
!306 = !DILocation(line: 33, column: 6, scope: !15, inlinedAt: !285)
!307 = !DILocation(line: 33, column: 8, scope: !15, inlinedAt: !285)
!308 = !DILocation(line: 39, column: 27, scope: !249, inlinedAt: !252)
!309 = !DILocation(line: 39, column: 3, scope: !249, inlinedAt: !252)
!310 = !DILocation(line: 91, column: 45, scope: !25)
!311 = !DILocation(line: 91, column: 51, scope: !25)
!312 = !DILocation(line: 91, column: 57, scope: !25)
!313 = !DILocation(line: 91, column: 3, scope: !25)
!314 = !DILocation(line: 92, column: 50, scope: !25)
!315 = !DILocation(line: 92, column: 61, scope: !25)
!316 = !DILocation(line: 92, column: 72, scope: !25)
!317 = !DILocation(line: 92, column: 3, scope: !25)
!318 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Dead Global Elimination ***; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.vector3 = type { i32, i32, i32 }
@.str = private unnamed_addr constant [11 x i8] c"argc = %i\0A\00", align 1
@.str.1 = private unnamed_addr constant [14 x i8] c"argv[0] = %s\0A\00", align 1
@.str.2 = private unnamed_addr constant [9 x i8] c"&x = %p\0A\00", align 1
@.str.3 = private unnamed_addr constant [28 x i8] c"should be random: %i %i %i\0A\00", align 1
@.str.4 = private unnamed_addr constant [28 x i8] c"should be sorted: %i %i %i\0A\00", align 1
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #0
; Function Attrs: nounwind
declare i32 @rand() #0
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 1, !dbg !115
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !116, metadata !35), !dbg !117
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 2, !dbg !118
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !119, metadata !35), !dbg !120
%cmp = icmp eq i32 %argc, 1, !dbg !121
br i1 %cmp, label %if.then, label %if.else, !dbg !123
if.then: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !125
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !129
%x.i20 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !130
%3 = load i32, i32* %x.i20, align 4, !dbg !130
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !131
%4 = load i32, i32* %x1.i, align 4, !dbg !132
%add.i = add nsw i32 %4, %3, !dbg !132
store i32 %add.i, i32* %x1.i, align 4, !dbg !132
%y.i21 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !133
%5 = load i32, i32* %y.i21, align 4, !dbg !133
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !134
%6 = load i32, i32* %y2.i, align 4, !dbg !135
%add3.i = add nsw i32 %6, %5, !dbg !135
store i32 %add3.i, i32* %y2.i, align 4, !dbg !135
%z.i22 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !136
%7 = load i32, i32* %z.i22, align 4, !dbg !136
%z4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !137
%8 = load i32, i32* %z4.i, align 4, !dbg !138
%add5.i = add nsw i32 %8, %7, !dbg !138
store i32 %add5.i, i32* %z4.i, align 4, !dbg !138
br label %if.end, !dbg !139
if.else: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !140
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !143
%x.i23 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !144
%9 = load i32, i32* %x.i23, align 4, !dbg !144
%x1.i24 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !145
%10 = load i32, i32* %x1.i24, align 4, !dbg !146
%add.i25 = add nsw i32 %10, %9, !dbg !146
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !146
%y.i26 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !147
%11 = load i32, i32* %y.i26, align 4, !dbg !147
%y2.i27 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !148
%12 = load i32, i32* %y2.i27, align 4, !dbg !149
%add3.i28 = add nsw i32 %12, %11, !dbg !149
store i32 %add3.i28, i32* %y2.i27, align 4, !dbg !149
%z.i29 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !150
%13 = load i32, i32* %z.i29, align 4, !dbg !150
%z4.i30 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !151
%14 = load i32, i32* %z4.i30, align 4, !dbg !152
%add5.i31 = add nsw i32 %14, %13, !dbg !152
store i32 %add5.i31, i32* %z4.i30, align 4, !dbg !152
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !155
%x.i32 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !156
%15 = load i32, i32* %x.i32, align 4, !dbg !156
%x1.i33 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !157
%16 = load i32, i32* %x1.i33, align 4, !dbg !158
%add.i34 = add nsw i32 %16, %15, !dbg !158
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !158
%y.i35 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !159
%17 = load i32, i32* %y.i35, align 4, !dbg !159
%y2.i36 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !160
%18 = load i32, i32* %y2.i36, align 4, !dbg !161
%add3.i37 = add nsw i32 %18, %17, !dbg !161
store i32 %add3.i37, i32* %y2.i36, align 4, !dbg !161
%z.i38 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !162
%19 = load i32, i32* %z.i38, align 4, !dbg !162
%z4.i39 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !163
%20 = load i32, i32* %z4.i39, align 4, !dbg !164
%add5.i40 = add nsw i32 %20, %19, !dbg !164
store i32 %add5.i40, i32* %z4.i39, align 4, !dbg !164
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !173
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !174
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !175
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !178
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !187
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !188
%21 = load i32, i32* %x.i.i, align 4, !dbg !188
call void @llvm.dbg.value(metadata i32 %21, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !196
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %21, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !197
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !197
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !197
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !198
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !201
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !202
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !205
%22 = load i32, i32* %x3.i.i, align 4, !dbg !205
%cmp4.i.i = icmp slt i32 %22, %smallest.0.i.i, !dbg !206
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !207
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !191, metadata !35), !dbg !192
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !208
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !210
%23 = load i32, i32* %x7.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !189, metadata !35), !dbg !190
br label %if.end.i.i, !dbg !211
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %23, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !197
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !197
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !212
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !214
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !215, metadata !35), !dbg !216
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !217
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !217
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !218
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !218
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !219, metadata !35), !dbg !220
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !222, metadata !35), !dbg !223
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !224
%24 = load i32, i32* %x1.i.i, align 4, !dbg !224
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !225, metadata !35), !dbg !226
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !227
%25 = load i32, i32* %y2.i.i, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !228, metadata !35), !dbg !229
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !230
%26 = load i32, i32* %z3.i.i, align 4, !dbg !230
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !231, metadata !35), !dbg !232
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !233
%27 = load i32, i32* %x4.i.i, align 4, !dbg !233
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !234
store i32 %27, i32* %x5.i.i, align 4, !dbg !235
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !236
%28 = load i32, i32* %y6.i.i, align 4, !dbg !236
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !237
store i32 %28, i32* %y7.i.i, align 4, !dbg !238
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !239
%29 = load i32, i32* %z8.i.i, align 4, !dbg !239
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !240
store i32 %29, i32* %z9.i.i, align 4, !dbg !241
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !242
store i32 %24, i32* %x10.i.i, align 4, !dbg !243
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !244
store i32 %25, i32* %y11.i.i, align 4, !dbg !245
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !246
store i32 %26, i32* %z12.i.i, align 4, !dbg !247
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !248
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !250
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !165, metadata !35), !dbg !251
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !255
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !256
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !257
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !258
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !179, metadata !35), !dbg !259
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !183, metadata !35), !dbg !261
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !185, metadata !35), !dbg !262
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !263
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !264
%30 = load i32, i32* %x.i.i51, align 4, !dbg !264
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !189, metadata !35), !dbg !265
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !191, metadata !35), !dbg !266
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !268
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !269
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !269
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !269
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !270
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !271
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !272
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !273
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !273
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !274
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !275
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !191, metadata !35), !dbg !266
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !276
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !277
%32 = load i32, i32* %x7.i.i63, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !189, metadata !35), !dbg !265
br label %if.end.i.i68, !dbg !278
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !269
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !269
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !279
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !280
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !215, metadata !35), !dbg !281
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !282
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !282
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !283
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !283
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !219, metadata !35), !dbg !284
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !222, metadata !35), !dbg !286
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !287
%33 = load i32, i32* %x1.i.i73, align 4, !dbg !287
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !225, metadata !35), !dbg !288
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !289
%34 = load i32, i32* %y2.i.i74, align 4, !dbg !289
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !228, metadata !35), !dbg !290
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !291
%35 = load i32, i32* %z3.i.i75, align 4, !dbg !291
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !231, metadata !35), !dbg !292
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !293
%36 = load i32, i32* %x4.i.i76, align 4, !dbg !293
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !294
store i32 %36, i32* %x5.i.i77, align 4, !dbg !295
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !296
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !296
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !297
store i32 %37, i32* %y7.i.i79, align 4, !dbg !298
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !299
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !299
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !300
store i32 %38, i32* %z9.i.i81, align 4, !dbg !301
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !302
store i32 %33, i32* %x10.i.i82, align 4, !dbg !303
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !304
store i32 %34, i32* %y11.i.i83, align 4, !dbg !305
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !306
store i32 %35, i32* %z12.i.i84, align 4, !dbg !307
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !308
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !309
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 0, !dbg !310
%39 = load i32, i32* %x10, align 4, !dbg !310
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 1, !dbg !311
%40 = load i32, i32* %y, align 4, !dbg !311
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 2, !dbg !312
%41 = load i32, i32* %z, align 4, !dbg !312
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %39, i32 %40, i32 %41), !dbg !313
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 0, i32 0, !dbg !314
%42 = load i32, i32* %x13, align 4, !dbg !314
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 1, i32 0, !dbg !315
%43 = load i32, i32* %x15, align 4, !dbg !315
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 2, i32 0, !dbg !316
%44 = load i32, i32* %x17, align 4, !dbg !316
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %43, i32 %44), !dbg !317
ret i32 0, !dbg !318
}
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #0
; Function Attrs: nounwind
declare i64 @time(i64*) #0
; Function Attrs: nounwind
declare void @srand(i32) #0
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { nounwind readnone }
attributes #3 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.ident = !{!31}
!llvm.module.flags = !{!32, !33}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
!1 = !DIFile(filename: "test2.c", directory: "/home/carr27/test-clone-function/test")
!2 = !{}
!3 = !{!4, !14, !15, !16, !19, !22, !25}
!4 = distinct !DISubprogram(name: "add", scope: !1, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!5 = !DISubroutineType(types: !6)
!6 = !{null, !7, !7}
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64, align: 64)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "vector3", file: !1, line: 6, size: 96, align: 32, elements: !9)
!9 = !{!10, !12, !13}
!10 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 32)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !8, file: !1, line: 7, baseType: !11, size: 32, align: 32, offset: 64)
!14 = distinct !DISubprogram(name: "copy", scope: !1, file: !1, line: 18, type: !5, isLocal: false, isDefinition: true, scopeLine: 18, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!15 = distinct !DISubprogram(name: "swap", scope: !1, file: !1, line: 22, type: !5, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!16 = distinct !DISubprogram(name: "selection_sort", scope: !1, file: !1, line: 38, type: !17, isLocal: false, isDefinition: true, scopeLine: 38, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!17 = !DISubroutineType(types: !18)
!18 = !{null, !7, !11}
!19 = distinct !DISubprogram(name: "get_smallest", scope: !1, file: !1, line: 45, type: !20, isLocal: false, isDefinition: true, scopeLine: 45, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!20 = !DISubroutineType(types: !21)
!21 = !{!11, !7, !11, !11}
!22 = distinct !DISubprogram(name: "make_random_arr", scope: !1, file: !1, line: 57, type: !23, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!23 = !DISubroutineType(types: !24)
!24 = !{!7, !11}
!25 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 67, type: !26, isLocal: false, isDefinition: true, scopeLine: 67, flags: DIFlagPrototyped, isOptimized: false, variables: !2)
!26 = !DISubroutineType(types: !27)
!27 = !{!11, !11, !28}
!28 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !29, size: 64, align: 64)
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !30, size: 64, align: 64)
!30 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!31 = !{!"clang version 3.9.0 (git@github.com:llvm-mirror/clang.git 4880b6df49a5b87f8d8412bf929e95bf9feecc17) (git@github.com:llvm-mirror/llvm.git a60f524c803cf3c5b035a398e8f6906b293a7295)"}
!32 = !{i32 2, !"Dwarf Version", i32 4}
!33 = !{i32 2, !"Debug Info Version", i32 3}
!34 = !DILocalVariable(name: "argc", arg: 1, scope: !25, file: !1, line: 67, type: !11)
!35 = !DIExpression()
!36 = !DILocation(line: 67, column: 14, scope: !25)
!37 = !DILocalVariable(name: "argv", arg: 2, scope: !25, file: !1, line: 67, type: !28)
!38 = !DILocation(line: 67, column: 27, scope: !25)
!39 = !DILocation(line: 68, column: 3, scope: !25)
!40 = !DILocation(line: 69, column: 28, scope: !25)
!41 = !DILocation(line: 69, column: 3, scope: !25)
!42 = !DILocalVariable(name: "x", scope: !25, file: !1, line: 71, type: !11)
!43 = !DIExpression(DW_OP_deref)
!44 = !DILocation(line: 71, column: 7, scope: !25)
!45 = !DILocation(line: 72, column: 3, scope: !25)
!46 = !DILocation(line: 74, column: 9, scope: !25)
!47 = !DILocation(line: 74, column: 3, scope: !48)
!48 = !DILexicalBlockFile(scope: !25, file: !1, discriminator: 1)
!49 = !DILocalVariable(name: "N", arg: 1, scope: !22, file: !1, line: 57, type: !11)
!50 = !DILocation(line: 57, column: 37, scope: !22, inlinedAt: !51)
!51 = distinct !DILocation(line: 75, column: 25, scope: !25)
!52 = !DILocation(line: 58, column: 25, scope: !22, inlinedAt: !51)
!53 = !DILocalVariable(name: "arr", scope: !22, file: !1, line: 58, type: !7)
!54 = !DILocation(line: 58, column: 19, scope: !22, inlinedAt: !51)
!55 = !DILocalVariable(name: "i", scope: !56, file: !1, line: 59, type: !11)
!56 = distinct !DILexicalBlock(scope: !22, file: !1, line: 59, column: 3)
!57 = !DILocation(line: 59, column: 12, scope: !56, inlinedAt: !51)
!58 = !DILocation(line: 59, column: 8, scope: !56, inlinedAt: !51)
!59 = !DILocation(line: 75, column: 25, scope: !25)
!60 = !DILocation(line: 59, column: 21, scope: !61, inlinedAt: !51)
!61 = !DILexicalBlockFile(scope: !62, file: !1, discriminator: 1)
!62 = distinct !DILexicalBlock(scope: !56, file: !1, line: 59, column: 3)
!63 = !DILocation(line: 59, column: 3, scope: !61, inlinedAt: !51)
!64 = !DILocation(line: 60, column: 16, scope: !65, inlinedAt: !51)
!65 = distinct !DILexicalBlock(scope: !62, file: !1, line: 59, column: 31)
!66 = !DILocation(line: 60, column: 23, scope: !65, inlinedAt: !51)
!67 = !DILocation(line: 60, column: 5, scope: !65, inlinedAt: !51)
!68 = !DILocation(line: 60, column: 12, scope: !65, inlinedAt: !51)
!69 = !DILocation(line: 60, column: 14, scope: !65, inlinedAt: !51)
!70 = !DILocation(line: 61, column: 16, scope: !65, inlinedAt: !51)
!71 = !DILocation(line: 61, column: 23, scope: !65, inlinedAt: !51)
!72 = !DILocation(line: 61, column: 5, scope: !65, inlinedAt: !51)
!73 = !DILocation(line: 61, column: 12, scope: !65, inlinedAt: !51)
!74 = !DILocation(line: 61, column: 14, scope: !65, inlinedAt: !51)
!75 = !DILocation(line: 62, column: 16, scope: !65, inlinedAt: !51)
!76 = !DILocation(line: 62, column: 23, scope: !65, inlinedAt: !51)
!77 = !DILocation(line: 62, column: 5, scope: !65, inlinedAt: !51)
!78 = !DILocation(line: 62, column: 12, scope: !65, inlinedAt: !51)
!79 = !DILocation(line: 62, column: 14, scope: !65, inlinedAt: !51)
!80 = !DILocation(line: 59, column: 26, scope: !81, inlinedAt: !51)
!81 = !DILexicalBlockFile(scope: !62, file: !1, discriminator: 2)
!82 = !DILocation(line: 59, column: 3, scope: !81, inlinedAt: !51)
!83 = !DILocalVariable(name: "arr", scope: !25, file: !1, line: 75, type: !7)
!84 = !DILocation(line: 75, column: 19, scope: !25)
!85 = !DILocation(line: 57, column: 37, scope: !22, inlinedAt: !86)
!86 = distinct !DILocation(line: 76, column: 26, scope: !25)
!87 = !DILocation(line: 58, column: 25, scope: !22, inlinedAt: !86)
!88 = !DILocation(line: 58, column: 19, scope: !22, inlinedAt: !86)
!89 = !DILocation(line: 59, column: 12, scope: !56, inlinedAt: !86)
!90 = !DILocation(line: 59, column: 8, scope: !56, inlinedAt: !86)
!91 = !DILocation(line: 76, column: 26, scope: !25)
!92 = !DILocation(line: 59, column: 21, scope: !61, inlinedAt: !86)
!93 = !DILocation(line: 59, column: 3, scope: !61, inlinedAt: !86)
!94 = !DILocation(line: 60, column: 16, scope: !65, inlinedAt: !86)
!95 = !DILocation(line: 60, column: 23, scope: !65, inlinedAt: !86)
!96 = !DILocation(line: 60, column: 5, scope: !65, inlinedAt: !86)
!97 = !DILocation(line: 60, column: 12, scope: !65, inlinedAt: !86)
!98 = !DILocation(line: 60, column: 14, scope: !65, inlinedAt: !86)
!99 = !DILocation(line: 61, column: 16, scope: !65, inlinedAt: !86)
!100 = !DILocation(line: 61, column: 23, scope: !65, inlinedAt: !86)
!101 = !DILocation(line: 61, column: 5, scope: !65, inlinedAt: !86)
!102 = !DILocation(line: 61, column: 12, scope: !65, inlinedAt: !86)
!103 = !DILocation(line: 61, column: 14, scope: !65, inlinedAt: !86)
!104 = !DILocation(line: 62, column: 16, scope: !65, inlinedAt: !86)
!105 = !DILocation(line: 62, column: 23, scope: !65, inlinedAt: !86)
!106 = !DILocation(line: 62, column: 5, scope: !65, inlinedAt: !86)
!107 = !DILocation(line: 62, column: 12, scope: !65, inlinedAt: !86)
!108 = !DILocation(line: 62, column: 14, scope: !65, inlinedAt: !86)
!109 = !DILocation(line: 59, column: 26, scope: !81, inlinedAt: !86)
!110 = !DILocation(line: 59, column: 3, scope: !81, inlinedAt: !86)
!111 = !DILocalVariable(name: "arr2", scope: !25, file: !1, line: 76, type: !7)
!112 = !DILocation(line: 76, column: 19, scope: !25)
!113 = !DILocalVariable(name: "a", scope: !25, file: !1, line: 77, type: !7)
!114 = !DILocation(line: 77, column: 19, scope: !25)
!115 = !DILocation(line: 78, column: 24, scope: !25)
!116 = !DILocalVariable(name: "b", scope: !25, file: !1, line: 78, type: !7)
!117 = !DILocation(line: 78, column: 19, scope: !25)
!118 = !DILocation(line: 79, column: 24, scope: !25)
!119 = !DILocalVariable(name: "c", scope: !25, file: !1, line: 79, type: !7)
!120 = !DILocation(line: 79, column: 19, scope: !25)
!121 = !DILocation(line: 81, column: 12, scope: !122)
!122 = distinct !DILexicalBlock(scope: !25, file: !1, line: 81, column: 7)
!123 = !DILocation(line: 81, column: 7, scope: !25)
!124 = !DILocalVariable(name: "v", arg: 1, scope: !4, file: !1, line: 12, type: !7)
!125 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !126)
!126 = distinct !DILocation(line: 82, column: 5, scope: !127)
!127 = distinct !DILexicalBlock(scope: !122, file: !1, line: 81, column: 18)
!128 = !DILocalVariable(name: "w", arg: 2, scope: !4, file: !1, line: 12, type: !7)
!129 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !126)
!130 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !126)
!131 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !126)
!132 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !126)
!133 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !126)
!134 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !126)
!135 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !126)
!136 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !126)
!137 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !126)
!138 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !126)
!139 = !DILocation(line: 83, column: 3, scope: !127)
!140 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !141)
!141 = distinct !DILocation(line: 84, column: 5, scope: !142)
!142 = distinct !DILexicalBlock(scope: !122, file: !1, line: 83, column: 10)
!143 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !141)
!144 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !141)
!145 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !141)
!146 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !141)
!147 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !141)
!148 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !141)
!149 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !141)
!150 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !141)
!151 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !141)
!152 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !141)
!153 = !DILocation(line: 12, column: 26, scope: !4, inlinedAt: !154)
!154 = distinct !DILocation(line: 85, column: 5, scope: !142)
!155 = !DILocation(line: 12, column: 45, scope: !4, inlinedAt: !154)
!156 = !DILocation(line: 13, column: 14, scope: !4, inlinedAt: !154)
!157 = !DILocation(line: 13, column: 6, scope: !4, inlinedAt: !154)
!158 = !DILocation(line: 13, column: 8, scope: !4, inlinedAt: !154)
!159 = !DILocation(line: 14, column: 14, scope: !4, inlinedAt: !154)
!160 = !DILocation(line: 14, column: 6, scope: !4, inlinedAt: !154)
!161 = !DILocation(line: 14, column: 8, scope: !4, inlinedAt: !154)
!162 = !DILocation(line: 15, column: 14, scope: !4, inlinedAt: !154)
!163 = !DILocation(line: 15, column: 6, scope: !4, inlinedAt: !154)
!164 = !DILocation(line: 15, column: 8, scope: !4, inlinedAt: !154)
!165 = !DILocalVariable(name: "vs", arg: 1, scope: !16, file: !1, line: 38, type: !7)
!166 = !DILocation(line: 38, column: 37, scope: !16, inlinedAt: !167)
!167 = distinct !DILocation(line: 88, column: 3, scope: !25)
!168 = !DILocalVariable(name: "N", arg: 2, scope: !16, file: !1, line: 38, type: !11)
!169 = !DILocation(line: 38, column: 45, scope: !16, inlinedAt: !167)
!170 = !DILocalVariable(name: "i", scope: !171, file: !1, line: 39, type: !11)
!171 = distinct !DILexicalBlock(scope: !16, file: !1, line: 39, column: 3)
!172 = !DILocation(line: 39, column: 12, scope: !171, inlinedAt: !167)
!173 = !DILocation(line: 39, column: 8, scope: !171, inlinedAt: !167)
!174 = !DILocation(line: 88, column: 3, scope: !25)
!175 = !DILocation(line: 39, column: 21, scope: !176, inlinedAt: !167)
!176 = !DILexicalBlockFile(scope: !177, file: !1, discriminator: 1)
!177 = distinct !DILexicalBlock(scope: !171, file: !1, line: 39, column: 3)
!178 = !DILocation(line: 39, column: 3, scope: !176, inlinedAt: !167)
!179 = !DILocalVariable(name: "vs", arg: 1, scope: !19, file: !1, line: 45, type: !7)
!180 = !DILocation(line: 45, column: 34, scope: !19, inlinedAt: !181)
!181 = distinct !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !167)
!182 = distinct !DILexicalBlock(scope: !177, file: !1, line: 39, column: 31)
!183 = !DILocalVariable(name: "start", arg: 2, scope: !19, file: !1, line: 45, type: !11)
!184 = !DILocation(line: 45, column: 42, scope: !19, inlinedAt: !181)
!185 = !DILocalVariable(name: "N", arg: 3, scope: !19, file: !1, line: 45, type: !11)
!186 = !DILocation(line: 45, column: 53, scope: !19, inlinedAt: !181)
!187 = !DILocation(line: 46, column: 18, scope: !19, inlinedAt: !181)
!188 = !DILocation(line: 46, column: 28, scope: !19, inlinedAt: !181)
!189 = !DILocalVariable(name: "smallest", scope: !19, file: !1, line: 46, type: !11)
!190 = !DILocation(line: 46, column: 7, scope: !19, inlinedAt: !181)
!191 = !DILocalVariable(name: "idx", scope: !19, file: !1, line: 47, type: !11)
!192 = !DILocation(line: 47, column: 7, scope: !19, inlinedAt: !181)
!193 = !DILocalVariable(name: "i", scope: !194, file: !1, line: 48, type: !11)
!194 = distinct !DILexicalBlock(scope: !19, file: !1, line: 48, column: 3)
!195 = !DILocation(line: 48, column: 12, scope: !194, inlinedAt: !181)
!196 = !DILocation(line: 48, column: 8, scope: !194, inlinedAt: !181)
!197 = !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !167)
!198 = !DILocation(line: 48, column: 25, scope: !199, inlinedAt: !181)
!199 = !DILexicalBlockFile(scope: !200, file: !1, discriminator: 1)
!200 = distinct !DILexicalBlock(scope: !194, file: !1, line: 48, column: 3)
!201 = !DILocation(line: 48, column: 3, scope: !199, inlinedAt: !181)
!202 = !DILocation(line: 49, column: 9, scope: !203, inlinedAt: !181)
!203 = distinct !DILexicalBlock(scope: !204, file: !1, line: 49, column: 9)
!204 = distinct !DILexicalBlock(scope: !200, file: !1, line: 48, column: 35)
!205 = !DILocation(line: 49, column: 15, scope: !203, inlinedAt: !181)
!206 = !DILocation(line: 49, column: 17, scope: !203, inlinedAt: !181)
!207 = !DILocation(line: 49, column: 9, scope: !204, inlinedAt: !181)
!208 = !DILocation(line: 51, column: 18, scope: !209, inlinedAt: !181)
!209 = distinct !DILexicalBlock(scope: !203, file: !1, line: 49, column: 29)
!210 = !DILocation(line: 51, column: 24, scope: !209, inlinedAt: !181)
!211 = !DILocation(line: 52, column: 5, scope: !209, inlinedAt: !181)
!212 = !DILocation(line: 48, column: 30, scope: !213, inlinedAt: !181)
!213 = !DILexicalBlockFile(scope: !200, file: !1, discriminator: 2)
!214 = !DILocation(line: 48, column: 3, scope: !213, inlinedAt: !181)
!215 = !DILocalVariable(name: "idx", scope: !182, file: !1, line: 40, type: !11)
!216 = !DILocation(line: 40, column: 9, scope: !182, inlinedAt: !167)
!217 = !DILocation(line: 41, column: 11, scope: !182, inlinedAt: !167)
!218 = !DILocation(line: 41, column: 21, scope: !182, inlinedAt: !167)
!219 = !DILocalVariable(name: "a", arg: 1, scope: !15, file: !1, line: 22, type: !7)
!220 = !DILocation(line: 22, column: 27, scope: !15, inlinedAt: !221)
!221 = distinct !DILocation(line: 41, column: 5, scope: !182, inlinedAt: !167)
!222 = !DILocalVariable(name: "b", arg: 2, scope: !15, file: !1, line: 22, type: !7)
!223 = !DILocation(line: 22, column: 46, scope: !15, inlinedAt: !221)
!224 = !DILocation(line: 23, column: 14, scope: !15, inlinedAt: !221)
!225 = !DILocalVariable(name: "x", scope: !15, file: !1, line: 23, type: !11)
!226 = !DILocation(line: 23, column: 7, scope: !15, inlinedAt: !221)
!227 = !DILocation(line: 24, column: 14, scope: !15, inlinedAt: !221)
!228 = !DILocalVariable(name: "y", scope: !15, file: !1, line: 24, type: !11)
!229 = !DILocation(line: 24, column: 7, scope: !15, inlinedAt: !221)
!230 = !DILocation(line: 25, column: 14, scope: !15, inlinedAt: !221)
!231 = !DILocalVariable(name: "z", scope: !15, file: !1, line: 25, type: !11)
!232 = !DILocation(line: 25, column: 7, scope: !15, inlinedAt: !221)
!233 = !DILocation(line: 27, column: 13, scope: !15, inlinedAt: !221)
!234 = !DILocation(line: 27, column: 6, scope: !15, inlinedAt: !221)
!235 = !DILocation(line: 27, column: 8, scope: !15, inlinedAt: !221)
!236 = !DILocation(line: 28, column: 13, scope: !15, inlinedAt: !221)
!237 = !DILocation(line: 28, column: 6, scope: !15, inlinedAt: !221)
!238 = !DILocation(line: 28, column: 8, scope: !15, inlinedAt: !221)
!239 = !DILocation(line: 29, column: 13, scope: !15, inlinedAt: !221)
!240 = !DILocation(line: 29, column: 6, scope: !15, inlinedAt: !221)
!241 = !DILocation(line: 29, column: 8, scope: !15, inlinedAt: !221)
!242 = !DILocation(line: 31, column: 6, scope: !15, inlinedAt: !221)
!243 = !DILocation(line: 31, column: 8, scope: !15, inlinedAt: !221)
!244 = !DILocation(line: 32, column: 6, scope: !15, inlinedAt: !221)
!245 = !DILocation(line: 32, column: 8, scope: !15, inlinedAt: !221)
!246 = !DILocation(line: 33, column: 6, scope: !15, inlinedAt: !221)
!247 = !DILocation(line: 33, column: 8, scope: !15, inlinedAt: !221)
!248 = !DILocation(line: 39, column: 27, scope: !249, inlinedAt: !167)
!249 = !DILexicalBlockFile(scope: !177, file: !1, discriminator: 2)
!250 = !DILocation(line: 39, column: 3, scope: !249, inlinedAt: !167)
!251 = !DILocation(line: 38, column: 37, scope: !16, inlinedAt: !252)
!252 = distinct !DILocation(line: 89, column: 3, scope: !25)
!253 = !DILocation(line: 38, column: 45, scope: !16, inlinedAt: !252)
!254 = !DILocation(line: 39, column: 12, scope: !171, inlinedAt: !252)
!255 = !DILocation(line: 39, column: 8, scope: !171, inlinedAt: !252)
!256 = !DILocation(line: 89, column: 3, scope: !25)
!257 = !DILocation(line: 39, column: 21, scope: !176, inlinedAt: !252)
!258 = !DILocation(line: 39, column: 3, scope: !176, inlinedAt: !252)
!259 = !DILocation(line: 45, column: 34, scope: !19, inlinedAt: !260)
!260 = distinct !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !252)
!261 = !DILocation(line: 45, column: 42, scope: !19, inlinedAt: !260)
!262 = !DILocation(line: 45, column: 53, scope: !19, inlinedAt: !260)
!263 = !DILocation(line: 46, column: 18, scope: !19, inlinedAt: !260)
!264 = !DILocation(line: 46, column: 28, scope: !19, inlinedAt: !260)
!265 = !DILocation(line: 46, column: 7, scope: !19, inlinedAt: !260)
!266 = !DILocation(line: 47, column: 7, scope: !19, inlinedAt: !260)
!267 = !DILocation(line: 48, column: 12, scope: !194, inlinedAt: !260)
!268 = !DILocation(line: 48, column: 8, scope: !194, inlinedAt: !260)
!269 = !DILocation(line: 40, column: 15, scope: !182, inlinedAt: !252)
!270 = !DILocation(line: 48, column: 25, scope: !199, inlinedAt: !260)
!271 = !DILocation(line: 48, column: 3, scope: !199, inlinedAt: !260)
!272 = !DILocation(line: 49, column: 9, scope: !203, inlinedAt: !260)
!273 = !DILocation(line: 49, column: 15, scope: !203, inlinedAt: !260)
!274 = !DILocation(line: 49, column: 17, scope: !203, inlinedAt: !260)
!275 = !DILocation(line: 49, column: 9, scope: !204, inlinedAt: !260)
!276 = !DILocation(line: 51, column: 18, scope: !209, inlinedAt: !260)
!277 = !DILocation(line: 51, column: 24, scope: !209, inlinedAt: !260)
!278 = !DILocation(line: 52, column: 5, scope: !209, inlinedAt: !260)
!279 = !DILocation(line: 48, column: 30, scope: !213, inlinedAt: !260)
!280 = !DILocation(line: 48, column: 3, scope: !213, inlinedAt: !260)
!281 = !DILocation(line: 40, column: 9, scope: !182, inlinedAt: !252)
!282 = !DILocation(line: 41, column: 11, scope: !182, inlinedAt: !252)
!283 = !DILocation(line: 41, column: 21, scope: !182, inlinedAt: !252)
!284 = !DILocation(line: 22, column: 27, scope: !15, inlinedAt: !285)
!285 = distinct !DILocation(line: 41, column: 5, scope: !182, inlinedAt: !252)
!286 = !DILocation(line: 22, column: 46, scope: !15, inlinedAt: !285)
!287 = !DILocation(line: 23, column: 14, scope: !15, inlinedAt: !285)
!288 = !DILocation(line: 23, column: 7, scope: !15, inlinedAt: !285)
!289 = !DILocation(line: 24, column: 14, scope: !15, inlinedAt: !285)
!290 = !DILocation(line: 24, column: 7, scope: !15, inlinedAt: !285)
!291 = !DILocation(line: 25, column: 14, scope: !15, inlinedAt: !285)
!292 = !DILocation(line: 25, column: 7, scope: !15, inlinedAt: !285)
!293 = !DILocation(line: 27, column: 13, scope: !15, inlinedAt: !285)
!294 = !DILocation(line: 27, column: 6, scope: !15, inlinedAt: !285)
!295 = !DILocation(line: 27, column: 8, scope: !15, inlinedAt: !285)
!296 = !DILocation(line: 28, column: 13, scope: !15, inlinedAt: !285)
!297 = !DILocation(line: 28, column: 6, scope: !15, inlinedAt: !285)
!298 = !DILocation(line: 28, column: 8, scope: !15, inlinedAt: !285)
!299 = !DILocation(line: 29, column: 13, scope: !15, inlinedAt: !285)
!300 = !DILocation(line: 29, column: 6, scope: !15, inlinedAt: !285)
!301 = !DILocation(line: 29, column: 8, scope: !15, inlinedAt: !285)
!302 = !DILocation(line: 31, column: 6, scope: !15, inlinedAt: !285)
!303 = !DILocation(line: 31, column: 8, scope: !15, inlinedAt: !285)
!304 = !DILocation(line: 32, column: 6, scope: !15, inlinedAt: !285)
!305 = !DILocation(line: 32, column: 8, scope: !15, inlinedAt: !285)
!306 = !DILocation(line: 33, column: 6, scope: !15, inlinedAt: !285)
!307 = !DILocation(line: 33, column: 8, scope: !15, inlinedAt: !285)
!308 = !DILocation(line: 39, column: 27, scope: !249, inlinedAt: !252)
!309 = !DILocation(line: 39, column: 3, scope: !249, inlinedAt: !252)
!310 = !DILocation(line: 91, column: 45, scope: !25)
!311 = !DILocation(line: 91, column: 51, scope: !25)
!312 = !DILocation(line: 91, column: 57, scope: !25)
!313 = !DILocation(line: 91, column: 3, scope: !25)
!314 = !DILocation(line: 92, column: 50, scope: !25)
!315 = !DILocation(line: 92, column: 61, scope: !25)
!316 = !DILocation(line: 92, column: 72, scope: !25)
!317 = !DILocation(line: 92, column: 3, scope: !25)
!318 = !DILocation(line: 95, column: 3, scope: !25)
*** IR Dump After Promote 'by reference' arguments to scalars ***
Printing <null> Function
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #0
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind
declare i32 @rand() #0
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #0
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind
declare i64 @time(i64*) #0
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind
declare void @srand(i32) #0
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 1, !dbg !115
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !116, metadata !35), !dbg !117
%arrayidx8 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 2, !dbg !118
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !119, metadata !35), !dbg !120
%cmp = icmp eq i32 %argc, 1, !dbg !121
br i1 %cmp, label %if.then, label %if.else, !dbg !123
if.then: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !125
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !129
%x.i20 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !130
%3 = load i32, i32* %x.i20, align 4, !dbg !130
%x1.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !131
%4 = load i32, i32* %x1.i, align 4, !dbg !132
%add.i = add nsw i32 %4, %3, !dbg !132
store i32 %add.i, i32* %x1.i, align 4, !dbg !132
%y.i21 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !133
%5 = load i32, i32* %y.i21, align 4, !dbg !133
%y2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !134
%6 = load i32, i32* %y2.i, align 4, !dbg !135
%add3.i = add nsw i32 %6, %5, !dbg !135
store i32 %add3.i, i32* %y2.i, align 4, !dbg !135
%z.i22 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !136
%7 = load i32, i32* %z.i22, align 4, !dbg !136
%z4.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !137
%8 = load i32, i32* %z4.i, align 4, !dbg !138
%add5.i = add nsw i32 %8, %7, !dbg !138
store i32 %add5.i, i32* %z4.i, align 4, !dbg !138
br label %if.end, !dbg !139
if.else: ; preds = %make_random_arr.exit19
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !140
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !143
%x.i23 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !144
%9 = load i32, i32* %x.i23, align 4, !dbg !144
%x1.i24 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !145
%10 = load i32, i32* %x1.i24, align 4, !dbg !146
%add.i25 = add nsw i32 %10, %9, !dbg !146
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !146
%y.i26 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !147
%11 = load i32, i32* %y.i26, align 4, !dbg !147
%y2.i27 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !148
%12 = load i32, i32* %y2.i27, align 4, !dbg !149
%add3.i28 = add nsw i32 %12, %11, !dbg !149
store i32 %add3.i28, i32* %y2.i27, align 4, !dbg !149
%z.i29 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !150
%13 = load i32, i32* %z.i29, align 4, !dbg !150
%z4.i30 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !151
%14 = load i32, i32* %z4.i30, align 4, !dbg !152
%add5.i31 = add nsw i32 %14, %13, !dbg !152
store i32 %add5.i31, i32* %z4.i30, align 4, !dbg !152
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx8, i64 0, metadata !124, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx7, i64 0, metadata !128, metadata !35), !dbg !155
%x.i32 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 0, !dbg !156
%15 = load i32, i32* %x.i32, align 4, !dbg !156
%x1.i33 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 0, !dbg !157
%16 = load i32, i32* %x1.i33, align 4, !dbg !158
%add.i34 = add nsw i32 %16, %15, !dbg !158
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !158
%y.i35 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 1, !dbg !159
%17 = load i32, i32* %y.i35, align 4, !dbg !159
%y2.i36 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 1, !dbg !160
%18 = load i32, i32* %y2.i36, align 4, !dbg !161
%add3.i37 = add nsw i32 %18, %17, !dbg !161
store i32 %add3.i37, i32* %y2.i36, align 4, !dbg !161
%z.i38 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx7, i64 0, i32 2, !dbg !162
%19 = load i32, i32* %z.i38, align 4, !dbg !162
%z4.i39 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx8, i64 0, i32 2, !dbg !163
%20 = load i32, i32* %z4.i39, align 4, !dbg !164
%add5.i40 = add nsw i32 %20, %19, !dbg !164
store i32 %add5.i40, i32* %z4.i39, align 4, !dbg !164
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !173
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !174
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !175
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !178
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !187
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !188
%21 = load i32, i32* %x.i.i, align 4, !dbg !188
call void @llvm.dbg.value(metadata i32 %21, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !191, metadata !35), !dbg !192
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !196
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %21, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !197
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !197
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !197
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !198
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !201
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !202
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !205
%22 = load i32, i32* %x3.i.i, align 4, !dbg !205
%cmp4.i.i = icmp slt i32 %22, %smallest.0.i.i, !dbg !206
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !207
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !191, metadata !35), !dbg !192
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !208
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !210
%23 = load i32, i32* %x7.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !189, metadata !35), !dbg !190
br label %if.end.i.i, !dbg !211
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %23, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !197
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !197
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !212
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !193, metadata !35), !dbg !195
br label %for.cond.i.i, !dbg !214
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !215, metadata !35), !dbg !216
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !217
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !217
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !218
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !218
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !219, metadata !35), !dbg !220
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !222, metadata !35), !dbg !223
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !224
%24 = load i32, i32* %x1.i.i, align 4, !dbg !224
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !225, metadata !35), !dbg !226
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !227
%25 = load i32, i32* %y2.i.i, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !228, metadata !35), !dbg !229
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !230
%26 = load i32, i32* %z3.i.i, align 4, !dbg !230
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !231, metadata !35), !dbg !232
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !233
%27 = load i32, i32* %x4.i.i, align 4, !dbg !233
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !234
store i32 %27, i32* %x5.i.i, align 4, !dbg !235
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !236
%28 = load i32, i32* %y6.i.i, align 4, !dbg !236
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 1, !dbg !237
store i32 %28, i32* %y7.i.i, align 4, !dbg !238
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !239
%29 = load i32, i32* %z8.i.i, align 4, !dbg !239
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 2, !dbg !240
store i32 %29, i32* %z9.i.i, align 4, !dbg !241
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !242
store i32 %24, i32* %x10.i.i, align 4, !dbg !243
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 1, !dbg !244
store i32 %25, i32* %y11.i.i, align 4, !dbg !245
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 2, !dbg !246
store i32 %26, i32* %z12.i.i, align 4, !dbg !247
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !248
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !170, metadata !35), !dbg !172
br label %for.cond.i43, !dbg !250
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !165, metadata !35), !dbg !251
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !255
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !256
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !257
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !258
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !179, metadata !35), !dbg !259
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !183, metadata !35), !dbg !261
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !185, metadata !35), !dbg !262
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !263
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !264
%30 = load i32, i32* %x.i.i51, align 4, !dbg !264
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !189, metadata !35), !dbg !265
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !191, metadata !35), !dbg !266
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !268
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !269
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !269
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !269
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !270
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !271
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !272
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !273
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !273
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !274
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !275
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !191, metadata !35), !dbg !266
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !276
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !277
%32 = load i32, i32* %x7.i.i63, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !189, metadata !35), !dbg !265
br label %if.end.i.i68, !dbg !278
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !269
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !269
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !279
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !193, metadata !35), !dbg !267
br label %for.cond.i.i57, !dbg !280
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !215, metadata !35), !dbg !281
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !282
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !282
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !283
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !283
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !219, metadata !35), !dbg !284
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !222, metadata !35), !dbg !286
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !287
%33 = load i32, i32* %x1.i.i73, align 4, !dbg !287
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !225, metadata !35), !dbg !288
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !289
%34 = load i32, i32* %y2.i.i74, align 4, !dbg !289
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !228, metadata !35), !dbg !290
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !291
%35 = load i32, i32* %z3.i.i75, align 4, !dbg !291
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !231, metadata !35), !dbg !292
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !293
%36 = load i32, i32* %x4.i.i76, align 4, !dbg !293
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !294
store i32 %36, i32* %x5.i.i77, align 4, !dbg !295
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !296
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !296
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 1, !dbg !297
store i32 %37, i32* %y7.i.i79, align 4, !dbg !298
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !299
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !299
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 2, !dbg !300
store i32 %38, i32* %z9.i.i81, align 4, !dbg !301
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !302
store i32 %33, i32* %x10.i.i82, align 4, !dbg !303
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 1, !dbg !304
store i32 %34, i32* %y11.i.i83, align 4, !dbg !305
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 2, !dbg !306
store i32 %35, i32* %z12.i.i84, align 4, !dbg !307
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !308
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !170, metadata !35), !dbg !254
br label %for.cond.i49, !dbg !309
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 0, !dbg !310
%39 = load i32, i32* %x10, align 4, !dbg !310
%y = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 1, !dbg !311
%40 = load i32, i32* %y, align 4, !dbg !311
%z = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 0, i32 2, !dbg !312
%41 = load i32, i32* %z, align 4, !dbg !312
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %39, i32 %40, i32 %41), !dbg !313
%x13 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 0, i32 0, !dbg !314
%42 = load i32, i32* %x13, align 4, !dbg !314
%x15 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 1, i32 0, !dbg !315
%43 = load i32, i32* %x15, align 4, !dbg !315
%x17 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 2, i32 0, !dbg !316
%44 = load i32, i32* %x17, align 4, !dbg !316
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %43, i32 %44), !dbg !317
ret i32 0, !dbg !318
}
*** IR Dump After Combine redundant instructions ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %if.end, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %if.end
if.end: ; preds = %if.else, %if.then
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !153, metadata !35), !dbg !154
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !158, metadata !35), !dbg !160
br label %for.cond.i43, !dbg !161
for.cond.i43: ; preds = %get_smallest.exit.i, %if.end
%i.0.i41 = phi i32 [ 0, %if.end ], [ %inc.i46, %get_smallest.exit.i ], !dbg !162
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !163
br i1 %cmp.i42, label %for.body.i44, label %selection_sort.exit, !dbg !166
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !167, metadata !35), !dbg !168
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !171, metadata !35), !dbg !172
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !173, metadata !35), !dbg !174
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !175
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !176
%33 = load i32, i32* %x.i.i, align 4, !dbg !176
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !177, metadata !35), !dbg !178
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !179, metadata !35), !dbg !180
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !181, metadata !35), !dbg !183
br label %for.cond.i.i, !dbg !184
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !185
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !185
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !185
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !186
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !189
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !190
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !193
%34 = load i32, i32* %x3.i.i, align 4, !dbg !193
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !194
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !195
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !179, metadata !35), !dbg !180
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !196
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !198
%35 = load i32, i32* %x7.i.i, align 4, !dbg !198
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !177, metadata !35), !dbg !178
br label %if.end.i.i, !dbg !199
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !185
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !185
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !200
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !181, metadata !35), !dbg !183
br label %for.cond.i.i, !dbg !202
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !203, metadata !35), !dbg !204
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !205
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !205
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !206
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !206
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !207, metadata !35), !dbg !208
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !210, metadata !35), !dbg !211
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !212
%36 = load i32, i32* %x1.i.i, align 4, !dbg !212
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !213, metadata !35), !dbg !214
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !215
%37 = load i32, i32* %y2.i.i, align 4, !dbg !215
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !216, metadata !35), !dbg !217
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !218
%38 = load i32, i32* %z3.i.i, align 4, !dbg !218
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !219, metadata !35), !dbg !220
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !221
%39 = load i32, i32* %x4.i.i, align 4, !dbg !221
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !222
store i32 %39, i32* %x5.i.i, align 4, !dbg !223
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !224
%40 = load i32, i32* %y6.i.i, align 4, !dbg !224
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !225
store i32 %40, i32* %y7.i.i, align 4, !dbg !226
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !227
%41 = load i32, i32* %z8.i.i, align 4, !dbg !227
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !228
store i32 %41, i32* %z9.i.i, align 4, !dbg !229
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !230
store i32 %36, i32* %x10.i.i, align 4, !dbg !231
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !232
store i32 %37, i32* %y11.i.i, align 4, !dbg !233
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !234
store i32 %38, i32* %z12.i.i, align 4, !dbg !235
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !236
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !158, metadata !35), !dbg !160
br label %for.cond.i43, !dbg !238
selection_sort.exit: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !153, metadata !35), !dbg !239
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !156, metadata !35), !dbg !241
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !158, metadata !35), !dbg !242
br label %for.cond.i49, !dbg !243
for.cond.i49: ; preds = %get_smallest.exit.i85, %selection_sort.exit
%i.0.i47 = phi i32 [ 0, %selection_sort.exit ], [ %inc.i86, %get_smallest.exit.i85 ], !dbg !244
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !245
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !246
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !167, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !171, metadata !35), !dbg !249
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !173, metadata !35), !dbg !250
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !251
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !252
%42 = load i32, i32* %x.i.i51, align 4, !dbg !252
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !177, metadata !35), !dbg !253
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !179, metadata !35), !dbg !254
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !181, metadata !35), !dbg !255
br label %for.cond.i.i57, !dbg !256
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !257
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !257
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !257
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !258
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !259
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !260
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !261
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !261
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !262
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !263
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !179, metadata !35), !dbg !254
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !264
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !265
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !265
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !177, metadata !35), !dbg !253
br label %if.end.i.i68, !dbg !266
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !257
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !257
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !267
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !181, metadata !35), !dbg !255
br label %for.cond.i.i57, !dbg !268
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !203, metadata !35), !dbg !269
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !270
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !270
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !271
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !271
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !207, metadata !35), !dbg !272
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !210, metadata !35), !dbg !274
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !275
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !275
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !213, metadata !35), !dbg !276
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !277
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !277
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !216, metadata !35), !dbg !278
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !279
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !219, metadata !35), !dbg !280
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !281
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !282
store i32 %48, i32* %x5.i.i77, align 4, !dbg !283
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !284
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !284
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !285
store i32 %49, i32* %y7.i.i79, align 4, !dbg !286
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !287
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !287
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !288
store i32 %50, i32* %z9.i.i81, align 4, !dbg !289
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !290
store i32 %45, i32* %x10.i.i82, align 4, !dbg !291
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !292
store i32 %46, i32* %y11.i.i83, align 4, !dbg !293
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !294
store i32 %47, i32* %z12.i.i84, align 4, !dbg !295
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !296
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !158, metadata !35), !dbg !242
br label %for.cond.i49, !dbg !297
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !298
%51 = load i32, i32* %x10, align 4, !dbg !298
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !299
%52 = bitcast i8* %y to i32*, !dbg !299
%53 = load i32, i32* %52, align 4, !dbg !299
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !300
%54 = bitcast i8* %z to i32*, !dbg !300
%55 = load i32, i32* %54, align 4, !dbg !300
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !301
%x13 = bitcast i8* %call.i1 to i32*, !dbg !302
%56 = load i32, i32* %x13, align 4, !dbg !302
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !303
%57 = bitcast i8* %x15 to i32*, !dbg !303
%58 = load i32, i32* %57, align 4, !dbg !303
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !304
%59 = bitcast i8* %x17 to i32*, !dbg !304
%60 = load i32, i32* %59, align 4, !dbg !304
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !305
ret i32 0, !dbg !306
}
*** IR Dump After Jump Threading ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43
for.cond.i43: ; preds = %if.then, %if.else, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %if.else ], [ 0, %if.then ], !dbg !153
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !154
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49, !dbg !159
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !160, metadata !35), !dbg !161
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !166, metadata !35), !dbg !167
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !168
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !169
%33 = load i32, i32* %x.i.i, align 4, !dbg !169
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !170, metadata !35), !dbg !171
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !177
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !178
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !178
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !178
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !179
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !182
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !183
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !186
%34 = load i32, i32* %x3.i.i, align 4, !dbg !186
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !187
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !188
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !172, metadata !35), !dbg !173
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !189
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !191
%35 = load i32, i32* %x7.i.i, align 4, !dbg !191
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !170, metadata !35), !dbg !171
br label %if.end.i.i, !dbg !192
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !178
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !178
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !193
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !195
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !196, metadata !35), !dbg !197
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !198
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !198
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !199
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !199
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !200, metadata !35), !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !203, metadata !35), !dbg !204
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !205
%36 = load i32, i32* %x1.i.i, align 4, !dbg !205
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !206, metadata !35), !dbg !207
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !208
%37 = load i32, i32* %y2.i.i, align 4, !dbg !208
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !209, metadata !35), !dbg !210
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !211
%38 = load i32, i32* %z3.i.i, align 4, !dbg !211
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !212, metadata !35), !dbg !213
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !214
%39 = load i32, i32* %x4.i.i, align 4, !dbg !214
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !215
store i32 %39, i32* %x5.i.i, align 4, !dbg !216
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !217
%40 = load i32, i32* %y6.i.i, align 4, !dbg !217
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !218
store i32 %40, i32* %y7.i.i, align 4, !dbg !219
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !220
%41 = load i32, i32* %z8.i.i, align 4, !dbg !220
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !221
store i32 %41, i32* %z9.i.i, align 4, !dbg !222
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !223
store i32 %36, i32* %x10.i.i, align 4, !dbg !224
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !225
store i32 %37, i32* %y11.i.i, align 4, !dbg !226
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !227
store i32 %38, i32* %z12.i.i, align 4, !dbg !228
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !229
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !231, metadata !35), !dbg !232
br label %for.cond.i43, !dbg !233
for.cond.i49: ; preds = %for.cond.i43, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i43 ], !dbg !234
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !235
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !160, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !164, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !166, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !170, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !172, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !172, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !170, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !196, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !200, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !203, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !206, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !209, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !212, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !231, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After SROA ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43
for.cond.i43: ; preds = %if.then, %if.else, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %if.else ], [ 0, %if.then ], !dbg !153
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !154
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49, !dbg !159
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !160, metadata !35), !dbg !161
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !166, metadata !35), !dbg !167
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !168
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !169
%33 = load i32, i32* %x.i.i, align 4, !dbg !169
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !170, metadata !35), !dbg !171
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !177
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !178
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !178
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !178
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !179
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !182
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !183
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !186
%34 = load i32, i32* %x3.i.i, align 4, !dbg !186
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !187
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !188
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !172, metadata !35), !dbg !173
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !189
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !191
%35 = load i32, i32* %x7.i.i, align 4, !dbg !191
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !170, metadata !35), !dbg !171
br label %if.end.i.i, !dbg !192
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !178
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !178
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !193
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !195
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !196, metadata !35), !dbg !197
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !198
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !198
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !199
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !199
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !200, metadata !35), !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !203, metadata !35), !dbg !204
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !205
%36 = load i32, i32* %x1.i.i, align 4, !dbg !205
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !206, metadata !35), !dbg !207
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !208
%37 = load i32, i32* %y2.i.i, align 4, !dbg !208
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !209, metadata !35), !dbg !210
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !211
%38 = load i32, i32* %z3.i.i, align 4, !dbg !211
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !212, metadata !35), !dbg !213
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !214
%39 = load i32, i32* %x4.i.i, align 4, !dbg !214
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !215
store i32 %39, i32* %x5.i.i, align 4, !dbg !216
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !217
%40 = load i32, i32* %y6.i.i, align 4, !dbg !217
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !218
store i32 %40, i32* %y7.i.i, align 4, !dbg !219
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !220
%41 = load i32, i32* %z8.i.i, align 4, !dbg !220
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !221
store i32 %41, i32* %z9.i.i, align 4, !dbg !222
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !223
store i32 %36, i32* %x10.i.i, align 4, !dbg !224
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !225
store i32 %37, i32* %y11.i.i, align 4, !dbg !226
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !227
store i32 %38, i32* %z12.i.i, align 4, !dbg !228
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !229
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !231, metadata !35), !dbg !232
br label %for.cond.i43, !dbg !233
for.cond.i49: ; preds = %for.cond.i43, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i43 ], !dbg !234
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !235
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !160, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !164, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !166, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !170, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !172, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !172, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !170, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !196, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !200, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !203, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !206, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !209, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !212, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !231, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After Promote 'by reference' arguments to scalars ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
*** IR Dump After Promote 'by reference' arguments to scalars ***
Printing <null> Function
*** IR Dump After Deduce function attributes ***
Printing <null> Function
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #0
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i32 @rand() #0
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i32 @printf(i8* nocapture readonly, ...) #0
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare i64 @time(i64*) #0
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind
declare void @srand(i32) #0
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43
for.cond.i43: ; preds = %if.then, %if.else, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %if.else ], [ 0, %if.then ], !dbg !153
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !154
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49, !dbg !159
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !160, metadata !35), !dbg !161
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !166, metadata !35), !dbg !167
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !168
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !169
%33 = load i32, i32* %x.i.i, align 4, !dbg !169
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !170, metadata !35), !dbg !171
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !177
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !178
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !178
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !178
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !179
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !182
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !183
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !186
%34 = load i32, i32* %x3.i.i, align 4, !dbg !186
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !187
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !188
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !172, metadata !35), !dbg !173
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !189
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !191
%35 = load i32, i32* %x7.i.i, align 4, !dbg !191
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !170, metadata !35), !dbg !171
br label %if.end.i.i, !dbg !192
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !178
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !178
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !193
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !174, metadata !35), !dbg !176
br label %for.cond.i.i, !dbg !195
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !196, metadata !35), !dbg !197
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !198
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !198
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !199
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !199
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !200, metadata !35), !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !203, metadata !35), !dbg !204
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !205
%36 = load i32, i32* %x1.i.i, align 4, !dbg !205
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !206, metadata !35), !dbg !207
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !208
%37 = load i32, i32* %y2.i.i, align 4, !dbg !208
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !209, metadata !35), !dbg !210
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !211
%38 = load i32, i32* %z3.i.i, align 4, !dbg !211
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !212, metadata !35), !dbg !213
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !214
%39 = load i32, i32* %x4.i.i, align 4, !dbg !214
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !215
store i32 %39, i32* %x5.i.i, align 4, !dbg !216
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !217
%40 = load i32, i32* %y6.i.i, align 4, !dbg !217
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !218
store i32 %40, i32* %y7.i.i, align 4, !dbg !219
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !220
%41 = load i32, i32* %z8.i.i, align 4, !dbg !220
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !221
store i32 %41, i32* %z9.i.i, align 4, !dbg !222
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !223
store i32 %36, i32* %x10.i.i, align 4, !dbg !224
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !225
store i32 %37, i32* %y11.i.i, align 4, !dbg !226
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !227
store i32 %38, i32* %z12.i.i, align 4, !dbg !228
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !229
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !231, metadata !35), !dbg !232
br label %for.cond.i43, !dbg !233
for.cond.i49: ; preds = %for.cond.i43, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i43 ], !dbg !234
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !235
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !160, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !164, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !166, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !170, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !172, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !172, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !170, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !174, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !196, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !200, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !203, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !206, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !209, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !212, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !231, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After Deduce function attributes ***
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
*** IR Dump After Deduce function attributes ***
Printing <null> Function
*** IR Dump After Canonicalize natural loops ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43.preheader, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !153
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !158
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !153
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !159
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !160
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !162, metadata !35), !dbg !163
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !170
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !171
%33 = load i32, i32* %x.i.i, align 4, !dbg !171
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !175
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !179
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !180
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !180
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !180
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !181
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !184
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !185
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !188
%34 = load i32, i32* %x3.i.i, align 4, !dbg !188
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !189
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !190
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !174, metadata !35), !dbg !175
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !191
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !193
%35 = load i32, i32* %x7.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !172, metadata !35), !dbg !173
br label %if.end.i.i, !dbg !194
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !180
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !180
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !195
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !197
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !198, metadata !35), !dbg !199
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !200
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !200
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !201
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !202, metadata !35), !dbg !203
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !205, metadata !35), !dbg !206
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !207
%36 = load i32, i32* %x1.i.i, align 4, !dbg !207
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !208, metadata !35), !dbg !209
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !210
%37 = load i32, i32* %y2.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !211, metadata !35), !dbg !212
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !213
%38 = load i32, i32* %z3.i.i, align 4, !dbg !213
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !214, metadata !35), !dbg !215
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !216
%39 = load i32, i32* %x4.i.i, align 4, !dbg !216
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !217
store i32 %39, i32* %x5.i.i, align 4, !dbg !218
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !219
%40 = load i32, i32* %y6.i.i, align 4, !dbg !219
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !220
store i32 %40, i32* %y7.i.i, align 4, !dbg !221
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !222
%41 = load i32, i32* %z8.i.i, align 4, !dbg !222
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !223
store i32 %41, i32* %z9.i.i, align 4, !dbg !224
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !225
store i32 %36, i32* %x10.i.i, align 4, !dbg !226
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !227
store i32 %37, i32* %y11.i.i, align 4, !dbg !228
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !229
store i32 %38, i32* %z12.i.i, align 4, !dbg !230
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !231
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !233, metadata !35), !dbg !234
br label %for.cond.i43, !dbg !235
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !236
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !160
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !162, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !172, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !174, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !172, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !198, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !202, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !205, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !208, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !211, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !214, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !233, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After Loop-Closed SSA Form Pass ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43.preheader, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !153
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !158
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !153
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !159
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !160
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !162, metadata !35), !dbg !163
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !170
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !171
%33 = load i32, i32* %x.i.i, align 4, !dbg !171
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !175
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !179
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !180
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !180
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !180
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !181
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !184
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !185
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !188
%34 = load i32, i32* %x3.i.i, align 4, !dbg !188
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !189
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !190
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !174, metadata !35), !dbg !175
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !191
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !193
%35 = load i32, i32* %x7.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !172, metadata !35), !dbg !173
br label %if.end.i.i, !dbg !194
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !180
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !180
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !195
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !197
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !198, metadata !35), !dbg !199
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !200
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !200
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !201
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !202, metadata !35), !dbg !203
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !205, metadata !35), !dbg !206
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !207
%36 = load i32, i32* %x1.i.i, align 4, !dbg !207
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !208, metadata !35), !dbg !209
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !210
%37 = load i32, i32* %y2.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !211, metadata !35), !dbg !212
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !213
%38 = load i32, i32* %z3.i.i, align 4, !dbg !213
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !214, metadata !35), !dbg !215
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !216
%39 = load i32, i32* %x4.i.i, align 4, !dbg !216
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !217
store i32 %39, i32* %x5.i.i, align 4, !dbg !218
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !219
%40 = load i32, i32* %y6.i.i, align 4, !dbg !219
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !220
store i32 %40, i32* %y7.i.i, align 4, !dbg !221
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !222
%41 = load i32, i32* %z8.i.i, align 4, !dbg !222
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !223
store i32 %41, i32* %z9.i.i, align 4, !dbg !224
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !225
store i32 %36, i32* %x10.i.i, align 4, !dbg !226
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !227
store i32 %37, i32* %y11.i.i, align 4, !dbg !228
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !229
store i32 %38, i32* %z12.i.i, align 4, !dbg !230
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !231
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !233, metadata !35), !dbg !234
br label %for.cond.i43, !dbg !235
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !236
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !160
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !162, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !172, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !174, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !172, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !198, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !202, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !205, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !208, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !211, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !214, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !233, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !174, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !172, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !236
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !160
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !162, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !172, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !198, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !202, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !205, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !208, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !211, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !214, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !233, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !174, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !172, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !180
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !180
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !180
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !181
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !184
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !185
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !188
%34 = load i32, i32* %x3.i.i, align 4, !dbg !188
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !189
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !190
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !174, metadata !35), !dbg !175
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !191
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !193
%35 = load i32, i32* %x7.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !172, metadata !35), !dbg !173
br label %if.end.i.i, !dbg !194
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !180
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !180
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !195
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !197
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !158
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !153
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !159
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !162, metadata !35), !dbg !163
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !170
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !171
%33 = load i32, i32* %x.i.i, align 4, !dbg !171
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !175
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !179
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !180
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !180
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !180
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !181
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !184
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !198, metadata !35), !dbg !199
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !200
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !200
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !201
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !202, metadata !35), !dbg !203
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !205, metadata !35), !dbg !206
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !207
%36 = load i32, i32* %x1.i.i, align 4, !dbg !207
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !208, metadata !35), !dbg !209
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !210
%37 = load i32, i32* %y2.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !211, metadata !35), !dbg !212
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !213
%38 = load i32, i32* %z3.i.i, align 4, !dbg !213
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !214, metadata !35), !dbg !215
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !216
%39 = load i32, i32* %x4.i.i, align 4, !dbg !216
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !217
store i32 %39, i32* %x5.i.i, align 4, !dbg !218
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !219
%40 = load i32, i32* %y6.i.i, align 4, !dbg !219
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !220
store i32 %40, i32* %y7.i.i, align 4, !dbg !221
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !222
%41 = load i32, i32* %z8.i.i, align 4, !dbg !222
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !223
store i32 %41, i32* %z9.i.i, align 4, !dbg !224
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !225
store i32 %36, i32* %x10.i.i, align 4, !dbg !226
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !227
store i32 %37, i32* %y11.i.i, align 4, !dbg !228
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !229
store i32 %38, i32* %z12.i.i, align 4, !dbg !230
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !231
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !233, metadata !35), !dbg !234
br label %for.cond.i43, !dbg !235
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !185
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !188
%34 = load i32, i32* %x3.i.i, align 4, !dbg !188
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !189
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !190
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !174, metadata !35), !dbg !175
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !191
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !193
%35 = load i32, i32* %x7.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !172, metadata !35), !dbg !173
br label %if.end.i.i, !dbg !194
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !180
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !180
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !195
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !197
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
*** IR Dump After Loop Invariant Code Motion ***
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
*** IR Dump After MergedLoadStoreMotion ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%idxprom5.i = sext i32 %i.0.i to i64, !dbg !72
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i, i32 1, !dbg !73
store i32 %rem4.i, i32* %y.i, align 4, !dbg !74
%call7.i = call i32 @rand() #3, !dbg !75
%rem8.i = srem i32 %call7.i, 100, !dbg !76
%idxprom9.i = sext i32 %i.0.i to i64, !dbg !77
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom9.i, i32 2, !dbg !78
store i32 %rem8.i, i32* %z.i, align 4, !dbg !79
%inc.i = add nsw i32 %i.0.i, 1, !dbg !80
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !82
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !83, metadata !35), !dbg !84
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !85
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !87
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !87
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !88
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !90
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !91
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !92
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !93
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !94
%rem.i6 = srem i32 %call2.i5, 100, !dbg !95
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !96
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !97
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !98
%call3.i9 = call i32 @rand() #3, !dbg !99
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !100
%idxprom5.i11 = sext i32 %i.0.i2 to i64, !dbg !101
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i11, i32 1, !dbg !102
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !103
%call7.i13 = call i32 @rand() #3, !dbg !104
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !105
%idxprom9.i15 = sext i32 %i.0.i2 to i64, !dbg !106
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom9.i15, i32 2, !dbg !107
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !108
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !109
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !89
br label %for.cond.i4, !dbg !110
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !111, metadata !35), !dbg !112
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !113, metadata !35), !dbg !114
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !115
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !116
%cmp = icmp eq i32 %argc, 1, !dbg !117
br i1 %cmp, label %if.then, label %if.else, !dbg !119
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !120
%3 = load i32, i32* %x.i20, align 4, !dbg !120
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !123
%4 = load i32, i32* %x1.i, align 4, !dbg !124
%add.i = add nsw i32 %4, %3, !dbg !124
store i32 %add.i, i32* %x1.i, align 4, !dbg !124
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !125
%5 = bitcast i8* %y.i21 to i32*, !dbg !125
%6 = load i32, i32* %5, align 4, !dbg !125
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !126
%7 = bitcast i8* %y2.i to i32*, !dbg !126
%8 = load i32, i32* %7, align 4, !dbg !127
%add3.i = add nsw i32 %8, %6, !dbg !127
store i32 %add3.i, i32* %7, align 4, !dbg !127
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !128
%9 = bitcast i8* %z.i22 to i32*, !dbg !128
%10 = load i32, i32* %9, align 4, !dbg !128
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !129
%11 = bitcast i8* %z4.i to i32*, !dbg !129
%12 = load i32, i32* %11, align 4, !dbg !130
%add5.i = add nsw i32 %12, %10, !dbg !130
store i32 %add5.i, i32* %11, align 4, !dbg !130
br label %for.cond.i43.preheader, !dbg !131
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !132
%13 = load i32, i32* %x.i23, align 4, !dbg !132
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !135
%14 = load i32, i32* %x1.i24, align 4, !dbg !136
%add.i25 = add nsw i32 %14, %13, !dbg !136
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !136
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !137
%15 = bitcast i8* %y.i26 to i32*, !dbg !137
%16 = load i32, i32* %15, align 4, !dbg !137
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !138
%17 = bitcast i8* %y2.i27 to i32*, !dbg !138
%18 = load i32, i32* %17, align 4, !dbg !139
%add3.i28 = add nsw i32 %18, %16, !dbg !139
store i32 %add3.i28, i32* %17, align 4, !dbg !139
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !140
%19 = bitcast i8* %z.i29 to i32*, !dbg !140
%20 = load i32, i32* %19, align 4, !dbg !140
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !141
%21 = bitcast i8* %z4.i30 to i32*, !dbg !141
%22 = load i32, i32* %21, align 4, !dbg !142
%add5.i31 = add nsw i32 %22, %20, !dbg !142
store i32 %add5.i31, i32* %21, align 4, !dbg !142
%x.i32 = bitcast i8* %arrayidx7 to i32*, !dbg !143
%23 = load i32, i32* %x.i32, align 4, !dbg !143
%x1.i33 = bitcast i8* %arrayidx8 to i32*, !dbg !145
%24 = load i32, i32* %x1.i33, align 4, !dbg !146
%add.i34 = add nsw i32 %24, %23, !dbg !146
store i32 %add.i34, i32* %x1.i33, align 4, !dbg !146
%y.i35 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !147
%25 = bitcast i8* %y.i35 to i32*, !dbg !147
%26 = load i32, i32* %25, align 4, !dbg !147
%y2.i36 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !148
%27 = bitcast i8* %y2.i36 to i32*, !dbg !148
%28 = load i32, i32* %27, align 4, !dbg !149
%add3.i37 = add nsw i32 %28, %26, !dbg !149
store i32 %add3.i37, i32* %27, align 4, !dbg !149
%z.i38 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !150
%29 = bitcast i8* %z.i38 to i32*, !dbg !150
%30 = load i32, i32* %29, align 4, !dbg !150
%z4.i39 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !151
%31 = bitcast i8* %z4.i39 to i32*, !dbg !151
%32 = load i32, i32* %31, align 4, !dbg !152
%add5.i40 = add nsw i32 %32, %30, !dbg !152
store i32 %add5.i40, i32* %31, align 4, !dbg !152
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !153
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !158
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !153
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !159
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !160
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !162, metadata !35), !dbg !163
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !168, metadata !35), !dbg !169
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !170
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !171
%33 = load i32, i32* %x.i.i, align 4, !dbg !171
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !172, metadata !35), !dbg !173
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !174, metadata !35), !dbg !175
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !179
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %33, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !180
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !180
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !180
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !181
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !184
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !185
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !188
%34 = load i32, i32* %x3.i.i, align 4, !dbg !188
%cmp4.i.i = icmp slt i32 %34, %smallest.0.i.i, !dbg !189
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !190
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !174, metadata !35), !dbg !175
%idxprom5.i.i = sext i32 %i.0.i.i to i64, !dbg !191
%x7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom5.i.i, i32 0, !dbg !193
%35 = load i32, i32* %x7.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !172, metadata !35), !dbg !173
br label %if.end.i.i, !dbg !194
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %35, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !180
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !180
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !195
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !176, metadata !35), !dbg !178
br label %for.cond.i.i, !dbg !197
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !198, metadata !35), !dbg !199
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !200
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !200
%idxprom1.i = sext i32 %i.0.i41 to i64, !dbg !201
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, !dbg !201
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !202, metadata !35), !dbg !203
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !205, metadata !35), !dbg !206
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !207
%36 = load i32, i32* %x1.i.i, align 4, !dbg !207
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !208, metadata !35), !dbg !209
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !210
%37 = load i32, i32* %y2.i.i, align 4, !dbg !210
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !211, metadata !35), !dbg !212
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !213
%38 = load i32, i32* %z3.i.i, align 4, !dbg !213
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !214, metadata !35), !dbg !215
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !216
%39 = load i32, i32* %x4.i.i, align 4, !dbg !216
%x5.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !217
store i32 %39, i32* %x5.i.i, align 4, !dbg !218
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !219
%40 = load i32, i32* %y6.i.i, align 4, !dbg !219
%y7.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !220
store i32 %40, i32* %y7.i.i, align 4, !dbg !221
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !222
%41 = load i32, i32* %z8.i.i, align 4, !dbg !222
%z9.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !223
store i32 %41, i32* %z9.i.i, align 4, !dbg !224
%x10.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !225
store i32 %36, i32* %x10.i.i, align 4, !dbg !226
%y11.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 1, !dbg !227
store i32 %37, i32* %y11.i.i, align 4, !dbg !228
%z12.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i, i32 2, !dbg !229
store i32 %38, i32* %z12.i.i, align 4, !dbg !230
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !231
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !233, metadata !35), !dbg !234
br label %for.cond.i43, !dbg !235
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !236
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !160
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !237
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !162, metadata !35), !dbg !238
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !240
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !168, metadata !35), !dbg !241
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !242
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !243
%42 = load i32, i32* %x.i.i51, align 4, !dbg !243
call void @llvm.dbg.value(metadata i32 %42, i64 0, metadata !172, metadata !35), !dbg !244
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !174, metadata !35), !dbg !245
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !247
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %42, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !248
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !248
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !248
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !249
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !250
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !251
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !252
%43 = load i32, i32* %x3.i.i59, align 4, !dbg !252
%cmp4.i.i60 = icmp slt i32 %43, %smallest.0.i.i53, !dbg !253
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !254
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !174, metadata !35), !dbg !245
%idxprom5.i.i62 = sext i32 %i.0.i.i55 to i64, !dbg !255
%x7.i.i63 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom5.i.i62, i32 0, !dbg !256
%44 = load i32, i32* %x7.i.i63, align 4, !dbg !256
call void @llvm.dbg.value(metadata i32 %44, i64 0, metadata !172, metadata !35), !dbg !244
br label %if.end.i.i68, !dbg !257
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %44, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !248
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !248
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !258
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !176, metadata !35), !dbg !246
br label %for.cond.i.i57, !dbg !259
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !198, metadata !35), !dbg !260
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !261
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !261
%idxprom1.i71 = sext i32 %i.0.i47 to i64, !dbg !262
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, !dbg !262
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !202, metadata !35), !dbg !263
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !205, metadata !35), !dbg !265
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !266
%45 = load i32, i32* %x1.i.i73, align 4, !dbg !266
call void @llvm.dbg.value(metadata i32 %45, i64 0, metadata !208, metadata !35), !dbg !267
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !268
%46 = load i32, i32* %y2.i.i74, align 4, !dbg !268
call void @llvm.dbg.value(metadata i32 %46, i64 0, metadata !211, metadata !35), !dbg !269
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !270
%47 = load i32, i32* %z3.i.i75, align 4, !dbg !270
call void @llvm.dbg.value(metadata i32 %47, i64 0, metadata !214, metadata !35), !dbg !271
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !272
%48 = load i32, i32* %x4.i.i76, align 4, !dbg !272
%x5.i.i77 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !273
store i32 %48, i32* %x5.i.i77, align 4, !dbg !274
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !275
%49 = load i32, i32* %y6.i.i78, align 4, !dbg !275
%y7.i.i79 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !276
store i32 %49, i32* %y7.i.i79, align 4, !dbg !277
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !278
%50 = load i32, i32* %z8.i.i80, align 4, !dbg !278
%z9.i.i81 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !279
store i32 %50, i32* %z9.i.i81, align 4, !dbg !280
%x10.i.i82 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !281
store i32 %45, i32* %x10.i.i82, align 4, !dbg !282
%y11.i.i83 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 1, !dbg !283
store i32 %46, i32* %y11.i.i83, align 4, !dbg !284
%z12.i.i84 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i71, i32 2, !dbg !285
store i32 %47, i32* %z12.i.i84, align 4, !dbg !286
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !287
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !233, metadata !35), !dbg !288
br label %for.cond.i49, !dbg !289
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !290
%51 = load i32, i32* %x10, align 4, !dbg !290
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !291
%52 = bitcast i8* %y to i32*, !dbg !291
%53 = load i32, i32* %52, align 4, !dbg !291
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !292
%54 = bitcast i8* %z to i32*, !dbg !292
%55 = load i32, i32* %54, align 4, !dbg !292
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %51, i32 %53, i32 %55), !dbg !293
%x13 = bitcast i8* %call.i1 to i32*, !dbg !294
%56 = load i32, i32* %x13, align 4, !dbg !294
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !295
%57 = bitcast i8* %x15 to i32*, !dbg !295
%58 = load i32, i32* %57, align 4, !dbg !295
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !296
%59 = bitcast i8* %x17 to i32*, !dbg !296
%60 = load i32, i32* %59, align 4, !dbg !296
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %56, i32 %58, i32 %60), !dbg !297
ret i32 0, !dbg !298
}
*** IR Dump After Global Value Numbering ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 1, !dbg !72
store i32 %rem4.i, i32* %y.i, align 4, !dbg !73
%call7.i = call i32 @rand() #3, !dbg !74
%rem8.i = srem i32 %call7.i, 100, !dbg !75
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 2, !dbg !76
store i32 %rem8.i, i32* %z.i, align 4, !dbg !77
%inc.i = add nsw i32 %i.0.i, 1, !dbg !78
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !80
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !81, metadata !35), !dbg !82
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !83
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !85
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !85
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !86
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !88
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !89
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !90
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !91
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !92
%rem.i6 = srem i32 %call2.i5, 100, !dbg !93
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !94
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !95
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !96
%call3.i9 = call i32 @rand() #3, !dbg !97
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !98
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 1, !dbg !99
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !100
%call7.i13 = call i32 @rand() #3, !dbg !101
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !102
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 2, !dbg !103
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !104
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !105
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !106
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !107, metadata !35), !dbg !108
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !109, metadata !35), !dbg !110
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !111
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !112
%cmp = icmp eq i32 %argc, 1, !dbg !113
br i1 %cmp, label %if.then, label %if.else, !dbg !115
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !116
%3 = load i32, i32* %x.i20, align 4, !dbg !116
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !119
%4 = load i32, i32* %x1.i, align 4, !dbg !120
%add.i = add nsw i32 %4, %3, !dbg !120
store i32 %add.i, i32* %x1.i, align 4, !dbg !120
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !121
%5 = bitcast i8* %y.i21 to i32*, !dbg !121
%6 = load i32, i32* %5, align 4, !dbg !121
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !122
%7 = bitcast i8* %y2.i to i32*, !dbg !122
%8 = load i32, i32* %7, align 4, !dbg !123
%add3.i = add nsw i32 %8, %6, !dbg !123
store i32 %add3.i, i32* %7, align 4, !dbg !123
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !124
%9 = bitcast i8* %z.i22 to i32*, !dbg !124
%10 = load i32, i32* %9, align 4, !dbg !124
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !125
%11 = bitcast i8* %z4.i to i32*, !dbg !125
%12 = load i32, i32* %11, align 4, !dbg !126
%add5.i = add nsw i32 %12, %10, !dbg !126
store i32 %add5.i, i32* %11, align 4, !dbg !126
br label %for.cond.i43.preheader, !dbg !127
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !128
%13 = load i32, i32* %x.i23, align 4, !dbg !128
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !131
%14 = load i32, i32* %x1.i24, align 4, !dbg !132
%add.i25 = add nsw i32 %14, %13, !dbg !132
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !132
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !133
%15 = bitcast i8* %y.i26 to i32*, !dbg !133
%16 = load i32, i32* %15, align 4, !dbg !133
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !134
%17 = bitcast i8* %y2.i27 to i32*, !dbg !134
%18 = load i32, i32* %17, align 4, !dbg !135
%add3.i28 = add nsw i32 %18, %16, !dbg !135
store i32 %add3.i28, i32* %17, align 4, !dbg !135
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !136
%19 = bitcast i8* %z.i29 to i32*, !dbg !136
%20 = load i32, i32* %19, align 4, !dbg !136
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !137
%21 = bitcast i8* %z4.i30 to i32*, !dbg !137
%22 = load i32, i32* %21, align 4, !dbg !138
%add5.i31 = add nsw i32 %22, %20, !dbg !138
store i32 %add5.i31, i32* %21, align 4, !dbg !138
%add.i34 = add nsw i32 %add.i25, %13, !dbg !139
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !139
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !141
store i32 %add3.i37, i32* %17, align 4, !dbg !141
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !142
store i32 %add5.i40, i32* %21, align 4, !dbg !142
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !143
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !148
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !143
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !150
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !160
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !161
%23 = load i32, i32* %x.i.i, align 4, !dbg !162
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !171
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !172
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !173
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !176
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !177
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !180
%24 = load i32, i32* %x3.i.i, align 4, !dbg !181
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !183
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !184
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
br label %if.end.i.i, !dbg !185
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !186
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !188
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !189, metadata !35), !dbg !190
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !191
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !191
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !193, metadata !35), !dbg !194
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !195, metadata !35), !dbg !196
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !197
%25 = load i32, i32* %x1.i.i, align 4, !dbg !197
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !198, metadata !35), !dbg !199
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !200
%26 = load i32, i32* %y2.i.i, align 4, !dbg !200
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !201, metadata !35), !dbg !202
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !203
%27 = load i32, i32* %z3.i.i, align 4, !dbg !203
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !204, metadata !35), !dbg !205
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !162
store i32 %23, i32* %x1.i.i, align 4, !dbg !206
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 1, !dbg !207
%28 = load i32, i32* %y6.i.i, align 4, !dbg !207
store i32 %28, i32* %y2.i.i, align 4, !dbg !208
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 2, !dbg !209
%29 = load i32, i32* %z8.i.i, align 4, !dbg !209
store i32 %29, i32* %z3.i.i, align 4, !dbg !210
store i32 %25, i32* %x4.i.i, align 4, !dbg !211
store i32 %26, i32* %y6.i.i, align 4, !dbg !212
store i32 %27, i32* %z8.i.i, align 4, !dbg !213
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !214
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !216, metadata !35), !dbg !217
br label %for.cond.i43, !dbg !218
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !219
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !150
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !225
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !226
%30 = load i32, i32* %x.i.i51, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !232
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !233
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !234
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !235
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !236
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !237
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !238
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !239
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !240
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
br label %if.end.i.i68, !dbg !241
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !242
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !243
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !244
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !245
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !245
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, !dbg !246
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !248
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !249
%32 = load i32, i32* %x1.i.i73, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !198, metadata !35), !dbg !250
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !251
%33 = load i32, i32* %y2.i.i74, align 4, !dbg !251
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !201, metadata !35), !dbg !252
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !253
%34 = load i32, i32* %z3.i.i75, align 4, !dbg !253
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !204, metadata !35), !dbg !254
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !227
store i32 %30, i32* %x1.i.i73, align 4, !dbg !255
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 1, !dbg !256
%35 = load i32, i32* %y6.i.i78, align 4, !dbg !256
store i32 %35, i32* %y2.i.i74, align 4, !dbg !257
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 2, !dbg !258
%36 = load i32, i32* %z8.i.i80, align 4, !dbg !258
store i32 %36, i32* %z3.i.i75, align 4, !dbg !259
store i32 %32, i32* %x4.i.i76, align 4, !dbg !260
store i32 %33, i32* %y6.i.i78, align 4, !dbg !261
store i32 %34, i32* %z8.i.i80, align 4, !dbg !262
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !263
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !216, metadata !35), !dbg !264
br label %for.cond.i49, !dbg !265
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !266
%37 = load i32, i32* %x10, align 4, !dbg !266
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !267
%38 = bitcast i8* %y to i32*, !dbg !267
%39 = load i32, i32* %38, align 4, !dbg !267
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !268
%40 = bitcast i8* %z to i32*, !dbg !268
%41 = load i32, i32* %40, align 4, !dbg !268
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %37, i32 %39, i32 %41), !dbg !269
%x13 = bitcast i8* %call.i1 to i32*, !dbg !270
%42 = load i32, i32* %x13, align 4, !dbg !270
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !271
%43 = bitcast i8* %x15 to i32*, !dbg !271
%44 = load i32, i32* %43, align 4, !dbg !271
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !272
%45 = bitcast i8* %x17 to i32*, !dbg !272
%46 = load i32, i32* %45, align 4, !dbg !272
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %44, i32 %46), !dbg !273
ret i32 0, !dbg !274
}
*** IR Dump After MemCpy Optimization ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 1, !dbg !72
store i32 %rem4.i, i32* %y.i, align 4, !dbg !73
%call7.i = call i32 @rand() #3, !dbg !74
%rem8.i = srem i32 %call7.i, 100, !dbg !75
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 2, !dbg !76
store i32 %rem8.i, i32* %z.i, align 4, !dbg !77
%inc.i = add nsw i32 %i.0.i, 1, !dbg !78
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !80
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !81, metadata !35), !dbg !82
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !83
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !85
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !85
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !86
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !88
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !89
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !90
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !91
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !92
%rem.i6 = srem i32 %call2.i5, 100, !dbg !93
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !94
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !95
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !96
%call3.i9 = call i32 @rand() #3, !dbg !97
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !98
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 1, !dbg !99
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !100
%call7.i13 = call i32 @rand() #3, !dbg !101
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !102
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 2, !dbg !103
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !104
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !105
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !106
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !107, metadata !35), !dbg !108
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !109, metadata !35), !dbg !110
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !111
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !112
%cmp = icmp eq i32 %argc, 1, !dbg !113
br i1 %cmp, label %if.then, label %if.else, !dbg !115
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !116
%3 = load i32, i32* %x.i20, align 4, !dbg !116
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !119
%4 = load i32, i32* %x1.i, align 4, !dbg !120
%add.i = add nsw i32 %4, %3, !dbg !120
store i32 %add.i, i32* %x1.i, align 4, !dbg !120
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !121
%5 = bitcast i8* %y.i21 to i32*, !dbg !121
%6 = load i32, i32* %5, align 4, !dbg !121
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !122
%7 = bitcast i8* %y2.i to i32*, !dbg !122
%8 = load i32, i32* %7, align 4, !dbg !123
%add3.i = add nsw i32 %8, %6, !dbg !123
store i32 %add3.i, i32* %7, align 4, !dbg !123
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !124
%9 = bitcast i8* %z.i22 to i32*, !dbg !124
%10 = load i32, i32* %9, align 4, !dbg !124
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !125
%11 = bitcast i8* %z4.i to i32*, !dbg !125
%12 = load i32, i32* %11, align 4, !dbg !126
%add5.i = add nsw i32 %12, %10, !dbg !126
store i32 %add5.i, i32* %11, align 4, !dbg !126
br label %for.cond.i43.preheader, !dbg !127
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !128
%13 = load i32, i32* %x.i23, align 4, !dbg !128
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !131
%14 = load i32, i32* %x1.i24, align 4, !dbg !132
%add.i25 = add nsw i32 %14, %13, !dbg !132
store i32 %add.i25, i32* %x1.i24, align 4, !dbg !132
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !133
%15 = bitcast i8* %y.i26 to i32*, !dbg !133
%16 = load i32, i32* %15, align 4, !dbg !133
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !134
%17 = bitcast i8* %y2.i27 to i32*, !dbg !134
%18 = load i32, i32* %17, align 4, !dbg !135
%add3.i28 = add nsw i32 %18, %16, !dbg !135
store i32 %add3.i28, i32* %17, align 4, !dbg !135
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !136
%19 = bitcast i8* %z.i29 to i32*, !dbg !136
%20 = load i32, i32* %19, align 4, !dbg !136
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !137
%21 = bitcast i8* %z4.i30 to i32*, !dbg !137
%22 = load i32, i32* %21, align 4, !dbg !138
%add5.i31 = add nsw i32 %22, %20, !dbg !138
store i32 %add5.i31, i32* %21, align 4, !dbg !138
%add.i34 = add nsw i32 %add.i25, %13, !dbg !139
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !139
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !141
store i32 %add3.i37, i32* %17, align 4, !dbg !141
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !142
store i32 %add5.i40, i32* %21, align 4, !dbg !142
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !143
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !148
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !143
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !150
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !160
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !161
%23 = load i32, i32* %x.i.i, align 4, !dbg !162
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !171
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !172
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !173
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !176
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !177
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !180
%24 = load i32, i32* %x3.i.i, align 4, !dbg !181
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !183
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !184
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
br label %if.end.i.i, !dbg !185
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !186
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !188
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !189, metadata !35), !dbg !190
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !191
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !191
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !193, metadata !35), !dbg !194
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !195, metadata !35), !dbg !196
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !197
%25 = load i32, i32* %x1.i.i, align 4, !dbg !197
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !198, metadata !35), !dbg !199
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !200
%26 = load i32, i32* %y2.i.i, align 4, !dbg !200
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !201, metadata !35), !dbg !202
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !203
%27 = load i32, i32* %z3.i.i, align 4, !dbg !203
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !204, metadata !35), !dbg !205
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !162
store i32 %23, i32* %x1.i.i, align 4, !dbg !206
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 1, !dbg !207
%28 = load i32, i32* %y6.i.i, align 4, !dbg !207
store i32 %28, i32* %y2.i.i, align 4, !dbg !208
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 2, !dbg !209
%29 = load i32, i32* %z8.i.i, align 4, !dbg !209
store i32 %29, i32* %z3.i.i, align 4, !dbg !210
store i32 %25, i32* %x4.i.i, align 4, !dbg !211
store i32 %26, i32* %y6.i.i, align 4, !dbg !212
store i32 %27, i32* %z8.i.i, align 4, !dbg !213
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !214
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !216, metadata !35), !dbg !217
br label %for.cond.i43, !dbg !218
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !219
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !150
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !225
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !226
%30 = load i32, i32* %x.i.i51, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !232
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !233
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !234
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !235
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !236
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !237
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !238
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !239
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !240
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
br label %if.end.i.i68, !dbg !241
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !242
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !243
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !244
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !245
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !245
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, !dbg !246
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !248
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !249
%32 = load i32, i32* %x1.i.i73, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !198, metadata !35), !dbg !250
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !251
%33 = load i32, i32* %y2.i.i74, align 4, !dbg !251
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !201, metadata !35), !dbg !252
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !253
%34 = load i32, i32* %z3.i.i75, align 4, !dbg !253
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !204, metadata !35), !dbg !254
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !227
store i32 %30, i32* %x1.i.i73, align 4, !dbg !255
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 1, !dbg !256
%35 = load i32, i32* %y6.i.i78, align 4, !dbg !256
store i32 %35, i32* %y2.i.i74, align 4, !dbg !257
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 2, !dbg !258
%36 = load i32, i32* %z8.i.i80, align 4, !dbg !258
store i32 %36, i32* %z3.i.i75, align 4, !dbg !259
store i32 %32, i32* %x4.i.i76, align 4, !dbg !260
store i32 %33, i32* %y6.i.i78, align 4, !dbg !261
store i32 %34, i32* %z8.i.i80, align 4, !dbg !262
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !263
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !216, metadata !35), !dbg !264
br label %for.cond.i49, !dbg !265
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !266
%37 = load i32, i32* %x10, align 4, !dbg !266
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !267
%38 = bitcast i8* %y to i32*, !dbg !267
%39 = load i32, i32* %38, align 4, !dbg !267
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !268
%40 = bitcast i8* %z to i32*, !dbg !268
%41 = load i32, i32* %40, align 4, !dbg !268
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %37, i32 %39, i32 %41), !dbg !269
%x13 = bitcast i8* %call.i1 to i32*, !dbg !270
%42 = load i32, i32* %x13, align 4, !dbg !270
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !271
%43 = bitcast i8* %x15 to i32*, !dbg !271
%44 = load i32, i32* %43, align 4, !dbg !271
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !272
%45 = bitcast i8* %x17 to i32*, !dbg !272
%46 = load i32, i32* %45, align 4, !dbg !272
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %44, i32 %46), !dbg !273
ret i32 0, !dbg !274
}
*** IR Dump After Dead Store Elimination ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 1, !dbg !72
store i32 %rem4.i, i32* %y.i, align 4, !dbg !73
%call7.i = call i32 @rand() #3, !dbg !74
%rem8.i = srem i32 %call7.i, 100, !dbg !75
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 2, !dbg !76
store i32 %rem8.i, i32* %z.i, align 4, !dbg !77
%inc.i = add nsw i32 %i.0.i, 1, !dbg !78
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !80
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !81, metadata !35), !dbg !82
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !83
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !85
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !85
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !86
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !88
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !89
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !90
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !91
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !92
%rem.i6 = srem i32 %call2.i5, 100, !dbg !93
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !94
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !95
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !96
%call3.i9 = call i32 @rand() #3, !dbg !97
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !98
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 1, !dbg !99
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !100
%call7.i13 = call i32 @rand() #3, !dbg !101
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !102
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 2, !dbg !103
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !104
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !105
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !106
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !107, metadata !35), !dbg !108
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !109, metadata !35), !dbg !110
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !111
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !112
%cmp = icmp eq i32 %argc, 1, !dbg !113
br i1 %cmp, label %if.then, label %if.else, !dbg !115
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !116
%3 = load i32, i32* %x.i20, align 4, !dbg !116
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !119
%4 = load i32, i32* %x1.i, align 4, !dbg !120
%add.i = add nsw i32 %4, %3, !dbg !120
store i32 %add.i, i32* %x1.i, align 4, !dbg !120
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !121
%5 = bitcast i8* %y.i21 to i32*, !dbg !121
%6 = load i32, i32* %5, align 4, !dbg !121
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !122
%7 = bitcast i8* %y2.i to i32*, !dbg !122
%8 = load i32, i32* %7, align 4, !dbg !123
%add3.i = add nsw i32 %8, %6, !dbg !123
store i32 %add3.i, i32* %7, align 4, !dbg !123
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !124
%9 = bitcast i8* %z.i22 to i32*, !dbg !124
%10 = load i32, i32* %9, align 4, !dbg !124
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !125
%11 = bitcast i8* %z4.i to i32*, !dbg !125
%12 = load i32, i32* %11, align 4, !dbg !126
%add5.i = add nsw i32 %12, %10, !dbg !126
store i32 %add5.i, i32* %11, align 4, !dbg !126
br label %for.cond.i43.preheader, !dbg !127
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !128
%13 = load i32, i32* %x.i23, align 4, !dbg !128
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !131
%14 = load i32, i32* %x1.i24, align 4, !dbg !132
%add.i25 = add nsw i32 %14, %13, !dbg !132
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !133
%15 = bitcast i8* %y.i26 to i32*, !dbg !133
%16 = load i32, i32* %15, align 4, !dbg !133
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !134
%17 = bitcast i8* %y2.i27 to i32*, !dbg !134
%18 = load i32, i32* %17, align 4, !dbg !135
%add3.i28 = add nsw i32 %18, %16, !dbg !135
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !136
%19 = bitcast i8* %z.i29 to i32*, !dbg !136
%20 = load i32, i32* %19, align 4, !dbg !136
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !137
%21 = bitcast i8* %z4.i30 to i32*, !dbg !137
%22 = load i32, i32* %21, align 4, !dbg !138
%add5.i31 = add nsw i32 %22, %20, !dbg !138
%add.i34 = add nsw i32 %add.i25, %13, !dbg !139
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !139
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !141
store i32 %add3.i37, i32* %17, align 4, !dbg !141
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !142
store i32 %add5.i40, i32* %21, align 4, !dbg !142
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !143
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !148
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !143
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !150
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !160
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !161
%23 = load i32, i32* %x.i.i, align 4, !dbg !162
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !171
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !172
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !173
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !176
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !177
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !180
%24 = load i32, i32* %x3.i.i, align 4, !dbg !181
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !183
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !184
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
br label %if.end.i.i, !dbg !185
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !186
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !188
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !189, metadata !35), !dbg !190
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !191
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !191
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !193, metadata !35), !dbg !194
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !195, metadata !35), !dbg !196
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !197
%25 = load i32, i32* %x1.i.i, align 4, !dbg !197
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !198, metadata !35), !dbg !199
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !200
%26 = load i32, i32* %y2.i.i, align 4, !dbg !200
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !201, metadata !35), !dbg !202
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !203
%27 = load i32, i32* %z3.i.i, align 4, !dbg !203
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !204, metadata !35), !dbg !205
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !162
store i32 %23, i32* %x1.i.i, align 4, !dbg !206
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 1, !dbg !207
%28 = load i32, i32* %y6.i.i, align 4, !dbg !207
store i32 %28, i32* %y2.i.i, align 4, !dbg !208
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 2, !dbg !209
%29 = load i32, i32* %z8.i.i, align 4, !dbg !209
store i32 %29, i32* %z3.i.i, align 4, !dbg !210
store i32 %25, i32* %x4.i.i, align 4, !dbg !211
store i32 %26, i32* %y6.i.i, align 4, !dbg !212
store i32 %27, i32* %z8.i.i, align 4, !dbg !213
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !214
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !216, metadata !35), !dbg !217
br label %for.cond.i43, !dbg !218
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !219
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !150
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !225
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !226
%30 = load i32, i32* %x.i.i51, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !232
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !233
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !234
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !235
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !236
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !237
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !238
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !239
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !240
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
br label %if.end.i.i68, !dbg !241
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !242
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !243
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !244
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !245
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !245
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, !dbg !246
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !248
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !249
%32 = load i32, i32* %x1.i.i73, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !198, metadata !35), !dbg !250
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !251
%33 = load i32, i32* %y2.i.i74, align 4, !dbg !251
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !201, metadata !35), !dbg !252
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !253
%34 = load i32, i32* %z3.i.i75, align 4, !dbg !253
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !204, metadata !35), !dbg !254
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !227
store i32 %30, i32* %x1.i.i73, align 4, !dbg !255
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 1, !dbg !256
%35 = load i32, i32* %y6.i.i78, align 4, !dbg !256
store i32 %35, i32* %y2.i.i74, align 4, !dbg !257
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 2, !dbg !258
%36 = load i32, i32* %z8.i.i80, align 4, !dbg !258
store i32 %36, i32* %z3.i.i75, align 4, !dbg !259
store i32 %32, i32* %x4.i.i76, align 4, !dbg !260
store i32 %33, i32* %y6.i.i78, align 4, !dbg !261
store i32 %34, i32* %z8.i.i80, align 4, !dbg !262
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !263
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !216, metadata !35), !dbg !264
br label %for.cond.i49, !dbg !265
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !266
%37 = load i32, i32* %x10, align 4, !dbg !266
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !267
%38 = bitcast i8* %y to i32*, !dbg !267
%39 = load i32, i32* %38, align 4, !dbg !267
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !268
%40 = bitcast i8* %z to i32*, !dbg !268
%41 = load i32, i32* %40, align 4, !dbg !268
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %37, i32 %39, i32 %41), !dbg !269
%x13 = bitcast i8* %call.i1 to i32*, !dbg !270
%42 = load i32, i32* %x13, align 4, !dbg !270
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !271
%43 = bitcast i8* %x15 to i32*, !dbg !271
%44 = load i32, i32* %43, align 4, !dbg !271
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !272
%45 = bitcast i8* %x17 to i32*, !dbg !272
%46 = load i32, i32* %45, align 4, !dbg !272
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %44, i32 %46), !dbg !273
ret i32 0, !dbg !274
}
*** IR Dump After Canonicalize natural loops ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 1, !dbg !72
store i32 %rem4.i, i32* %y.i, align 4, !dbg !73
%call7.i = call i32 @rand() #3, !dbg !74
%rem8.i = srem i32 %call7.i, 100, !dbg !75
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 2, !dbg !76
store i32 %rem8.i, i32* %z.i, align 4, !dbg !77
%inc.i = add nsw i32 %i.0.i, 1, !dbg !78
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !80
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !81, metadata !35), !dbg !82
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !83
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !85
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !85
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !86
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !88
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !89
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !90
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !91
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !92
%rem.i6 = srem i32 %call2.i5, 100, !dbg !93
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !94
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !95
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !96
%call3.i9 = call i32 @rand() #3, !dbg !97
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !98
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 1, !dbg !99
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !100
%call7.i13 = call i32 @rand() #3, !dbg !101
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !102
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 2, !dbg !103
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !104
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !105
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !106
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !107, metadata !35), !dbg !108
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !109, metadata !35), !dbg !110
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !111
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !112
%cmp = icmp eq i32 %argc, 1, !dbg !113
br i1 %cmp, label %if.then, label %if.else, !dbg !115
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !116
%3 = load i32, i32* %x.i20, align 4, !dbg !116
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !119
%4 = load i32, i32* %x1.i, align 4, !dbg !120
%add.i = add nsw i32 %4, %3, !dbg !120
store i32 %add.i, i32* %x1.i, align 4, !dbg !120
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !121
%5 = bitcast i8* %y.i21 to i32*, !dbg !121
%6 = load i32, i32* %5, align 4, !dbg !121
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !122
%7 = bitcast i8* %y2.i to i32*, !dbg !122
%8 = load i32, i32* %7, align 4, !dbg !123
%add3.i = add nsw i32 %8, %6, !dbg !123
store i32 %add3.i, i32* %7, align 4, !dbg !123
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !124
%9 = bitcast i8* %z.i22 to i32*, !dbg !124
%10 = load i32, i32* %9, align 4, !dbg !124
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !125
%11 = bitcast i8* %z4.i to i32*, !dbg !125
%12 = load i32, i32* %11, align 4, !dbg !126
%add5.i = add nsw i32 %12, %10, !dbg !126
store i32 %add5.i, i32* %11, align 4, !dbg !126
br label %for.cond.i43.preheader, !dbg !127
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !128
%13 = load i32, i32* %x.i23, align 4, !dbg !128
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !131
%14 = load i32, i32* %x1.i24, align 4, !dbg !132
%add.i25 = add nsw i32 %14, %13, !dbg !132
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !133
%15 = bitcast i8* %y.i26 to i32*, !dbg !133
%16 = load i32, i32* %15, align 4, !dbg !133
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !134
%17 = bitcast i8* %y2.i27 to i32*, !dbg !134
%18 = load i32, i32* %17, align 4, !dbg !135
%add3.i28 = add nsw i32 %18, %16, !dbg !135
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !136
%19 = bitcast i8* %z.i29 to i32*, !dbg !136
%20 = load i32, i32* %19, align 4, !dbg !136
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !137
%21 = bitcast i8* %z4.i30 to i32*, !dbg !137
%22 = load i32, i32* %21, align 4, !dbg !138
%add5.i31 = add nsw i32 %22, %20, !dbg !138
%add.i34 = add nsw i32 %add.i25, %13, !dbg !139
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !139
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !141
store i32 %add3.i37, i32* %17, align 4, !dbg !141
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !142
store i32 %add5.i40, i32* %21, align 4, !dbg !142
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !143
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !148
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !143
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !150
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !160
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !161
%23 = load i32, i32* %x.i.i, align 4, !dbg !162
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !171
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !172
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !173
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !176
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !177
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !180
%24 = load i32, i32* %x3.i.i, align 4, !dbg !181
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !183
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !184
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
br label %if.end.i.i, !dbg !185
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !186
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !188
get_smallest.exit.i: ; preds = %for.cond.i.i
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !189, metadata !35), !dbg !190
%idxprom.i45 = sext i32 %idx.0.i.i to i64, !dbg !191
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !191
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !193, metadata !35), !dbg !194
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !195, metadata !35), !dbg !196
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !197
%25 = load i32, i32* %x1.i.i, align 4, !dbg !197
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !198, metadata !35), !dbg !199
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !200
%26 = load i32, i32* %y2.i.i, align 4, !dbg !200
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !201, metadata !35), !dbg !202
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !203
%27 = load i32, i32* %z3.i.i, align 4, !dbg !203
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !204, metadata !35), !dbg !205
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !162
store i32 %23, i32* %x1.i.i, align 4, !dbg !206
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 1, !dbg !207
%28 = load i32, i32* %y6.i.i, align 4, !dbg !207
store i32 %28, i32* %y2.i.i, align 4, !dbg !208
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 2, !dbg !209
%29 = load i32, i32* %z8.i.i, align 4, !dbg !209
store i32 %29, i32* %z3.i.i, align 4, !dbg !210
store i32 %25, i32* %x4.i.i, align 4, !dbg !211
store i32 %26, i32* %y6.i.i, align 4, !dbg !212
store i32 %27, i32* %z8.i.i, align 4, !dbg !213
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !214
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !216, metadata !35), !dbg !217
br label %for.cond.i43, !dbg !218
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !219
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !150
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !225
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !226
%30 = load i32, i32* %x.i.i51, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !232
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !233
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !234
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !235
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !236
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !237
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !238
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !239
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !240
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
br label %if.end.i.i68, !dbg !241
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !242
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !243
get_smallest.exit.i85: ; preds = %for.cond.i.i57
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !244
%idxprom.i69 = sext i32 %idx.0.i.i54 to i64, !dbg !245
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !245
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, !dbg !246
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !248
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !249
%32 = load i32, i32* %x1.i.i73, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !198, metadata !35), !dbg !250
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !251
%33 = load i32, i32* %y2.i.i74, align 4, !dbg !251
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !201, metadata !35), !dbg !252
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !253
%34 = load i32, i32* %z3.i.i75, align 4, !dbg !253
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !204, metadata !35), !dbg !254
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !227
store i32 %30, i32* %x1.i.i73, align 4, !dbg !255
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 1, !dbg !256
%35 = load i32, i32* %y6.i.i78, align 4, !dbg !256
store i32 %35, i32* %y2.i.i74, align 4, !dbg !257
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 2, !dbg !258
%36 = load i32, i32* %z8.i.i80, align 4, !dbg !258
store i32 %36, i32* %z3.i.i75, align 4, !dbg !259
store i32 %32, i32* %x4.i.i76, align 4, !dbg !260
store i32 %33, i32* %y6.i.i78, align 4, !dbg !261
store i32 %34, i32* %z8.i.i80, align 4, !dbg !262
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !263
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !216, metadata !35), !dbg !264
br label %for.cond.i49, !dbg !265
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !266
%37 = load i32, i32* %x10, align 4, !dbg !266
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !267
%38 = bitcast i8* %y to i32*, !dbg !267
%39 = load i32, i32* %38, align 4, !dbg !267
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !268
%40 = bitcast i8* %z to i32*, !dbg !268
%41 = load i32, i32* %40, align 4, !dbg !268
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %37, i32 %39, i32 %41), !dbg !269
%x13 = bitcast i8* %call.i1 to i32*, !dbg !270
%42 = load i32, i32* %x13, align 4, !dbg !270
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !271
%43 = bitcast i8* %x15 to i32*, !dbg !271
%44 = load i32, i32* %43, align 4, !dbg !271
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !272
%45 = bitcast i8* %x17 to i32*, !dbg !272
%46 = load i32, i32* %45, align 4, !dbg !272
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %44, i32 %46), !dbg !273
ret i32 0, !dbg !274
}
*** IR Dump After Loop-Closed SSA Form Pass ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%i.0.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ], !dbg !59
%cmp.i = icmp slt i32 %i.0.i, 3, !dbg !60
br i1 %cmp.i, label %for.body.i, label %make_random_arr.exit, !dbg !63
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !64
%rem.i = srem i32 %call2.i, 100, !dbg !66
%idxprom.i = sext i32 %i.0.i to i64, !dbg !67
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 0, !dbg !68
store i32 %rem.i, i32* %x.i, align 4, !dbg !69
%call3.i = call i32 @rand() #3, !dbg !70
%rem4.i = srem i32 %call3.i, 100, !dbg !71
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 1, !dbg !72
store i32 %rem4.i, i32* %y.i, align 4, !dbg !73
%call7.i = call i32 @rand() #3, !dbg !74
%rem8.i = srem i32 %call7.i, 100, !dbg !75
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i, i32 2, !dbg !76
store i32 %rem8.i, i32* %z.i, align 4, !dbg !77
%inc.i = add nsw i32 %i.0.i, 1, !dbg !78
call void @llvm.dbg.value(metadata i32 %inc.i, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !80
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !81, metadata !35), !dbg !82
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !83
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !85
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !85
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !86
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !88
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%i.0.i2 = phi i32 [ 0, %make_random_arr.exit ], [ %inc.i18, %for.body.i17 ], !dbg !89
%cmp.i3 = icmp slt i32 %i.0.i2, 10, !dbg !90
br i1 %cmp.i3, label %for.body.i17, label %make_random_arr.exit19, !dbg !91
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !92
%rem.i6 = srem i32 %call2.i5, 100, !dbg !93
%idxprom.i7 = sext i32 %i.0.i2 to i64, !dbg !94
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 0, !dbg !95
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !96
%call3.i9 = call i32 @rand() #3, !dbg !97
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !98
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 1, !dbg !99
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !100
%call7.i13 = call i32 @rand() #3, !dbg !101
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !102
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i7, i32 2, !dbg !103
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !104
%inc.i18 = add nsw i32 %i.0.i2, 1, !dbg !105
call void @llvm.dbg.value(metadata i32 %inc.i18, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !106
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !107, metadata !35), !dbg !108
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !109, metadata !35), !dbg !110
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !111
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !112
%cmp = icmp eq i32 %argc, 1, !dbg !113
br i1 %cmp, label %if.then, label %if.else, !dbg !115
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !116
%3 = load i32, i32* %x.i20, align 4, !dbg !116
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !119
%4 = load i32, i32* %x1.i, align 4, !dbg !120
%add.i = add nsw i32 %4, %3, !dbg !120
store i32 %add.i, i32* %x1.i, align 4, !dbg !120
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !121
%5 = bitcast i8* %y.i21 to i32*, !dbg !121
%6 = load i32, i32* %5, align 4, !dbg !121
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !122
%7 = bitcast i8* %y2.i to i32*, !dbg !122
%8 = load i32, i32* %7, align 4, !dbg !123
%add3.i = add nsw i32 %8, %6, !dbg !123
store i32 %add3.i, i32* %7, align 4, !dbg !123
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !124
%9 = bitcast i8* %z.i22 to i32*, !dbg !124
%10 = load i32, i32* %9, align 4, !dbg !124
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !125
%11 = bitcast i8* %z4.i to i32*, !dbg !125
%12 = load i32, i32* %11, align 4, !dbg !126
%add5.i = add nsw i32 %12, %10, !dbg !126
store i32 %add5.i, i32* %11, align 4, !dbg !126
br label %for.cond.i43.preheader, !dbg !127
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !128
%13 = load i32, i32* %x.i23, align 4, !dbg !128
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !131
%14 = load i32, i32* %x1.i24, align 4, !dbg !132
%add.i25 = add nsw i32 %14, %13, !dbg !132
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !133
%15 = bitcast i8* %y.i26 to i32*, !dbg !133
%16 = load i32, i32* %15, align 4, !dbg !133
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !134
%17 = bitcast i8* %y2.i27 to i32*, !dbg !134
%18 = load i32, i32* %17, align 4, !dbg !135
%add3.i28 = add nsw i32 %18, %16, !dbg !135
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !136
%19 = bitcast i8* %z.i29 to i32*, !dbg !136
%20 = load i32, i32* %19, align 4, !dbg !136
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !137
%21 = bitcast i8* %z4.i30 to i32*, !dbg !137
%22 = load i32, i32* %21, align 4, !dbg !138
%add5.i31 = add nsw i32 %22, %20, !dbg !138
%add.i34 = add nsw i32 %add.i25, %13, !dbg !139
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !139
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !141
store i32 %add3.i37, i32* %17, align 4, !dbg !141
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !142
store i32 %add5.i40, i32* %21, align 4, !dbg !142
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !143
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%i.0.i41 = phi i32 [ %inc.i46, %get_smallest.exit.i ], [ 0, %for.cond.i43.preheader ], !dbg !148
%cmp.i42 = icmp slt i32 %i.0.i41, 3, !dbg !143
br i1 %cmp.i42, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !150
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%idxprom.i.i = sext i32 %i.0.i41 to i64, !dbg !160
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 0, !dbg !161
%23 = load i32, i32* %x.i.i, align 4, !dbg !162
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !164, metadata !35), !dbg !165
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %i.0.i41, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !171
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%i.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %inc.i.i, %if.end.i.i ], !dbg !172
%cmp.i.i = icmp slt i32 %i.0.i.i, 3, !dbg !173
br i1 %cmp.i.i, label %for.body.i.i, label %get_smallest.exit.i, !dbg !176
for.body.i.i: ; preds = %for.cond.i.i
%idxprom1.i.i = sext i32 %i.0.i.i to i64, !dbg !177
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom1.i.i, i32 0, !dbg !180
%24 = load i32, i32* %x3.i.i, align 4, !dbg !181
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !183
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !184
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 %i.0.i.i, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
br label %if.end.i.i, !dbg !185
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %i.0.i.i, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%inc.i.i = add nsw i32 %i.0.i.i, 1, !dbg !186
call void @llvm.dbg.value(metadata i32 %inc.i.i, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !188
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !189, metadata !35), !dbg !190
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !191
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !191
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, !dbg !192
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !193, metadata !35), !dbg !194
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !195, metadata !35), !dbg !196
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !197
%25 = load i32, i32* %x1.i.i, align 4, !dbg !197
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !198, metadata !35), !dbg !199
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !200
%26 = load i32, i32* %y2.i.i, align 4, !dbg !200
call void @llvm.dbg.value(metadata i32 %26, i64 0, metadata !201, metadata !35), !dbg !202
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !203
%27 = load i32, i32* %z3.i.i, align 4, !dbg !203
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !204, metadata !35), !dbg !205
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !162
store i32 %23, i32* %x1.i.i, align 4, !dbg !206
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 1, !dbg !207
%28 = load i32, i32* %y6.i.i, align 4, !dbg !207
store i32 %28, i32* %y2.i.i, align 4, !dbg !208
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i.i, i32 2, !dbg !209
%29 = load i32, i32* %z8.i.i, align 4, !dbg !209
store i32 %29, i32* %z3.i.i, align 4, !dbg !210
store i32 %25, i32* %x4.i.i, align 4, !dbg !211
store i32 %26, i32* %y6.i.i, align 4, !dbg !212
store i32 %27, i32* %z8.i.i, align 4, !dbg !213
%inc.i46 = add nsw i32 %i.0.i41, 1, !dbg !214
call void @llvm.dbg.value(metadata i32 %inc.i46, i64 0, metadata !216, metadata !35), !dbg !217
br label %for.cond.i43, !dbg !218
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%i.0.i47 = phi i32 [ %inc.i86, %get_smallest.exit.i85 ], [ 0, %for.cond.i49.preheader ], !dbg !219
%cmp.i48 = icmp slt i32 %i.0.i47, 10, !dbg !150
br i1 %cmp.i48, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%idxprom.i.i50 = sext i32 %i.0.i47 to i64, !dbg !225
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 0, !dbg !226
%30 = load i32, i32* %x.i.i51, align 4, !dbg !227
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %i.0.i47, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !232
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%i.0.i.i55 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %inc.i.i67, %if.end.i.i68 ], !dbg !233
%cmp.i.i56 = icmp slt i32 %i.0.i.i55, 10, !dbg !234
br i1 %cmp.i.i56, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !235
for.body.i.i61: ; preds = %for.cond.i.i57
%idxprom1.i.i58 = sext i32 %i.0.i.i55 to i64, !dbg !236
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom1.i.i58, i32 0, !dbg !237
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !238
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !239
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !240
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 %i.0.i.i55, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
br label %if.end.i.i68, !dbg !241
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %i.0.i.i55, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%inc.i.i67 = add nsw i32 %i.0.i.i55, 1, !dbg !242
call void @llvm.dbg.value(metadata i32 %inc.i.i67, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !243
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !244
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !245
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !245
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, !dbg !246
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !247
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !248
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !249
%32 = load i32, i32* %x1.i.i73, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !198, metadata !35), !dbg !250
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !251
%33 = load i32, i32* %y2.i.i74, align 4, !dbg !251
call void @llvm.dbg.value(metadata i32 %33, i64 0, metadata !201, metadata !35), !dbg !252
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !253
%34 = load i32, i32* %z3.i.i75, align 4, !dbg !253
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !204, metadata !35), !dbg !254
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !227
store i32 %30, i32* %x1.i.i73, align 4, !dbg !255
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 1, !dbg !256
%35 = load i32, i32* %y6.i.i78, align 4, !dbg !256
store i32 %35, i32* %y2.i.i74, align 4, !dbg !257
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i.i50, i32 2, !dbg !258
%36 = load i32, i32* %z8.i.i80, align 4, !dbg !258
store i32 %36, i32* %z3.i.i75, align 4, !dbg !259
store i32 %32, i32* %x4.i.i76, align 4, !dbg !260
store i32 %33, i32* %y6.i.i78, align 4, !dbg !261
store i32 %34, i32* %z8.i.i80, align 4, !dbg !262
%inc.i86 = add nsw i32 %i.0.i47, 1, !dbg !263
call void @llvm.dbg.value(metadata i32 %inc.i86, i64 0, metadata !216, metadata !35), !dbg !264
br label %for.cond.i49, !dbg !265
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !266
%37 = load i32, i32* %x10, align 4, !dbg !266
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !267
%38 = bitcast i8* %y to i32*, !dbg !267
%39 = load i32, i32* %38, align 4, !dbg !267
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !268
%40 = bitcast i8* %z to i32*, !dbg !268
%41 = load i32, i32* %40, align 4, !dbg !268
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %37, i32 %39, i32 %41), !dbg !269
%x13 = bitcast i8* %call.i1 to i32*, !dbg !270
%42 = load i32, i32* %x13, align 4, !dbg !270
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !271
%43 = bitcast i8* %x15 to i32*, !dbg !271
%44 = load i32, i32* %43, align 4, !dbg !271
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !272
%45 = bitcast i8* %x17 to i32*, !dbg !272
%46 = load i32, i32* %45, align 4, !dbg !272
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %42, i32 %44, i32 %46), !dbg !273
ret i32 0, !dbg !274
}
*** IR Dump After Induction Variable Simplification ***
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv, %for.body.i52 ], !dbg !233
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !234
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !234
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !234
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !235
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !236
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !237
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !238
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
%32 = trunc i64 %indvars.iv88 to i32, !dbg !239
br label %if.end.i.i68, !dbg !239
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %32, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !240
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !240
*** IR Dump After Delete dead loops ***
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv, %for.body.i52 ], !dbg !233
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !234
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !234
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !234
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !235
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !236
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !237
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !238
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
%32 = trunc i64 %indvars.iv88 to i32, !dbg !239
br label %if.end.i.i68, !dbg !239
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %32, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !240
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !240
*** IR Dump After Unroll loops ***
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv, %for.body.i52 ], !dbg !233
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !233
%idx.0.i.i54 = phi i32 [ %i.0.i47, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !233
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !234
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !234
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !234
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !235
%31 = load i32, i32* %x3.i.i59, align 4, !dbg !236
%cmp4.i.i60 = icmp slt i32 %31, %smallest.0.i.i53, !dbg !237
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !238
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !230
call void @llvm.dbg.value(metadata i32 %31, i64 0, metadata !164, metadata !35), !dbg !229
%32 = trunc i64 %indvars.iv88 to i32, !dbg !239
br label %if.end.i.i68, !dbg !239
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %31, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !233
%idx.1.i.i66 = phi i32 [ %32, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !233
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !240
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !231
br label %for.cond.i.i57, !dbg !240
*** IR Dump After Induction Variable Simplification ***
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%indvars.iv90 = phi i64 [ 0, %for.cond.i49.preheader ], [ %indvars.iv.next91, %get_smallest.exit.i85 ], !dbg !219
%exitcond92 = icmp ne i64 %indvars.iv90, 10, !dbg !220
br i1 %exitcond92, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 0, !dbg !225
%30 = load i32, i32* %x.i.i51, align 4, !dbg !226
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !228
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !168, metadata !35), !dbg !230
%31 = trunc i64 %indvars.iv90 to i32, !dbg !231
br label %for.cond.i.i57, !dbg !231
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv90, %for.body.i52 ], !dbg !232
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !232
%idx.0.i.i54 = phi i32 [ %31, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !232
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !233
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !233
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !233
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !240
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !241
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !241
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, !dbg !242
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !243
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !244
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !245
%34 = load i32, i32* %x1.i.i73, align 4, !dbg !245
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !198, metadata !35), !dbg !246
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !247
%35 = load i32, i32* %y2.i.i74, align 4, !dbg !247
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !201, metadata !35), !dbg !248
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !249
%36 = load i32, i32* %z3.i.i75, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !204, metadata !35), !dbg !250
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !226
store i32 %30, i32* %x1.i.i73, align 4, !dbg !251
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 1, !dbg !252
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !252
store i32 %37, i32* %y2.i.i74, align 4, !dbg !253
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 2, !dbg !254
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !254
store i32 %38, i32* %z3.i.i75, align 4, !dbg !255
store i32 %34, i32* %x4.i.i76, align 4, !dbg !256
store i32 %35, i32* %y6.i.i78, align 4, !dbg !257
store i32 %36, i32* %z8.i.i80, align 4, !dbg !258
%indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1, !dbg !259
call void @llvm.dbg.value(metadata !2, i64 0, metadata !216, metadata !35), !dbg !260
br label %for.cond.i49, !dbg !259
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !234
%32 = load i32, i32* %x3.i.i59, align 4, !dbg !235
%cmp4.i.i60 = icmp slt i32 %32, %smallest.0.i.i53, !dbg !236
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !237
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !164, metadata !35), !dbg !228
%33 = trunc i64 %indvars.iv88 to i32, !dbg !238
br label %if.end.i.i68, !dbg !238
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !232
%idx.1.i.i66 = phi i32 [ %33, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !232
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !239
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !230
br label %for.cond.i.i57, !dbg !239
*** IR Dump After Delete dead loops ***
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%indvars.iv90 = phi i64 [ 0, %for.cond.i49.preheader ], [ %indvars.iv.next91, %get_smallest.exit.i85 ], !dbg !219
%exitcond92 = icmp ne i64 %indvars.iv90, 10, !dbg !220
br i1 %exitcond92, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 0, !dbg !225
%30 = load i32, i32* %x.i.i51, align 4, !dbg !226
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !228
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !168, metadata !35), !dbg !230
%31 = trunc i64 %indvars.iv90 to i32, !dbg !231
br label %for.cond.i.i57, !dbg !231
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv90, %for.body.i52 ], !dbg !232
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !232
%idx.0.i.i54 = phi i32 [ %31, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !232
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !233
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !233
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !233
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !240
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !241
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !241
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, !dbg !242
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !243
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !244
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !245
%34 = load i32, i32* %x1.i.i73, align 4, !dbg !245
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !198, metadata !35), !dbg !246
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !247
%35 = load i32, i32* %y2.i.i74, align 4, !dbg !247
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !201, metadata !35), !dbg !248
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !249
%36 = load i32, i32* %z3.i.i75, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !204, metadata !35), !dbg !250
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !226
store i32 %30, i32* %x1.i.i73, align 4, !dbg !251
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 1, !dbg !252
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !252
store i32 %37, i32* %y2.i.i74, align 4, !dbg !253
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 2, !dbg !254
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !254
store i32 %38, i32* %z3.i.i75, align 4, !dbg !255
store i32 %34, i32* %x4.i.i76, align 4, !dbg !256
store i32 %35, i32* %y6.i.i78, align 4, !dbg !257
store i32 %36, i32* %z8.i.i80, align 4, !dbg !258
%indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1, !dbg !259
call void @llvm.dbg.value(metadata !2, i64 0, metadata !216, metadata !35), !dbg !260
br label %for.cond.i49, !dbg !259
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !234
%32 = load i32, i32* %x3.i.i59, align 4, !dbg !235
%cmp4.i.i60 = icmp slt i32 %32, %smallest.0.i.i53, !dbg !236
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !237
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !164, metadata !35), !dbg !228
%33 = trunc i64 %indvars.iv88 to i32, !dbg !238
br label %if.end.i.i68, !dbg !238
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !232
%idx.1.i.i66 = phi i32 [ %33, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !232
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !239
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !230
br label %for.cond.i.i57, !dbg !239
*** IR Dump After Unroll loops ***
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%indvars.iv90 = phi i64 [ 0, %for.cond.i49.preheader ], [ %indvars.iv.next91, %get_smallest.exit.i85 ], !dbg !219
%exitcond92 = icmp ne i64 %indvars.iv90, 10, !dbg !220
br i1 %exitcond92, label %for.body.i52, label %selection_sort.exit87, !dbg !220
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !152, metadata !35), !dbg !221
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !223
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !158, metadata !35), !dbg !224
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 0, !dbg !225
%30 = load i32, i32* %x.i.i51, align 4, !dbg !226
call void @llvm.dbg.value(metadata i32 %30, i64 0, metadata !164, metadata !35), !dbg !228
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !168, metadata !35), !dbg !230
%31 = trunc i64 %indvars.iv90 to i32, !dbg !231
br label %for.cond.i.i57, !dbg !231
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv90, %for.body.i52 ], !dbg !232
%smallest.0.i.i53 = phi i32 [ %30, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !232
%idx.0.i.i54 = phi i32 [ %31, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !232
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !233
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !233
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !233
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !189, metadata !35), !dbg !240
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !241
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !241
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, !dbg !242
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !193, metadata !35), !dbg !243
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !195, metadata !35), !dbg !244
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !245
%34 = load i32, i32* %x1.i.i73, align 4, !dbg !245
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !198, metadata !35), !dbg !246
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !247
%35 = load i32, i32* %y2.i.i74, align 4, !dbg !247
call void @llvm.dbg.value(metadata i32 %35, i64 0, metadata !201, metadata !35), !dbg !248
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !249
%36 = load i32, i32* %z3.i.i75, align 4, !dbg !249
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !204, metadata !35), !dbg !250
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !226
store i32 %30, i32* %x1.i.i73, align 4, !dbg !251
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 1, !dbg !252
%37 = load i32, i32* %y6.i.i78, align 4, !dbg !252
store i32 %37, i32* %y2.i.i74, align 4, !dbg !253
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 2, !dbg !254
%38 = load i32, i32* %z8.i.i80, align 4, !dbg !254
store i32 %38, i32* %z3.i.i75, align 4, !dbg !255
store i32 %34, i32* %x4.i.i76, align 4, !dbg !256
store i32 %35, i32* %y6.i.i78, align 4, !dbg !257
store i32 %36, i32* %z8.i.i80, align 4, !dbg !258
%indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1, !dbg !259
call void @llvm.dbg.value(metadata !2, i64 0, metadata !216, metadata !35), !dbg !260
br label %for.cond.i49, !dbg !259
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !234
%32 = load i32, i32* %x3.i.i59, align 4, !dbg !235
%cmp4.i.i60 = icmp slt i32 %32, %smallest.0.i.i53, !dbg !236
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !237
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !229
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !164, metadata !35), !dbg !228
%33 = trunc i64 %indvars.iv88 to i32, !dbg !238
br label %if.end.i.i68, !dbg !238
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %32, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !232
%idx.1.i.i66 = phi i32 [ %33, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !232
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !239
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !230
br label %for.cond.i.i57, !dbg !239
*** IR Dump After Induction Variable Simplification ***
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv, %for.body.i44 ], !dbg !172
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !173
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !173
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !173
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !176
%24 = load i32, i32* %x3.i.i, align 4, !dbg !179
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !181
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !182
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
%25 = trunc i64 %indvars.iv93 to i32, !dbg !183
br label %if.end.i.i, !dbg !183
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !184
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !184
*** IR Dump After Delete dead loops ***
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv, %for.body.i44 ], !dbg !172
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !173
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !173
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !173
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !176
%24 = load i32, i32* %x3.i.i, align 4, !dbg !179
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !181
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !182
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
%25 = trunc i64 %indvars.iv93 to i32, !dbg !183
br label %if.end.i.i, !dbg !183
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !184
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !184
*** IR Dump After Unroll loops ***
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv, %for.body.i44 ], !dbg !172
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !172
%idx.0.i.i = phi i32 [ %i.0.i41, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !172
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !173
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !173
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !173
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !176
%24 = load i32, i32* %x3.i.i, align 4, !dbg !179
%cmp4.i.i = icmp slt i32 %24, %smallest.0.i.i, !dbg !181
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !182
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !166, metadata !35), !dbg !167
call void @llvm.dbg.value(metadata i32 %24, i64 0, metadata !164, metadata !35), !dbg !165
%25 = trunc i64 %indvars.iv93 to i32, !dbg !183
br label %if.end.i.i, !dbg !183
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %24, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !172
%idx.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !172
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !184
call void @llvm.dbg.value(metadata !2, i64 0, metadata !168, metadata !35), !dbg !170
br label %for.cond.i.i, !dbg !184
*** IR Dump After Induction Variable Simplification ***
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%indvars.iv97 = phi i64 [ 0, %for.cond.i43.preheader ], [ %indvars.iv.next98, %get_smallest.exit.i ], !dbg !148
%exitcond99 = icmp ne i64 %indvars.iv97, 3, !dbg !149
br i1 %exitcond99, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 0, !dbg !160
%23 = load i32, i32* %x.i.i, align 4, !dbg !161
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !163, metadata !35), !dbg !164
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !167, metadata !35), !dbg !169
%24 = trunc i64 %indvars.iv97 to i32, !dbg !170
br label %for.cond.i.i, !dbg !170
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv97, %for.body.i44 ], !dbg !171
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !171
%idx.0.i.i = phi i32 [ %24, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !171
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !172
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !172
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !172
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !187
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !187
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, !dbg !188
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !191, metadata !35), !dbg !192
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !193
%27 = load i32, i32* %x1.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !194, metadata !35), !dbg !195
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !196
%28 = load i32, i32* %y2.i.i, align 4, !dbg !196
call void @llvm.dbg.value(metadata i32 %28, i64 0, metadata !197, metadata !35), !dbg !198
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !199
%29 = load i32, i32* %z3.i.i, align 4, !dbg !199
call void @llvm.dbg.value(metadata i32 %29, i64 0, metadata !200, metadata !35), !dbg !201
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !161
store i32 %23, i32* %x1.i.i, align 4, !dbg !202
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 1, !dbg !203
%30 = load i32, i32* %y6.i.i, align 4, !dbg !203
store i32 %30, i32* %y2.i.i, align 4, !dbg !204
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 2, !dbg !205
%31 = load i32, i32* %z8.i.i, align 4, !dbg !205
store i32 %31, i32* %z3.i.i, align 4, !dbg !206
store i32 %27, i32* %x4.i.i, align 4, !dbg !207
store i32 %28, i32* %y6.i.i, align 4, !dbg !208
store i32 %29, i32* %z8.i.i, align 4, !dbg !209
%indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1, !dbg !210
call void @llvm.dbg.value(metadata !2, i64 0, metadata !212, metadata !35), !dbg !213
br label %for.cond.i43, !dbg !210
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !175
%25 = load i32, i32* %x3.i.i, align 4, !dbg !178
%cmp4.i.i = icmp slt i32 %25, %smallest.0.i.i, !dbg !180
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !181
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !163, metadata !35), !dbg !164
%26 = trunc i64 %indvars.iv93 to i32, !dbg !182
br label %if.end.i.i, !dbg !182
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !171
%idx.1.i.i = phi i32 [ %26, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !171
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !183
call void @llvm.dbg.value(metadata !2, i64 0, metadata !167, metadata !35), !dbg !169
br label %for.cond.i.i, !dbg !183
*** IR Dump After Delete dead loops ***
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%indvars.iv97 = phi i64 [ 0, %for.cond.i43.preheader ], [ %indvars.iv.next98, %get_smallest.exit.i ], !dbg !148
%exitcond99 = icmp ne i64 %indvars.iv97, 3, !dbg !149
br i1 %exitcond99, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 0, !dbg !160
%23 = load i32, i32* %x.i.i, align 4, !dbg !161
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !163, metadata !35), !dbg !164
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !167, metadata !35), !dbg !169
%24 = trunc i64 %indvars.iv97 to i32, !dbg !170
br label %for.cond.i.i, !dbg !170
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv97, %for.body.i44 ], !dbg !171
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !171
%idx.0.i.i = phi i32 [ %24, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !171
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !172
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !172
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !172
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !187
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !187
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, !dbg !188
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !191, metadata !35), !dbg !192
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !193
%27 = load i32, i32* %x1.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !194, metadata !35), !dbg !195
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !196
%28 = load i32, i32* %y2.i.i, align 4, !dbg !196
call void @llvm.dbg.value(metadata i32 %28, i64 0, metadata !197, metadata !35), !dbg !198
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !199
%29 = load i32, i32* %z3.i.i, align 4, !dbg !199
call void @llvm.dbg.value(metadata i32 %29, i64 0, metadata !200, metadata !35), !dbg !201
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !161
store i32 %23, i32* %x1.i.i, align 4, !dbg !202
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 1, !dbg !203
%30 = load i32, i32* %y6.i.i, align 4, !dbg !203
store i32 %30, i32* %y2.i.i, align 4, !dbg !204
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 2, !dbg !205
%31 = load i32, i32* %z8.i.i, align 4, !dbg !205
store i32 %31, i32* %z3.i.i, align 4, !dbg !206
store i32 %27, i32* %x4.i.i, align 4, !dbg !207
store i32 %28, i32* %y6.i.i, align 4, !dbg !208
store i32 %29, i32* %z8.i.i, align 4, !dbg !209
%indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1, !dbg !210
call void @llvm.dbg.value(metadata !2, i64 0, metadata !212, metadata !35), !dbg !213
br label %for.cond.i43, !dbg !210
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !175
%25 = load i32, i32* %x3.i.i, align 4, !dbg !178
%cmp4.i.i = icmp slt i32 %25, %smallest.0.i.i, !dbg !180
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !181
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !163, metadata !35), !dbg !164
%26 = trunc i64 %indvars.iv93 to i32, !dbg !182
br label %if.end.i.i, !dbg !182
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !171
%idx.1.i.i = phi i32 [ %26, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !171
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !183
call void @llvm.dbg.value(metadata !2, i64 0, metadata !167, metadata !35), !dbg !169
br label %for.cond.i.i, !dbg !183
*** IR Dump After Unroll loops ***
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%indvars.iv97 = phi i64 [ 0, %for.cond.i43.preheader ], [ %indvars.iv.next98, %get_smallest.exit.i ], !dbg !148
%exitcond99 = icmp ne i64 %indvars.iv97, 3, !dbg !149
br i1 %exitcond99, label %for.body.i44, label %for.cond.i49.preheader, !dbg !149
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !152, metadata !35), !dbg !153
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !156, metadata !35), !dbg !157
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !158, metadata !35), !dbg !159
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 0, !dbg !160
%23 = load i32, i32* %x.i.i, align 4, !dbg !161
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !163, metadata !35), !dbg !164
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !167, metadata !35), !dbg !169
%24 = trunc i64 %indvars.iv97 to i32, !dbg !170
br label %for.cond.i.i, !dbg !170
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv97, %for.body.i44 ], !dbg !171
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !171
%idx.0.i.i = phi i32 [ %24, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !171
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !172
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !172
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !172
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !185, metadata !35), !dbg !186
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !187
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !187
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, !dbg !188
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !189, metadata !35), !dbg !190
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !191, metadata !35), !dbg !192
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !193
%27 = load i32, i32* %x1.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !194, metadata !35), !dbg !195
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !196
%28 = load i32, i32* %y2.i.i, align 4, !dbg !196
call void @llvm.dbg.value(metadata i32 %28, i64 0, metadata !197, metadata !35), !dbg !198
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !199
%29 = load i32, i32* %z3.i.i, align 4, !dbg !199
call void @llvm.dbg.value(metadata i32 %29, i64 0, metadata !200, metadata !35), !dbg !201
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !161
store i32 %23, i32* %x1.i.i, align 4, !dbg !202
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 1, !dbg !203
%30 = load i32, i32* %y6.i.i, align 4, !dbg !203
store i32 %30, i32* %y2.i.i, align 4, !dbg !204
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 2, !dbg !205
%31 = load i32, i32* %z8.i.i, align 4, !dbg !205
store i32 %31, i32* %z3.i.i, align 4, !dbg !206
store i32 %27, i32* %x4.i.i, align 4, !dbg !207
store i32 %28, i32* %y6.i.i, align 4, !dbg !208
store i32 %29, i32* %z8.i.i, align 4, !dbg !209
%indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1, !dbg !210
call void @llvm.dbg.value(metadata !2, i64 0, metadata !212, metadata !35), !dbg !213
br label %for.cond.i43, !dbg !210
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !175
%25 = load i32, i32* %x3.i.i, align 4, !dbg !178
%cmp4.i.i = icmp slt i32 %25, %smallest.0.i.i, !dbg !180
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !181
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !165, metadata !35), !dbg !166
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !163, metadata !35), !dbg !164
%26 = trunc i64 %indvars.iv93 to i32, !dbg !182
br label %if.end.i.i, !dbg !182
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !171
%idx.1.i.i = phi i32 [ %26, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !171
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !183
call void @llvm.dbg.value(metadata !2, i64 0, metadata !167, metadata !35), !dbg !169
br label %for.cond.i.i, !dbg !183
*** IR Dump After Induction Variable Simplification ***
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body.i17 ], [ 0, %make_random_arr.exit ], !dbg !89
%exitcond100 = icmp ne i64 %indvars.iv, 10, !dbg !90
br i1 %exitcond100, label %for.body.i17, label %make_random_arr.exit19, !dbg !90
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !91
%rem.i6 = srem i32 %call2.i5, 100, !dbg !92
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 0, !dbg !93
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !94
%call3.i9 = call i32 @rand() #3, !dbg !95
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !96
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 1, !dbg !97
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !98
%call7.i13 = call i32 @rand() #3, !dbg !99
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !100
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 2, !dbg !101
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !102
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !103
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !103
*** IR Dump After Delete dead loops ***
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body.i17 ], [ 0, %make_random_arr.exit ], !dbg !89
%exitcond100 = icmp ne i64 %indvars.iv, 10, !dbg !90
br i1 %exitcond100, label %for.body.i17, label %make_random_arr.exit19, !dbg !90
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !91
%rem.i6 = srem i32 %call2.i5, 100, !dbg !92
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 0, !dbg !93
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !94
%call3.i9 = call i32 @rand() #3, !dbg !95
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !96
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 1, !dbg !97
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !98
%call7.i13 = call i32 @rand() #3, !dbg !99
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !100
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 2, !dbg !101
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !102
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !103
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !103
*** IR Dump After Unroll loops ***
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body.i17 ], [ 0, %make_random_arr.exit ], !dbg !89
%exitcond100 = icmp ne i64 %indvars.iv, 10, !dbg !90
br i1 %exitcond100, label %for.body.i17, label %make_random_arr.exit19, !dbg !90
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !91
%rem.i6 = srem i32 %call2.i5, 100, !dbg !92
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 0, !dbg !93
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !94
%call3.i9 = call i32 @rand() #3, !dbg !95
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !96
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 1, !dbg !97
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !98
%call7.i13 = call i32 @rand() #3, !dbg !99
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !100
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 2, !dbg !101
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !102
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !103
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !87
br label %for.cond.i4, !dbg !103
*** IR Dump After Induction Variable Simplification ***
for.cond.i: ; preds = %for.body.i, %entry
%indvars.iv101 = phi i64 [ %indvars.iv.next102, %for.body.i ], [ 0, %entry ], !dbg !59
%exitcond103 = icmp ne i64 %indvars.iv101, 3, !dbg !60
br i1 %exitcond103, label %for.body.i, label %make_random_arr.exit, !dbg !60
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !63
%rem.i = srem i32 %call2.i, 100, !dbg !65
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 0, !dbg !66
store i32 %rem.i, i32* %x.i, align 4, !dbg !67
%call3.i = call i32 @rand() #3, !dbg !68
%rem4.i = srem i32 %call3.i, 100, !dbg !69
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 1, !dbg !70
store i32 %rem4.i, i32* %y.i, align 4, !dbg !71
%call7.i = call i32 @rand() #3, !dbg !72
%rem8.i = srem i32 %call7.i, 100, !dbg !73
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 2, !dbg !74
store i32 %rem8.i, i32* %z.i, align 4, !dbg !75
%indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1, !dbg !76
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !76
*** IR Dump After Delete dead loops ***
for.cond.i: ; preds = %for.body.i, %entry
%indvars.iv101 = phi i64 [ %indvars.iv.next102, %for.body.i ], [ 0, %entry ], !dbg !59
%exitcond103 = icmp ne i64 %indvars.iv101, 3, !dbg !60
br i1 %exitcond103, label %for.body.i, label %make_random_arr.exit, !dbg !60
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !63
%rem.i = srem i32 %call2.i, 100, !dbg !65
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 0, !dbg !66
store i32 %rem.i, i32* %x.i, align 4, !dbg !67
%call3.i = call i32 @rand() #3, !dbg !68
%rem4.i = srem i32 %call3.i, 100, !dbg !69
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 1, !dbg !70
store i32 %rem4.i, i32* %y.i, align 4, !dbg !71
%call7.i = call i32 @rand() #3, !dbg !72
%rem8.i = srem i32 %call7.i, 100, !dbg !73
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 2, !dbg !74
store i32 %rem8.i, i32* %z.i, align 4, !dbg !75
%indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1, !dbg !76
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !76
*** IR Dump After Unroll loops ***
for.cond.i: ; preds = %for.body.i, %entry
%indvars.iv101 = phi i64 [ %indvars.iv.next102, %for.body.i ], [ 0, %entry ], !dbg !59
%exitcond103 = icmp ne i64 %indvars.iv101, 3, !dbg !60
br i1 %exitcond103, label %for.body.i, label %make_random_arr.exit, !dbg !60
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !63
%rem.i = srem i32 %call2.i, 100, !dbg !65
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 0, !dbg !66
store i32 %rem.i, i32* %x.i, align 4, !dbg !67
%call3.i = call i32 @rand() #3, !dbg !68
%rem4.i = srem i32 %call3.i, 100, !dbg !69
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 1, !dbg !70
store i32 %rem4.i, i32* %y.i, align 4, !dbg !71
%call7.i = call i32 @rand() #3, !dbg !72
%rem8.i = srem i32 %call7.i, 100, !dbg !73
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 2, !dbg !74
store i32 %rem8.i, i32* %z.i, align 4, !dbg !75
%indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1, !dbg !76
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !76
*** IR Dump After Demanded bits analysis ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%indvars.iv101 = phi i64 [ %indvars.iv.next102, %for.body.i ], [ 0, %entry ], !dbg !59
%exitcond103 = icmp ne i64 %indvars.iv101, 3, !dbg !60
br i1 %exitcond103, label %for.body.i, label %make_random_arr.exit, !dbg !60
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !63
%rem.i = srem i32 %call2.i, 100, !dbg !65
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 0, !dbg !66
store i32 %rem.i, i32* %x.i, align 4, !dbg !67
%call3.i = call i32 @rand() #3, !dbg !68
%rem4.i = srem i32 %call3.i, 100, !dbg !69
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 1, !dbg !70
store i32 %rem4.i, i32* %y.i, align 4, !dbg !71
%call7.i = call i32 @rand() #3, !dbg !72
%rem8.i = srem i32 %call7.i, 100, !dbg !73
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 2, !dbg !74
store i32 %rem8.i, i32* %z.i, align 4, !dbg !75
%indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1, !dbg !76
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !76
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !80
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !82
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !82
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !53, metadata !35) #3, !dbg !83
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !84
br label %for.cond.i4, !dbg !85
for.cond.i4: ; preds = %for.body.i17, %make_random_arr.exit
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body.i17 ], [ 0, %make_random_arr.exit ], !dbg !86
%exitcond100 = icmp ne i64 %indvars.iv, 10, !dbg !87
br i1 %exitcond100, label %for.body.i17, label %make_random_arr.exit19, !dbg !87
for.body.i17: ; preds = %for.cond.i4
%call2.i5 = call i32 @rand() #3, !dbg !88
%rem.i6 = srem i32 %call2.i5, 100, !dbg !89
%x.i8 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 0, !dbg !90
store i32 %rem.i6, i32* %x.i8, align 4, !dbg !91
%call3.i9 = call i32 @rand() #3, !dbg !92
%rem4.i10 = srem i32 %call3.i9, 100, !dbg !93
%y.i12 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 1, !dbg !94
store i32 %rem4.i10, i32* %y.i12, align 4, !dbg !95
%call7.i13 = call i32 @rand() #3, !dbg !96
%rem8.i14 = srem i32 %call7.i13, 100, !dbg !97
%z.i16 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv, i32 2, !dbg !98
store i32 %rem8.i14, i32* %z.i16, align 4, !dbg !99
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !100
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !84
br label %for.cond.i4, !dbg !100
make_random_arr.exit19: ; preds = %for.cond.i4
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !101, metadata !35), !dbg !102
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !103, metadata !35), !dbg !104
%arrayidx7 = getelementptr inbounds i8, i8* %call.i, i64 12, !dbg !105
%arrayidx8 = getelementptr inbounds i8, i8* %call.i, i64 24, !dbg !106
%cmp = icmp eq i32 %argc, 1, !dbg !107
br i1 %cmp, label %if.then, label %if.else, !dbg !109
if.then: ; preds = %make_random_arr.exit19
%x.i20 = bitcast i8* %arrayidx7 to i32*, !dbg !110
%3 = load i32, i32* %x.i20, align 4, !dbg !110
%x1.i = bitcast i8* %arrayidx8 to i32*, !dbg !113
%4 = load i32, i32* %x1.i, align 4, !dbg !114
%add.i = add nsw i32 %4, %3, !dbg !114
store i32 %add.i, i32* %x1.i, align 4, !dbg !114
%y.i21 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !115
%5 = bitcast i8* %y.i21 to i32*, !dbg !115
%6 = load i32, i32* %5, align 4, !dbg !115
%y2.i = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !116
%7 = bitcast i8* %y2.i to i32*, !dbg !116
%8 = load i32, i32* %7, align 4, !dbg !117
%add3.i = add nsw i32 %8, %6, !dbg !117
store i32 %add3.i, i32* %7, align 4, !dbg !117
%z.i22 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !118
%9 = bitcast i8* %z.i22 to i32*, !dbg !118
%10 = load i32, i32* %9, align 4, !dbg !118
%z4.i = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !119
%11 = bitcast i8* %z4.i to i32*, !dbg !119
%12 = load i32, i32* %11, align 4, !dbg !120
%add5.i = add nsw i32 %12, %10, !dbg !120
store i32 %add5.i, i32* %11, align 4, !dbg !120
br label %for.cond.i43.preheader, !dbg !121
if.else: ; preds = %make_random_arr.exit19
%x.i23 = bitcast i8* %arrayidx7 to i32*, !dbg !122
%13 = load i32, i32* %x.i23, align 4, !dbg !122
%x1.i24 = bitcast i8* %arrayidx8 to i32*, !dbg !125
%14 = load i32, i32* %x1.i24, align 4, !dbg !126
%add.i25 = add nsw i32 %14, %13, !dbg !126
%y.i26 = getelementptr inbounds i8, i8* %call.i, i64 16, !dbg !127
%15 = bitcast i8* %y.i26 to i32*, !dbg !127
%16 = load i32, i32* %15, align 4, !dbg !127
%y2.i27 = getelementptr inbounds i8, i8* %call.i, i64 28, !dbg !128
%17 = bitcast i8* %y2.i27 to i32*, !dbg !128
%18 = load i32, i32* %17, align 4, !dbg !129
%add3.i28 = add nsw i32 %18, %16, !dbg !129
%z.i29 = getelementptr inbounds i8, i8* %call.i, i64 20, !dbg !130
%19 = bitcast i8* %z.i29 to i32*, !dbg !130
%20 = load i32, i32* %19, align 4, !dbg !130
%z4.i30 = getelementptr inbounds i8, i8* %call.i, i64 32, !dbg !131
%21 = bitcast i8* %z4.i30 to i32*, !dbg !131
%22 = load i32, i32* %21, align 4, !dbg !132
%add5.i31 = add nsw i32 %22, %20, !dbg !132
%add.i34 = add nsw i32 %add.i25, %13, !dbg !133
store i32 %add.i34, i32* %x1.i24, align 4, !dbg !133
%add3.i37 = add nsw i32 %add3.i28, %16, !dbg !135
store i32 %add3.i37, i32* %17, align 4, !dbg !135
%add5.i40 = add nsw i32 %add5.i31, %20, !dbg !136
store i32 %add5.i40, i32* %21, align 4, !dbg !136
br label %for.cond.i43.preheader
for.cond.i43.preheader: ; preds = %if.else, %if.then
br label %for.cond.i43, !dbg !137
for.cond.i43: ; preds = %for.cond.i43.preheader, %get_smallest.exit.i
%indvars.iv97 = phi i64 [ 0, %for.cond.i43.preheader ], [ %indvars.iv.next98, %get_smallest.exit.i ], !dbg !142
%exitcond99 = icmp ne i64 %indvars.iv97, 3, !dbg !143
br i1 %exitcond99, label %for.body.i44, label %for.cond.i49.preheader, !dbg !143
for.cond.i49.preheader: ; preds = %for.cond.i43
br label %for.cond.i49, !dbg !144
for.body.i44: ; preds = %for.cond.i43
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !146, metadata !35), !dbg !147
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !150, metadata !35), !dbg !151
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !152, metadata !35), !dbg !153
%x.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 0, !dbg !154
%23 = load i32, i32* %x.i.i, align 4, !dbg !155
call void @llvm.dbg.value(metadata i32 %23, i64 0, metadata !157, metadata !35), !dbg !158
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !159, metadata !35), !dbg !160
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !161, metadata !35), !dbg !163
%24 = trunc i64 %indvars.iv97 to i32, !dbg !164
br label %for.cond.i.i, !dbg !164
for.cond.i.i: ; preds = %if.end.i.i, %for.body.i44
%indvars.iv93 = phi i64 [ %indvars.iv.next94, %if.end.i.i ], [ %indvars.iv97, %for.body.i44 ], !dbg !165
%smallest.0.i.i = phi i32 [ %23, %for.body.i44 ], [ %smallest.1.i.i, %if.end.i.i ], !dbg !165
%idx.0.i.i = phi i32 [ %24, %for.body.i44 ], [ %idx.1.i.i, %if.end.i.i ], !dbg !165
%lftr.wideiv95 = trunc i64 %indvars.iv93 to i32, !dbg !166
%exitcond96 = icmp ne i32 %lftr.wideiv95, 3, !dbg !166
br i1 %exitcond96, label %for.body.i.i, label %get_smallest.exit.i, !dbg !166
for.body.i.i: ; preds = %for.cond.i.i
%x3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv93, i32 0, !dbg !169
%25 = load i32, i32* %x3.i.i, align 4, !dbg !172
%cmp4.i.i = icmp slt i32 %25, %smallest.0.i.i, !dbg !174
br i1 %cmp4.i.i, label %if.then.i.i, label %if.end.i.i, !dbg !175
if.then.i.i: ; preds = %for.body.i.i
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !159, metadata !35), !dbg !160
call void @llvm.dbg.value(metadata i32 %25, i64 0, metadata !157, metadata !35), !dbg !158
%26 = trunc i64 %indvars.iv93 to i32, !dbg !176
br label %if.end.i.i, !dbg !176
if.end.i.i: ; preds = %if.then.i.i, %for.body.i.i
%smallest.1.i.i = phi i32 [ %25, %if.then.i.i ], [ %smallest.0.i.i, %for.body.i.i ], !dbg !165
%idx.1.i.i = phi i32 [ %26, %if.then.i.i ], [ %idx.0.i.i, %for.body.i.i ], !dbg !165
%indvars.iv.next94 = add nuw nsw i64 %indvars.iv93, 1, !dbg !177
call void @llvm.dbg.value(metadata !2, i64 0, metadata !161, metadata !35), !dbg !163
br label %for.cond.i.i, !dbg !177
get_smallest.exit.i: ; preds = %for.cond.i.i
%idx.0.i.i.lcssa = phi i32 [ %idx.0.i.i, %for.cond.i.i ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i, i64 0, metadata !179, metadata !35), !dbg !180
%idxprom.i45 = sext i32 %idx.0.i.i.lcssa to i64, !dbg !181
%arrayidx.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, !dbg !181
%arrayidx2.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, !dbg !182
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i, i64 0, metadata !183, metadata !35), !dbg !184
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i, i64 0, metadata !185, metadata !35), !dbg !186
%x1.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i, i64 0, i32 0, !dbg !187
%27 = load i32, i32* %x1.i.i, align 4, !dbg !187
call void @llvm.dbg.value(metadata i32 %27, i64 0, metadata !188, metadata !35), !dbg !189
%y2.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 1, !dbg !190
%28 = load i32, i32* %y2.i.i, align 4, !dbg !190
call void @llvm.dbg.value(metadata i32 %28, i64 0, metadata !191, metadata !35), !dbg !192
%z3.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %idxprom.i45, i32 2, !dbg !193
%29 = load i32, i32* %z3.i.i, align 4, !dbg !193
call void @llvm.dbg.value(metadata i32 %29, i64 0, metadata !194, metadata !35), !dbg !195
%x4.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i, i64 0, i32 0, !dbg !155
store i32 %23, i32* %x1.i.i, align 4, !dbg !196
%y6.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 1, !dbg !197
%30 = load i32, i32* %y6.i.i, align 4, !dbg !197
store i32 %30, i32* %y2.i.i, align 4, !dbg !198
%z8.i.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv97, i32 2, !dbg !199
%31 = load i32, i32* %z8.i.i, align 4, !dbg !199
store i32 %31, i32* %z3.i.i, align 4, !dbg !200
store i32 %27, i32* %x4.i.i, align 4, !dbg !201
store i32 %28, i32* %y6.i.i, align 4, !dbg !202
store i32 %29, i32* %z8.i.i, align 4, !dbg !203
%indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1, !dbg !204
call void @llvm.dbg.value(metadata !2, i64 0, metadata !206, metadata !35), !dbg !207
br label %for.cond.i43, !dbg !204
for.cond.i49: ; preds = %for.cond.i49.preheader, %get_smallest.exit.i85
%indvars.iv90 = phi i64 [ 0, %for.cond.i49.preheader ], [ %indvars.iv.next91, %get_smallest.exit.i85 ], !dbg !208
%exitcond92 = icmp ne i64 %indvars.iv90, 10, !dbg !209
br i1 %exitcond92, label %for.body.i52, label %selection_sort.exit87, !dbg !209
for.body.i52: ; preds = %for.cond.i49
call void @llvm.dbg.value(metadata %struct.vector3* %2, i64 0, metadata !146, metadata !35), !dbg !210
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !150, metadata !35), !dbg !212
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !152, metadata !35), !dbg !213
%x.i.i51 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 0, !dbg !214
%32 = load i32, i32* %x.i.i51, align 4, !dbg !215
call void @llvm.dbg.value(metadata i32 %32, i64 0, metadata !157, metadata !35), !dbg !217
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !159, metadata !35), !dbg !218
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !161, metadata !35), !dbg !219
%33 = trunc i64 %indvars.iv90 to i32, !dbg !220
br label %for.cond.i.i57, !dbg !220
for.cond.i.i57: ; preds = %if.end.i.i68, %for.body.i52
%indvars.iv88 = phi i64 [ %indvars.iv.next89, %if.end.i.i68 ], [ %indvars.iv90, %for.body.i52 ], !dbg !221
%smallest.0.i.i53 = phi i32 [ %32, %for.body.i52 ], [ %smallest.1.i.i65, %if.end.i.i68 ], !dbg !221
%idx.0.i.i54 = phi i32 [ %33, %for.body.i52 ], [ %idx.1.i.i66, %if.end.i.i68 ], !dbg !221
%lftr.wideiv = trunc i64 %indvars.iv88 to i32, !dbg !222
%exitcond = icmp ne i32 %lftr.wideiv, 10, !dbg !222
br i1 %exitcond, label %for.body.i.i61, label %get_smallest.exit.i85, !dbg !222
for.body.i.i61: ; preds = %for.cond.i.i57
%x3.i.i59 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv88, i32 0, !dbg !223
%34 = load i32, i32* %x3.i.i59, align 4, !dbg !224
%cmp4.i.i60 = icmp slt i32 %34, %smallest.0.i.i53, !dbg !225
br i1 %cmp4.i.i60, label %if.then.i.i64, label %if.end.i.i68, !dbg !226
if.then.i.i64: ; preds = %for.body.i.i61
call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !159, metadata !35), !dbg !218
call void @llvm.dbg.value(metadata i32 %34, i64 0, metadata !157, metadata !35), !dbg !217
%35 = trunc i64 %indvars.iv88 to i32, !dbg !227
br label %if.end.i.i68, !dbg !227
if.end.i.i68: ; preds = %if.then.i.i64, %for.body.i.i61
%smallest.1.i.i65 = phi i32 [ %34, %if.then.i.i64 ], [ %smallest.0.i.i53, %for.body.i.i61 ], !dbg !221
%idx.1.i.i66 = phi i32 [ %35, %if.then.i.i64 ], [ %idx.0.i.i54, %for.body.i.i61 ], !dbg !221
%indvars.iv.next89 = add nuw nsw i64 %indvars.iv88, 1, !dbg !228
call void @llvm.dbg.value(metadata !2, i64 0, metadata !161, metadata !35), !dbg !219
br label %for.cond.i.i57, !dbg !228
get_smallest.exit.i85: ; preds = %for.cond.i.i57
%idx.0.i.i54.lcssa = phi i32 [ %idx.0.i.i54, %for.cond.i.i57 ]
call void @llvm.dbg.value(metadata i32 %idx.0.i.i54, i64 0, metadata !179, metadata !35), !dbg !229
%idxprom.i69 = sext i32 %idx.0.i.i54.lcssa to i64, !dbg !230
%arrayidx.i70 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, !dbg !230
%arrayidx2.i72 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, !dbg !231
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx.i70, i64 0, metadata !183, metadata !35), !dbg !232
call void @llvm.dbg.value(metadata %struct.vector3* %arrayidx2.i72, i64 0, metadata !185, metadata !35), !dbg !233
%x1.i.i73 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx.i70, i64 0, i32 0, !dbg !234
%36 = load i32, i32* %x1.i.i73, align 4, !dbg !234
call void @llvm.dbg.value(metadata i32 %36, i64 0, metadata !188, metadata !35), !dbg !235
%y2.i.i74 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 1, !dbg !236
%37 = load i32, i32* %y2.i.i74, align 4, !dbg !236
call void @llvm.dbg.value(metadata i32 %37, i64 0, metadata !191, metadata !35), !dbg !237
%z3.i.i75 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %idxprom.i69, i32 2, !dbg !238
%38 = load i32, i32* %z3.i.i75, align 4, !dbg !238
call void @llvm.dbg.value(metadata i32 %38, i64 0, metadata !194, metadata !35), !dbg !239
%x4.i.i76 = getelementptr inbounds %struct.vector3, %struct.vector3* %arrayidx2.i72, i64 0, i32 0, !dbg !215
store i32 %32, i32* %x1.i.i73, align 4, !dbg !240
%y6.i.i78 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 1, !dbg !241
%39 = load i32, i32* %y6.i.i78, align 4, !dbg !241
store i32 %39, i32* %y2.i.i74, align 4, !dbg !242
%z8.i.i80 = getelementptr inbounds %struct.vector3, %struct.vector3* %2, i64 %indvars.iv90, i32 2, !dbg !243
%40 = load i32, i32* %z8.i.i80, align 4, !dbg !243
store i32 %40, i32* %z3.i.i75, align 4, !dbg !244
store i32 %36, i32* %x4.i.i76, align 4, !dbg !245
store i32 %37, i32* %y6.i.i78, align 4, !dbg !246
store i32 %38, i32* %z8.i.i80, align 4, !dbg !247
%indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1, !dbg !248
call void @llvm.dbg.value(metadata !2, i64 0, metadata !206, metadata !35), !dbg !249
br label %for.cond.i49, !dbg !248
selection_sort.exit87: ; preds = %for.cond.i49
%x10 = bitcast i8* %call.i to i32*, !dbg !250
%41 = load i32, i32* %x10, align 4, !dbg !250
%y = getelementptr inbounds i8, i8* %call.i, i64 4, !dbg !251
%42 = bitcast i8* %y to i32*, !dbg !251
%43 = load i32, i32* %42, align 4, !dbg !251
%z = getelementptr inbounds i8, i8* %call.i, i64 8, !dbg !252
%44 = bitcast i8* %z to i32*, !dbg !252
%45 = load i32, i32* %44, align 4, !dbg !252
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0), i32 %41, i32 %43, i32 %45), !dbg !253
%x13 = bitcast i8* %call.i1 to i32*, !dbg !254
%46 = load i32, i32* %x13, align 4, !dbg !254
%x15 = getelementptr inbounds i8, i8* %call.i1, i64 12, !dbg !255
%47 = bitcast i8* %x15 to i32*, !dbg !255
%48 = load i32, i32* %47, align 4, !dbg !255
%x17 = getelementptr inbounds i8, i8* %call.i1, i64 24, !dbg !256
%49 = bitcast i8* %x17 to i32*, !dbg !256
%50 = load i32, i32* %49, align 4, !dbg !256
%call18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %46, i32 %48, i32 %50), !dbg !257
ret i32 0, !dbg !258
}
*** IR Dump After Loop Vectorization ***
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readonly %argv) #1 !dbg !25 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !34, metadata !35), !dbg !36
call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !37, metadata !35), !dbg !38
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %argc), !dbg !39
%0 = load i8*, i8** %argv, align 8, !dbg !40
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %0), !dbg !41
call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !42, metadata !43), !dbg !44
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32* nonnull %x), !dbg !45
%call3 = call i64 @time(i64* null) #3, !dbg !46
%conv = trunc i64 %call3 to i32, !dbg !46
call void @srand(i32 %conv) #3, !dbg !47
call void @llvm.dbg.value(metadata i32 3, i64 0, metadata !49, metadata !35) #3, !dbg !50
%call.i = call noalias i8* @malloc(i64 36) #3, !dbg !52
%1 = bitcast i8* %call.i to %struct.vector3*, !dbg !52
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !53, metadata !35) #3, !dbg !54
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !58
for.cond.i: ; preds = %for.body.i, %entry
%indvars.iv101 = phi i64 [ %indvars.iv.next102, %for.body.i ], [ 0, %entry ], !dbg !59
%exitcond103 = icmp ne i64 %indvars.iv101, 3, !dbg !60
br i1 %exitcond103, label %for.body.i, label %make_random_arr.exit, !dbg !60
for.body.i: ; preds = %for.cond.i
%call2.i = call i32 @rand() #3, !dbg !63
%rem.i = srem i32 %call2.i, 100, !dbg !65
%x.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 0, !dbg !66
store i32 %rem.i, i32* %x.i, align 4, !dbg !67
%call3.i = call i32 @rand() #3, !dbg !68
%rem4.i = srem i32 %call3.i, 100, !dbg !69
%y.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 1, !dbg !70
store i32 %rem4.i, i32* %y.i, align 4, !dbg !71
%call7.i = call i32 @rand() #3, !dbg !72
%rem8.i = srem i32 %call7.i, 100, !dbg !73
%z.i = getelementptr inbounds %struct.vector3, %struct.vector3* %1, i64 %indvars.iv101, i32 2, !dbg !74
store i32 %rem8.i, i32* %z.i, align 4, !dbg !75
%indvars.iv.next102 = add nuw nsw i64 %indvars.iv101, 1, !dbg !76
call void @llvm.dbg.value(metadata !2, i64 0, metadata !55, metadata !35) #3, !dbg !57
br label %for.cond.i, !dbg !76
make_random_arr.exit: ; preds = %for.cond.i
call void @llvm.dbg.value(metadata %struct.vector3* %1, i64 0, metadata !78, metadata !35), !dbg !79
call void @llvm.dbg.value(metadata i32 10, i64 0, metadata !49, metadata !35) #3, !dbg !80
%call.i1 = call noalias i8* @malloc(i64 120) #3, !dbg !82
%2 = bitcast i8* %call.i1 to %struct.vector3*, !dbg !82
call void @llvm.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment