Skip moving call address loading into callseq when targets prefer register indirect...
authorMichael Liao <michael.liao@intel.com>
Thu, 28 Mar 2013 23:13:21 +0000 (23:13 +0000)
committerMichael Liao <michael.liao@intel.com>
Thu, 28 Mar 2013 23:13:21 +0000 (23:13 +0000)
commit816f6d0ac76c0ffb2ea9ecb72349d5d7d0fa8d1a
treeca2e482074d2d172d8fa38077e8cfedefaadb7cb
parentd02e46be1a3be9e8b871bdb0028fa5b9a2593848
Skip moving call address loading into callseq when targets prefer register indirect call.

To enable a load of a call address to be folded with that call, this
load is moved from outside of callseq into callseq. Such a moving
adds a non-glued node (that load) into a glued sequence. This non-glue
load is only removed when DAG selection folds them into a memory form
call instruction. When such instruction selection is disabled, it breaks
DAG schedule.

To prevent that, such moving is disabled when target favors register
indirect call.

Previous workaround disabling CALL32m/CALL64m insn selection is removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178308 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelDAGToDAG.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86InstrControl.td
lib/Target/X86/X86InstrInfo.td