Is there a creduce pass that is responsible for expanding macros? If not, why?
I.e. replacing
// BEGINNING
#include <stdio.h>
#define D(x) x x
#define E(x) x x x
D(E(4))
D(1)
E(2)
// ENDING
with
// BEGINNING
#include <stdio.h>
#define D(x) x x
#define E(x) x x x
4 4 4 4 4 4
1 1
2 2 2
// ENDING