$\underline{\textbf{Answer:}\Rightarrow}$
$\underline{\textbf{Explanation:}\Rightarrow}\;\mathrm {(d)}.$
$\underline{\textbf{Definition-Use Chain (DU Chain):}}$
It consists of definition(D) of a variable, and all the uses, U reachable from that definition without getting involved in other definitions.
$\underline{\textbf{Use-Definition Chain (UD Chain):}}$
It is a counterpart of Definition-Use Chain (DU Chain).
It is a $\color{blue}{\text{data structure}}$ that consists of use, $\mathbf U$, of a variable, and all the definitions $\mathbf{(D)}$ of that variable that can reach that use without getting involved in any other definitions.
- UD Chain most of the time means $\color{blue}{\text{assigning}}$ some value to a variable.
$\textbf{Applications:}$
- Knowing the use-def and def-use chains are helpful in compiler optimizations including constant propagation and common sub-expression elimination.
- Helpful in dead-code elimination.
- instruction reordering.
- (Implementation of ) scoping/shadowing.
Both of them are created by using $\color{magenta}{\textbf{Data flow analysis}}$. It is a form of $\color{blue}{\text{static code analysis}}$.
https://en.m.wikipedia.org/wiki/Use-define_chain