http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45983

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2010.10.12 14:24:28
                 CC|                            |rguenth at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-10-12 
14:24:28 UTC ---
Reduced testcase for the LTO problem:

typedef long unsigned int size_t;
enum { chunk_size = 16,    max_channels = 16  };
struct float4_t { };
template<size_t NumChans>  class chunk_array_t {
    typedef float4_t value_type_t;
    typedef float scalar_type_t;
    typedef value_type_t value_array_t[chunk_size/4];
    typedef scalar_type_t scalar_array_t[chunk_size];
    value_array_t m[NumChans];
    const scalar_array_t &decay(size_t c) const;
};
template<size_t capacity> struct bitboard_t {
    struct scanner_t {
        scanner_t(const bitboard_t &b);
        size_t index() const;
    };
};
enum params_enum_t { PRM_VOL = 0,   PRM_PAN,   PRM_BND,   PRM_MOD  };
class midi_channels_params_t {
    float vals[4][max_channels];
public:
    template<params_enum_t p> float get_value(size_t cha) const {
        return vals[p][cha];
    }
};
class synth_t {
    typedef bitboard_t<max_channels> bb_channels_t;
    struct states_t {
        bb_channels_t mask_active_channels;
    };
    midi_channels_params_t &channel_params;
    states_t &states;
    void output_audio(void);
};
void synth_t::output_audio(void) {
    const bb_channels_t m(states.mask_active_channels);
    bb_channels_t::scanner_t cscan(m);
    const size_t chan = cscan.index();
    float chan_vol = channel_params.get_value<PRM_VOL>(chan);
}

Reply via email to