Which optimization techniques can not be implemented if the intermediate representation is not in the SSA (static single assignment)? In other words, is the SSA optional or required?
SSA is not required for a particular optimization, but usually makes it easier to implement some optimizations.
There are compilers that don't use SSA (or at least don't use it for some parts of the compiler): For example GCCs low-level IR called RTL is not SSA-based, Go's backend uses SSA only since a few releases. Rust's newly introduced MIR (mid-level IR) is also not SSA-based.