diff --git a/ir_x86.dasc b/ir_x86.dasc index 5b5689b..d5cb183 100644 --- a/ir_x86.dasc +++ b/ir_x86.dasc @@ -5467,7 +5467,7 @@ static void ir_emit_bitcast(ir_ctx *ctx, ir_ref def, ir_insn *insn) IR_ASSERT(ir_type_size[dst_type] == ir_type_size[src_type]); IR_ASSERT(def_reg != IR_REG_NONE); if (IR_IS_TYPE_INT(src_type) && IR_IS_TYPE_INT(dst_type)) { - if (ir_rule(ctx, insn->op1) & IR_FUSED) { + if (!IR_IS_CONST_REF(insn->op1) && (ir_rule(ctx, insn->op1) & IR_FUSED)) { offset = ir_fuse_load(ctx, insn->op1, &op1_reg); ir_emit_load_mem_int(ctx, dst_type, def_reg, op1_reg, offset); } else if (op1_reg != IR_REG_NONE) { @@ -5482,7 +5482,7 @@ static void ir_emit_bitcast(ir_ctx *ctx, ir_ref def, ir_insn *insn) ir_emit_load(ctx, dst_type, def_reg, insn->op1); } } else if (IR_IS_TYPE_FP(src_type) && IR_IS_TYPE_FP(dst_type)) { - if (ir_rule(ctx, insn->op1) & IR_FUSED) { + if (!IR_IS_CONST_REF(insn->op1) && (ir_rule(ctx, insn->op1) & IR_FUSED)) { offset = ir_fuse_load(ctx, insn->op1, &op1_reg); ir_emit_load_mem_fp(ctx, dst_type, def_reg, op1_reg, offset); } else if (op1_reg != IR_REG_NONE) {