aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-coalesce.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-01-14 16:56:44 +0100
committerMartin Liska <mliska@suse.cz>2022-01-17 22:12:04 +0100
commit5c69acb32329d49e58c26fa41ae74229a52b9106 (patch)
treeddb05f9d73afb6f998457d2ac4b720e3b3b60483 /gcc/tree-ssa-coalesce.c
parent490e23032baaece71f2ec09fa1805064b150fbc2 (diff)
downloadgcc-5c69acb32329d49e58c26fa41ae74229a52b9106.zip
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.gz
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.bz2
Rename .c files to .cc files.
gcc/ada/ChangeLog: * adadecode.c: Moved to... * adadecode.cc: ...here. * affinity.c: Moved to... * affinity.cc: ...here. * argv-lynxos178-raven-cert.c: Moved to... * argv-lynxos178-raven-cert.cc: ...here. * argv.c: Moved to... * argv.cc: ...here. * aux-io.c: Moved to... * aux-io.cc: ...here. * cio.c: Moved to... * cio.cc: ...here. * cstreams.c: Moved to... * cstreams.cc: ...here. * env.c: Moved to... * env.cc: ...here. * exit.c: Moved to... * exit.cc: ...here. * expect.c: Moved to... * expect.cc: ...here. * final.c: Moved to... * final.cc: ...here. * gcc-interface/cuintp.c: Moved to... * gcc-interface/cuintp.cc: ...here. * gcc-interface/decl.c: Moved to... * gcc-interface/decl.cc: ...here. * gcc-interface/misc.c: Moved to... * gcc-interface/misc.cc: ...here. * gcc-interface/targtyps.c: Moved to... * gcc-interface/targtyps.cc: ...here. * gcc-interface/trans.c: Moved to... * gcc-interface/trans.cc: ...here. * gcc-interface/utils.c: Moved to... * gcc-interface/utils.cc: ...here. * gcc-interface/utils2.c: Moved to... * gcc-interface/utils2.cc: ...here. * init.c: Moved to... * init.cc: ...here. * initialize.c: Moved to... * initialize.cc: ...here. * libgnarl/thread.c: Moved to... * libgnarl/thread.cc: ...here. * link.c: Moved to... * link.cc: ...here. * locales.c: Moved to... * locales.cc: ...here. * mkdir.c: Moved to... * mkdir.cc: ...here. * raise.c: Moved to... * raise.cc: ...here. * rtfinal.c: Moved to... * rtfinal.cc: ...here. * rtinit.c: Moved to... * rtinit.cc: ...here. * seh_init.c: Moved to... * seh_init.cc: ...here. * sigtramp-armdroid.c: Moved to... * sigtramp-armdroid.cc: ...here. * sigtramp-ios.c: Moved to... * sigtramp-ios.cc: ...here. * sigtramp-qnx.c: Moved to... * sigtramp-qnx.cc: ...here. * sigtramp-vxworks.c: Moved to... * sigtramp-vxworks.cc: ...here. * socket.c: Moved to... * socket.cc: ...here. * tracebak.c: Moved to... * tracebak.cc: ...here. * version.c: Moved to... * version.cc: ...here. * vx_stack_info.c: Moved to... * vx_stack_info.cc: ...here. gcc/ChangeLog: * adjust-alignment.c: Moved to... * adjust-alignment.cc: ...here. * alias.c: Moved to... * alias.cc: ...here. * alloc-pool.c: Moved to... * alloc-pool.cc: ...here. * asan.c: Moved to... * asan.cc: ...here. * attribs.c: Moved to... * attribs.cc: ...here. * auto-inc-dec.c: Moved to... * auto-inc-dec.cc: ...here. * auto-profile.c: Moved to... * auto-profile.cc: ...here. * bb-reorder.c: Moved to... * bb-reorder.cc: ...here. * bitmap.c: Moved to... * bitmap.cc: ...here. * btfout.c: Moved to... * btfout.cc: ...here. * builtins.c: Moved to... * builtins.cc: ...here. * caller-save.c: Moved to... * caller-save.cc: ...here. * calls.c: Moved to... * calls.cc: ...here. * ccmp.c: Moved to... * ccmp.cc: ...here. * cfg.c: Moved to... * cfg.cc: ...here. * cfganal.c: Moved to... * cfganal.cc: ...here. * cfgbuild.c: Moved to... * cfgbuild.cc: ...here. * cfgcleanup.c: Moved to... * cfgcleanup.cc: ...here. * cfgexpand.c: Moved to... * cfgexpand.cc: ...here. * cfghooks.c: Moved to... * cfghooks.cc: ...here. * cfgloop.c: Moved to... * cfgloop.cc: ...here. * cfgloopanal.c: Moved to... * cfgloopanal.cc: ...here. * cfgloopmanip.c: Moved to... * cfgloopmanip.cc: ...here. * cfgrtl.c: Moved to... * cfgrtl.cc: ...here. * cgraph.c: Moved to... * cgraph.cc: ...here. * cgraphbuild.c: Moved to... * cgraphbuild.cc: ...here. * cgraphclones.c: Moved to... * cgraphclones.cc: ...here. * cgraphunit.c: Moved to... * cgraphunit.cc: ...here. * collect-utils.c: Moved to... * collect-utils.cc: ...here. * collect2-aix.c: Moved to... * collect2-aix.cc: ...here. * collect2.c: Moved to... * collect2.cc: ...here. * combine-stack-adj.c: Moved to... * combine-stack-adj.cc: ...here. * combine.c: Moved to... * combine.cc: ...here. * common/common-targhooks.c: Moved to... * common/common-targhooks.cc: ...here. * common/config/aarch64/aarch64-common.c: Moved to... * common/config/aarch64/aarch64-common.cc: ...here. * common/config/alpha/alpha-common.c: Moved to... * common/config/alpha/alpha-common.cc: ...here. * common/config/arc/arc-common.c: Moved to... * common/config/arc/arc-common.cc: ...here. * common/config/arm/arm-common.c: Moved to... * common/config/arm/arm-common.cc: ...here. * common/config/avr/avr-common.c: Moved to... * common/config/avr/avr-common.cc: ...here. * common/config/bfin/bfin-common.c: Moved to... * common/config/bfin/bfin-common.cc: ...here. * common/config/bpf/bpf-common.c: Moved to... * common/config/bpf/bpf-common.cc: ...here. * common/config/c6x/c6x-common.c: Moved to... * common/config/c6x/c6x-common.cc: ...here. * common/config/cr16/cr16-common.c: Moved to... * common/config/cr16/cr16-common.cc: ...here. * common/config/cris/cris-common.c: Moved to... * common/config/cris/cris-common.cc: ...here. * common/config/csky/csky-common.c: Moved to... * common/config/csky/csky-common.cc: ...here. * common/config/default-common.c: Moved to... * common/config/default-common.cc: ...here. * common/config/epiphany/epiphany-common.c: Moved to... * common/config/epiphany/epiphany-common.cc: ...here. * common/config/fr30/fr30-common.c: Moved to... * common/config/fr30/fr30-common.cc: ...here. * common/config/frv/frv-common.c: Moved to... * common/config/frv/frv-common.cc: ...here. * common/config/gcn/gcn-common.c: Moved to... * common/config/gcn/gcn-common.cc: ...here. * common/config/h8300/h8300-common.c: Moved to... * common/config/h8300/h8300-common.cc: ...here. * common/config/i386/i386-common.c: Moved to... * common/config/i386/i386-common.cc: ...here. * common/config/ia64/ia64-common.c: Moved to... * common/config/ia64/ia64-common.cc: ...here. * common/config/iq2000/iq2000-common.c: Moved to... * common/config/iq2000/iq2000-common.cc: ...here. * common/config/lm32/lm32-common.c: Moved to... * common/config/lm32/lm32-common.cc: ...here. * common/config/m32r/m32r-common.c: Moved to... * common/config/m32r/m32r-common.cc: ...here. * common/config/m68k/m68k-common.c: Moved to... * common/config/m68k/m68k-common.cc: ...here. * common/config/mcore/mcore-common.c: Moved to... * common/config/mcore/mcore-common.cc: ...here. * common/config/microblaze/microblaze-common.c: Moved to... * common/config/microblaze/microblaze-common.cc: ...here. * common/config/mips/mips-common.c: Moved to... * common/config/mips/mips-common.cc: ...here. * common/config/mmix/mmix-common.c: Moved to... * common/config/mmix/mmix-common.cc: ...here. * common/config/mn10300/mn10300-common.c: Moved to... * common/config/mn10300/mn10300-common.cc: ...here. * common/config/msp430/msp430-common.c: Moved to... * common/config/msp430/msp430-common.cc: ...here. * common/config/nds32/nds32-common.c: Moved to... * common/config/nds32/nds32-common.cc: ...here. * common/config/nios2/nios2-common.c: Moved to... * common/config/nios2/nios2-common.cc: ...here. * common/config/nvptx/nvptx-common.c: Moved to... * common/config/nvptx/nvptx-common.cc: ...here. * common/config/or1k/or1k-common.c: Moved to... * common/config/or1k/or1k-common.cc: ...here. * common/config/pa/pa-common.c: Moved to... * common/config/pa/pa-common.cc: ...here. * common/config/pdp11/pdp11-common.c: Moved to... * common/config/pdp11/pdp11-common.cc: ...here. * common/config/pru/pru-common.c: Moved to... * common/config/pru/pru-common.cc: ...here. * common/config/riscv/riscv-common.c: Moved to... * common/config/riscv/riscv-common.cc: ...here. * common/config/rs6000/rs6000-common.c: Moved to... * common/config/rs6000/rs6000-common.cc: ...here. * common/config/rx/rx-common.c: Moved to... * common/config/rx/rx-common.cc: ...here. * common/config/s390/s390-common.c: Moved to... * common/config/s390/s390-common.cc: ...here. * common/config/sh/sh-common.c: Moved to... * common/config/sh/sh-common.cc: ...here. * common/config/sparc/sparc-common.c: Moved to... * common/config/sparc/sparc-common.cc: ...here. * common/config/tilegx/tilegx-common.c: Moved to... * common/config/tilegx/tilegx-common.cc: ...here. * common/config/tilepro/tilepro-common.c: Moved to... * common/config/tilepro/tilepro-common.cc: ...here. * common/config/v850/v850-common.c: Moved to... * common/config/v850/v850-common.cc: ...here. * common/config/vax/vax-common.c: Moved to... * common/config/vax/vax-common.cc: ...here. * common/config/visium/visium-common.c: Moved to... * common/config/visium/visium-common.cc: ...here. * common/config/xstormy16/xstormy16-common.c: Moved to... * common/config/xstormy16/xstormy16-common.cc: ...here. * common/config/xtensa/xtensa-common.c: Moved to... * common/config/xtensa/xtensa-common.cc: ...here. * compare-elim.c: Moved to... * compare-elim.cc: ...here. * config/aarch64/aarch64-bti-insert.c: Moved to... * config/aarch64/aarch64-bti-insert.cc: ...here. * config/aarch64/aarch64-builtins.c: Moved to... * config/aarch64/aarch64-builtins.cc: ...here. * config/aarch64/aarch64-c.c: Moved to... * config/aarch64/aarch64-c.cc: ...here. * config/aarch64/aarch64-d.c: Moved to... * config/aarch64/aarch64-d.cc: ...here. * config/aarch64/aarch64.c: Moved to... * config/aarch64/aarch64.cc: ...here. * config/aarch64/cortex-a57-fma-steering.c: Moved to... * config/aarch64/cortex-a57-fma-steering.cc: ...here. * config/aarch64/driver-aarch64.c: Moved to... * config/aarch64/driver-aarch64.cc: ...here. * config/aarch64/falkor-tag-collision-avoidance.c: Moved to... * config/aarch64/falkor-tag-collision-avoidance.cc: ...here. * config/aarch64/host-aarch64-darwin.c: Moved to... * config/aarch64/host-aarch64-darwin.cc: ...here. * config/alpha/alpha.c: Moved to... * config/alpha/alpha.cc: ...here. * config/alpha/driver-alpha.c: Moved to... * config/alpha/driver-alpha.cc: ...here. * config/arc/arc-c.c: Moved to... * config/arc/arc-c.cc: ...here. * config/arc/arc.c: Moved to... * config/arc/arc.cc: ...here. * config/arc/driver-arc.c: Moved to... * config/arc/driver-arc.cc: ...here. * config/arm/aarch-common.c: Moved to... * config/arm/aarch-common.cc: ...here. * config/arm/arm-builtins.c: Moved to... * config/arm/arm-builtins.cc: ...here. * config/arm/arm-c.c: Moved to... * config/arm/arm-c.cc: ...here. * config/arm/arm-d.c: Moved to... * config/arm/arm-d.cc: ...here. * config/arm/arm.c: Moved to... * config/arm/arm.cc: ...here. * config/arm/driver-arm.c: Moved to... * config/arm/driver-arm.cc: ...here. * config/avr/avr-c.c: Moved to... * config/avr/avr-c.cc: ...here. * config/avr/avr-devices.c: Moved to... * config/avr/avr-devices.cc: ...here. * config/avr/avr-log.c: Moved to... * config/avr/avr-log.cc: ...here. * config/avr/avr.c: Moved to... * config/avr/avr.cc: ...here. * config/avr/driver-avr.c: Moved to... * config/avr/driver-avr.cc: ...here. * config/avr/gen-avr-mmcu-specs.c: Moved to... * config/avr/gen-avr-mmcu-specs.cc: ...here. * config/avr/gen-avr-mmcu-texi.c: Moved to... * config/avr/gen-avr-mmcu-texi.cc: ...here. * config/bfin/bfin.c: Moved to... * config/bfin/bfin.cc: ...here. * config/bpf/bpf.c: Moved to... * config/bpf/bpf.cc: ...here. * config/bpf/coreout.c: Moved to... * config/bpf/coreout.cc: ...here. * config/c6x/c6x.c: Moved to... * config/c6x/c6x.cc: ...here. * config/cr16/cr16.c: Moved to... * config/cr16/cr16.cc: ...here. * config/cris/cris.c: Moved to... * config/cris/cris.cc: ...here. * config/csky/csky.c: Moved to... * config/csky/csky.cc: ...here. * config/darwin-c.c: Moved to... * config/darwin-c.cc: ...here. * config/darwin-d.c: Moved to... * config/darwin-d.cc: ...here. * config/darwin-driver.c: Moved to... * config/darwin-driver.cc: ...here. * config/darwin-f.c: Moved to... * config/darwin-f.cc: ...here. * config/darwin.c: Moved to... * config/darwin.cc: ...here. * config/default-c.c: Moved to... * config/default-c.cc: ...here. * config/default-d.c: Moved to... * config/default-d.cc: ...here. * config/dragonfly-d.c: Moved to... * config/dragonfly-d.cc: ...here. * config/epiphany/epiphany.c: Moved to... * config/epiphany/epiphany.cc: ...here. * config/epiphany/mode-switch-use.c: Moved to... * config/epiphany/mode-switch-use.cc: ...here. * config/epiphany/resolve-sw-modes.c: Moved to... * config/epiphany/resolve-sw-modes.cc: ...here. * config/fr30/fr30.c: Moved to... * config/fr30/fr30.cc: ...here. * config/freebsd-d.c: Moved to... * config/freebsd-d.cc: ...here. * config/frv/frv.c: Moved to... * config/frv/frv.cc: ...here. * config/ft32/ft32.c: Moved to... * config/ft32/ft32.cc: ...here. * config/gcn/driver-gcn.c: Moved to... * config/gcn/driver-gcn.cc: ...here. * config/gcn/gcn-run.c: Moved to... * config/gcn/gcn-run.cc: ...here. * config/gcn/gcn-tree.c: Moved to... * config/gcn/gcn-tree.cc: ...here. * config/gcn/gcn.c: Moved to... * config/gcn/gcn.cc: ...here. * config/gcn/mkoffload.c: Moved to... * config/gcn/mkoffload.cc: ...here. * config/glibc-c.c: Moved to... * config/glibc-c.cc: ...here. * config/glibc-d.c: Moved to... * config/glibc-d.cc: ...here. * config/h8300/h8300.c: Moved to... * config/h8300/h8300.cc: ...here. * config/host-darwin.c: Moved to... * config/host-darwin.cc: ...here. * config/host-hpux.c: Moved to... * config/host-hpux.cc: ...here. * config/host-linux.c: Moved to... * config/host-linux.cc: ...here. * config/host-netbsd.c: Moved to... * config/host-netbsd.cc: ...here. * config/host-openbsd.c: Moved to... * config/host-openbsd.cc: ...here. * config/host-solaris.c: Moved to... * config/host-solaris.cc: ...here. * config/i386/djgpp.c: Moved to... * config/i386/djgpp.cc: ...here. * config/i386/driver-i386.c: Moved to... * config/i386/driver-i386.cc: ...here. * config/i386/driver-mingw32.c: Moved to... * config/i386/driver-mingw32.cc: ...here. * config/i386/gnu-property.c: Moved to... * config/i386/gnu-property.cc: ...here. * config/i386/host-cygwin.c: Moved to... * config/i386/host-cygwin.cc: ...here. * config/i386/host-i386-darwin.c: Moved to... * config/i386/host-i386-darwin.cc: ...here. * config/i386/host-mingw32.c: Moved to... * config/i386/host-mingw32.cc: ...here. * config/i386/i386-builtins.c: Moved to... * config/i386/i386-builtins.cc: ...here. * config/i386/i386-c.c: Moved to... * config/i386/i386-c.cc: ...here. * config/i386/i386-d.c: Moved to... * config/i386/i386-d.cc: ...here. * config/i386/i386-expand.c: Moved to... * config/i386/i386-expand.cc: ...here. * config/i386/i386-features.c: Moved to... * config/i386/i386-features.cc: ...here. * config/i386/i386-options.c: Moved to... * config/i386/i386-options.cc: ...here. * config/i386/i386.c: Moved to... * config/i386/i386.cc: ...here. * config/i386/intelmic-mkoffload.c: Moved to... * config/i386/intelmic-mkoffload.cc: ...here. * config/i386/msformat-c.c: Moved to... * config/i386/msformat-c.cc: ...here. * config/i386/winnt-cxx.c: Moved to... * config/i386/winnt-cxx.cc: ...here. * config/i386/winnt-d.c: Moved to... * config/i386/winnt-d.cc: ...here. * config/i386/winnt-stubs.c: Moved to... * config/i386/winnt-stubs.cc: ...here. * config/i386/winnt.c: Moved to... * config/i386/winnt.cc: ...here. * config/i386/x86-tune-sched-atom.c: Moved to... * config/i386/x86-tune-sched-atom.cc: ...here. * config/i386/x86-tune-sched-bd.c: Moved to... * config/i386/x86-tune-sched-bd.cc: ...here. * config/i386/x86-tune-sched-core.c: Moved to... * config/i386/x86-tune-sched-core.cc: ...here. * config/i386/x86-tune-sched.c: Moved to... * config/i386/x86-tune-sched.cc: ...here. * config/ia64/ia64-c.c: Moved to... * config/ia64/ia64-c.cc: ...here. * config/ia64/ia64.c: Moved to... * config/ia64/ia64.cc: ...here. * config/iq2000/iq2000.c: Moved to... * config/iq2000/iq2000.cc: ...here. * config/linux.c: Moved to... * config/linux.cc: ...here. * config/lm32/lm32.c: Moved to... * config/lm32/lm32.cc: ...here. * config/m32c/m32c-pragma.c: Moved to... * config/m32c/m32c-pragma.cc: ...here. * config/m32c/m32c.c: Moved to... * config/m32c/m32c.cc: ...here. * config/m32r/m32r.c: Moved to... * config/m32r/m32r.cc: ...here. * config/m68k/m68k.c: Moved to... * config/m68k/m68k.cc: ...here. * config/mcore/mcore.c: Moved to... * config/mcore/mcore.cc: ...here. * config/microblaze/microblaze-c.c: Moved to... * config/microblaze/microblaze-c.cc: ...here. * config/microblaze/microblaze.c: Moved to... * config/microblaze/microblaze.cc: ...here. * config/mips/driver-native.c: Moved to... * config/mips/driver-native.cc: ...here. * config/mips/frame-header-opt.c: Moved to... * config/mips/frame-header-opt.cc: ...here. * config/mips/mips-d.c: Moved to... * config/mips/mips-d.cc: ...here. * config/mips/mips.c: Moved to... * config/mips/mips.cc: ...here. * config/mmix/mmix.c: Moved to... * config/mmix/mmix.cc: ...here. * config/mn10300/mn10300.c: Moved to... * config/mn10300/mn10300.cc: ...here. * config/moxie/moxie.c: Moved to... * config/moxie/moxie.cc: ...here. * config/msp430/driver-msp430.c: Moved to... * config/msp430/driver-msp430.cc: ...here. * config/msp430/msp430-c.c: Moved to... * config/msp430/msp430-c.cc: ...here. * config/msp430/msp430-devices.c: Moved to... * config/msp430/msp430-devices.cc: ...here. * config/msp430/msp430.c: Moved to... * config/msp430/msp430.cc: ...here. * config/nds32/nds32-cost.c: Moved to... * config/nds32/nds32-cost.cc: ...here. * config/nds32/nds32-fp-as-gp.c: Moved to... * config/nds32/nds32-fp-as-gp.cc: ...here. * config/nds32/nds32-intrinsic.c: Moved to... * config/nds32/nds32-intrinsic.cc: ...here. * config/nds32/nds32-isr.c: Moved to... * config/nds32/nds32-isr.cc: ...here. * config/nds32/nds32-md-auxiliary.c: Moved to... * config/nds32/nds32-md-auxiliary.cc: ...here. * config/nds32/nds32-memory-manipulation.c: Moved to... * config/nds32/nds32-memory-manipulation.cc: ...here. * config/nds32/nds32-pipelines-auxiliary.c: Moved to... * config/nds32/nds32-pipelines-auxiliary.cc: ...here. * config/nds32/nds32-predicates.c: Moved to... * config/nds32/nds32-predicates.cc: ...here. * config/nds32/nds32-relax-opt.c: Moved to... * config/nds32/nds32-relax-opt.cc: ...here. * config/nds32/nds32-utils.c: Moved to... * config/nds32/nds32-utils.cc: ...here. * config/nds32/nds32.c: Moved to... * config/nds32/nds32.cc: ...here. * config/netbsd-d.c: Moved to... * config/netbsd-d.cc: ...here. * config/netbsd.c: Moved to... * config/netbsd.cc: ...here. * config/nios2/nios2.c: Moved to... * config/nios2/nios2.cc: ...here. * config/nvptx/mkoffload.c: Moved to... * config/nvptx/mkoffload.cc: ...here. * config/nvptx/nvptx-c.c: Moved to... * config/nvptx/nvptx-c.cc: ...here. * config/nvptx/nvptx.c: Moved to... * config/nvptx/nvptx.cc: ...here. * config/openbsd-d.c: Moved to... * config/openbsd-d.cc: ...here. * config/or1k/or1k.c: Moved to... * config/or1k/or1k.cc: ...here. * config/pa/pa-d.c: Moved to... * config/pa/pa-d.cc: ...here. * config/pa/pa.c: Moved to... * config/pa/pa.cc: ...here. * config/pdp11/pdp11.c: Moved to... * config/pdp11/pdp11.cc: ...here. * config/pru/pru-passes.c: Moved to... * config/pru/pru-passes.cc: ...here. * config/pru/pru-pragma.c: Moved to... * config/pru/pru-pragma.cc: ...here. * config/pru/pru.c: Moved to... * config/pru/pru.cc: ...here. * config/riscv/riscv-builtins.c: Moved to... * config/riscv/riscv-builtins.cc: ...here. * config/riscv/riscv-c.c: Moved to... * config/riscv/riscv-c.cc: ...here. * config/riscv/riscv-d.c: Moved to... * config/riscv/riscv-d.cc: ...here. * config/riscv/riscv-shorten-memrefs.c: Moved to... * config/riscv/riscv-shorten-memrefs.cc: ...here. * config/riscv/riscv-sr.c: Moved to... * config/riscv/riscv-sr.cc: ...here. * config/riscv/riscv.c: Moved to... * config/riscv/riscv.cc: ...here. * config/rl78/rl78-c.c: Moved to... * config/rl78/rl78-c.cc: ...here. * config/rl78/rl78.c: Moved to... * config/rl78/rl78.cc: ...here. * config/rs6000/driver-rs6000.c: Moved to... * config/rs6000/driver-rs6000.cc: ...here. * config/rs6000/host-darwin.c: Moved to... * config/rs6000/host-darwin.cc: ...here. * config/rs6000/host-ppc64-darwin.c: Moved to... * config/rs6000/host-ppc64-darwin.cc: ...here. * config/rs6000/rbtree.c: Moved to... * config/rs6000/rbtree.cc: ...here. * config/rs6000/rs6000-c.c: Moved to... * config/rs6000/rs6000-c.cc: ...here. * config/rs6000/rs6000-call.c: Moved to... * config/rs6000/rs6000-call.cc: ...here. * config/rs6000/rs6000-d.c: Moved to... * config/rs6000/rs6000-d.cc: ...here. * config/rs6000/rs6000-gen-builtins.c: Moved to... * config/rs6000/rs6000-gen-builtins.cc: ...here. * config/rs6000/rs6000-linux.c: Moved to... * config/rs6000/rs6000-linux.cc: ...here. * config/rs6000/rs6000-logue.c: Moved to... * config/rs6000/rs6000-logue.cc: ...here. * config/rs6000/rs6000-p8swap.c: Moved to... * config/rs6000/rs6000-p8swap.cc: ...here. * config/rs6000/rs6000-pcrel-opt.c: Moved to... * config/rs6000/rs6000-pcrel-opt.cc: ...here. * config/rs6000/rs6000-string.c: Moved to... * config/rs6000/rs6000-string.cc: ...here. * config/rs6000/rs6000.c: Moved to... * config/rs6000/rs6000.cc: ...here. * config/rx/rx.c: Moved to... * config/rx/rx.cc: ...here. * config/s390/driver-native.c: Moved to... * config/s390/driver-native.cc: ...here. * config/s390/s390-c.c: Moved to... * config/s390/s390-c.cc: ...here. * config/s390/s390-d.c: Moved to... * config/s390/s390-d.cc: ...here. * config/s390/s390.c: Moved to... * config/s390/s390.cc: ...here. * config/sh/divtab-sh4-300.c: Moved to... * config/sh/divtab-sh4-300.cc: ...here. * config/sh/divtab-sh4.c: Moved to... * config/sh/divtab-sh4.cc: ...here. * config/sh/divtab.c: Moved to... * config/sh/divtab.cc: ...here. * config/sh/sh-c.c: Moved to... * config/sh/sh-c.cc: ...here. * config/sh/sh.c: Moved to... * config/sh/sh.cc: ...here. * config/sol2-c.c: Moved to... * config/sol2-c.cc: ...here. * config/sol2-cxx.c: Moved to... * config/sol2-cxx.cc: ...here. * config/sol2-d.c: Moved to... * config/sol2-d.cc: ...here. * config/sol2-stubs.c: Moved to... * config/sol2-stubs.cc: ...here. * config/sol2.c: Moved to... * config/sol2.cc: ...here. * config/sparc/driver-sparc.c: Moved to... * config/sparc/driver-sparc.cc: ...here. * config/sparc/sparc-c.c: Moved to... * config/sparc/sparc-c.cc: ...here. * config/sparc/sparc-d.c: Moved to... * config/sparc/sparc-d.cc: ...here. * config/sparc/sparc.c: Moved to... * config/sparc/sparc.cc: ...here. * config/stormy16/stormy16.c: Moved to... * config/stormy16/stormy16.cc: ...here. * config/tilegx/mul-tables.c: Moved to... * config/tilegx/mul-tables.cc: ...here. * config/tilegx/tilegx-c.c: Moved to... * config/tilegx/tilegx-c.cc: ...here. * config/tilegx/tilegx.c: Moved to... * config/tilegx/tilegx.cc: ...here. * config/tilepro/mul-tables.c: Moved to... * config/tilepro/mul-tables.cc: ...here. * config/tilepro/tilepro-c.c: Moved to... * config/tilepro/tilepro-c.cc: ...here. * config/tilepro/tilepro.c: Moved to... * config/tilepro/tilepro.cc: ...here. * config/v850/v850-c.c: Moved to... * config/v850/v850-c.cc: ...here. * config/v850/v850.c: Moved to... * config/v850/v850.cc: ...here. * config/vax/vax.c: Moved to... * config/vax/vax.cc: ...here. * config/visium/visium.c: Moved to... * config/visium/visium.cc: ...here. * config/vms/vms-c.c: Moved to... * config/vms/vms-c.cc: ...here. * config/vms/vms-f.c: Moved to... * config/vms/vms-f.cc: ...here. * config/vms/vms.c: Moved to... * config/vms/vms.cc: ...here. * config/vxworks-c.c: Moved to... * config/vxworks-c.cc: ...here. * config/vxworks.c: Moved to... * config/vxworks.cc: ...here. * config/winnt-c.c: Moved to... * config/winnt-c.cc: ...here. * config/xtensa/xtensa.c: Moved to... * config/xtensa/xtensa.cc: ...here. * context.c: Moved to... * context.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * coverage.c: Moved to... * coverage.cc: ...here. * cppbuiltin.c: Moved to... * cppbuiltin.cc: ...here. * cppdefault.c: Moved to... * cppdefault.cc: ...here. * cprop.c: Moved to... * cprop.cc: ...here. * cse.c: Moved to... * cse.cc: ...here. * cselib.c: Moved to... * cselib.cc: ...here. * ctfc.c: Moved to... * ctfc.cc: ...here. * ctfout.c: Moved to... * ctfout.cc: ...here. * data-streamer-in.c: Moved to... * data-streamer-in.cc: ...here. * data-streamer-out.c: Moved to... * data-streamer-out.cc: ...here. * data-streamer.c: Moved to... * data-streamer.cc: ...here. * dbgcnt.c: Moved to... * dbgcnt.cc: ...here. * dbxout.c: Moved to... * dbxout.cc: ...here. * dce.c: Moved to... * dce.cc: ...here. * ddg.c: Moved to... * ddg.cc: ...here. * debug.c: Moved to... * debug.cc: ...here. * df-core.c: Moved to... * df-core.cc: ...here. * df-problems.c: Moved to... * df-problems.cc: ...here. * df-scan.c: Moved to... * df-scan.cc: ...here. * dfp.c: Moved to... * dfp.cc: ...here. * diagnostic-color.c: Moved to... * diagnostic-color.cc: ...here. * diagnostic-show-locus.c: Moved to... * diagnostic-show-locus.cc: ...here. * diagnostic-spec.c: Moved to... * diagnostic-spec.cc: ...here. * diagnostic.c: Moved to... * diagnostic.cc: ...here. * dojump.c: Moved to... * dojump.cc: ...here. * dominance.c: Moved to... * dominance.cc: ...here. * domwalk.c: Moved to... * domwalk.cc: ...here. * double-int.c: Moved to... * double-int.cc: ...here. * dse.c: Moved to... * dse.cc: ...here. * dumpfile.c: Moved to... * dumpfile.cc: ...here. * dwarf2asm.c: Moved to... * dwarf2asm.cc: ...here. * dwarf2cfi.c: Moved to... * dwarf2cfi.cc: ...here. * dwarf2ctf.c: Moved to... * dwarf2ctf.cc: ...here. * dwarf2out.c: Moved to... * dwarf2out.cc: ...here. * early-remat.c: Moved to... * early-remat.cc: ...here. * edit-context.c: Moved to... * edit-context.cc: ...here. * emit-rtl.c: Moved to... * emit-rtl.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * et-forest.c: Moved to... * et-forest.cc: ...here. * except.c: Moved to... * except.cc: ...here. * explow.c: Moved to... * explow.cc: ...here. * expmed.c: Moved to... * expmed.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * fibonacci_heap.c: Moved to... * fibonacci_heap.cc: ...here. * file-find.c: Moved to... * file-find.cc: ...here. * file-prefix-map.c: Moved to... * file-prefix-map.cc: ...here. * final.c: Moved to... * final.cc: ...here. * fixed-value.c: Moved to... * fixed-value.cc: ...here. * fold-const-call.c: Moved to... * fold-const-call.cc: ...here. * fold-const.c: Moved to... * fold-const.cc: ...here. * fp-test.c: Moved to... * fp-test.cc: ...here. * function-tests.c: Moved to... * function-tests.cc: ...here. * function.c: Moved to... * function.cc: ...here. * fwprop.c: Moved to... * fwprop.cc: ...here. * gcc-ar.c: Moved to... * gcc-ar.cc: ...here. * gcc-main.c: Moved to... * gcc-main.cc: ...here. * gcc-rich-location.c: Moved to... * gcc-rich-location.cc: ...here. * gcc.c: Moved to... * gcc.cc: ...here. * gcov-dump.c: Moved to... * gcov-dump.cc: ...here. * gcov-io.c: Moved to... * gcov-io.cc: ...here. * gcov-tool.c: Moved to... * gcov-tool.cc: ...here. * gcov.c: Moved to... * gcov.cc: ...here. * gcse-common.c: Moved to... * gcse-common.cc: ...here. * gcse.c: Moved to... * gcse.cc: ...here. * genattr-common.c: Moved to... * genattr-common.cc: ...here. * genattr.c: Moved to... * genattr.cc: ...here. * genattrtab.c: Moved to... * genattrtab.cc: ...here. * genautomata.c: Moved to... * genautomata.cc: ...here. * gencfn-macros.c: Moved to... * gencfn-macros.cc: ...here. * gencheck.c: Moved to... * gencheck.cc: ...here. * genchecksum.c: Moved to... * genchecksum.cc: ...here. * gencodes.c: Moved to... * gencodes.cc: ...here. * genconditions.c: Moved to... * genconditions.cc: ...here. * genconfig.c: Moved to... * genconfig.cc: ...here. * genconstants.c: Moved to... * genconstants.cc: ...here. * genemit.c: Moved to... * genemit.cc: ...here. * genenums.c: Moved to... * genenums.cc: ...here. * generic-match-head.c: Moved to... * generic-match-head.cc: ...here. * genextract.c: Moved to... * genextract.cc: ...here. * genflags.c: Moved to... * genflags.cc: ...here. * gengenrtl.c: Moved to... * gengenrtl.cc: ...here. * gengtype-parse.c: Moved to... * gengtype-parse.cc: ...here. * gengtype-state.c: Moved to... * gengtype-state.cc: ...here. * gengtype.c: Moved to... * gengtype.cc: ...here. * genhooks.c: Moved to... * genhooks.cc: ...here. * genmatch.c: Moved to... * genmatch.cc: ...here. * genmddeps.c: Moved to... * genmddeps.cc: ...here. * genmddump.c: Moved to... * genmddump.cc: ...here. * genmodes.c: Moved to... * genmodes.cc: ...here. * genopinit.c: Moved to... * genopinit.cc: ...here. * genoutput.c: Moved to... * genoutput.cc: ...here. * genpeep.c: Moved to... * genpeep.cc: ...here. * genpreds.c: Moved to... * genpreds.cc: ...here. * genrecog.c: Moved to... * genrecog.cc: ...here. * gensupport.c: Moved to... * gensupport.cc: ...here. * gentarget-def.c: Moved to... * gentarget-def.cc: ...here. * genversion.c: Moved to... * genversion.cc: ...here. * ggc-common.c: Moved to... * ggc-common.cc: ...here. * ggc-none.c: Moved to... * ggc-none.cc: ...here. * ggc-page.c: Moved to... * ggc-page.cc: ...here. * ggc-tests.c: Moved to... * ggc-tests.cc: ...here. * gimple-builder.c: Moved to... * gimple-builder.cc: ...here. * gimple-expr.c: Moved to... * gimple-expr.cc: ...here. * gimple-fold.c: Moved to... * gimple-fold.cc: ...here. * gimple-iterator.c: Moved to... * gimple-iterator.cc: ...here. * gimple-laddress.c: Moved to... * gimple-laddress.cc: ...here. * gimple-loop-jam.c: Moved to... * gimple-loop-jam.cc: ...here. * gimple-low.c: Moved to... * gimple-low.cc: ...here. * gimple-match-head.c: Moved to... * gimple-match-head.cc: ...here. * gimple-pretty-print.c: Moved to... * gimple-pretty-print.cc: ...here. * gimple-ssa-backprop.c: Moved to... * gimple-ssa-backprop.cc: ...here. * gimple-ssa-evrp-analyze.c: Moved to... * gimple-ssa-evrp-analyze.cc: ...here. * gimple-ssa-evrp.c: Moved to... * gimple-ssa-evrp.cc: ...here. * gimple-ssa-isolate-paths.c: Moved to... * gimple-ssa-isolate-paths.cc: ...here. * gimple-ssa-nonnull-compare.c: Moved to... * gimple-ssa-nonnull-compare.cc: ...here. * gimple-ssa-split-paths.c: Moved to... * gimple-ssa-split-paths.cc: ...here. * gimple-ssa-sprintf.c: Moved to... * gimple-ssa-sprintf.cc: ...here. * gimple-ssa-store-merging.c: Moved to... * gimple-ssa-store-merging.cc: ...here. * gimple-ssa-strength-reduction.c: Moved to... * gimple-ssa-strength-reduction.cc: ...here. * gimple-ssa-warn-alloca.c: Moved to... * gimple-ssa-warn-alloca.cc: ...here. * gimple-ssa-warn-restrict.c: Moved to... * gimple-ssa-warn-restrict.cc: ...here. * gimple-streamer-in.c: Moved to... * gimple-streamer-in.cc: ...here. * gimple-streamer-out.c: Moved to... * gimple-streamer-out.cc: ...here. * gimple-walk.c: Moved to... * gimple-walk.cc: ...here. * gimple-warn-recursion.c: Moved to... * gimple-warn-recursion.cc: ...here. * gimple.c: Moved to... * gimple.cc: ...here. * gimplify-me.c: Moved to... * gimplify-me.cc: ...here. * gimplify.c: Moved to... * gimplify.cc: ...here. * godump.c: Moved to... * godump.cc: ...here. * graph.c: Moved to... * graph.cc: ...here. * graphds.c: Moved to... * graphds.cc: ...here. * graphite-dependences.c: Moved to... * graphite-dependences.cc: ...here. * graphite-isl-ast-to-gimple.c: Moved to... * graphite-isl-ast-to-gimple.cc: ...here. * graphite-optimize-isl.c: Moved to... * graphite-optimize-isl.cc: ...here. * graphite-poly.c: Moved to... * graphite-poly.cc: ...here. * graphite-scop-detection.c: Moved to... * graphite-scop-detection.cc: ...here. * graphite-sese-to-poly.c: Moved to... * graphite-sese-to-poly.cc: ...here. * graphite.c: Moved to... * graphite.cc: ...here. * haifa-sched.c: Moved to... * haifa-sched.cc: ...here. * hash-map-tests.c: Moved to... * hash-map-tests.cc: ...here. * hash-set-tests.c: Moved to... * hash-set-tests.cc: ...here. * hash-table.c: Moved to... * hash-table.cc: ...here. * hooks.c: Moved to... * hooks.cc: ...here. * host-default.c: Moved to... * host-default.cc: ...here. * hw-doloop.c: Moved to... * hw-doloop.cc: ...here. * hwint.c: Moved to... * hwint.cc: ...here. * ifcvt.c: Moved to... * ifcvt.cc: ...here. * inchash.c: Moved to... * inchash.cc: ...here. * incpath.c: Moved to... * incpath.cc: ...here. * init-regs.c: Moved to... * init-regs.cc: ...here. * input.c: Moved to... * input.cc: ...here. * internal-fn.c: Moved to... * internal-fn.cc: ...here. * intl.c: Moved to... * intl.cc: ...here. * ipa-comdats.c: Moved to... * ipa-comdats.cc: ...here. * ipa-cp.c: Moved to... * ipa-cp.cc: ...here. * ipa-devirt.c: Moved to... * ipa-devirt.cc: ...here. * ipa-fnsummary.c: Moved to... * ipa-fnsummary.cc: ...here. * ipa-icf-gimple.c: Moved to... * ipa-icf-gimple.cc: ...here. * ipa-icf.c: Moved to... * ipa-icf.cc: ...here. * ipa-inline-analysis.c: Moved to... * ipa-inline-analysis.cc: ...here. * ipa-inline-transform.c: Moved to... * ipa-inline-transform.cc: ...here. * ipa-inline.c: Moved to... * ipa-inline.cc: ...here. * ipa-modref-tree.c: Moved to... * ipa-modref-tree.cc: ...here. * ipa-modref.c: Moved to... * ipa-modref.cc: ...here. * ipa-param-manipulation.c: Moved to... * ipa-param-manipulation.cc: ...here. * ipa-polymorphic-call.c: Moved to... * ipa-polymorphic-call.cc: ...here. * ipa-predicate.c: Moved to... * ipa-predicate.cc: ...here. * ipa-profile.c: Moved to... * ipa-profile.cc: ...here. * ipa-prop.c: Moved to... * ipa-prop.cc: ...here. * ipa-pure-const.c: Moved to... * ipa-pure-const.cc: ...here. * ipa-ref.c: Moved to... * ipa-ref.cc: ...here. * ipa-reference.c: Moved to... * ipa-reference.cc: ...here. * ipa-split.c: Moved to... * ipa-split.cc: ...here. * ipa-sra.c: Moved to... * ipa-sra.cc: ...here. * ipa-utils.c: Moved to... * ipa-utils.cc: ...here. * ipa-visibility.c: Moved to... * ipa-visibility.cc: ...here. * ipa.c: Moved to... * ipa.cc: ...here. * ira-build.c: Moved to... * ira-build.cc: ...here. * ira-color.c: Moved to... * ira-color.cc: ...here. * ira-conflicts.c: Moved to... * ira-conflicts.cc: ...here. * ira-costs.c: Moved to... * ira-costs.cc: ...here. * ira-emit.c: Moved to... * ira-emit.cc: ...here. * ira-lives.c: Moved to... * ira-lives.cc: ...here. * ira.c: Moved to... * ira.cc: ...here. * jump.c: Moved to... * jump.cc: ...here. * langhooks.c: Moved to... * langhooks.cc: ...here. * lcm.c: Moved to... * lcm.cc: ...here. * lists.c: Moved to... * lists.cc: ...here. * loop-doloop.c: Moved to... * loop-doloop.cc: ...here. * loop-init.c: Moved to... * loop-init.cc: ...here. * loop-invariant.c: Moved to... * loop-invariant.cc: ...here. * loop-iv.c: Moved to... * loop-iv.cc: ...here. * loop-unroll.c: Moved to... * loop-unroll.cc: ...here. * lower-subreg.c: Moved to... * lower-subreg.cc: ...here. * lra-assigns.c: Moved to... * lra-assigns.cc: ...here. * lra-coalesce.c: Moved to... * lra-coalesce.cc: ...here. * lra-constraints.c: Moved to... * lra-constraints.cc: ...here. * lra-eliminations.c: Moved to... * lra-eliminations.cc: ...here. * lra-lives.c: Moved to... * lra-lives.cc: ...here. * lra-remat.c: Moved to... * lra-remat.cc: ...here. * lra-spills.c: Moved to... * lra-spills.cc: ...here. * lra.c: Moved to... * lra.cc: ...here. * lto-cgraph.c: Moved to... * lto-cgraph.cc: ...here. * lto-compress.c: Moved to... * lto-compress.cc: ...here. * lto-opts.c: Moved to... * lto-opts.cc: ...here. * lto-section-in.c: Moved to... * lto-section-in.cc: ...here. * lto-section-out.c: Moved to... * lto-section-out.cc: ...here. * lto-streamer-in.c: Moved to... * lto-streamer-in.cc: ...here. * lto-streamer-out.c: Moved to... * lto-streamer-out.cc: ...here. * lto-streamer.c: Moved to... * lto-streamer.cc: ...here. * lto-wrapper.c: Moved to... * lto-wrapper.cc: ...here. * main.c: Moved to... * main.cc: ...here. * mcf.c: Moved to... * mcf.cc: ...here. * mode-switching.c: Moved to... * mode-switching.cc: ...here. * modulo-sched.c: Moved to... * modulo-sched.cc: ...here. * multiple_target.c: Moved to... * multiple_target.cc: ...here. * omp-expand.c: Moved to... * omp-expand.cc: ...here. * omp-general.c: Moved to... * omp-general.cc: ...here. * omp-low.c: Moved to... * omp-low.cc: ...here. * omp-offload.c: Moved to... * omp-offload.cc: ...here. * omp-simd-clone.c: Moved to... * omp-simd-clone.cc: ...here. * opt-suggestions.c: Moved to... * opt-suggestions.cc: ...here. * optabs-libfuncs.c: Moved to... * optabs-libfuncs.cc: ...here. * optabs-query.c: Moved to... * optabs-query.cc: ...here. * optabs-tree.c: Moved to... * optabs-tree.cc: ...here. * optabs.c: Moved to... * optabs.cc: ...here. * opts-common.c: Moved to... * opts-common.cc: ...here. * opts-global.c: Moved to... * opts-global.cc: ...here. * opts.c: Moved to... * opts.cc: ...here. * passes.c: Moved to... * passes.cc: ...here. * plugin.c: Moved to... * plugin.cc: ...here. * postreload-gcse.c: Moved to... * postreload-gcse.cc: ...here. * postreload.c: Moved to... * postreload.cc: ...here. * predict.c: Moved to... * predict.cc: ...here. * prefix.c: Moved to... * prefix.cc: ...here. * pretty-print.c: Moved to... * pretty-print.cc: ...here. * print-rtl-function.c: Moved to... * print-rtl-function.cc: ...here. * print-rtl.c: Moved to... * print-rtl.cc: ...here. * print-tree.c: Moved to... * print-tree.cc: ...here. * profile-count.c: Moved to... * profile-count.cc: ...here. * profile.c: Moved to... * profile.cc: ...here. * read-md.c: Moved to... * read-md.cc: ...here. * read-rtl-function.c: Moved to... * read-rtl-function.cc: ...here. * read-rtl.c: Moved to... * read-rtl.cc: ...here. * real.c: Moved to... * real.cc: ...here. * realmpfr.c: Moved to... * realmpfr.cc: ...here. * recog.c: Moved to... * recog.cc: ...here. * ree.c: Moved to... * ree.cc: ...here. * reg-stack.c: Moved to... * reg-stack.cc: ...here. * regcprop.c: Moved to... * regcprop.cc: ...here. * reginfo.c: Moved to... * reginfo.cc: ...here. * regrename.c: Moved to... * regrename.cc: ...here. * regstat.c: Moved to... * regstat.cc: ...here. * reload.c: Moved to... * reload.cc: ...here. * reload1.c: Moved to... * reload1.cc: ...here. * reorg.c: Moved to... * reorg.cc: ...here. * resource.c: Moved to... * resource.cc: ...here. * rtl-error.c: Moved to... * rtl-error.cc: ...here. * rtl-tests.c: Moved to... * rtl-tests.cc: ...here. * rtl.c: Moved to... * rtl.cc: ...here. * rtlanal.c: Moved to... * rtlanal.cc: ...here. * rtlhash.c: Moved to... * rtlhash.cc: ...here. * rtlhooks.c: Moved to... * rtlhooks.cc: ...here. * rtx-vector-builder.c: Moved to... * rtx-vector-builder.cc: ...here. * run-rtl-passes.c: Moved to... * run-rtl-passes.cc: ...here. * sancov.c: Moved to... * sancov.cc: ...here. * sanopt.c: Moved to... * sanopt.cc: ...here. * sbitmap.c: Moved to... * sbitmap.cc: ...here. * sched-deps.c: Moved to... * sched-deps.cc: ...here. * sched-ebb.c: Moved to... * sched-ebb.cc: ...here. * sched-rgn.c: Moved to... * sched-rgn.cc: ...here. * sel-sched-dump.c: Moved to... * sel-sched-dump.cc: ...here. * sel-sched-ir.c: Moved to... * sel-sched-ir.cc: ...here. * sel-sched.c: Moved to... * sel-sched.cc: ...here. * selftest-diagnostic.c: Moved to... * selftest-diagnostic.cc: ...here. * selftest-rtl.c: Moved to... * selftest-rtl.cc: ...here. * selftest-run-tests.c: Moved to... * selftest-run-tests.cc: ...here. * selftest.c: Moved to... * selftest.cc: ...here. * sese.c: Moved to... * sese.cc: ...here. * shrink-wrap.c: Moved to... * shrink-wrap.cc: ...here. * simplify-rtx.c: Moved to... * simplify-rtx.cc: ...here. * sparseset.c: Moved to... * sparseset.cc: ...here. * spellcheck-tree.c: Moved to... * spellcheck-tree.cc: ...here. * spellcheck.c: Moved to... * spellcheck.cc: ...here. * sreal.c: Moved to... * sreal.cc: ...here. * stack-ptr-mod.c: Moved to... * stack-ptr-mod.cc: ...here. * statistics.c: Moved to... * statistics.cc: ...here. * stmt.c: Moved to... * stmt.cc: ...here. * stor-layout.c: Moved to... * stor-layout.cc: ...here. * store-motion.c: Moved to... * store-motion.cc: ...here. * streamer-hooks.c: Moved to... * streamer-hooks.cc: ...here. * stringpool.c: Moved to... * stringpool.cc: ...here. * substring-locations.c: Moved to... * substring-locations.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * target-globals.c: Moved to... * target-globals.cc: ...here. * targhooks.c: Moved to... * targhooks.cc: ...here. * timevar.c: Moved to... * timevar.cc: ...here. * toplev.c: Moved to... * toplev.cc: ...here. * tracer.c: Moved to... * tracer.cc: ...here. * trans-mem.c: Moved to... * trans-mem.cc: ...here. * tree-affine.c: Moved to... * tree-affine.cc: ...here. * tree-call-cdce.c: Moved to... * tree-call-cdce.cc: ...here. * tree-cfg.c: Moved to... * tree-cfg.cc: ...here. * tree-cfgcleanup.c: Moved to... * tree-cfgcleanup.cc: ...here. * tree-chrec.c: Moved to... * tree-chrec.cc: ...here. * tree-complex.c: Moved to... * tree-complex.cc: ...here. * tree-data-ref.c: Moved to... * tree-data-ref.cc: ...here. * tree-dfa.c: Moved to... * tree-dfa.cc: ...here. * tree-diagnostic.c: Moved to... * tree-diagnostic.cc: ...here. * tree-dump.c: Moved to... * tree-dump.cc: ...here. * tree-eh.c: Moved to... * tree-eh.cc: ...here. * tree-emutls.c: Moved to... * tree-emutls.cc: ...here. * tree-if-conv.c: Moved to... * tree-if-conv.cc: ...here. * tree-inline.c: Moved to... * tree-inline.cc: ...here. * tree-into-ssa.c: Moved to... * tree-into-ssa.cc: ...here. * tree-iterator.c: Moved to... * tree-iterator.cc: ...here. * tree-loop-distribution.c: Moved to... * tree-loop-distribution.cc: ...here. * tree-nested.c: Moved to... * tree-nested.cc: ...here. * tree-nrv.c: Moved to... * tree-nrv.cc: ...here. * tree-object-size.c: Moved to... * tree-object-size.cc: ...here. * tree-outof-ssa.c: Moved to... * tree-outof-ssa.cc: ...here. * tree-parloops.c: Moved to... * tree-parloops.cc: ...here. * tree-phinodes.c: Moved to... * tree-phinodes.cc: ...here. * tree-predcom.c: Moved to... * tree-predcom.cc: ...here. * tree-pretty-print.c: Moved to... * tree-pretty-print.cc: ...here. * tree-profile.c: Moved to... * tree-profile.cc: ...here. * tree-scalar-evolution.c: Moved to... * tree-scalar-evolution.cc: ...here. * tree-sra.c: Moved to... * tree-sra.cc: ...here. * tree-ssa-address.c: Moved to... * tree-ssa-address.cc: ...here. * tree-ssa-alias.c: Moved to... * tree-ssa-alias.cc: ...here. * tree-ssa-ccp.c: Moved to... * tree-ssa-ccp.cc: ...here. * tree-ssa-coalesce.c: Moved to... * tree-ssa-coalesce.cc: ...here. * tree-ssa-copy.c: Moved to... * tree-ssa-copy.cc: ...here. * tree-ssa-dce.c: Moved to... * tree-ssa-dce.cc: ...here. * tree-ssa-dom.c: Moved to... * tree-ssa-dom.cc: ...here. * tree-ssa-dse.c: Moved to... * tree-ssa-dse.cc: ...here. * tree-ssa-forwprop.c: Moved to... * tree-ssa-forwprop.cc: ...here. * tree-ssa-ifcombine.c: Moved to... * tree-ssa-ifcombine.cc: ...here. * tree-ssa-live.c: Moved to... * tree-ssa-live.cc: ...here. * tree-ssa-loop-ch.c: Moved to... * tree-ssa-loop-ch.cc: ...here. * tree-ssa-loop-im.c: Moved to... * tree-ssa-loop-im.cc: ...here. * tree-ssa-loop-ivcanon.c: Moved to... * tree-ssa-loop-ivcanon.cc: ...here. * tree-ssa-loop-ivopts.c: Moved to... * tree-ssa-loop-ivopts.cc: ...here. * tree-ssa-loop-manip.c: Moved to... * tree-ssa-loop-manip.cc: ...here. * tree-ssa-loop-niter.c: Moved to... * tree-ssa-loop-niter.cc: ...here. * tree-ssa-loop-prefetch.c: Moved to... * tree-ssa-loop-prefetch.cc: ...here. * tree-ssa-loop-split.c: Moved to... * tree-ssa-loop-split.cc: ...here. * tree-ssa-loop-unswitch.c: Moved to... * tree-ssa-loop-unswitch.cc: ...here. * tree-ssa-loop.c: Moved to... * tree-ssa-loop.cc: ...here. * tree-ssa-math-opts.c: Moved to... * tree-ssa-math-opts.cc: ...here. * tree-ssa-operands.c: Moved to... * tree-ssa-operands.cc: ...here. * tree-ssa-phiopt.c: Moved to... * tree-ssa-phiopt.cc: ...here. * tree-ssa-phiprop.c: Moved to... * tree-ssa-phiprop.cc: ...here. * tree-ssa-pre.c: Moved to... * tree-ssa-pre.cc: ...here. * tree-ssa-propagate.c: Moved to... * tree-ssa-propagate.cc: ...here. * tree-ssa-reassoc.c: Moved to... * tree-ssa-reassoc.cc: ...here. * tree-ssa-sccvn.c: Moved to... * tree-ssa-sccvn.cc: ...here. * tree-ssa-scopedtables.c: Moved to... * tree-ssa-scopedtables.cc: ...here. * tree-ssa-sink.c: Moved to... * tree-ssa-sink.cc: ...here. * tree-ssa-strlen.c: Moved to... * tree-ssa-strlen.cc: ...here. * tree-ssa-structalias.c: Moved to... * tree-ssa-structalias.cc: ...here. * tree-ssa-tail-merge.c: Moved to... * tree-ssa-tail-merge.cc: ...here. * tree-ssa-ter.c: Moved to... * tree-ssa-ter.cc: ...here. * tree-ssa-threadbackward.c: Moved to... * tree-ssa-threadbackward.cc: ...here. * tree-ssa-threadedge.c: Moved to... * tree-ssa-threadedge.cc: ...here. * tree-ssa-threadupdate.c: Moved to... * tree-ssa-threadupdate.cc: ...here. * tree-ssa-uncprop.c: Moved to... * tree-ssa-uncprop.cc: ...here. * tree-ssa-uninit.c: Moved to... * tree-ssa-uninit.cc: ...here. * tree-ssa.c: Moved to... * tree-ssa.cc: ...here. * tree-ssanames.c: Moved to... * tree-ssanames.cc: ...here. * tree-stdarg.c: Moved to... * tree-stdarg.cc: ...here. * tree-streamer-in.c: Moved to... * tree-streamer-in.cc: ...here. * tree-streamer-out.c: Moved to... * tree-streamer-out.cc: ...here. * tree-streamer.c: Moved to... * tree-streamer.cc: ...here. * tree-switch-conversion.c: Moved to... * tree-switch-conversion.cc: ...here. * tree-tailcall.c: Moved to... * tree-tailcall.cc: ...here. * tree-vect-data-refs.c: Moved to... * tree-vect-data-refs.cc: ...here. * tree-vect-generic.c: Moved to... * tree-vect-generic.cc: ...here. * tree-vect-loop-manip.c: Moved to... * tree-vect-loop-manip.cc: ...here. * tree-vect-loop.c: Moved to... * tree-vect-loop.cc: ...here. * tree-vect-patterns.c: Moved to... * tree-vect-patterns.cc: ...here. * tree-vect-slp-patterns.c: Moved to... * tree-vect-slp-patterns.cc: ...here. * tree-vect-slp.c: Moved to... * tree-vect-slp.cc: ...here. * tree-vect-stmts.c: Moved to... * tree-vect-stmts.cc: ...here. * tree-vector-builder.c: Moved to... * tree-vector-builder.cc: ...here. * tree-vectorizer.c: Moved to... * tree-vectorizer.cc: ...here. * tree-vrp.c: Moved to... * tree-vrp.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * tsan.c: Moved to... * tsan.cc: ...here. * typed-splay-tree.c: Moved to... * typed-splay-tree.cc: ...here. * ubsan.c: Moved to... * ubsan.cc: ...here. * valtrack.c: Moved to... * valtrack.cc: ...here. * value-prof.c: Moved to... * value-prof.cc: ...here. * var-tracking.c: Moved to... * var-tracking.cc: ...here. * varasm.c: Moved to... * varasm.cc: ...here. * varpool.c: Moved to... * varpool.cc: ...here. * vec-perm-indices.c: Moved to... * vec-perm-indices.cc: ...here. * vec.c: Moved to... * vec.cc: ...here. * vmsdbgout.c: Moved to... * vmsdbgout.cc: ...here. * vr-values.c: Moved to... * vr-values.cc: ...here. * vtable-verify.c: Moved to... * vtable-verify.cc: ...here. * web.c: Moved to... * web.cc: ...here. * xcoffout.c: Moved to... * xcoffout.cc: ...here. gcc/c-family/ChangeLog: * c-ada-spec.c: Moved to... * c-ada-spec.cc: ...here. * c-attribs.c: Moved to... * c-attribs.cc: ...here. * c-common.c: Moved to... * c-common.cc: ...here. * c-cppbuiltin.c: Moved to... * c-cppbuiltin.cc: ...here. * c-dump.c: Moved to... * c-dump.cc: ...here. * c-format.c: Moved to... * c-format.cc: ...here. * c-gimplify.c: Moved to... * c-gimplify.cc: ...here. * c-indentation.c: Moved to... * c-indentation.cc: ...here. * c-lex.c: Moved to... * c-lex.cc: ...here. * c-omp.c: Moved to... * c-omp.cc: ...here. * c-opts.c: Moved to... * c-opts.cc: ...here. * c-pch.c: Moved to... * c-pch.cc: ...here. * c-ppoutput.c: Moved to... * c-ppoutput.cc: ...here. * c-pragma.c: Moved to... * c-pragma.cc: ...here. * c-pretty-print.c: Moved to... * c-pretty-print.cc: ...here. * c-semantics.c: Moved to... * c-semantics.cc: ...here. * c-ubsan.c: Moved to... * c-ubsan.cc: ...here. * c-warn.c: Moved to... * c-warn.cc: ...here. * cppspec.c: Moved to... * cppspec.cc: ...here. * stub-objc.c: Moved to... * stub-objc.cc: ...here. gcc/c/ChangeLog: * c-aux-info.c: Moved to... * c-aux-info.cc: ...here. * c-convert.c: Moved to... * c-convert.cc: ...here. * c-decl.c: Moved to... * c-decl.cc: ...here. * c-errors.c: Moved to... * c-errors.cc: ...here. * c-fold.c: Moved to... * c-fold.cc: ...here. * c-lang.c: Moved to... * c-lang.cc: ...here. * c-objc-common.c: Moved to... * c-objc-common.cc: ...here. * c-parser.c: Moved to... * c-parser.cc: ...here. * c-typeck.c: Moved to... * c-typeck.cc: ...here. * gccspec.c: Moved to... * gccspec.cc: ...here. * gimple-parser.c: Moved to... * gimple-parser.cc: ...here. gcc/cp/ChangeLog: * call.c: Moved to... * call.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constexpr.c: Moved to... * constexpr.cc: ...here. * cp-gimplify.c: Moved to... * cp-gimplify.cc: ...here. * cp-lang.c: Moved to... * cp-lang.cc: ...here. * cp-objcp-common.c: Moved to... * cp-objcp-common.cc: ...here. * cp-ubsan.c: Moved to... * cp-ubsan.cc: ...here. * cvt.c: Moved to... * cvt.cc: ...here. * cxx-pretty-print.c: Moved to... * cxx-pretty-print.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * decl2.c: Moved to... * decl2.cc: ...here. * dump.c: Moved to... * dump.cc: ...here. * error.c: Moved to... * error.cc: ...here. * except.c: Moved to... * except.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * friend.c: Moved to... * friend.cc: ...here. * g++spec.c: Moved to... * g++spec.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lambda.c: Moved to... * lambda.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * mangle.c: Moved to... * mangle.cc: ...here. * method.c: Moved to... * method.cc: ...here. * name-lookup.c: Moved to... * name-lookup.cc: ...here. * optimize.c: Moved to... * optimize.cc: ...here. * parser.c: Moved to... * parser.cc: ...here. * pt.c: Moved to... * pt.cc: ...here. * ptree.c: Moved to... * ptree.cc: ...here. * rtti.c: Moved to... * rtti.cc: ...here. * search.c: Moved to... * search.cc: ...here. * semantics.c: Moved to... * semantics.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * typeck.c: Moved to... * typeck.cc: ...here. * typeck2.c: Moved to... * typeck2.cc: ...here. * vtable-class-hierarchy.c: Moved to... * vtable-class-hierarchy.cc: ...here. gcc/fortran/ChangeLog: * arith.c: Moved to... * arith.cc: ...here. * array.c: Moved to... * array.cc: ...here. * bbt.c: Moved to... * bbt.cc: ...here. * check.c: Moved to... * check.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constructor.c: Moved to... * constructor.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * cpp.c: Moved to... * cpp.cc: ...here. * data.c: Moved to... * data.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * dependency.c: Moved to... * dependency.cc: ...here. * dump-parse-tree.c: Moved to... * dump-parse-tree.cc: ...here. * error.c: Moved to... * error.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * f95-lang.c: Moved to... * f95-lang.cc: ...here. * frontend-passes.c: Moved to... * frontend-passes.cc: ...here. * gfortranspec.c: Moved to... * gfortranspec.cc: ...here. * interface.c: Moved to... * interface.cc: ...here. * intrinsic.c: Moved to... * intrinsic.cc: ...here. * io.c: Moved to... * io.cc: ...here. * iresolve.c: Moved to... * iresolve.cc: ...here. * match.c: Moved to... * match.cc: ...here. * matchexp.c: Moved to... * matchexp.cc: ...here. * misc.c: Moved to... * misc.cc: ...here. * module.c: Moved to... * module.cc: ...here. * openmp.c: Moved to... * openmp.cc: ...here. * options.c: Moved to... * options.cc: ...here. * parse.c: Moved to... * parse.cc: ...here. * primary.c: Moved to... * primary.cc: ...here. * resolve.c: Moved to... * resolve.cc: ...here. * scanner.c: Moved to... * scanner.cc: ...here. * simplify.c: Moved to... * simplify.cc: ...here. * st.c: Moved to... * st.cc: ...here. * symbol.c: Moved to... * symbol.cc: ...here. * target-memory.c: Moved to... * target-memory.cc: ...here. * trans-array.c: Moved to... * trans-array.cc: ...here. * trans-common.c: Moved to... * trans-common.cc: ...here. * trans-const.c: Moved to... * trans-const.cc: ...here. * trans-decl.c: Moved to... * trans-decl.cc: ...here. * trans-expr.c: Moved to... * trans-expr.cc: ...here. * trans-intrinsic.c: Moved to... * trans-intrinsic.cc: ...here. * trans-io.c: Moved to... * trans-io.cc: ...here. * trans-openmp.c: Moved to... * trans-openmp.cc: ...here. * trans-stmt.c: Moved to... * trans-stmt.cc: ...here. * trans-types.c: Moved to... * trans-types.cc: ...here. * trans.c: Moved to... * trans.cc: ...here. gcc/go/ChangeLog: * go-backend.c: Moved to... * go-backend.cc: ...here. * go-lang.c: Moved to... * go-lang.cc: ...here. * gospec.c: Moved to... * gospec.cc: ...here. gcc/jit/ChangeLog: * dummy-frontend.c: Moved to... * dummy-frontend.cc: ...here. * jit-builtins.c: Moved to... * jit-builtins.cc: ...here. * jit-logging.c: Moved to... * jit-logging.cc: ...here. * jit-playback.c: Moved to... * jit-playback.cc: ...here. * jit-recording.c: Moved to... * jit-recording.cc: ...here. * jit-result.c: Moved to... * jit-result.cc: ...here. * jit-spec.c: Moved to... * jit-spec.cc: ...here. * jit-tempdir.c: Moved to... * jit-tempdir.cc: ...here. * jit-w32.c: Moved to... * jit-w32.cc: ...here. * libgccjit.c: Moved to... * libgccjit.cc: ...here. gcc/lto/ChangeLog: * common.c: Moved to... * common.cc: ...here. * lto-common.c: Moved to... * lto-common.cc: ...here. * lto-dump.c: Moved to... * lto-dump.cc: ...here. * lto-lang.c: Moved to... * lto-lang.cc: ...here. * lto-object.c: Moved to... * lto-object.cc: ...here. * lto-partition.c: Moved to... * lto-partition.cc: ...here. * lto-symtab.c: Moved to... * lto-symtab.cc: ...here. * lto.c: Moved to... * lto.cc: ...here. gcc/objc/ChangeLog: * objc-act.c: Moved to... * objc-act.cc: ...here. * objc-encoding.c: Moved to... * objc-encoding.cc: ...here. * objc-gnu-runtime-abi-01.c: Moved to... * objc-gnu-runtime-abi-01.cc: ...here. * objc-lang.c: Moved to... * objc-lang.cc: ...here. * objc-map.c: Moved to... * objc-map.cc: ...here. * objc-next-runtime-abi-01.c: Moved to... * objc-next-runtime-abi-01.cc: ...here. * objc-next-runtime-abi-02.c: Moved to... * objc-next-runtime-abi-02.cc: ...here. * objc-runtime-shared-support.c: Moved to... * objc-runtime-shared-support.cc: ...here. gcc/objcp/ChangeLog: * objcp-decl.c: Moved to... * objcp-decl.cc: ...here. * objcp-lang.c: Moved to... * objcp-lang.cc: ...here. libcpp/ChangeLog: * charset.c: Moved to... * charset.cc: ...here. * directives.c: Moved to... * directives.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * files.c: Moved to... * files.cc: ...here. * identifiers.c: Moved to... * identifiers.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * line-map.c: Moved to... * line-map.cc: ...here. * macro.c: Moved to... * macro.cc: ...here. * makeucnid.c: Moved to... * makeucnid.cc: ...here. * mkdeps.c: Moved to... * mkdeps.cc: ...here. * pch.c: Moved to... * pch.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * traditional.c: Moved to... * traditional.cc: ...here.
Diffstat (limited to 'gcc/tree-ssa-coalesce.c')
-rw-r--r--gcc/tree-ssa-coalesce.c1761
1 files changed, 0 insertions, 1761 deletions
diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c
deleted file mode 100644
index dccf41a..0000000
--- a/gcc/tree-ssa-coalesce.c
+++ /dev/null
@@ -1,1761 +0,0 @@
-/* Coalesce SSA_NAMES together for the out-of-ssa pass.
- Copyright (C) 2004-2022 Free Software Foundation, Inc.
- Contributed by Andrew MacLeod <amacleod@redhat.com>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "tree.h"
-#include "gimple.h"
-#include "predict.h"
-#include "memmodel.h"
-#include "tm_p.h"
-#include "ssa.h"
-#include "tree-ssa.h"
-#include "tree-pretty-print.h"
-#include "diagnostic-core.h"
-#include "dumpfile.h"
-#include "gimple-iterator.h"
-#include "tree-ssa-live.h"
-#include "tree-ssa-coalesce.h"
-#include "explow.h"
-#include "tree-dfa.h"
-#include "stor-layout.h"
-
-/* This set of routines implements a coalesce_list. This is an object which
- is used to track pairs of ssa_names which are desirable to coalesce
- together to avoid copies. Costs are associated with each pair, and when
- all desired information has been collected, the object can be used to
- order the pairs for processing. */
-
-/* This structure defines a pair entry. */
-
-struct coalesce_pair
-{
- int first_element;
- int second_element;
- int cost;
-
- /* A count of the number of unique partitions this pair would conflict
- with if coalescing was successful. This is the secondary sort key,
- given two pairs with equal costs, we will prefer the pair with a smaller
- conflict set.
-
- This is lazily initialized when we discover two coalescing pairs have
- the same primary cost.
-
- Note this is not updated and propagated as pairs are coalesced. */
- int conflict_count;
-
- /* The order in which coalescing pairs are discovered is recorded in this
- field, which is used as the final tie breaker when sorting coalesce
- pairs. */
- int index;
-};
-
-/* This represents a conflict graph. Implemented as an array of bitmaps.
- A full matrix is used for conflicts rather than just upper triangular form.
- this makes it much simpler and faster to perform conflict merges. */
-
-struct ssa_conflicts
-{
- bitmap_obstack obstack; /* A place to allocate our bitmaps. */
- vec<bitmap> conflicts;
-};
-
-/* The narrow API of the qsort comparison function doesn't allow easy
- access to additional arguments. So we have two globals (ick) to hold
- the data we need. They're initialized before the call to qsort and
- wiped immediately after. */
-static ssa_conflicts *conflicts_;
-static var_map map_;
-
-/* Coalesce pair hashtable helpers. */
-
-struct coalesce_pair_hasher : nofree_ptr_hash <coalesce_pair>
-{
- static inline hashval_t hash (const coalesce_pair *);
- static inline bool equal (const coalesce_pair *, const coalesce_pair *);
-};
-
-/* Hash function for coalesce list. Calculate hash for PAIR. */
-
-inline hashval_t
-coalesce_pair_hasher::hash (const coalesce_pair *pair)
-{
- hashval_t a = (hashval_t)(pair->first_element);
- hashval_t b = (hashval_t)(pair->second_element);
-
- return b * (b - 1) / 2 + a;
-}
-
-/* Equality function for coalesce list hash table. Compare PAIR1 and PAIR2,
- returning TRUE if the two pairs are equivalent. */
-
-inline bool
-coalesce_pair_hasher::equal (const coalesce_pair *p1, const coalesce_pair *p2)
-{
- return (p1->first_element == p2->first_element
- && p1->second_element == p2->second_element);
-}
-
-typedef hash_table<coalesce_pair_hasher> coalesce_table_type;
-typedef coalesce_table_type::iterator coalesce_iterator_type;
-
-
-struct cost_one_pair
-{
- int first_element;
- int second_element;
- cost_one_pair *next;
-};
-
-/* This structure maintains the list of coalesce pairs. */
-
-struct coalesce_list
-{
- coalesce_table_type *list; /* Hash table. */
- coalesce_pair **sorted; /* List when sorted. */
- int num_sorted; /* Number in the sorted list. */
- cost_one_pair *cost_one_list;/* Single use coalesces with cost 1. */
- obstack ob;
-};
-
-#define NO_BEST_COALESCE -1
-#define MUST_COALESCE_COST INT_MAX
-
-
-/* Return cost of execution of copy instruction with FREQUENCY. */
-
-static inline int
-coalesce_cost (int frequency, bool optimize_for_size)
-{
- /* Base costs on BB frequencies bounded by 1. */
- int cost = frequency;
-
- if (!cost)
- cost = 1;
-
- if (optimize_for_size)
- cost = 1;
-
- return cost;
-}
-
-
-/* Return the cost of executing a copy instruction in basic block BB. */
-
-static inline int
-coalesce_cost_bb (basic_block bb)
-{
- return coalesce_cost (bb->count.to_frequency (cfun),
- optimize_bb_for_size_p (bb));
-}
-
-
-/* Return the cost of executing a copy instruction on edge E. */
-
-static inline int
-coalesce_cost_edge (edge e)
-{
- int mult = 1;
-
- /* Inserting copy on critical edge costs more than inserting it elsewhere. */
- if (EDGE_CRITICAL_P (e))
- mult = 2;
- if (e->flags & EDGE_ABNORMAL)
- return MUST_COALESCE_COST;
- if (e->flags & EDGE_EH)
- {
- edge e2;
- edge_iterator ei;
- FOR_EACH_EDGE (e2, ei, e->dest->preds)
- if (e2 != e)
- {
- /* Putting code on EH edge that leads to BB
- with multiple predecestors imply splitting of
- edge too. */
- if (mult < 2)
- mult = 2;
- /* If there are multiple EH predecestors, we
- also copy EH regions and produce separate
- landing pad. This is expensive. */
- if (e2->flags & EDGE_EH)
- {
- mult = 5;
- break;
- }
- }
- }
-
- return coalesce_cost (EDGE_FREQUENCY (e),
- optimize_edge_for_size_p (e)) * mult;
-}
-
-
-/* Retrieve a pair to coalesce from the cost_one_list in CL. Returns the
- 2 elements via P1 and P2. 1 is returned by the function if there is a pair,
- NO_BEST_COALESCE is returned if there aren't any. */
-
-static inline int
-pop_cost_one_pair (coalesce_list *cl, int *p1, int *p2)
-{
- cost_one_pair *ptr;
-
- ptr = cl->cost_one_list;
- if (!ptr)
- return NO_BEST_COALESCE;
-
- *p1 = ptr->first_element;
- *p2 = ptr->second_element;
- cl->cost_one_list = ptr->next;
-
- return 1;
-}
-
-/* Retrieve the most expensive remaining pair to coalesce from CL. Returns the
- 2 elements via P1 and P2. Their calculated cost is returned by the function.
- NO_BEST_COALESCE is returned if the coalesce list is empty. */
-
-static inline int
-pop_best_coalesce (coalesce_list *cl, int *p1, int *p2)
-{
- coalesce_pair *node;
- int ret;
-
- if (cl->sorted == NULL)
- return pop_cost_one_pair (cl, p1, p2);
-
- if (cl->num_sorted == 0)
- return pop_cost_one_pair (cl, p1, p2);
-
- node = cl->sorted[--(cl->num_sorted)];
- *p1 = node->first_element;
- *p2 = node->second_element;
- ret = node->cost;
-
- return ret;
-}
-
-
-/* Create a new empty coalesce list object and return it. */
-
-static inline coalesce_list *
-create_coalesce_list (void)
-{
- coalesce_list *list;
- unsigned size = num_ssa_names * 3;
-
- if (size < 40)
- size = 40;
-
- list = (coalesce_list *) xmalloc (sizeof (struct coalesce_list));
- list->list = new coalesce_table_type (size);
- list->sorted = NULL;
- list->num_sorted = 0;
- list->cost_one_list = NULL;
- gcc_obstack_init (&list->ob);
- return list;
-}
-
-
-/* Delete coalesce list CL. */
-
-static inline void
-delete_coalesce_list (coalesce_list *cl)
-{
- gcc_assert (cl->cost_one_list == NULL);
- delete cl->list;
- cl->list = NULL;
- free (cl->sorted);
- gcc_assert (cl->num_sorted == 0);
- obstack_free (&cl->ob, NULL);
- free (cl);
-}
-
-/* Return the number of unique coalesce pairs in CL. */
-
-static inline int
-num_coalesce_pairs (coalesce_list *cl)
-{
- return cl->list->elements ();
-}
-
-/* Find a matching coalesce pair object in CL for the pair P1 and P2. If
- one isn't found, return NULL if CREATE is false, otherwise create a new
- coalesce pair object and return it. */
-
-static coalesce_pair *
-find_coalesce_pair (coalesce_list *cl, int p1, int p2, bool create)
-{
- struct coalesce_pair p;
- coalesce_pair **slot;
- unsigned int hash;
-
- /* Normalize so that p1 is the smaller value. */
- if (p2 < p1)
- {
- p.first_element = p2;
- p.second_element = p1;
- }
- else
- {
- p.first_element = p1;
- p.second_element = p2;
- }
-
- hash = coalesce_pair_hasher::hash (&p);
- slot = cl->list->find_slot_with_hash (&p, hash, create ? INSERT : NO_INSERT);
- if (!slot)
- return NULL;
-
- if (!*slot)
- {
- struct coalesce_pair * pair = XOBNEW (&cl->ob, struct coalesce_pair);
- gcc_assert (cl->sorted == NULL);
- pair->first_element = p.first_element;
- pair->second_element = p.second_element;
- pair->cost = 0;
- pair->index = num_coalesce_pairs (cl);
- pair->conflict_count = 0;
- *slot = pair;
- }
-
- return (struct coalesce_pair *) *slot;
-}
-
-static inline void
-add_cost_one_coalesce (coalesce_list *cl, int p1, int p2)
-{
- cost_one_pair *pair;
-
- pair = XOBNEW (&cl->ob, cost_one_pair);
- pair->first_element = p1;
- pair->second_element = p2;
- pair->next = cl->cost_one_list;
- cl->cost_one_list = pair;
-}
-
-
-/* Add a coalesce between P1 and P2 in list CL with a cost of VALUE. */
-
-static inline void
-add_coalesce (coalesce_list *cl, int p1, int p2, int value)
-{
- coalesce_pair *node;
-
- gcc_assert (cl->sorted == NULL);
- if (p1 == p2)
- return;
-
- node = find_coalesce_pair (cl, p1, p2, true);
-
- /* Once the value is at least MUST_COALESCE_COST - 1, leave it that way. */
- if (node->cost < MUST_COALESCE_COST - 1)
- {
- if (value < MUST_COALESCE_COST - 1)
- node->cost += value;
- else
- node->cost = value;
- }
-}
-
-/* Compute and record how many unique conflicts would exist for the
- representative partition for each coalesce pair in CL.
-
- CONFLICTS is the conflict graph and MAP is the current partition view. */
-
-static void
-initialize_conflict_count (coalesce_pair *p,
- ssa_conflicts *conflicts,
- var_map map)
-{
- int p1 = var_to_partition (map, ssa_name (p->first_element));
- int p2 = var_to_partition (map, ssa_name (p->second_element));
-
- /* 4 cases. If both P1 and P2 have conflicts, then build their
- union and count the members. Else handle the degenerate cases
- in the obvious ways. */
- if (conflicts->conflicts[p1] && conflicts->conflicts[p2])
- p->conflict_count = bitmap_count_unique_bits (conflicts->conflicts[p1],
- conflicts->conflicts[p2]);
- else if (conflicts->conflicts[p1])
- p->conflict_count = bitmap_count_bits (conflicts->conflicts[p1]);
- else if (conflicts->conflicts[p2])
- p->conflict_count = bitmap_count_bits (conflicts->conflicts[p2]);
- else
- p->conflict_count = 0;
-}
-
-
-/* Comparison function to allow qsort to sort P1 and P2 in Ascending order. */
-
-static int
-compare_pairs (const void *p1, const void *p2)
-{
- coalesce_pair *const *const pp1 = (coalesce_pair *const *) p1;
- coalesce_pair *const *const pp2 = (coalesce_pair *const *) p2;
- int result;
-
- result = (* pp1)->cost - (* pp2)->cost;
- /* We use the size of the resulting conflict set as the secondary sort key.
- Given two equal costing coalesce pairs, we want to prefer the pair that
- has the smaller conflict set. */
- if (result == 0)
- {
- if (flag_expensive_optimizations)
- {
- /* Lazily initialize the conflict counts as it's fairly expensive
- to compute. */
- if ((*pp2)->conflict_count == 0)
- initialize_conflict_count (*pp2, conflicts_, map_);
- if ((*pp1)->conflict_count == 0)
- initialize_conflict_count (*pp1, conflicts_, map_);
-
- result = (*pp2)->conflict_count - (*pp1)->conflict_count;
- }
-
- /* And if everything else is equal, then sort based on which
- coalesce pair was found first. */
- if (result == 0)
- result = (*pp2)->index - (*pp1)->index;
- }
-
- return result;
-}
-
-/* Iterate over CL using ITER, returning values in PAIR. */
-
-#define FOR_EACH_PARTITION_PAIR(PAIR, ITER, CL) \
- FOR_EACH_HASH_TABLE_ELEMENT (*(CL)->list, (PAIR), coalesce_pair_p, (ITER))
-
-
-/* Prepare CL for removal of preferred pairs. When finished they are sorted
- in order from most important coalesce to least important. */
-
-static void
-sort_coalesce_list (coalesce_list *cl, ssa_conflicts *conflicts, var_map map)
-{
- unsigned x, num;
- coalesce_pair *p;
- coalesce_iterator_type ppi;
-
- gcc_assert (cl->sorted == NULL);
-
- num = num_coalesce_pairs (cl);
- cl->num_sorted = num;
- if (num == 0)
- return;
-
- /* Allocate a vector for the pair pointers. */
- cl->sorted = XNEWVEC (coalesce_pair *, num);
-
- /* Populate the vector with pointers to the pairs. */
- x = 0;
- FOR_EACH_PARTITION_PAIR (p, ppi, cl)
- cl->sorted[x++] = p;
- gcc_assert (x == num);
-
- /* Already sorted. */
- if (num == 1)
- return;
-
- /* We don't want to depend on qsort_r, so we have to stuff away
- additional data into globals so it can be referenced in
- compare_pairs. */
- conflicts_ = conflicts;
- map_ = map;
- qsort (cl->sorted, num, sizeof (coalesce_pair *), compare_pairs);
- conflicts_ = NULL;
- map_ = NULL;
-}
-
-
-/* Send debug info for coalesce list CL to file F. */
-
-static void
-dump_coalesce_list (FILE *f, coalesce_list *cl)
-{
- coalesce_pair *node;
- coalesce_iterator_type ppi;
-
- int x;
- tree var;
-
- if (cl->sorted == NULL)
- {
- fprintf (f, "Coalesce List:\n");
- FOR_EACH_PARTITION_PAIR (node, ppi, cl)
- {
- tree var1 = ssa_name (node->first_element);
- tree var2 = ssa_name (node->second_element);
- print_generic_expr (f, var1, TDF_SLIM);
- fprintf (f, " <-> ");
- print_generic_expr (f, var2, TDF_SLIM);
- fprintf (f, " (%1d, %1d), ", node->cost, node->conflict_count);
- fprintf (f, "\n");
- }
- }
- else
- {
- fprintf (f, "Sorted Coalesce list:\n");
- for (x = cl->num_sorted - 1 ; x >=0; x--)
- {
- node = cl->sorted[x];
- fprintf (f, "(%d, %d) ", node->cost, node->conflict_count);
- var = ssa_name (node->first_element);
- print_generic_expr (f, var, TDF_SLIM);
- fprintf (f, " <-> ");
- var = ssa_name (node->second_element);
- print_generic_expr (f, var, TDF_SLIM);
- fprintf (f, "\n");
- }
- }
-}
-
-
-/* Return an empty new conflict graph for SIZE elements. */
-
-static inline ssa_conflicts *
-ssa_conflicts_new (unsigned size)
-{
- ssa_conflicts *ptr;
-
- ptr = XNEW (ssa_conflicts);
- bitmap_obstack_initialize (&ptr->obstack);
- ptr->conflicts.create (size);
- ptr->conflicts.safe_grow_cleared (size, true);
- return ptr;
-}
-
-
-/* Free storage for conflict graph PTR. */
-
-static inline void
-ssa_conflicts_delete (ssa_conflicts *ptr)
-{
- bitmap_obstack_release (&ptr->obstack);
- ptr->conflicts.release ();
- free (ptr);
-}
-
-
-/* Test if elements X and Y conflict in graph PTR. */
-
-static inline bool
-ssa_conflicts_test_p (ssa_conflicts *ptr, unsigned x, unsigned y)
-{
- bitmap bx = ptr->conflicts[x];
- bitmap by = ptr->conflicts[y];
-
- gcc_checking_assert (x != y);
-
- if (bx)
- /* Avoid the lookup if Y has no conflicts. */
- return by ? bitmap_bit_p (bx, y) : false;
- else
- return false;
-}
-
-
-/* Add a conflict with Y to the bitmap for X in graph PTR. */
-
-static inline void
-ssa_conflicts_add_one (ssa_conflicts *ptr, unsigned x, unsigned y)
-{
- bitmap bx = ptr->conflicts[x];
- /* If there are no conflicts yet, allocate the bitmap and set bit. */
- if (! bx)
- bx = ptr->conflicts[x] = BITMAP_ALLOC (&ptr->obstack);
- bitmap_set_bit (bx, y);
-}
-
-
-/* Add conflicts between X and Y in graph PTR. */
-
-static inline void
-ssa_conflicts_add (ssa_conflicts *ptr, unsigned x, unsigned y)
-{
- gcc_checking_assert (x != y);
- ssa_conflicts_add_one (ptr, x, y);
- ssa_conflicts_add_one (ptr, y, x);
-}
-
-
-/* Merge all Y's conflict into X in graph PTR. */
-
-static inline void
-ssa_conflicts_merge (ssa_conflicts *ptr, unsigned x, unsigned y)
-{
- unsigned z;
- bitmap_iterator bi;
- bitmap bx = ptr->conflicts[x];
- bitmap by = ptr->conflicts[y];
-
- gcc_checking_assert (x != y);
- if (! by)
- return;
-
- /* Add a conflict between X and every one Y has. If the bitmap doesn't
- exist, then it has already been coalesced, and we don't need to add a
- conflict. */
- EXECUTE_IF_SET_IN_BITMAP (by, 0, z, bi)
- {
- bitmap bz = ptr->conflicts[z];
- if (bz)
- {
- bool was_there = bitmap_clear_bit (bz, y);
- gcc_checking_assert (was_there);
- bitmap_set_bit (bz, x);
- }
- }
-
- if (bx)
- {
- /* If X has conflicts, add Y's to X. */
- bitmap_ior_into (bx, by);
- BITMAP_FREE (by);
- ptr->conflicts[y] = NULL;
- }
- else
- {
- /* If X has no conflicts, simply use Y's. */
- ptr->conflicts[x] = by;
- ptr->conflicts[y] = NULL;
- }
-}
-
-
-/* Dump a conflicts graph. */
-
-static void
-ssa_conflicts_dump (FILE *file, ssa_conflicts *ptr)
-{
- unsigned x;
- bitmap b;
-
- fprintf (file, "\nConflict graph:\n");
-
- FOR_EACH_VEC_ELT (ptr->conflicts, x, b)
- if (b)
- {
- fprintf (file, "%d: ", x);
- dump_bitmap (file, b);
- }
-}
-
-
-/* This structure is used to efficiently record the current status of live
- SSA_NAMES when building a conflict graph.
- LIVE_BASE_VAR has a bit set for each base variable which has at least one
- ssa version live.
- LIVE_BASE_PARTITIONS is an array of bitmaps using the basevar table as an
- index, and is used to track what partitions of each base variable are
- live. This makes it easy to add conflicts between just live partitions
- with the same base variable.
- The values in LIVE_BASE_PARTITIONS are only valid if the base variable is
- marked as being live. This delays clearing of these bitmaps until
- they are actually needed again. */
-
-class live_track
-{
-public:
- bitmap_obstack obstack; /* A place to allocate our bitmaps. */
- bitmap_head live_base_var; /* Indicates if a basevar is live. */
- bitmap_head *live_base_partitions; /* Live partitions for each basevar. */
- var_map map; /* Var_map being used for partition mapping. */
-};
-
-
-/* This routine will create a new live track structure based on the partitions
- in MAP. */
-
-static live_track *
-new_live_track (var_map map)
-{
- live_track *ptr;
- int lim, x;
-
- /* Make sure there is a partition view in place. */
- gcc_assert (map->partition_to_base_index != NULL);
-
- ptr = XNEW (live_track);
- ptr->map = map;
- lim = num_basevars (map);
- bitmap_obstack_initialize (&ptr->obstack);
- ptr->live_base_partitions = XNEWVEC (bitmap_head, lim);
- bitmap_initialize (&ptr->live_base_var, &ptr->obstack);
- for (x = 0; x < lim; x++)
- bitmap_initialize (&ptr->live_base_partitions[x], &ptr->obstack);
- return ptr;
-}
-
-
-/* This routine will free the memory associated with PTR. */
-
-static void
-delete_live_track (live_track *ptr)
-{
- bitmap_obstack_release (&ptr->obstack);
- XDELETEVEC (ptr->live_base_partitions);
- XDELETE (ptr);
-}
-
-
-/* This function will remove PARTITION from the live list in PTR. */
-
-static inline void
-live_track_remove_partition (live_track *ptr, int partition)
-{
- int root;
-
- root = basevar_index (ptr->map, partition);
- bitmap_clear_bit (&ptr->live_base_partitions[root], partition);
- /* If the element list is empty, make the base variable not live either. */
- if (bitmap_empty_p (&ptr->live_base_partitions[root]))
- bitmap_clear_bit (&ptr->live_base_var, root);
-}
-
-
-/* This function will adds PARTITION to the live list in PTR. */
-
-static inline void
-live_track_add_partition (live_track *ptr, int partition)
-{
- int root;
-
- root = basevar_index (ptr->map, partition);
- /* If this base var wasn't live before, it is now. Clear the element list
- since it was delayed until needed. */
- if (bitmap_set_bit (&ptr->live_base_var, root))
- bitmap_clear (&ptr->live_base_partitions[root]);
- bitmap_set_bit (&ptr->live_base_partitions[root], partition);
-
-}
-
-
-/* Clear the live bit for VAR in PTR. */
-
-static inline void
-live_track_clear_var (live_track *ptr, tree var)
-{
- int p;
-
- p = var_to_partition (ptr->map, var);
- if (p != NO_PARTITION)
- live_track_remove_partition (ptr, p);
-}
-
-
-/* Return TRUE if VAR is live in PTR. */
-
-static inline bool
-live_track_live_p (live_track *ptr, tree var)
-{
- int p, root;
-
- p = var_to_partition (ptr->map, var);
- if (p != NO_PARTITION)
- {
- root = basevar_index (ptr->map, p);
- if (bitmap_bit_p (&ptr->live_base_var, root))
- return bitmap_bit_p (&ptr->live_base_partitions[root], p);
- }
- return false;
-}
-
-
-/* This routine will add USE to PTR. USE will be marked as live in both the
- ssa live map and the live bitmap for the root of USE. */
-
-static inline void
-live_track_process_use (live_track *ptr, tree use)
-{
- int p;
-
- p = var_to_partition (ptr->map, use);
- if (p == NO_PARTITION)
- return;
-
- /* Mark as live in the appropriate live list. */
- live_track_add_partition (ptr, p);
-}
-
-
-/* This routine will process a DEF in PTR. DEF will be removed from the live
- lists, and if there are any other live partitions with the same base
- variable, conflicts will be added to GRAPH. */
-
-static inline void
-live_track_process_def (live_track *ptr, tree def, ssa_conflicts *graph)
-{
- int p, root;
- bitmap b;
- unsigned x;
- bitmap_iterator bi;
-
- p = var_to_partition (ptr->map, def);
- if (p == NO_PARTITION)
- return;
-
- /* Clear the liveness bit. */
- live_track_remove_partition (ptr, p);
-
- /* If the bitmap isn't empty now, conflicts need to be added. */
- root = basevar_index (ptr->map, p);
- if (bitmap_bit_p (&ptr->live_base_var, root))
- {
- b = &ptr->live_base_partitions[root];
- EXECUTE_IF_SET_IN_BITMAP (b, 0, x, bi)
- ssa_conflicts_add (graph, p, x);
- }
-}
-
-
-/* Initialize PTR with the partitions set in INIT. */
-
-static inline void
-live_track_init (live_track *ptr, bitmap init)
-{
- unsigned p;
- bitmap_iterator bi;
-
- /* Mark all live on exit partitions. */
- EXECUTE_IF_SET_IN_BITMAP (init, 0, p, bi)
- live_track_add_partition (ptr, p);
-}
-
-
-/* This routine will clear all live partitions in PTR. */
-
-static inline void
-live_track_clear_base_vars (live_track *ptr)
-{
- /* Simply clear the live base list. Anything marked as live in the element
- lists will be cleared later if/when the base variable ever comes alive
- again. */
- bitmap_clear (&ptr->live_base_var);
-}
-
-
-/* Build a conflict graph based on LIVEINFO. Any partitions which are in the
- partition view of the var_map liveinfo is based on get entries in the
- conflict graph. Only conflicts between ssa_name partitions with the same
- base variable are added. */
-
-static ssa_conflicts *
-build_ssa_conflict_graph (tree_live_info_p liveinfo)
-{
- ssa_conflicts *graph;
- var_map map;
- basic_block bb;
- ssa_op_iter iter;
- live_track *live;
- basic_block entry;
-
- /* If inter-variable coalescing is enabled, we may attempt to
- coalesce variables from different base variables, including
- different parameters, so we have to make sure default defs live
- at the entry block conflict with each other. */
- if (flag_tree_coalesce_vars)
- entry = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
- else
- entry = NULL;
-
- map = live_var_map (liveinfo);
- graph = ssa_conflicts_new (num_var_partitions (map));
-
- live = new_live_track (map);
-
- for (unsigned i = 0; liveinfo->map->vec_bbs.iterate (i, &bb); ++i)
- {
- /* Start with live on exit temporaries. */
- live_track_init (live, live_on_exit (liveinfo, bb));
-
- for (gimple_stmt_iterator gsi = gsi_last_bb (bb); !gsi_end_p (gsi);
- gsi_prev (&gsi))
- {
- tree var;
- gimple *stmt = gsi_stmt (gsi);
-
- /* A copy between 2 partitions does not introduce an interference
- by itself. If they did, you would never be able to coalesce
- two things which are copied. If the two variables really do
- conflict, they will conflict elsewhere in the program.
-
- This is handled by simply removing the SRC of the copy from the
- live list, and processing the stmt normally. */
- if (is_gimple_assign (stmt))
- {
- tree lhs = gimple_assign_lhs (stmt);
- tree rhs1 = gimple_assign_rhs1 (stmt);
- if (gimple_assign_copy_p (stmt)
- && TREE_CODE (lhs) == SSA_NAME
- && TREE_CODE (rhs1) == SSA_NAME)
- live_track_clear_var (live, rhs1);
- }
- else if (is_gimple_debug (stmt))
- continue;
-
- /* For stmts with more than one SSA_NAME definition pretend all the
- SSA_NAME outputs but the first one are live at this point, so
- that conflicts are added in between all those even when they are
- actually not really live after the asm, because expansion might
- copy those into pseudos after the asm and if multiple outputs
- share the same partition, it might overwrite those that should
- be live. E.g.
- asm volatile (".." : "=r" (a) : "=r" (b) : "0" (a), "1" (a));
- return a;
- See PR70593. */
- bool first = true;
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
- if (first)
- first = false;
- else
- live_track_process_use (live, var);
-
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
- live_track_process_def (live, var, graph);
-
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE)
- live_track_process_use (live, var);
- }
-
- /* If result of a PHI is unused, looping over the statements will not
- record any conflicts since the def was never live. Since the PHI node
- is going to be translated out of SSA form, it will insert a copy.
- There must be a conflict recorded between the result of the PHI and
- any variables that are live. Otherwise the out-of-ssa translation
- may create incorrect code. */
- for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
- gphi *phi = gsi.phi ();
- tree result = PHI_RESULT (phi);
- if (virtual_operand_p (result))
- continue;
- if (live_track_live_p (live, result))
- live_track_process_def (live, result, graph);
- }
-
- /* Pretend there are defs for params' default defs at the start
- of the (post-)entry block. This will prevent PARM_DECLs from
- coalescing into the same partition. Although RESULT_DECLs'
- default defs don't have a useful initial value, we have to
- prevent them from coalescing with PARM_DECLs' default defs
- too, otherwise assign_parms would attempt to assign different
- RTL to the same partition. */
- if (bb == entry)
- {
- unsigned i;
- tree var;
-
- FOR_EACH_SSA_NAME (i, var, cfun)
- {
- if (!SSA_NAME_IS_DEFAULT_DEF (var)
- || !SSA_NAME_VAR (var)
- || VAR_P (SSA_NAME_VAR (var)))
- continue;
-
- live_track_process_def (live, var, graph);
- /* Process a use too, so that it remains live and
- conflicts with other parms' default defs, even unused
- ones. */
- live_track_process_use (live, var);
- }
- }
-
- live_track_clear_base_vars (live);
- }
-
- delete_live_track (live);
- return graph;
-}
-
-/* Print a failure to coalesce a MUST_COALESCE pair X and Y. */
-
-static inline void
-fail_abnormal_edge_coalesce (int x, int y)
-{
- fprintf (stderr, "\nUnable to coalesce ssa_names %d and %d",x, y);
- fprintf (stderr, " which are marked as MUST COALESCE.\n");
- print_generic_expr (stderr, ssa_name (x), TDF_SLIM);
- fprintf (stderr, " and ");
- print_generic_stmt (stderr, ssa_name (y), TDF_SLIM);
-
- internal_error ("SSA corruption");
-}
-
-/* If VAR is an SSA_NAME associated with a PARM_DECL or a RESULT_DECL,
- and the DECL's default def is unused (i.e., it was introduced by
- create_default_def for out-of-ssa), mark VAR and the default def for
- coalescing. */
-
-static void
-coalesce_with_default (tree var, coalesce_list *cl, bitmap used_in_copy)
-{
- if (SSA_NAME_IS_DEFAULT_DEF (var)
- || !SSA_NAME_VAR (var)
- || VAR_P (SSA_NAME_VAR (var)))
- return;
-
- tree ssa = ssa_default_def (cfun, SSA_NAME_VAR (var));
- if (!has_zero_uses (ssa))
- return;
-
- add_cost_one_coalesce (cl, SSA_NAME_VERSION (ssa), SSA_NAME_VERSION (var));
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
- /* Default defs will have their used_in_copy bits set at the beginning of
- populate_coalesce_list_for_outofssa. */
-}
-
-
-/* Given var_map MAP for a region, this function creates and returns a coalesce
- list as well as recording related ssa names in USED_IN_COPIES for use later
- in the out-of-ssa or live range computation process. */
-
-static coalesce_list *
-create_coalesce_list_for_region (var_map map, bitmap used_in_copy)
-{
- gimple_stmt_iterator gsi;
- basic_block bb;
- coalesce_list *cl = create_coalesce_list ();
- gimple *stmt;
- int v1, v2, cost;
-
- for (unsigned j = 0; map->vec_bbs.iterate (j, &bb); ++j)
- {
- tree arg;
-
- for (gphi_iterator gpi = gsi_start_phis (bb);
- !gsi_end_p (gpi);
- gsi_next (&gpi))
- {
- gphi *phi = gpi.phi ();
- size_t i;
- int ver;
- tree res;
- bool saw_copy = false;
-
- res = gimple_phi_result (phi);
- if (virtual_operand_p (res))
- continue;
- ver = SSA_NAME_VERSION (res);
-
- /* Register ssa_names and coalesces between the args and the result
- of all PHI. */
- for (i = 0; i < gimple_phi_num_args (phi); i++)
- {
- edge e = gimple_phi_arg_edge (phi, i);
- arg = PHI_ARG_DEF (phi, i);
- if (TREE_CODE (arg) != SSA_NAME)
- continue;
-
- if (gimple_can_coalesce_p (arg, res)
- || (e->flags & EDGE_ABNORMAL))
- {
- saw_copy = true;
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (arg));
- if ((e->flags & EDGE_ABNORMAL) == 0)
- {
- int cost = coalesce_cost_edge (e);
- if (cost == 1 && has_single_use (arg))
- add_cost_one_coalesce (cl, ver, SSA_NAME_VERSION (arg));
- else
- add_coalesce (cl, ver, SSA_NAME_VERSION (arg), cost);
- }
- }
- }
- if (saw_copy)
- bitmap_set_bit (used_in_copy, ver);
- }
-
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- {
- stmt = gsi_stmt (gsi);
-
- if (is_gimple_debug (stmt))
- continue;
-
- /* Check for copy coalesces. */
- switch (gimple_code (stmt))
- {
- case GIMPLE_ASSIGN:
- {
- tree lhs = gimple_assign_lhs (stmt);
- tree rhs1 = gimple_assign_rhs1 (stmt);
- if (gimple_assign_ssa_name_copy_p (stmt)
- && gimple_can_coalesce_p (lhs, rhs1))
- {
- v1 = SSA_NAME_VERSION (lhs);
- v2 = SSA_NAME_VERSION (rhs1);
- cost = coalesce_cost_bb (bb);
- add_coalesce (cl, v1, v2, cost);
- bitmap_set_bit (used_in_copy, v1);
- bitmap_set_bit (used_in_copy, v2);
- }
- }
- break;
-
- case GIMPLE_RETURN:
- {
- tree res = DECL_RESULT (current_function_decl);
- if (VOID_TYPE_P (TREE_TYPE (res))
- || !is_gimple_reg (res))
- break;
- tree rhs1 = gimple_return_retval (as_a <greturn *> (stmt));
- if (!rhs1)
- break;
- tree lhs = ssa_default_def (cfun, res);
- gcc_assert (lhs);
- if (TREE_CODE (rhs1) == SSA_NAME
- && gimple_can_coalesce_p (lhs, rhs1))
- {
- v1 = SSA_NAME_VERSION (lhs);
- v2 = SSA_NAME_VERSION (rhs1);
- cost = coalesce_cost_bb (bb);
- add_coalesce (cl, v1, v2, cost);
- bitmap_set_bit (used_in_copy, v1);
- bitmap_set_bit (used_in_copy, v2);
- }
- break;
- }
-
- case GIMPLE_ASM:
- {
- gasm *asm_stmt = as_a <gasm *> (stmt);
- unsigned long noutputs, i;
- unsigned long ninputs;
- tree *outputs, link;
- noutputs = gimple_asm_noutputs (asm_stmt);
- ninputs = gimple_asm_ninputs (asm_stmt);
- outputs = (tree *) alloca (noutputs * sizeof (tree));
- for (i = 0; i < noutputs; ++i)
- {
- link = gimple_asm_output_op (asm_stmt, i);
- outputs[i] = TREE_VALUE (link);
- }
-
- for (i = 0; i < ninputs; ++i)
- {
- const char *constraint;
- tree input;
- char *end;
- unsigned long match;
-
- link = gimple_asm_input_op (asm_stmt, i);
- constraint
- = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link)));
- input = TREE_VALUE (link);
-
- if (TREE_CODE (input) != SSA_NAME)
- continue;
-
- match = strtoul (constraint, &end, 10);
- if (match >= noutputs || end == constraint)
- continue;
-
- if (TREE_CODE (outputs[match]) != SSA_NAME)
- continue;
-
- v1 = SSA_NAME_VERSION (outputs[match]);
- v2 = SSA_NAME_VERSION (input);
-
- if (gimple_can_coalesce_p (outputs[match], input))
- {
- cost = coalesce_cost (REG_BR_PROB_BASE,
- optimize_bb_for_size_p (bb));
- add_coalesce (cl, v1, v2, cost);
- bitmap_set_bit (used_in_copy, v1);
- bitmap_set_bit (used_in_copy, v2);
- }
- }
- break;
- }
-
- default:
- break;
- }
- }
- }
-
- return cl;
-}
-
-
-/* Hashtable support for storing SSA names hashed by their SSA_NAME_VAR. */
-
-struct ssa_name_var_hash : nofree_ptr_hash <tree_node>
-{
- static inline hashval_t hash (const tree_node *);
- static inline int equal (const tree_node *, const tree_node *);
-};
-
-inline hashval_t
-ssa_name_var_hash::hash (const_tree n)
-{
- return DECL_UID (SSA_NAME_VAR (n));
-}
-
-inline int
-ssa_name_var_hash::equal (const tree_node *n1, const tree_node *n2)
-{
- return SSA_NAME_VAR (n1) == SSA_NAME_VAR (n2);
-}
-
-
-/* This function populates coalesce list CL as well as recording related ssa
- names in USED_IN_COPIES for use later in the out-of-ssa process. */
-
-static void
-populate_coalesce_list_for_outofssa (coalesce_list *cl, bitmap used_in_copy)
-{
- tree var;
- tree first;
- int v1, v2, cost;
- unsigned i;
-
- /* Process result decls and live on entry variables for entry into the
- coalesce list. */
- first = NULL_TREE;
- FOR_EACH_SSA_NAME (i, var, cfun)
- {
- if (!virtual_operand_p (var))
- {
- coalesce_with_default (var, cl, used_in_copy);
-
- /* Add coalesces between all the result decls. */
- if (SSA_NAME_VAR (var)
- && TREE_CODE (SSA_NAME_VAR (var)) == RESULT_DECL)
- {
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
- if (first == NULL_TREE)
- first = var;
- else
- {
- gcc_assert (gimple_can_coalesce_p (var, first));
- v1 = SSA_NAME_VERSION (first);
- v2 = SSA_NAME_VERSION (var);
- cost = coalesce_cost_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
- add_coalesce (cl, v1, v2, cost);
- }
- }
- /* Mark any default_def variables as being in the coalesce list
- since they will have to be coalesced with the base variable. If
- not marked as present, they won't be in the coalesce view. */
- if (SSA_NAME_IS_DEFAULT_DEF (var)
- && (!has_zero_uses (var)
- || (SSA_NAME_VAR (var)
- && !VAR_P (SSA_NAME_VAR (var)))))
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (var));
- }
- }
-
- /* If this optimization is disabled, we need to coalesce all the
- names originating from the same SSA_NAME_VAR so debug info
- remains undisturbed. */
- if (!flag_tree_coalesce_vars)
- {
- tree a;
- hash_table<ssa_name_var_hash> ssa_name_hash (10);
-
- FOR_EACH_SSA_NAME (i, a, cfun)
- {
- if (SSA_NAME_VAR (a)
- && !DECL_IGNORED_P (SSA_NAME_VAR (a))
- && (!has_zero_uses (a) || !SSA_NAME_IS_DEFAULT_DEF (a)
- || !VAR_P (SSA_NAME_VAR (a))))
- {
- tree *slot = ssa_name_hash.find_slot (a, INSERT);
-
- if (!*slot)
- *slot = a;
- else
- {
- /* If the variable is a PARM_DECL or a RESULT_DECL, we
- _require_ that all the names originating from it be
- coalesced, because there must be a single partition
- containing all the names so that it can be assigned
- the canonical RTL location of the DECL safely.
- If in_lto_p, a function could have been compiled
- originally with optimizations and only the link
- performed at -O0, so we can't actually require it. */
- const int cost
- = (TREE_CODE (SSA_NAME_VAR (a)) == VAR_DECL || in_lto_p)
- ? MUST_COALESCE_COST - 1 : MUST_COALESCE_COST;
- add_coalesce (cl, SSA_NAME_VERSION (a),
- SSA_NAME_VERSION (*slot), cost);
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (a));
- bitmap_set_bit (used_in_copy, SSA_NAME_VERSION (*slot));
- }
- }
- }
- }
-}
-
-
-/* Attempt to coalesce ssa versions X and Y together using the partition
- mapping in MAP and checking conflicts in GRAPH. Output any debug info to
- DEBUG, if it is nun-NULL. */
-
-static inline bool
-attempt_coalesce (var_map map, ssa_conflicts *graph, int x, int y,
- FILE *debug)
-{
- int z;
- tree var1, var2;
- int p1, p2;
-
- p1 = var_to_partition (map, ssa_name (x));
- p2 = var_to_partition (map, ssa_name (y));
-
- if (debug)
- {
- fprintf (debug, "(%d)", x);
- print_generic_expr (debug, partition_to_var (map, p1), TDF_SLIM);
- fprintf (debug, " & (%d)", y);
- print_generic_expr (debug, partition_to_var (map, p2), TDF_SLIM);
- }
-
- if (p1 == p2)
- {
- if (debug)
- fprintf (debug, ": Already Coalesced.\n");
- return true;
- }
-
- if (debug)
- fprintf (debug, " [map: %d, %d] ", p1, p2);
-
-
- if (!ssa_conflicts_test_p (graph, p1, p2))
- {
- var1 = partition_to_var (map, p1);
- var2 = partition_to_var (map, p2);
-
- z = var_union (map, var1, var2);
- if (z == NO_PARTITION)
- {
- if (debug)
- fprintf (debug, ": Unable to perform partition union.\n");
- return false;
- }
-
- /* z is the new combined partition. Remove the other partition from
- the list, and merge the conflicts. */
- if (z == p1)
- ssa_conflicts_merge (graph, p1, p2);
- else
- ssa_conflicts_merge (graph, p2, p1);
-
- if (debug)
- fprintf (debug, ": Success -> %d\n", z);
-
- return true;
- }
-
- if (debug)
- fprintf (debug, ": Fail due to conflict\n");
-
- return false;
-}
-
-
-/* Attempt to Coalesce partitions in MAP which occur in the list CL using
- GRAPH. Debug output is sent to DEBUG if it is non-NULL. */
-
-static void
-coalesce_partitions (var_map map, ssa_conflicts *graph, coalesce_list *cl,
- FILE *debug)
-{
- int x = 0, y = 0;
- tree var1, var2;
- int cost;
- basic_block bb;
- edge e;
- edge_iterator ei;
-
- /* First, coalesce all the copies across abnormal edges. These are not placed
- in the coalesce list because they do not need to be sorted, and simply
- consume extra memory/compilation time in large programs. */
-
- FOR_EACH_BB_FN (bb, cfun)
- {
- FOR_EACH_EDGE (e, ei, bb->preds)
- if (e->flags & EDGE_ABNORMAL)
- {
- gphi_iterator gsi;
- for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
- gphi *phi = gsi.phi ();
- tree res = PHI_RESULT (phi);
- if (virtual_operand_p (res))
- continue;
- tree arg = PHI_ARG_DEF (phi, e->dest_idx);
- if (SSA_NAME_IS_DEFAULT_DEF (arg)
- && (!SSA_NAME_VAR (arg)
- || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
- continue;
-
- int v1 = SSA_NAME_VERSION (res);
- int v2 = SSA_NAME_VERSION (arg);
-
- if (debug)
- fprintf (debug, "Abnormal coalesce: ");
-
- if (!attempt_coalesce (map, graph, v1, v2, debug))
- fail_abnormal_edge_coalesce (v1, v2);
- }
- }
- }
-
- /* Now process the items in the coalesce list. */
-
- while ((cost = pop_best_coalesce (cl, &x, &y)) != NO_BEST_COALESCE)
- {
- var1 = ssa_name (x);
- var2 = ssa_name (y);
-
- /* Assert the coalesces have the same base variable. */
- gcc_assert (gimple_can_coalesce_p (var1, var2));
-
- if (debug)
- fprintf (debug, "Coalesce list: ");
- attempt_coalesce (map, graph, x, y, debug);
- }
-}
-
-
-/* Output partition map MAP with coalescing plan PART to file F. */
-
-void
-dump_part_var_map (FILE *f, partition part, var_map map)
-{
- int t;
- unsigned x, y;
- int p;
-
- fprintf (f, "\nCoalescible Partition map \n\n");
-
- for (x = 0; x < map->num_partitions; x++)
- {
- if (map->view_to_partition != NULL)
- p = map->view_to_partition[x];
- else
- p = x;
-
- if (ssa_name (p) == NULL_TREE
- || virtual_operand_p (ssa_name (p)))
- continue;
-
- t = 0;
- for (y = 1; y < num_ssa_names; y++)
- {
- tree var = version_to_var (map, y);
- if (!var)
- continue;
- int q = var_to_partition (map, var);
- p = partition_find (part, q);
- gcc_assert (map->partition_to_base_index[q]
- == map->partition_to_base_index[p]);
-
- if (p == (int)x)
- {
- if (t++ == 0)
- {
- fprintf (f, "Partition %d, base %d (", x,
- map->partition_to_base_index[q]);
- print_generic_expr (f, partition_to_var (map, q), TDF_SLIM);
- fprintf (f, " - ");
- }
- fprintf (f, "%d ", y);
- }
- }
- if (t != 0)
- fprintf (f, ")\n");
- }
- fprintf (f, "\n");
-}
-
-/* Given SSA_NAMEs NAME1 and NAME2, return true if they are candidates for
- coalescing together, false otherwise.
-
- This must stay consistent with compute_samebase_partition_bases and
- compute_optimized_partition_bases. */
-
-bool
-gimple_can_coalesce_p (tree name1, tree name2)
-{
- /* First check the SSA_NAME's associated DECL. Without
- optimization, we only want to coalesce if they have the same DECL
- or both have no associated DECL. */
- tree var1 = SSA_NAME_VAR (name1);
- tree var2 = SSA_NAME_VAR (name2);
- var1 = (var1 && (!VAR_P (var1) || !DECL_IGNORED_P (var1))) ? var1 : NULL_TREE;
- var2 = (var2 && (!VAR_P (var2) || !DECL_IGNORED_P (var2))) ? var2 : NULL_TREE;
- if (var1 != var2 && !flag_tree_coalesce_vars)
- return false;
-
- /* Now check the types. If the types are the same, then we should
- try to coalesce V1 and V2. */
- tree t1 = TREE_TYPE (name1);
- tree t2 = TREE_TYPE (name2);
- if (t1 == t2)
- {
- check_modes:
- /* If the base variables are the same, we're good: none of the
- other tests below could possibly fail. */
- var1 = SSA_NAME_VAR (name1);
- var2 = SSA_NAME_VAR (name2);
- if (var1 == var2)
- return true;
-
- /* We don't want to coalesce two SSA names if one of the base
- variables is supposed to be a register while the other is
- supposed to be on the stack. Anonymous SSA names most often
- take registers, but when not optimizing, user variables
- should go on the stack, so coalescing them with the anonymous
- variable as the partition leader would end up assigning the
- user variable to a register. Don't do that! */
- bool reg1 = use_register_for_decl (name1);
- bool reg2 = use_register_for_decl (name2);
- if (reg1 != reg2)
- return false;
-
- /* Check that the promoted modes and unsignedness are the same.
- We don't want to coalesce if the promoted modes would be
- different, or if they would sign-extend differently. Only
- PARM_DECLs and RESULT_DECLs have different promotion rules,
- so skip the test if both are variables, or both are anonymous
- SSA_NAMEs. */
- int unsigned1, unsigned2;
- return ((!var1 || VAR_P (var1)) && (!var2 || VAR_P (var2)))
- || ((promote_ssa_mode (name1, &unsigned1)
- == promote_ssa_mode (name2, &unsigned2))
- && unsigned1 == unsigned2);
- }
-
- /* If alignment requirements are different, we can't coalesce. */
- if (MINIMUM_ALIGNMENT (t1,
- var1 ? DECL_MODE (var1) : TYPE_MODE (t1),
- var1 ? LOCAL_DECL_ALIGNMENT (var1) : TYPE_ALIGN (t1))
- != MINIMUM_ALIGNMENT (t2,
- var2 ? DECL_MODE (var2) : TYPE_MODE (t2),
- var2 ? LOCAL_DECL_ALIGNMENT (var2) : TYPE_ALIGN (t2)))
- return false;
-
- /* If the types are not the same, see whether they are compatible. This
- (for example) allows coalescing when the types are fundamentally the
- same, but just have different names. */
- if (types_compatible_p (t1, t2))
- goto check_modes;
-
- return false;
-}
-
-/* Fill in MAP's partition_to_base_index, with one index for each
- partition of SSA names USED_IN_COPIES and related by CL coalesce
- possibilities. This must match gimple_can_coalesce_p in the
- optimized case. */
-
-static void
-compute_optimized_partition_bases (var_map map, bitmap used_in_copies,
- coalesce_list *cl)
-{
- int parts = num_var_partitions (map);
- partition tentative = partition_new (parts);
-
- /* Partition the SSA versions so that, for each coalescible
- pair, both of its members are in the same partition in
- TENTATIVE. */
- gcc_assert (!cl->sorted);
- coalesce_pair *node;
- coalesce_iterator_type ppi;
- FOR_EACH_PARTITION_PAIR (node, ppi, cl)
- {
- tree v1 = ssa_name (node->first_element);
- int p1 = partition_find (tentative, var_to_partition (map, v1));
- tree v2 = ssa_name (node->second_element);
- int p2 = partition_find (tentative, var_to_partition (map, v2));
-
- if (p1 == p2)
- continue;
-
- partition_union (tentative, p1, p2);
- }
-
- /* We have to deal with cost one pairs too. */
- for (cost_one_pair *co = cl->cost_one_list; co; co = co->next)
- {
- tree v1 = ssa_name (co->first_element);
- int p1 = partition_find (tentative, var_to_partition (map, v1));
- tree v2 = ssa_name (co->second_element);
- int p2 = partition_find (tentative, var_to_partition (map, v2));
-
- if (p1 == p2)
- continue;
-
- partition_union (tentative, p1, p2);
- }
-
- /* And also with abnormal edges. */
- basic_block bb;
- edge e;
- unsigned i;
- edge_iterator ei;
- for (i = 0; map->vec_bbs.iterate (i, &bb); ++i)
- {
- FOR_EACH_EDGE (e, ei, bb->preds)
- if (e->flags & EDGE_ABNORMAL)
- {
- gphi_iterator gsi;
- for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
- gsi_next (&gsi))
- {
- gphi *phi = gsi.phi ();
- tree res = PHI_RESULT (phi);
- if (virtual_operand_p (res))
- continue;
- tree arg = PHI_ARG_DEF (phi, e->dest_idx);
- if (SSA_NAME_IS_DEFAULT_DEF (arg)
- && (!SSA_NAME_VAR (arg)
- || TREE_CODE (SSA_NAME_VAR (arg)) != PARM_DECL))
- continue;
-
- int p1 = partition_find (tentative, var_to_partition (map, res));
- int p2 = partition_find (tentative, var_to_partition (map, arg));
-
- if (p1 == p2)
- continue;
-
- partition_union (tentative, p1, p2);
- }
- }
- }
-
- map->partition_to_base_index = XCNEWVEC (int, parts);
- auto_vec<unsigned int> index_map (parts);
- if (parts)
- index_map.quick_grow (parts);
-
- const unsigned no_part = -1;
- unsigned count = parts;
- while (count)
- index_map[--count] = no_part;
-
- /* Initialize MAP's mapping from partition to base index, using
- as base indices an enumeration of the TENTATIVE partitions in
- which each SSA version ended up, so that we compute conflicts
- between all SSA versions that ended up in the same potential
- coalesce partition. */
- bitmap_iterator bi;
- EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
- {
- int pidx = var_to_partition (map, ssa_name (i));
- int base = partition_find (tentative, pidx);
- if (index_map[base] != no_part)
- continue;
- index_map[base] = count++;
- }
-
- map->num_basevars = count;
-
- EXECUTE_IF_SET_IN_BITMAP (used_in_copies, 0, i, bi)
- {
- int pidx = var_to_partition (map, ssa_name (i));
- int base = partition_find (tentative, pidx);
- gcc_assert (index_map[base] < count);
- map->partition_to_base_index[pidx] = index_map[base];
- }
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_part_var_map (dump_file, tentative, map);
-
- partition_delete (tentative);
-}
-
-/* Given an initial var_map MAP, coalesce variables and return a partition map
- with the resulting coalesce. Note that this function is called in either
- live range computation context or out-of-ssa context, indicated by MAP. */
-
-extern void
-coalesce_ssa_name (var_map map)
-{
- tree_live_info_p liveinfo;
- ssa_conflicts *graph;
- coalesce_list *cl;
- auto_bitmap used_in_copies;
-
- bitmap_tree_view (used_in_copies);
- cl = create_coalesce_list_for_region (map, used_in_copies);
- if (map->outofssa_p)
- populate_coalesce_list_for_outofssa (cl, used_in_copies);
- bitmap_list_view (used_in_copies);
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_var_map (dump_file, map);
-
- partition_view_bitmap (map, used_in_copies);
-
- compute_optimized_partition_bases (map, used_in_copies, cl);
-
- if (num_var_partitions (map) < 1)
- {
- delete_coalesce_list (cl);
- return;
- }
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_var_map (dump_file, map);
-
- liveinfo = calculate_live_ranges (map, false);
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_live_info (dump_file, liveinfo, LIVEDUMP_ENTRY);
-
- /* Build a conflict graph. */
- graph = build_ssa_conflict_graph (liveinfo);
- delete_tree_live_info (liveinfo);
- if (dump_file && (dump_flags & TDF_DETAILS))
- ssa_conflicts_dump (dump_file, graph);
-
- sort_coalesce_list (cl, graph, map);
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "\nAfter sorting:\n");
- dump_coalesce_list (dump_file, cl);
- }
-
- /* First, coalesce all live on entry variables to their base variable.
- This will ensure the first use is coming from the correct location. */
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- dump_var_map (dump_file, map);
-
- /* Now coalesce everything in the list. */
- coalesce_partitions (map, graph, cl,
- ((dump_flags & TDF_DETAILS) ? dump_file : NULL));
-
- delete_coalesce_list (cl);
- ssa_conflicts_delete (graph);
-}
-