Strength reduction is an optimization that strives to replace expensive operations by cheaper ones, where the cost factor is either execution time or code size. Examples are the replacement of multiplication and division by constant powers of two with left or right shifts.
Note:
The compiler can only replace a division by two using a shift operation if either the target division is implemented the way that -1/2 == -1, or if the value to be divided is unsigned. The result is different for negative values. To give the compiler the possibility to use a shift, ensure that the C source code already contains a shift, or that the value to be shifted is unsigned.