Updated hw6 to a newer version
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
9224001a22
commit
0c04936ccf
356 changed files with 8408 additions and 4725 deletions
62
hw6/llprograms/sp22_hw3/select_sort.ll
Normal file
62
hw6/llprograms/sp22_hw3/select_sort.ll
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
@arr = global [5 x i64] [ i64 4, i64 2, i64 3, i64 10, i64 6 ]
|
||||
|
||||
define void @swap(i64 * %p1, i64 * %p2) {
|
||||
%temp1 = load i64, i64* %p1
|
||||
%temp2 = load i64,i64* %p2
|
||||
store i64 %temp2, i64* %p1
|
||||
store i64 %temp1, i64* %p2
|
||||
ret void
|
||||
}
|
||||
|
||||
define i64 @getminidx(i64 %curr, i64 %indvar, i64 %arrsize){
|
||||
%1 = icmp eq i64 %indvar, %arrsize
|
||||
br i1 %1, label %fin, label %calc
|
||||
fin:
|
||||
ret i64 0
|
||||
calc:
|
||||
%curr_val_ptr = getelementptr [5 x i64], [5 x i64]* @arr, i64 0, i64 %curr
|
||||
%curr_val = load i64, i64* %curr_val_ptr
|
||||
%cmp_val_ptr = getelementptr [5 x i64], [5 x i64]* @arr, i64 0, i64 %indvar
|
||||
%cmp_val = load i64, i64* %cmp_val_ptr
|
||||
%cmp_bool = icmp sgt i64 %curr_val, %cmp_val
|
||||
br i1 %cmp_bool, label %returnval, label %nextloop
|
||||
returnval:
|
||||
ret i64 %indvar
|
||||
nextloop:
|
||||
%nextindvar = add i64 %indvar, 1
|
||||
%res = call i64 @getminidx(i64 %curr, i64 %nextindvar, i64 %arrsize)
|
||||
ret i64 %res
|
||||
}
|
||||
|
||||
define i64 @selectsort(i64 %curridx, i64 %acc, i64 %arrsize) {
|
||||
%1 = icmp eq i64 %curridx, %arrsize
|
||||
br i1 %1, label %donesorting, label %nextsort
|
||||
donesorting:
|
||||
ret i64 %acc
|
||||
nextsort:
|
||||
%indvar = add i64 %curridx, 1
|
||||
%minidx = call i64 @getminidx(i64 %curridx, i64 %indvar, i64 %arrsize)
|
||||
%idxcmp = icmp sgt i64 %minidx, 0
|
||||
br i1 %idxcmp, label %swappos, label %donothing
|
||||
donothing:
|
||||
%currvalptr = getelementptr [5 x i64], [5 x i64]* @arr, i64 0, i64 %curridx
|
||||
%currval = load i64, i64* %currvalptr
|
||||
%newacc = add i64 %acc, %currval
|
||||
%nextidx = add i64 %curridx, 1
|
||||
%res = call i64 @selectsort(i64 %nextidx, i64 %newacc, i64 %arrsize)
|
||||
ret i64 %res
|
||||
swappos:
|
||||
%currvalptr = getelementptr [5 x i64], [5 x i64]* @arr, i64 0, i64 %curridx
|
||||
%swapvalptr = getelementptr [5 x i64], [5 x i64]* @arr, i64 0, i64 %minidx
|
||||
%newval = load i64, i64* %swapvalptr
|
||||
%newacc = add i64 %acc, %newval
|
||||
call void @swap(i64 * %currvalptr, i64 * %swapvalptr)
|
||||
%nextidx1 = add i64 %curridx, 1
|
||||
%res1 = call i64 @selectsort(i64 %nextidx1, i64 %newacc, i64 %arrsize)
|
||||
ret i64 %res1
|
||||
}
|
||||
|
||||
define i64 @main(i64 %argc, i8** %arcv) {
|
||||
%1 = call i64 @selectsort(i64 0, i64 0, i64 5)
|
||||
ret i64 %1
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue