Optimal Basic Block Instruction Scheduling for Multiple-Issue Processors Using Constraint Programming