[PPC64] Fix PR19893 - improve code generation for local function addresses
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Mon, 16 Jun 2014 21:36:02 +0000 (21:36 +0000)
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>
Mon, 16 Jun 2014 21:36:02 +0000 (21:36 +0000)
commit212ec3a739dcc93206a81d582e9eca830589a107
tree8816da4c32f2ba89955347ba9438282f145b312b
parente4f12201e3a827487b0aebb0ea6b773831dea4e9
[PPC64] Fix PR19893 - improve code generation for local function addresses

Rafael opened http://llvm.org/bugs/show_bug.cgi?id=19893 to track non-optimal
code generation for forming a function address that is local to the compile
unit.  The existing code was treating both local and non-local functions
identically.

This patch fixes the problem by properly identifying local functions and
generating the proper addis/addi code.  I also noticed that Rafael's earlier
changes to correct the surrounding code in PPCISelLowering.cpp were also
needed for fast instruction selection in PPCFastISel.cpp, so this patch
fixes that code as well.

The existing test/CodeGen/PowerPC/func-addr.ll is modified to test the new
code generation.  I've added a -O0 run line to test the fast-isel code as
well.

Tested on powerpc64[le]-unknown-linux-gnu with no regressions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211056 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/PowerPC/PPCFastISel.cpp
lib/Target/PowerPC/PPCISelDAGToDAG.cpp
test/CodeGen/PowerPC/func-addr.ll