I'm in favor of such a reorganization, but would suggest: (1) tree-* to go to gcc/tree-opt
(2) Not distinguish between the various rtl passes (why is sched "code generation", for example?) and put all in gcc/rtl (3) Not do this: > - basic intermediate language support stays in gcc/ or goes to gcc/ir, > or gcc/tree & gcc/rtl, etc. but instead put them where they'd belong under the other rules.