1139790Simp/* { dg-do compile } */ 24Srgrimes/* { dg-options "-funsafe-loop-optimizations -ftree-vrp" } */ 34Srgrimes 44Srgrimestypedef int FLAC__int32; 54Srgrimestypedef int FLAC__bool; 64Srgrimestypedef struct { } FLAC__Subframe; 74Srgrimestypedef enum { FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 } FLAC__ChannelAssignment; 84Srgrimestypedef struct { 94Srgrimes struct FLAC__StreamEncoderProtected *protected_; 104Srgrimes struct FLAC__StreamEncoderPrivate *private_; 114Srgrimes} FLAC__StreamEncoder; 124Srgrimestypedef struct FLAC__StreamEncoderProtected { 134Srgrimes FLAC__bool loose_mid_side_stereo; 144Srgrimes unsigned channels; 154Srgrimes unsigned blocksize; 164Srgrimes} FLAC__StreamEncoderProtected; 174Srgrimestypedef struct FLAC__StreamEncoderPrivate { 184Srgrimes FLAC__int32 *integer_signal[(8u)]; 194Srgrimes FLAC__Subframe subframe_workspace_mid_side[2][2]; 204Srgrimes unsigned best_subframe_mid_side[2]; 214Srgrimes unsigned loose_mid_side_stereo_frame_count; 224Srgrimes} FLAC__StreamEncoderPrivate; 234Srgrimesstatic void get_wasted_bits_(FLAC__int32 signal[], unsigned samples) 244Srgrimes{ 254Srgrimes unsigned i; 264Srgrimes FLAC__int32 x = 0; 274Srgrimes for(i = 0; i < samples && !(x&1); i++) 284Srgrimes x |= signal[i]; 29621Srgrimes} 3050477SpeterFLAC__Subframe * process_subframes_(FLAC__StreamEncoder *encoder, unsigned *bits) 314Srgrimes{ 324Srgrimes unsigned channel; 33719Swollman FLAC__Subframe *left_subframe = 0; 3425549Speter FLAC__ChannelAssignment channel_assignment; 35719Swollman for(channel = 0; channel < encoder->protected_->channels; channel++) 3685449Sjhb get_wasted_bits_(encoder->private_->integer_signal[channel], encoder->protected_->blocksize); 3746129Sluoqi if(encoder->protected_->loose_mid_side_stereo && encoder->private_->loose_mid_side_stereo_frame_count > 0) 3885449Sjhb channel_assignment = FLAC__CHANNEL_ASSIGNMENT_MID_SIDE; 3985449Sjhb else { 4085449Sjhb FLAC__ChannelAssignment ca = (FLAC__ChannelAssignment)1; 4185449Sjhb unsigned min_bits = bits[0]; 4285449Sjhb for(channel_assignment = (FLAC__ChannelAssignment)0; (int)ca <= 3; ca = (FLAC__ChannelAssignment)((int)ca + 1)) 4385449Sjhb if(bits[ca] < min_bits) 4485449Sjhb channel_assignment = ca; 4585449Sjhb } 464Srgrimes switch(channel_assignment) { 4715174Snate case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: 48169802Sjeff case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: 49169802Sjeff case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: 504Srgrimes case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: 5183366Sjulian left_subframe = &encoder->private_->subframe_workspace_mid_side[0][encoder->private_->best_subframe_mid_side[0]]; 52144637Sjhb } 53144637Sjhb return left_subframe; 54233291Salc} 5583366Sjulian