- Sep 23, 2013
-
-
Daniel Sanders authored
Changes to MIPS SelectionDAG: * Added nodes VEXTRACT_[SZ]EXT_ELT to represent extract and extend in a single operation and implemented the DAG combines necessary to fold sign/zero extends into the extract. llvm-svn: 191199
-
Daniel Sanders authored
llvm-svn: 191195
-
Daniel Sanders authored
[mips][msa] Implemented build_vector using ldi, fill, and custom SelectionDAG nodes (VSPLAT and VSPLATD) Note: There's a later patch on my branch that re-implements this to select build_vector without the custom SelectionDAG nodes. The future patch avoids the constant-folding problems stemming from the custom node (i.e. it doesn't need to re-implement all the DAG combines related to BUILD_VECTOR). Changes to MIPS specific SelectionDAG nodes: * Added VSPLAT This is a special case of BUILD_VECTOR that covers the case the BUILD_VECTOR is a splat operation. * Added VSPLATD This is a special case of VSPLAT that handles the cases when v2i64 is legal llvm-svn: 191191
-
- Sep 07, 2013
-
-
Akira Hatanaka authored
precision loads and stores as well as reg+imm double precision loads and stores. Previously, expansion of loads and stores was done after register allocation, but now it takes place during legalization. As a result, users will see double precision stores and loads being emitted to spill and restore 64-bit FP registers. llvm-svn: 190235
-
- Aug 28, 2013
-
-
Daniel Sanders authored
These intrinsics are legalized to V(ALL|ANY)_(NON)?ZERO nodes, are matched as SN?Z_[BHWDV]_PSEUDO pseudo's, and emitted as a branch/mov sequence to evaluate to 0 or 1. Note: The resulting code is sub-optimal since it doesnt seem to be possible to feed the result of an intrinsic directly into a brcond. At the moment it uses (SETCC (VALL_ZERO $ws), 0, SETEQ) and similar which unnecessarily evaluates the boolean twice. llvm-svn: 189478
-
- Aug 21, 2013
-
-
Akira Hatanaka authored
size of floating point registers is 64-bit. Test case will be added when support for mfhc1 and mthc1 is added. llvm-svn: 188847
-
- Aug 14, 2013
-
-
Akira Hatanaka authored
llvm-svn: 188336
-
- Jul 14, 2013
-
-
Craig Topper authored
llvm-svn: 186274
-
- Jul 03, 2013
-
-
Craig Topper authored
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size. llvm-svn: 185540
-
- Jun 22, 2013
-
-
Chad Rosier authored
llvm-svn: 184642
-
- May 25, 2013
-
-
Andrew Trick authored
Change SelectionDAG::getXXXNode() interfaces as well as call sites of these functions to pass in SDLoc instead of DebugLoc. llvm-svn: 182703
-
- May 18, 2013
-
-
Matt Arsenault authored
llvm-svn: 182180
-
- May 16, 2013
-
-
Akira Hatanaka authored
Previously, three instructions were needed: trunc.w.s $f0, $f2 mfc1 $4, $f0 sw $4, 0($2) Now we need only two: trunc.w.s $f0, $f2 swc1 $f0, 0($2) llvm-svn: 182053
-
Akira Hatanaka authored
llvm-svn: 182035
-
- May 11, 2013
-
-
Reed Kotler authored
mips16/mips32 floating point interoperability. This patch fixes returns from mips16 functions so that if the function was in fact called by a mips32 hard float routine, then values that would have been returned in floating point registers are so returned. Mips16 mode has no floating point instructions so there is no way to load values into floating point registers. This is needed when returning float, double, single complex, double complex in the Mips ABI. Helper functions in libc for mips16 are available to do this. For efficiency purposes, these helper functions have a different calling convention from normal Mips calls. Registers v0,v1,a0,a1 are used to pass parameters instead of a0,a1,a2,a3. This is because v0,v1,a0,a1 are the natural registers used to return floating point values in soft float. These values can then be moved to the appropriate floating point registers with no extra cost. The only register that is modified is ra in this call. The helper functions make sure that the return values are in the floating point registers that they would be in if soft float was not in effect (which it is for mips16, though the soft float is implemented using a mips32 library that uses hard float). llvm-svn: 181641
-
- May 01, 2013
-
-
Akira Hatanaka authored
instructions. llvm-svn: 180820
-
- Apr 20, 2013
-
-
Tim Northover authored
llvm-svn: 179939
-
Akira Hatanaka authored
llvm-svn: 179906
-
- Apr 13, 2013
-
-
Akira Hatanaka authored
lowerINTRINSIC_WO_CHAIN into MipsSETargetLowering. No functionality changes. llvm-svn: 179444
-
- Mar 30, 2013
-
-
Akira Hatanaka authored
instructions. llvm-svn: 178394
-
- Mar 13, 2013
-
-
Akira Hatanaka authored
mips16 and MipsSETargetLowering is for mips32/64. No functionality changes. llvm-svn: 176917
-
- Mar 12, 2013
-
-
Akira Hatanaka authored
Delete commented-out code. llvm-svn: 176844
-
- Mar 06, 2013
-
-
Akira Hatanaka authored
In N64-static, GOT address is needed to compute the branch address. llvm-svn: 176580
-
- Mar 05, 2013
-
-
Akira Hatanaka authored
handle fp128 returns. llvm-svn: 176523
-
Akira Hatanaka authored
point registers. llvm-svn: 176521
-
Akira Hatanaka authored
parameters from floating point registers if target is mips64 hard float. llvm-svn: 176520
-
- Mar 01, 2013
-
-
Michael Liao authored
- ISD::SHL/SRL/SRA must have either both scalar or both vector operands but TLI.getShiftAmountTy() so far only return scalar type. As a result, backend logic assuming that breaks. - Rename the original TLI.getShiftAmountTy() to TLI.getScalarShiftAmountTy() and re-define TLI.getShiftAmountTy() to return target-specificed scalar type or the same vector type as the 1st operand. - Fix most TICG logic assuming TLI.getShiftAmountTy() a simple scalar type. llvm-svn: 176364
-
- Feb 25, 2013
-
-
Reed Kotler authored
llvm-svn: 176007
-
Reed Kotler authored
llvm-svn: 176002
-
- Feb 24, 2013
-
-
Reed Kotler authored
as early as possible; which means during instruction selection. llvm-svn: 175984
-
- Feb 23, 2013
-
-
Reed Kotler authored
macros.The rest is some small misc. stuff. llvm-svn: 175950
-
- Feb 22, 2013
-
-
Reed Kotler authored
to the immediate operand of sli or cmp function. llvm-svn: 175865
-
Reed Kotler authored
llvm-svn: 175862
-
- Feb 21, 2013
-
-
Reed Kotler authored
there were inline br .+4 instructions. Soon everything can enjoy the full instruction scheduling experience. llvm-svn: 175718
-
- Feb 15, 2013
-
-
Akira Hatanaka authored
No functionality change intended. llvm-svn: 175310
-
- Jan 30, 2013
-
-
Akira Hatanaka authored
Patch by Sasa Stankovic. llvm-svn: 173862
-
- Jan 28, 2013
-
-
Reed Kotler authored
llvm-svn: 173649
-
- Jan 24, 2013
-
-
Reed Kotler authored
Allow Mips16 routines to call Mips32 routines that have abi requirements that either arguments or return values are passed in floating point registers. This handles only the pic case. We have not done non pic for Mips16 yet in any form. The libm functions are Mips32, so with this addition we have a complete Mips16 hard float implementation. We still are not able to complete mix Mip16 and Mips32 with hard float. That will be the next phase which will have several steps. For Mips32 to freely call Mips16 some stub functions must be created. llvm-svn: 173320
-
- Jan 22, 2013
-
-
Akira Hatanaka authored
intended llvm-svn: 173189
-
- Dec 15, 2012
-
-
Reed Kotler authored
In this case, essentially it is soft float with different library routines. The next step will be to make this fully interoperational with mips32 floating point and that requires creating stubs for functions with signatures that contain floating point types. I have a more sophisticated design for mips16 hardfloat which I hope to implement at a later time that directly does floating point without the need for function calls. The mips16 encoding has no floating point instructions so one needs to switch to mips32 mode to execute floating point instructions. llvm-svn: 170259
-