OSDN Git Service

In SDISel, for targets that support FORMAL_ARGUMENTS nodes, lower this
authorChris Lattner <sabre@nondot.org>
Wed, 13 Feb 2008 07:39:09 +0000 (07:39 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 13 Feb 2008 07:39:09 +0000 (07:39 +0000)
commit86ca3cacc5a56e862c8258ac9c9ee1e37598ebd8
treea5dc833f567bdc8e9804499dc941822227d0a006
parent9f72d1a73029ed3bfb1f8ced755a1aeeb36fb4f1
In SDISel, for targets that support FORMAL_ARGUMENTS nodes, lower this
node as soon as we create it in SDISel.  Previously we would lower it in
legalize.  The problem with this is that it only exposes the argument
loads implied by FORMAL_ARGUMENTs after legalize, so that only dag combine 2
can hack on them.  This causes us to miss some optimizations because
datatype expansion also happens here.

Exposing the loads early allows us to do optimizations on them.  For example
we now compile arg-cast.ll to:

_foo:
movl $2147483647, %eax
andl 8(%esp), %eax
ret

where we previously produced:

_foo:
subl $12, %esp
movsd 16(%esp), %xmm0
movsd %xmm0, (%esp)
movl $2147483647, %eax
andl 4(%esp), %eax
addl $12, %esp
ret

It might also make sense to do this for ISD::CALL nodes, which have implicit
stores on many targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47054 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
test/CodeGen/X86/arg-cast.ll [new file with mode: 0644]