| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 183463
|
|
|
|
| |
llvm-svn: 183243
|
|
|
|
| |
llvm-svn: 183094
|
|
|
|
|
|
| |
using two instructions (sethi and store).
llvm-svn: 183090
|
|
|
|
|
|
|
| |
Also clean up the arguments to all the MOVCC instructions so the
operands always are (true-val, false-val, cond-code).
llvm-svn: 182221
|
|
|
|
| |
llvm-svn: 182216
|
|
|
|
|
|
| |
Don't ignore the high 32 bits of the immediate.
llvm-svn: 179985
|
|
|
|
|
|
| |
This fixes the pic32 code model for SPARC v9.
llvm-svn: 179469
|
|
|
|
|
|
|
|
|
|
|
| |
This requires v9 cmov instructions using the %xcc flags instead of the
%icc flags.
Still missing:
- Select floats on %xcc flags.
- Select i64 on %fcc flags.
llvm-svn: 178737
|
|
|
|
|
|
|
|
|
|
| |
The same compare instruction is used for 32-bit and 64-bit compares. It
sets two different sets of flags: icc and xcc.
This patch adds a conditional branch instruction using the xcc flags for
64-bit compares.
llvm-svn: 178621
|
|
|
|
|
|
|
|
|
|
|
| |
SPARC v9 defines new 64-bit shift instructions. The 32-bit shift right
instructions are still usable as zero and sign extensions.
This adds new F3_Sr and F3_Si instruction formats that probably should
be used for the 32-bit shifts as well. They don't really encode an
simm13 field.
llvm-svn: 178525
|
|
|
|
|
|
|
|
|
|
|
| |
The 'sparc' architecture produces 32-bit code while 'sparcv9' produces
64-bit code.
It is also possible to run 32-bit code using SPARC v9 instructions with:
llc -march=sparc -mattr=+v9
llvm-svn: 178524
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We are going to use the same registers for 32-bit and 64-bit values, but
in two different register classes. The I64Regs register class has a
larger spill size and alignment.
The addition of an i64 register class confuses TableGen's type
inference, so it is necessary to clarify the type of some immediates and
the G0 register.
In 64-bit mode, pointers are i64 and should use the I64Regs register
class. Implement getPointerRegClass() to dynamically provide the pointer
register class depending on the subtarget. Use ptr_rc and iPTR for
memory operands.
Finally, add the i64 type to the IntRegs register class. This register
class is not used to hold i64 values, I64Regs is for that. The type is
required to appease TableGen's type checking in output patterns like this:
def : Pat<(add i64:$a, i64:$b), (ADDrr $a, $b)>;
SPARC v9 uses the same ADDrr instruction for i32 and i64 additions, and
TableGen doesn't know to check the type of register sub-classes.
llvm-svn: 178522
|
|
|
|
|
|
|
| |
The types of register variables no longer need to be specified in output
patterns.
llvm-svn: 177845
|
|
|
|
|
|
|
| |
Also update the documentation since Sparc is the nicest backend, and
used as an example in WritingAnLLVMBackend.
llvm-svn: 177835
|
|
|
|
|
|
|
|
|
|
| |
The SelectionDAG graph has MVT type labels, not register classes, so
this makes it clearer what is happening.
This notation is also robust against adding more types to the IntRegs
register class.
llvm-svn: 177829
|
|
|
|
| |
llvm-svn: 174413
|
|
|
|
| |
llvm-svn: 162515
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
| |
llvm-svn: 126108
|
|
|
|
|
|
| |
-mattr=v9 is used.
llvm-svn: 124027
|
|
|
|
|
|
|
| |
Rename FLUSH to FLUSHW.
Output "ta 3" instead of a "flushw" instruction if v8 instruction set is used.
llvm-svn: 123997
|
|
|
|
|
|
| |
with useful instructions.
llvm-svn: 123884
|
|
|
|
| |
llvm-svn: 123310
|
|
|
|
|
|
| |
ensure %o7 is not assigned as the destination of getpcx instruction.
llvm-svn: 123304
|
|
|
|
|
|
|
| |
are correctly marked as used instead of passing all possible argument registers
as used.
llvm-svn: 123301
|
|
|
|
| |
llvm-svn: 123281
|
|
|
|
|
|
|
|
| |
subxcc defs/uses;
and fixed CustomInserter.
llvm-svn: 122607
|
|
|
|
| |
llvm-svn: 122513
|
|
|
|
|
|
|
|
|
| |
Modernize predicates a bit.
The Predicate_* methods are not used by TableGen any longer. They are only
emitted for the sake of legacy code.
llvm-svn: 111263
|
|
|
|
| |
llvm-svn: 106466
|
|
|
|
| |
llvm-svn: 98901
|
|
|
|
| |
llvm-svn: 86851
|
|
|
|
|
|
|
|
| |
bunch of associated comments, because it doesn't have anything to do
with DAGs or scheduling. This is another step in decoupling MachineInstr
emitting from scheduling.
llvm-svn: 85517
|
|
|
|
|
|
| |
and PIC codegen. Patch by Venkatraman Govindaraju!
llvm-svn: 81877
|
|
|
|
| |
llvm-svn: 80070
|
|
|
|
|
|
|
|
| |
while
the latter is capable of representing either a primitive or an extended type.
llvm-svn: 78713
|
|
|
|
|
|
| |
own struct type.
llvm-svn: 78610
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
parameters instead of raw Constants. This prevents the constants from
being selected by the isel pass, fixing PR2735.
llvm-svn: 57385
|
|
|
|
|
|
|
| |
with ConstantInt. This led to fixing a bug in TargetLowering.cpp
using getValue instead of getAPIntValue.
llvm-svn: 56159
|
|
|
|
|
|
| |
independent one: TargetInstrInfo::IMPLICIT_DEF.
llvm-svn: 48380
|
|
|
|
| |
llvm-svn: 48346
|
|
|
|
| |
llvm-svn: 47663
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Legalize now always promotes truncstore of i1 to i8.
2. Remove patterns and gunk related to truncstore i1 from targets.
3. Rename the StoreXAction stuff to TruncStoreAction in TLI.
4. Make the TLI TruncStoreAction table a 2d table to handle from/to conversions.
5. Mark a wide variety of invalid truncstores as such in various targets, e.g.
X86 currently doesn't support truncstore of any of its integer types.
6. Add legalize support for truncstores with invalid value input types.
7. Add a dag combine transform to turn store(truncate) into truncstore when
safe.
The later allows us to compile CodeGen/X86/storetrunc-fp.ll to:
_foo:
fldt 20(%esp)
fldt 4(%esp)
faddp %st(1)
movl 36(%esp), %eax
fstps (%eax)
ret
instead of:
_foo:
subl $4, %esp
fldt 24(%esp)
fldt 8(%esp)
faddp %st(1)
fstps (%esp)
movl 40(%esp), %eax
movss (%esp), %xmm0
movss %xmm0, (%eax)
addl $4, %esp
ret
llvm-svn: 46140
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
|
|
| |
re-materializable and they should not be spilled.
llvm-svn: 44960
|
|
|
|
| |
llvm-svn: 44045
|
|
|
|
|
|
|
|
|
|
|
| |
adjustment fields, and an optional flag. If there is a "dynamic_stackalloc" in
the code, make sure that it's bracketed by CALLSEQ_START and CALLSEQ_END. If
not, then there is the potential for the stack to be changed while the stack's
being used by another instruction (like a call).
This can only result in tears...
llvm-svn: 44037
|
|
|
|
| |
llvm-svn: 41863
|