A loop scheduling method comprising: selecting independent loops from among loops included in a source code; determining, among the selected loops, a first loop having a higher priority and a second loop having a lower priority; scheduling the first loop using execution units, and the second loop using remaining execution units available as a result of the scheduling of the first loop; wherein the scheduling of the second loop comprises: unrolling a result of the scheduling of the first loop in response to the second loop not being scheduled using the available execution units; and scheduling the second loop using remaining execution units available as the unrolled result of the scheduling; and generating an object code comprising the result of the scheduling of the first loop and a result of the scheduling of the second loop, wherein a priority of the first loop is higher than a priority of the second loop, wherein the scheduling of the second loop further comprises: restricting, using predication guarding, an execution of the second loop after the second loop is iterated in response to an iteration count of the first loop being greater than an iteration count of the second loop, and scheduling the second loop to iterate a remaining portion of the second loop after the first loop is iterated in response to an iteration count of the first loop being less than an iteration count of the second loop. selecting independent loops from among loops included in a source code; determining, among the selected loops, a first loop having a higher priority and a second loop having a lower priority; scheduling the first loop using execution units, and the second loop using remaining execution units available as a result of the scheduling of the first loop; wherein the scheduling of the second loop comprises: unrolling a result of the scheduling of the first loop in response to the second loop not being scheduled using the available execution units; and scheduling the second loop using remaining execution units available as the unrolled result of the scheduling; and unrolling a result of the scheduling of the first loop in response to the second loop not being scheduled using the available execution units; and scheduling the second loop using remaining execution units available as the unrolled result of the scheduling; and generating an object code comprising the result of the scheduling of the first loop and a result of the scheduling of the second loop, wherein a priority of the first loop is higher than a priority of the second loop, wherein the scheduling of the second loop further comprises: restricting, using predication guarding, an execution of the second loop after the second loop is iterated in response to an iteration count of the first loop being greater than an iteration count of the second loop, and scheduling the second loop to iterate a remaining portion of the second loop after the first loop is iterated in response to an iteration count of the first loop being less than an iteration count of the second loop. restricting, using predication guarding, an execution of the second loop after the second loop is iterated in response to an iteration count of the first loop being greater than an iteration count of the second loop, and scheduling the second loop to iterate a remaining portion of the second loop after the first loop is iterated in response to an iteration count of the first loop being less than an iteration count of the second loop.