| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
|  | 
The frame object which points to the dynamically allocated area will not be
needed after changes are made to cease reserving call frames.
llvm-svn: 161076
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
The long branch pass (fixed in r160601) no longer uses the global base register
to compute addresses of branch destinations, so it is not necessary to reserve
a slot on the stack.
llvm-svn: 160703
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
object for the global base register.
This is the first of a series of patches which implements long branch expansion
for MIPS.
llvm-svn: 158427
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
the ones that get or set the frame index for the $gp save slot. 
Remove the piece of code in MipsFunctionInfo::getGlobalBaseReg() which returns
GP. This function should always return a virtual register.
llvm-svn: 156695
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
MipsFunctionInfo.
If EmitNOAT is true, directives ".set noat" and ".set at" are emitted at the
beginning and end of a function. 
llvm-svn: 153528
 | 
| | 
| 
| 
|  | 
llvm-svn: 153502
 | 
| | 
| 
| 
| 
| 
|  | 
some superfluous forward declarations.
llvm-svn: 152997
 | 
| | 
| 
| 
|  | 
llvm-svn: 151625
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
reserving a physical register ($gp or $28) for that purpose.
This will completely eliminate loads that restore the value of $gp after every
function call, if the register allocator assigns a callee-saved register, or
eliminate unnecessary loads if it assigns a temporary register. 
example:
.cpload $25       // set $gp.
...
.cprestore 16     // store $gp to stack slot 16($sp).
...
jalr $25          // function call. clobbers $gp.
lw $gp, 16($sp)   // not emitted if callee-saved reg is chosen.
...
lw $2, 4($gp)
...
jalr $25          // function call.
lw $gp, 16($sp)   // not emitted if $gp is not live after this instruction.
...
llvm-svn: 151402
 | 
| | 
| 
| 
| 
| 
|  | 
is discouraged now.
llvm-svn: 147738
 | 
| | 
| 
| 
| 
| 
|  | 
http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
argument registers on the callee's stack frame, along with functions that set
and get it.
    
It is not necessary to add the size of this area when computing stack size in
emitPrologue, since it has already been accounted for in
PEI::calculateFrameObjectOffsets.
llvm-svn: 144549
 | 
| | 
| 
| 
| 
| 
|  | 
is used to save va_arg or byval arguments passed in registers.
llvm-svn: 143992
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
moving them out of the loop. Previously, stores and loads to a stack frame
object were inserted to accomplish this. Remove the code that was needed to do
this. Patch by Sasa Stankovic.
llvm-svn: 135415
 | 
| | 
| 
| 
|  | 
llvm-svn: 133494
 | 
| | 
| 
| 
|  | 
llvm-svn: 132777
 | 
| | 
| 
| 
| 
| 
|  | 
dynamically allocated stack area was not set.
llvm-svn: 132758
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
nand), atomic.swap and atomic.cmp.swap, all in i8, i16 and i32 versions.
The intrinsics are implemented by creating pseudo-instructions, which are
then expanded in the method MipsTargetLowering::EmitInstrWithCustomInserter.
Patch by Sasa Stankovic.
llvm-svn: 132323
 | 
| | 
| 
| 
| 
| 
|  | 
a function has any function calls.
llvm-svn: 132140
 | 
| | 
| 
| 
| 
| 
|  | 
return 0 if there are no function calls made. 
llvm-svn: 132065
 | 
| | 
| 
| 
| 
| 
|  | 
in MipsFunctionInfo that are no longer used.
llvm-svn: 131917
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The following improvements are accomplished as a result of applying this patch:
- Fixed frame objects' offsets (relative to either the virtual frame pointer or
  the stack pointer) are set before instruction selection is completed. There is
  no need to wait until Prologue/Epilogue Insertion is run to set them.
- Calculation of final offsets of fixed frame objects is straightforward. It is
  no longer necessary to assign negative offsets to fixed objects for incoming
  arguments in order to distinguish them from the others.
- Since a fixed object has its relative offset set during instruction
  selection, there is no need to conservatively set its alignment to 4.
- It is no longer necessary to reorder non-fixed frame objects in 
  MipsFrameLowering::adjustMipsStackFrame.
llvm-svn: 131915
 | 
| | 
| 
| 
|  | 
llvm-svn: 131752
 | 
| | 
| 
| 
| 
| 
|  | 
saving and restoring them.
llvm-svn: 131745
 | 
| | 
| 
| 
|  | 
llvm-svn: 131724
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This is the first of a series of patches that attempt to simplify handling of 
stack frame objects. 
llvm-svn: 131710
 | 
| | 
| 
| 
| 
| 
|  | 
in functionality.
llvm-svn: 129612
 | 
| | 
| 
| 
| 
| 
|  | 
change in functionality.
llvm-svn: 129606
 | 
| | 
| 
| 
|  | 
llvm-svn: 114948
 | 
| | 
| 
| 
| 
| 
|  | 
MachineFunctionInfo subclasses.
llvm-svn: 101634
 | 
| | 
| 
| 
| 
| 
|  | 
http://llvm.org/bugs/show_bug.cgi?id=5149
llvm-svn: 86543
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Instead of awkwardly encoding calling-convention information with ISD::CALL,
ISD::FORMAL_ARGUMENTS, ISD::RET, and ISD::ARG_FLAGS nodes, TargetLowering
provides three virtual functions for targets to override:
LowerFormalArguments, LowerCall, and LowerRet, which replace the custom
lowering done on the special nodes. They provide the same information, but
in a more immediately usable format.
This also reworks much of the target-independent tail call logic. The
decision of whether or not to perform a tail call is now cleanly split
between target-independent portions, and the target dependent portion
in IsEligibleForTailCallOptimization.
This also synchronizes all in-tree targets, to help enable future
refactoring and feature work.
llvm-svn: 78142
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
carry GlobalBaseReg, and GlobalRetAddr too in Alpha's case. This
eliminates the need for them to search through the
MachineRegisterInfo livein list in order to identify these
virtual registers. EmitLiveInCopies is now the only user of the
virtual register portion of MachineRegisterInfo's livein data.
llvm-svn: 72802
 | 
| | 
| 
| 
|  | 
llvm-svn: 61715
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Added fp register clobbering during calls.
Added AsmPrinter support for "fmask", a bitmask that indicates where on the 
stack the fp callee saved registers are.
Fixed the stack frame layout for Mips, now the callee saved regs 
are in the right stack location (a little documentation about how this
stack frame must look like is present in MipsRegisterInfo.cpp).
This was done using the method MipsRegisterInfo::adjustMipsStackFrame
To be more clear, these are examples of what is solves :  
1) FP and RA are also callee saved, and despite they aren't in CSI they 
   must be saved before the fp callee saved registers. 
2) The ABI requires that local varibles are allocated before the callee 
   saved register area, the opposite behavior from the default allocation.
3) CPU and FPU saved register area must be aligned independent of each
   other.
llvm-svn: 54403
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
important.
- Cleanup in the Subtarget info with addition of new features, not all support
  yet, but they allow the future inclusion of features easier. Among new features,
  we have : Arch family info (mips1, mips2, ...), ABI info (o32, eabi), 64-bit
  integer
  and float registers, allegrex vector FPU (VFPU), single float only support.
- TargetMachine now detects allegrex core.
- Added allegrex (Mips32r2) sext_inreg instructions.
- *Added Float Point Instructions*, handling single float only, and
  aliased accesses for 32-bit FPUs.
- Some cleanup in FP instruction formats and FP register classes.
- Calling conventions improved to support mips 32-bit EABI.
- Added Asm Printer support for fp cond codes.
- Added support for sret copy to a return register.
- EABI support added into LowerCALL and FORMAL_ARGS.
- MipsFunctionInfo now keeps a virtual register per function to track the
  sret on function entry until function ret.
- MipsInstrInfo FP support into methods (isMoveInstr, isLoadFromStackSlot, ...),
  FP cond codes mapping and initial FP Branch Analysis.
- Two new Mips SDNode to handle fp branch and compare instructions : FPBrcond,
  FPCmp
- MipsTargetLowering : handling different FP classes, Allegrex support, sret
  return copy, no homing location within EABI, non 32-bit stack objects
  arguments, and asm constraint for float.
llvm-svn: 53146
 | 
| | 
| 
| 
|  | 
llvm-svn: 45418
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Removed all macro code for PIC (goodbye "la").
Support tested with shootout bench.
llvm-svn: 43697
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
- Added a function to hold the stack location 
  where GP must be stored during LowerCALL
- AsmPrinter now emits directives based on
  relocation type
- PIC_ set to default relocation type (same as GCC)
llvm-svn: 42779
 | 
| | 
| 
| 
|  | 
llvm-svn: 41525
 | 
|   
  
  
  
  
   | 
inserting Prologue/Epilog
llvm-svn: 39758
 |