Does this have a gcc issue? On Thu, Jun 23, 2022, 3:28 AM Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote:
> Conditional expressions with inline functions are not optimized away if > optimization is disabled. Avoid such expressions to prevent dead > branches. It helps also during code review to immediately see if a loop > is used or not. > --- > cpukit/include/rtems/score/priorityimpl.h | 33 ++++------------------- > cpukit/score/src/kern_tc.c | 4 +++ > cpukit/score/src/threadchangepriority.c | 10 ++++++- > cpukit/score/src/threadqops.c | 16 +++++++++-- > cpukit/score/src/watchdogtick.c | 4 +++ > 5 files changed, 36 insertions(+), 31 deletions(-) > > diff --git a/cpukit/include/rtems/score/priorityimpl.h > b/cpukit/include/rtems/score/priorityimpl.h > index 1463bf6c2a..55cddf53be 100644 > --- a/cpukit/include/rtems/score/priorityimpl.h > +++ b/cpukit/include/rtems/score/priorityimpl.h > @@ -124,26 +124,6 @@ RTEMS_INLINE_ROUTINE bool _Priority_Actions_is_empty( > return actions->actions == NULL; > } > > -/** > - * @brief Checks if the priority actions is valid. > - * > - * @param aggregation The aggregation of the priority action. > - * > - * @retval true The @a aggregation is valid. > - * @retval false The @a aggregation is not valid. > - */ > -RTEMS_INLINE_ROUTINE bool _Priority_Actions_is_valid( > - const Priority_Aggregation *aggregation > -) > -{ > -#if defined(RTEMS_SMP) > - return aggregation != NULL; > -#else > - (void) aggregation; > - return false; > -#endif > -} > - > /** > * @brief Moves the priority actions' actions. > * > @@ -389,25 +369,22 @@ RTEMS_INLINE_ROUTINE void _Priority_Set_action( > aggregation->Action.type = type; > } > > +#if defined(RTEMS_SMP) > /** > * @brief Gets the next action of the priority aggregation. > * > - * @param aggregation The priority aggregation to get the next action of. > + * @param aggregation is the priority aggregation to get the next action > of. > * > - * @retval next_action The next action of @a aggregation if RTEMS_SMP is > defined. > - * @retval NULL RTEMS_SMP is not defined. > + * @return Returns the next action of the priority aggregation or NULL if > there > + * is no next action. > */ > RTEMS_INLINE_ROUTINE Priority_Aggregation *_Priority_Get_next_action( > const Priority_Aggregation *aggregation > ) > { > -#if defined(RTEMS_SMP) > return aggregation->Action.next; > -#else > - (void) aggregation; > - return NULL; > -#endif > } > +#endif > > /** > * @brief Compares two priorities. > diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c > index 2b7aeaad31..643026a1c8 100644 > --- a/cpukit/score/src/kern_tc.c > +++ b/cpukit/score/src/kern_tc.c > @@ -2329,9 +2329,13 @@ _Timecounter_Tick(void) > { > Per_CPU_Control *cpu_self = _Per_CPU_Get(); > > +#if defined(RTEMS_SMP) > if (_Per_CPU_Is_boot_processor(cpu_self)) { > +#endif > tc_windup(NULL); > +#if defined(RTEMS_SMP) > } > +#endif > > _Watchdog_Tick(cpu_self); > } > diff --git a/cpukit/score/src/threadchangepriority.c > b/cpukit/score/src/threadchangepriority.c > index 321bb15cab..80f030fdc6 100644 > --- a/cpukit/score/src/threadchangepriority.c > +++ b/cpukit/score/src/threadchangepriority.c > @@ -135,11 +135,15 @@ static void _Thread_Priority_do_perform_actions( > priority_aggregation = _Priority_Actions_move( > &queue_context->Priority.Actions ); > > do { > +#if defined(RTEMS_SMP) > Priority_Aggregation *next_aggregation; > +#endif > Priority_Node *priority_action_node; > Priority_Action_type priority_action_type; > > +#if defined(RTEMS_SMP) > next_aggregation = _Priority_Get_next_action( priority_aggregation ); > +#endif > > priority_action_node = priority_aggregation->Action.node; > priority_action_type = priority_aggregation->Action.type; > @@ -198,8 +202,12 @@ static void _Thread_Priority_do_perform_actions( > break; > } > > +#if defined(RTEMS_SMP) > priority_aggregation = next_aggregation; > - } while ( _Priority_Actions_is_valid( priority_aggregation ) ); > + } while ( priority_aggregation != NULL ); > +#else > + } while ( false ); > +#endif > > if ( !_Priority_Actions_is_empty( &queue_context->Priority.Actions ) ) { > _Thread_queue_Context_add_priority_update( queue_context, the_thread > ); > diff --git a/cpukit/score/src/threadqops.c b/cpukit/score/src/threadqops.c > index 33fc5a44cb..fbea9f6de6 100644 > --- a/cpukit/score/src/threadqops.c > +++ b/cpukit/score/src/threadqops.c > @@ -404,8 +404,12 @@ static void _Thread_queue_Priority_priority_actions( > break; > } > > +#if defined(RTEMS_SMP) > priority_aggregation = _Priority_Get_next_action( > priority_aggregation ); > - } while ( _Priority_Actions_is_valid( priority_aggregation ) ); > + } while ( priority_aggregation != NULL ); > +#else > + } while ( false ); > +#endif > } > > static void _Thread_queue_Priority_do_initialize( > @@ -734,14 +738,18 @@ static void > _Thread_queue_Priority_inherit_priority_actions( > priority_aggregation = _Priority_Actions_move( priority_actions ); > > do { > +#if defined(RTEMS_SMP) > Priority_Aggregation *next_aggregation; > +#endif > Scheduler_Node *scheduler_node; > size_t scheduler_index; > Thread_queue_Priority_queue *priority_queue; > Scheduler_Node *scheduler_node_of_owner; > Priority_Action_type priority_action_type; > > +#if defined(RTEMS_SMP) > next_aggregation = _Priority_Get_next_action( priority_aggregation ); > +#endif > > scheduler_node = SCHEDULER_NODE_OF_WAIT_PRIORITY( > priority_aggregation ); > scheduler_index = _Thread_queue_Scheduler_index( scheduler_node ); > @@ -797,8 +805,12 @@ static void > _Thread_queue_Priority_inherit_priority_actions( > break; > } > > +#if defined(RTEMS_SMP) > priority_aggregation = next_aggregation; > - } while ( _Priority_Actions_is_valid( priority_aggregation ) ); > + } while ( priority_aggregation != NULL ); > +#else > + } while ( false ); > +#endif > } > > static void _Thread_queue_Priority_inherit_do_initialize( > diff --git a/cpukit/score/src/watchdogtick.c > b/cpukit/score/src/watchdogtick.c > index 6edb3f071a..71311b598e 100644 > --- a/cpukit/score/src/watchdogtick.c > +++ b/cpukit/score/src/watchdogtick.c > @@ -83,9 +83,13 @@ void _Watchdog_Tick( Per_CPU_Control *cpu ) > Thread_Control *executing; > const Thread_CPU_budget_operations *cpu_budget_operations; > > +#ifdef RTEMS_SMP > if ( _Per_CPU_Is_boot_processor( cpu ) ) { > +#endif > ++_Watchdog_Ticks_since_boot; > +#ifdef RTEMS_SMP > } > +#endif > > _ISR_lock_ISR_disable_and_acquire( &cpu->Watchdog.Lock, &lock_context ); > > -- > 2.35.3 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel