I very much doubt an optimizing compiler is going to take an up-counting for loop and convert it to a down-counting loop. One thing is certain, if such a thing exists, there is no way I would trust it to be consistently true across compilers and architectures.
There are also fundamental choices that can have a serious effect on performance and reliability.
What's faster, using a struct or a bunch of individual variables?
Say you have three different copies of the same data corresponding to three different items. What's the fastest way to represent, store and process the data?
Hypothetical example: You have three robots generating telemetry you must track using a real time embedded system in order to coordinate their actions and react to the environment. Each robot generates one hundred variables you must track.
Is it better to define a struct and then create and populate three instances, one per robot, or is it better create one hundred distinct variables (i.e.: robot01_temperature_01, robot01_voltage_01, etc.)?
Which one results in code that executes faster, with lower resources and consumes less power?
These are not decisions an optimizing compiler is going to make.