Change hw6 to an unsolved version.
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
0c04936ccf
commit
ee01a8f5b2
186 changed files with 9605 additions and 4019 deletions
129
hw6/llprograms/sp24_hw3/bubblesort.ll
Normal file
129
hw6/llprograms/sp24_hw3/bubblesort.ll
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
%arraystruct = type {[12 x i64]}
|
||||
|
||||
; eloic + tom
|
||||
@unsorted_array_1 = global %arraystruct {[12 x i64] [i64 -95, i64 18, i64 -50, i64 -22, i64 -51, i64 -1, i64 94, i64 6, i64 82, i64 82, i64 -23, i64 44]}
|
||||
@unsorted_array_2 = global %arraystruct {[12 x i64] [i64 2, i64 79, i64 -8, i64 -86, i64 6, i64 -29, i64 88, i64 -80, i64 2, i64 21, i64 -26, i64 -13]}
|
||||
@unsorted_array_3 = global %arraystruct {[12 x i64] [i64 16, i64 -1, i64 3, i64 51, i64 30, i64 49, i64 -48, i64 -99, i64 -13, i64 57, i64 -63, i64 29]}
|
||||
@unsorted_array_4 = global %arraystruct {[12 x i64] [i64 91, i64 87, i64 -80, i64 60, i64 -43, i64 -79, i64 -12, i64 -52, i64 -42, i64 69, i64 87, i64 -86]}
|
||||
@unsorted_array_5 = global %arraystruct {[12 x i64] [i64 89, i64 89, i64 74, i64 89, i64 -50, i64 7, i64 -46, i64 -37, i64 30, i64 -50, i64 34, i64 -80]}
|
||||
|
||||
define i1 @is_sorted(%arraystruct* %arr) {
|
||||
%array_end_ptr = alloca i64
|
||||
store i64 11, i64* %array_end_ptr
|
||||
%array_end = load i64, i64* %array_end_ptr
|
||||
%i = alloca i64
|
||||
store i64 0, i64* %i
|
||||
br label %loop_cond
|
||||
|
||||
loop_cond:
|
||||
%i_val = load i64, i64* %i
|
||||
%loop_cmp = icmp slt i64 %i_val, %array_end
|
||||
br i1 %loop_cmp, label %loop_body, label %sorted
|
||||
|
||||
loop_body:
|
||||
%curr_ptr = getelementptr %arraystruct, %arraystruct* %arr, i64 0, i32 0, i64 %i_val
|
||||
%next_ptr = getelementptr i64, i64* %curr_ptr, i64 1
|
||||
|
||||
%curr_elem = load i64, i64* %curr_ptr
|
||||
%next_elem = load i64, i64* %next_ptr
|
||||
|
||||
%elem_cmp = icmp sle i64 %curr_elem, %next_elem
|
||||
br i1 %elem_cmp, label %increment, label %not_sorted
|
||||
|
||||
increment:
|
||||
%next_i = add i64 %i_val, 1
|
||||
store i64 %next_i, i64* %i
|
||||
br label %loop_cond
|
||||
|
||||
not_sorted:
|
||||
ret i1 0
|
||||
|
||||
sorted:
|
||||
ret i1 1
|
||||
}
|
||||
|
||||
define void @swap(i64* %x, i64* %y) {
|
||||
%temp1 = load i64, i64* %x
|
||||
%temp2 = load i64, i64* %y
|
||||
store i64 %temp1, i64* %y
|
||||
store i64 %temp2, i64* %x
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @bubblesort(%arraystruct* %arr) {
|
||||
%length = alloca i64
|
||||
store i64 12, i64* %length
|
||||
%i = alloca i64
|
||||
%j = alloca i64
|
||||
br label %outer_loop_entry
|
||||
|
||||
outer_loop_entry:
|
||||
store i64 0, i64* %i
|
||||
%length_val = load i64, i64* %length
|
||||
br label %outer_loop_cond
|
||||
|
||||
outer_loop_cond:
|
||||
%i_val = load i64, i64* %i
|
||||
%cmp1 = icmp slt i64 %i_val, %length_val
|
||||
br i1 %cmp1, label %inner_loop_entry, label %exit
|
||||
|
||||
inner_loop_entry:
|
||||
store i64 0, i64* %j
|
||||
%i_val_for_j = load i64, i64* %i
|
||||
%length_for_j = sub i64 %length_val, 1
|
||||
%length_for_j = sub i64 %length_for_j, %i_val_for_j
|
||||
br label %inner_loop_cond
|
||||
|
||||
inner_loop_cond:
|
||||
%j_val = load i64, i64* %j
|
||||
%cmp2 = icmp slt i64 %j_val, %length_for_j
|
||||
br i1 %cmp2, label %swap_check, label %inner_loop_exit
|
||||
|
||||
swap_check:
|
||||
%j_plus_1 = add i64 %j_val, 1
|
||||
%elem1_ptr = getelementptr %arraystruct, %arraystruct* %arr, i32 0, i32 0, i64 %j_val
|
||||
%elem2_ptr = getelementptr %arraystruct, %arraystruct* %arr, i32 0, i32 0, i64 %j_plus_1
|
||||
%elem1 = load i64, i64* %elem1_ptr
|
||||
%elem2 = load i64, i64* %elem2_ptr
|
||||
%cmp3 = icmp sgt i64 %elem1, %elem2
|
||||
br i1 %cmp3, label %do_swap, label %no_swap
|
||||
|
||||
do_swap:
|
||||
call void @swap(i64* %elem1_ptr, i64* %elem2_ptr)
|
||||
br label %no_swap
|
||||
|
||||
no_swap:
|
||||
%j_inc = add i64 %j_val, 1
|
||||
store i64 %j_inc, i64* %j
|
||||
br label %inner_loop_cond
|
||||
|
||||
inner_loop_exit:
|
||||
%i_inc = add i64 %i_val, 1
|
||||
store i64 %i_inc, i64* %i
|
||||
br label %outer_loop_cond
|
||||
|
||||
exit:
|
||||
ret void
|
||||
}
|
||||
|
||||
|
||||
define i1 @main(i64 %argc, i8** %arcv) {
|
||||
call void @bubblesort(%arraystruct* @unsorted_array_1, i64 0, i64 11)
|
||||
call void @bubblesort(%arraystruct* @unsorted_array_2, i64 0, i64 11)
|
||||
call void @bubblesort(%arraystruct* @unsorted_array_3, i64 0, i64 11)
|
||||
call void @bubblesort(%arraystruct* @unsorted_array_4, i64 0, i64 11)
|
||||
call void @bubblesort(%arraystruct* @unsorted_array_5, i64 0, i64 11)
|
||||
|
||||
%return_val_1 = call i1 @is_sorted(%arraystruct* @unsorted_array_1)
|
||||
%return_val_2 = call i1 @is_sorted(%arraystruct* @unsorted_array_2)
|
||||
%return_val_3 = call i1 @is_sorted(%arraystruct* @unsorted_array_5)
|
||||
%return_val_4 = call i1 @is_sorted(%arraystruct* @unsorted_array_4)
|
||||
%return_val_5 = call i1 @is_sorted(%arraystruct* @unsorted_array_3)
|
||||
|
||||
%ret = add i64 %return_val_1, %return_val_2
|
||||
%ret = add i64 %ret, %return_val_3
|
||||
%ret = add i64 %ret, %return_val_4
|
||||
%ret = add i64 %ret, %return_val_5
|
||||
|
||||
ret i1 %ret
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue