Created
February 9, 2016 18:55
-
-
Save scottcarr/ce0bb6df1cbb44ec46a5 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*** 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