llvm-6502/lib/Target/Mips
Akira Hatanaka 6ff59a16a0 [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out
of loops.

Previously, two consecutive calls to function "func" would result in the
following sequence of instructions:

1. load $16, %got(func)($gp) // load address of lazy-binding stub.
2. move $25, $16
3. jalr $25                  // jump to lazy-binding stub.
4. nop
5. move $25, $16
6. jalr $25                  // jump to lazy-binding stub again.

With this patch, the second call directly jumps to func's address, bypassing
the lazy-binding resolution routine:

1. load $25, %got(func)($gp) // load address of lazy-binding stub.
2. jalr $25                  // jump to lazy-binding stub.
3. nop
4. load $25, %got(func)($gp) // load resolved address of func.
5. jalr $25                  // directly jump to func.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191591 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-28 00:12:32 +00:00
..
AsmParser [mips][msa] Direct Object Emission support for the MSA instruction set. 2013-09-25 23:50:44 +00:00
Disassembler [mips][msa] Direct Object Emission for 3R instructions. 2013-09-26 00:09:46 +00:00
InstPrinter [mips][msa] Added support for matching splati from normal IR (i.e. not intrinsics) 2013-09-27 11:48:57 +00:00
MCTargetDesc Generate compact unwind encoding from CFI directives. 2013-09-09 02:37:14 +00:00
TargetInfo
CMakeLists.txt Turn MipsOptimizeMathLibCalls into a target-independent scalar transform 2013-08-23 10:27:02 +00:00
LLVMBuild.txt
Makefile
MicroMipsInstrFormats.td Support for misc microMIPS instructions. 2013-09-14 06:49:25 +00:00
MicroMipsInstrInfo.td Support for microMIPS DIV instructions. 2013-09-14 07:15:21 +00:00
Mips16FrameLowering.cpp
Mips16FrameLowering.h
Mips16HardFloat.cpp Fix a bad typo in the inline assembly code for mips16 pic fp stubs 2013-09-25 20:58:50 +00:00
Mips16HardFloat.h
Mips16InstrFormats.td
Mips16InstrInfo.cpp Remove unused stdio.h includes 2013-08-18 08:29:51 +00:00
Mips16InstrInfo.h
Mips16InstrInfo.td Fix two issues regarding Got pointer (GP) setup. 2013-09-18 22:46:09 +00:00
Mips16ISelDAGToDAG.cpp Fix two issues regarding Got pointer (GP) setup. 2013-09-18 22:46:09 +00:00
Mips16ISelDAGToDAG.h
Mips16ISelLowering.cpp [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out 2013-09-28 00:12:32 +00:00
Mips16ISelLowering.h
Mips16RegisterInfo.cpp
Mips16RegisterInfo.h
Mips64InstrInfo.td [mips] Add definition of instruction "drotr32" (double rotate right plus 32). 2013-09-07 00:18:01 +00:00
Mips.h Turn MipsOptimizeMathLibCalls into a target-independent scalar transform 2013-08-23 10:27:02 +00:00
Mips.td [Mips][msa] Added initial MSA support. 2013-08-13 20:54:07 +00:00
MipsAnalyzeImmediate.cpp
MipsAnalyzeImmediate.h
MipsAsmPrinter.cpp
MipsAsmPrinter.h
MipsCallingConv.td [mips] Add support for calling convention CC_MipsO32_FP64, which is used when the 2013-08-20 23:38:40 +00:00
MipsCodeEmitter.cpp [mips] Define "trap" as a pseudo instruction that turns into "break 0, 0". 2013-09-06 23:52:46 +00:00
MipsCondMov.td [mips] Set instruction itineraries of loads, stores and conditional moves. 2013-09-06 23:28:24 +00:00
MipsConstantIslandPass.cpp
MipsDelaySlotFiller.cpp [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out 2013-09-28 00:12:32 +00:00
MipsDSPInstrFormats.td
MipsDSPInstrInfo.td [mips] Use uimm5 and uimm6 instead of shamt and imm, if the immediate has to fit 2013-09-07 00:02:02 +00:00
MipsFrameLowering.cpp
MipsFrameLowering.h
MipsInstrFormats.td Fixed bug when generating Load Upper Immediate microMIPS instruction. 2013-09-14 07:35:41 +00:00
MipsInstrFPU.td This patch implements Mips load/store instructions from/to coprocessor 2. Test cases are added. 2013-09-16 10:29:42 +00:00
MipsInstrInfo.cpp
MipsInstrInfo.h
MipsInstrInfo.td [mips] MUL should clobber HI0 and LO0. 2013-09-20 21:22:28 +00:00
MipsISelDAGToDAG.cpp [mips][msa] Added support for matching splati from normal IR (i.e. not intrinsics) 2013-09-27 11:48:57 +00:00
MipsISelDAGToDAG.h [mips][msa] Added support for matching splati from normal IR (i.e. not intrinsics) 2013-09-27 11:48:57 +00:00
MipsISelLowering.cpp [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out 2013-09-28 00:12:32 +00:00
MipsISelLowering.h [mips] Make sure loads from lazy-binding entries do not get CSE'd or hoisted out 2013-09-28 00:12:32 +00:00
MipsJITInfo.cpp
MipsJITInfo.h
MipsLongBranch.cpp
MipsMachineFunction.cpp [mips] Define a derived class of PseudoSourceValue that represents a GOT entry 2013-09-27 22:30:36 +00:00
MipsMachineFunction.h [mips] Define a derived class of PseudoSourceValue that represents a GOT entry 2013-09-27 22:30:36 +00:00
MipsMCInstLower.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MipsMCInstLower.h
MipsModuleISelDAGToDAG.cpp
MipsModuleISelDAGToDAG.h
MipsMSAInstrFormats.td [mips][msa] Direct Object Emission for 3RF instructions. 2013-09-26 21:31:43 +00:00
MipsMSAInstrInfo.td [mips][msa] Rename arguments to MSA_INSERT_DESC_BASE to better match their expected values. 2013-09-27 12:45:08 +00:00
MipsOs16.cpp Make nomips16 mask not repeat if it ends with a '.'. 2013-09-23 22:36:11 +00:00
MipsOs16.h This is for an experimental option -mips-os16. The idea is to compile all 2013-04-10 16:58:04 +00:00
MipsRegisterInfo.cpp [mips][msa] Added cfcmsa, and ctcmsa 2013-08-28 10:26:24 +00:00
MipsRegisterInfo.h [mips] Resolve register classes dynamically using ptr_rc to reduce the number of 2013-08-20 21:08:22 +00:00
MipsRegisterInfo.td [mips][msa] Direct Object Emission support for the MSA instruction set. 2013-09-25 23:50:44 +00:00
MipsRelocations.h
MipsSchedule.td [mips] Define instruction itineraries IIArith and IILogic. 2013-07-31 00:55:34 +00:00
MipsSEFrameLowering.cpp [mips] Define register class FGRH32 for the high half of the 64-bit floating 2013-08-20 22:58:56 +00:00
MipsSEFrameLowering.h
MipsSEInstrInfo.cpp [mips][msa] Added support for MSA registers to copyPhysReg 2013-09-27 12:03:51 +00:00
MipsSEInstrInfo.h [mips] Enhance command line option "-mno-ldc1-sdc1" to expand base+index double 2013-09-07 00:52:30 +00:00
MipsSEISelDAGToDAG.cpp [mips][msa] Added support for matching splati from normal IR (i.e. not intrinsics) 2013-09-27 11:48:57 +00:00
MipsSEISelDAGToDAG.h [mips][msa] Added support for matching splati from normal IR (i.e. not intrinsics) 2013-09-27 11:48:57 +00:00
MipsSEISelLowering.cpp [mips][msa] Implemented insert.d intrinsic. 2013-09-27 13:36:54 +00:00
MipsSEISelLowering.h [mips][msa] Implemented insert_vector_elt for v4f32 and v2f64. 2013-09-27 12:31:32 +00:00
MipsSelectionDAGInfo.cpp
MipsSelectionDAGInfo.h
MipsSERegisterInfo.cpp
MipsSERegisterInfo.h
MipsSubtarget.cpp [mips][msa] MSA requires FR=1 mode (64-bit FPU register file). Report fatal error when using it in FR=0 mode. 2013-09-27 10:08:31 +00:00
MipsSubtarget.h Fix a problem with dual mips16/mips32 mode. When the underlying processor 2013-08-30 19:40:56 +00:00
MipsTargetMachine.cpp Turn MipsOptimizeMathLibCalls into a target-independent scalar transform 2013-08-23 10:27:02 +00:00
MipsTargetMachine.h
MipsTargetObjectFile.cpp
MipsTargetObjectFile.h
MSA.txt [mips][msa] Implemented copy_[us].d intrinsic. 2013-09-27 13:04:21 +00:00