+ return;
+ }
+ if (value == 1) {
+ /* left << 1 == left + left */
+ ir_node *left = get_binop_left(node);
+ const node_entry_t *left_entry = get_node_entry(env, left);
+ ir_node *in[4] = {
+ left_entry->low_word, left_entry->high_word,
+ left_entry->low_word, left_entry->high_word,
+ };
+ dbg_info *dbgi = get_irn_dbg_info(node);
+ ir_node *block = get_nodes_block(node);
+ ir_graph *irg = get_irn_irg(block);
+ ir_type *mtp
+ = mode_is_signed(mode) ? binop_tp_s : binop_tp_u;
+ ir_node *addr
+ = get_intrinsic_address(mtp, op_Add, mode, mode, env);
+ ir_node *call
+ = new_rd_Call(dbgi, block, get_irg_no_mem(irg), addr, 4, in, mtp);
+ ir_node *resproj = new_r_Proj(call, mode_T, pn_Call_T_result);
+ ir_node *res_low = new_r_Proj(resproj, env->low_unsigned, 0);
+ ir_node *res_high = new_r_Proj(resproj, mode, 1);
+ set_irn_pinned(call, get_irn_pinned(node));
+ set_lowered(env, node, res_low, res_high);
+
+ return;
+ }