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
59
hw6/llprograms/sp22_hw3/knapsack.ll
Normal file
59
hw6/llprograms/sp22_hw3/knapsack.ll
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
@gbl_values = global [9 x i64] [ i64 12, i64 1, i64 33, i64 4, i64 1, i64 2, i64 1, i64 59, i64 4 ]
|
||||
@gbl_weights = global [9 x i64] [ i64 2, i64 10, i64 34, i64 9, i64 20, i64 26, i64 14, i64 5, i64 4 ]
|
||||
|
||||
define i64 @max(i64 %item1, i64 %item2) {
|
||||
%one_bigger = icmp sge i64 %item1, %item2
|
||||
br i1 %one_bigger, label %ret_item_one, label %ret_item_two
|
||||
|
||||
ret_item_one:
|
||||
ret i64 %item1
|
||||
|
||||
ret_item_two:
|
||||
ret i64 %item2
|
||||
|
||||
}
|
||||
|
||||
define i64 @knapsack([9 x i64]* %value_arr, [9 x i64]* %weight_arr, i64 %current_item_index, i64 %remaining_weight) {
|
||||
%full = icmp eq i64 0, %remaining_weight
|
||||
%no_items = icmp slt i64 %current_item_index, 0
|
||||
%full_or_no_items = or i1 %full, %no_items
|
||||
|
||||
br i1 %full_or_no_items, label %no_more_space, label %check_weight_neg
|
||||
|
||||
|
||||
check_weight_neg:
|
||||
%done = icmp slt i64 %remaining_weight, 0
|
||||
br i1 %done, label %no_more_weight, label %continue
|
||||
|
||||
no_more_space:
|
||||
ret i64 0
|
||||
|
||||
no_more_weight:
|
||||
ret i64 -99999999
|
||||
|
||||
continue:
|
||||
%new_index = add i64 -1, %current_item_index
|
||||
|
||||
%value_array_i_ptr = getelementptr [9 x i64], [9 x i64]* %value_arr, i32 0, i64 %current_item_index
|
||||
%value_array_i_value = load i64, i64* %value_array_i_ptr
|
||||
|
||||
%weight_array_i_ptr = getelementptr [9 x i64], [9 x i64]* %weight_arr, i32 0, i64 %current_item_index
|
||||
%weight_array_i_value = load i64, i64* %weight_array_i_ptr
|
||||
|
||||
%sub_ready_weight_value = mul i64 -1, %weight_array_i_value
|
||||
%inlcude_weight_limit = add i64 %sub_ready_weight_value, %remaining_weight
|
||||
|
||||
%include_item_rec_subsolution = call i64 @knapsack([9 x i64]* %value_arr, [9 x i64]* %weight_arr, i64 %new_index, i64 %inlcude_weight_limit)
|
||||
%include_item_solution = add i64 %value_array_i_value, %include_item_rec_subsolution
|
||||
|
||||
%exclude_item_solution = call i64 @knapsack([9 x i64]* %value_arr, [9 x i64]* %weight_arr, i64 %new_index, i64 %remaining_weight)
|
||||
|
||||
%best_option = call i64 @max(i64 %include_item_solution, i64 %exclude_item_solution)
|
||||
ret i64 %best_option
|
||||
|
||||
}
|
||||
|
||||
define i64 @main(i64 %argc, i8** %arcv) {
|
||||
%out = call i64 @knapsack([9 x i64]* @gbl_values, [9 x i64]* @gbl_weights, i64 8, i64 30)
|
||||
ret i64 %out
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue