https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85368
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, arm ignores the BRANCH_COST altogether: #define LOGICAL_OP_NON_SHORT_CIRCUIT \ ((optimize_size) \ ? (TARGET_THUMB ? false : true) \ : TARGET_THUMB ? static_cast<bool> (current_tune->logical_op_non_short_circuit_thumb) \ : static_cast<bool> (current_tune->logical_op_non_short_circuit_arm)) I'd say we should throw away logical_op_non_short_circuit, branch_cost, -mbranch-cost= from all the generic tests, and perhaps introduce --param logical_op_non_short_circuit, which if set would override the target decision, either to 0 or to 1, with the default of using the target macro. Param rather than option to make it clear we can nuke it when we change the early gimplification to ignore such decision and have some much later pass that would adjust tests.