From: Venkatraman Govindaraju Date: Sun, 22 Sep 2013 01:40:24 +0000 (+0000) Subject: [SPARC] Make functions with GLOBAL_OFFSET_TABLE access as non-leaf functions. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=ecd4965c133d16fc9e5a6ac393c5194b67cd53ab;p=oota-llvm.git [SPARC] Make functions with GLOBAL_OFFSET_TABLE access as non-leaf functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191160 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp index 2260fe48b31..eb9896c1f56 100644 --- a/lib/Target/Sparc/SparcISelLowering.cpp +++ b/lib/Target/Sparc/SparcISelLowering.cpp @@ -1651,6 +1651,10 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const { SDValue HiLo = makeHiLoPair(Op, SPII::MO_HI, SPII::MO_LO, DAG); SDValue GlobalBase = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, VT); SDValue AbsAddr = DAG.getNode(ISD::ADD, DL, VT, GlobalBase, HiLo); + // GLOBAL_BASE_REG codegen'ed with call. Inform MFI that this + // function has calls. + MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo(); + MFI->setHasCalls(true); return DAG.getLoad(VT, DL, DAG.getEntryNode(), AbsAddr, MachinePointerInfo::getGOT(), false, false, false, 0); } diff --git a/test/CodeGen/SPARC/constpool.ll b/test/CodeGen/SPARC/constpool.ll index d8b7b153ee0..b861676ce3e 100644 --- a/test/CodeGen/SPARC/constpool.ll +++ b/test/CodeGen/SPARC/constpool.ll @@ -39,8 +39,10 @@ entry: ; v8pic32: sethi %hi(.LCPI0_0), %[[R1:[gilo][0-7]]] ; v8pic32: add %[[R1]], %lo(.LCPI0_0), %[[Goffs:[gilo][0-7]]] ; v8pic32: ld [%[[GOT:[gilo][0-7]]]+%[[Goffs]]], %[[Gaddr:[gilo][0-7]]] -; v8pic32: jmp %o7+8 ; v8pic32: ld [%[[Gaddr]]], %f0 +; v8pic32: jmp %i7+8 +; v8pic32: restore + ; v9pic32: floatCP @@ -48,6 +50,8 @@ entry: ; v9pic32: sethi %hi(.LCPI0_0), %[[R1:[gilo][0-7]]] ; v9pic32: add %[[R1]], %lo(.LCPI0_0), %[[Goffs:[gilo][0-7]]] ; v9pic32: ldx [%[[GOT:[gilo][0-7]]]+%[[Goffs]]], %[[Gaddr:[gilo][0-7]]] -; v9pic32: jmp %o7+8 ; v9pic32: ld [%[[Gaddr]]], %f1 +; v9pic32: jmp %i7+8 +; v9pic32: restore + diff --git a/test/CodeGen/SPARC/globals.ll b/test/CodeGen/SPARC/globals.ll index 0e0dfc8f8db..7e3effe3f4c 100644 --- a/test/CodeGen/SPARC/globals.ll +++ b/test/CodeGen/SPARC/globals.ll @@ -41,8 +41,9 @@ define zeroext i8 @loadG() { ; v8pic32: sethi %hi(G), %[[R1:[gilo][0-7]]] ; v8pic32: add %[[R1]], %lo(G), %[[Goffs:[gilo][0-7]]] ; v8pic32: ld [%[[GOT:[gilo][0-7]]]+%[[Goffs]]], %[[Gaddr:[gilo][0-7]]] -; v8pic32: jmp %o7+8 -; v8pic32: ldub [%[[Gaddr]]], %o0 +; v8pic32: ldub [%[[Gaddr]]], %i0 +; v8pic32: jmp %i7+8 +; v8pic32: restore ; v9pic32: loadG @@ -50,6 +51,7 @@ define zeroext i8 @loadG() { ; v9pic32: sethi %hi(G), %[[R1:[gilo][0-7]]] ; v9pic32: add %[[R1]], %lo(G), %[[Goffs:[gilo][0-7]]] ; v9pic32: ldx [%[[GOT:[gilo][0-7]]]+%[[Goffs]]], %[[Gaddr:[gilo][0-7]]] -; v9pic32: jmp %o7+8 -; v9pic32: ldub [%[[Gaddr]]], %o0 +; v9pic32: ldub [%[[Gaddr]]], %i0 +; v9pic32: jmp %i7+8 +; v9pic32: restore