From 300c3b362f0625521b30e6dc378139f129d9dc9f Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 31 Jul 2007 16:16:57 +0000 Subject: [PATCH] fixed bitfield lowering: do not touch Load/Store that are NO bitfields [r15393] --- ir/lower/lower_hl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ir/lower/lower_hl.c b/ir/lower/lower_hl.c index 09eb96068..f30e76dbe 100644 --- a/ir/lower/lower_hl.c +++ b/ir/lower/lower_hl.c @@ -363,9 +363,12 @@ static void lower_bitfields_loads(ir_node *proj, ir_node *load) { bf_bits = get_mode_size_bits(bf_mode); bit_offset = get_entity_offset_bits_remainder(ent); + if (bit_offset == 0 && is_integral_size(bf_bits) && bf_mode == get_Load_mode(load)) + return; + bits = get_mode_size_bits(mode); offset = get_entity_offset(ent); - bit_offset += 8 * offset; + bit_offset += 8 * offset; /* * ok, here we are: now convert the Proj_mode_bf(Load) into And(Shr(Proj_mode(Load)) for unsigned @@ -451,12 +454,15 @@ static void lower_bitfields_stores(ir_node *store) { bf_bits = get_mode_size_bits(bf_mode); bit_offset = get_entity_offset_bits_remainder(ent); + if (bit_offset == 0 && is_integral_size(bf_bits) && bf_mode == get_irn_mode(value)) + return; + /* * ok, here we are: now convert the Store(Sel(), value) into Or(And(Load(Sel),c), And(Value,c)) */ mem = get_Store_mem(store); offset = get_entity_offset(ent); - bit_offset += 8 * offset; + bit_offset += 8 * offset; bits_mask = get_mode_size_bits(mode) - bf_bits; mask = ((unsigned)-1) >> bits_mask; -- 2.20.1