Constraint Programming Techniques for Optimal Instruction Scheduling