Simplify landing pad lowering.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 3 Jul 2013 23:56:24 +0000 (23:56 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 3 Jul 2013 23:56:24 +0000 (23:56 +0000)
commit9c0e9217325db888331c23ad7c332c09d64b02d4
tree3f4018604fa6229224b5bb02874127cc596b3b0e
parentf64765244512250b28b1fbe290b1b26d17e41dd4
Simplify landing pad lowering.

Stop using the ISD::EXCEPTIONADDR and ISD::EHSELECTION when lowering
landing pad arguments. These nodes were previously legalized into
CopyFromReg nodes, but that never worked properly because the
CopyFromReg node weren't guaranteed to be  scheduled at the top of the
basic block.

This meant the exception pointer and selector registers could be
clobbered before being copied to a virtual register.

This patch copies the two physical registers to virtual registers at
the beginning of the basic block, and lowers the landingpad instruction
directly to two CopyFromReg nodes reading the *virtual* registers. This
is safe because virtual registers don't get clobbered.

A future patch will remove the ISD::EXCEPTIONADDR and ISD::EHSELECTION
nodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185595 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/FunctionLoweringInfo.h
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp