| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 157972
|
|
|
|
|
|
|
|
|
| |
when a compile time constant is known. This occurs when implicitly zero
extending function arguments from 16 bits to 32 bits.
<rdar://problem/11481151>
llvm-svn: 157966
|
|
|
|
|
|
| |
t2RSB defined the operand correctly, but tRSBS didn't.
llvm-svn: 157200
|
|
|
|
|
|
|
|
|
|
| |
the 0b10 mask encoding bits. Make MSR APSR writes without a _<bits> qualifier
an alias for MSR APSR_nzcvq even though ARM as deprecated it use. Also add
support for suffixes (_nzcvq, _g, _nzcvqg) for APSR versions. Some FIXMEs in
the code for better error checking when versions shouldn't be used.
rdar://11457025
llvm-svn: 157019
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Aliases for adding a negative immediate when using an explicit 'w'
suffix. E.g.,
adds.w r2, #-16
adds.w r2, r2, #-16
addw r2, #-16
addw r2, #-16
addw r2, r2, #-16
rdar://11330769
llvm-svn: 155946
|
|
|
|
|
|
|
|
| |
instructions.
- However, it does support dmb, dsb, isb, mrs, and msr.
rdar://11331541
llvm-svn: 155685
|
|
|
|
| |
llvm-svn: 155399
|
|
|
|
|
|
| |
symbolic operands added when using the C disassembler API.
llvm-svn: 154628
|
|
|
|
|
|
|
|
|
|
|
|
| |
We were incorrectly conflating some add variants which don't have a
cc_out operand with the mirroring sub encodings, which do. Part of the
awesome non-orthogonality legacy of thumb1. Similarly, handling of
add/sub of an immediate was sometimes incorrectly removing the cc_out
operand for add/sub register variants.
rdar://11216577
llvm-svn: 154411
|
|
|
|
|
|
|
|
| |
We had special instructions for iOS because r9 is call-clobbered, but
that is represented dynamically by the register mask operands now, so
there is no need for the pseudo-instructions.
llvm-svn: 154144
|
|
|
|
|
|
|
|
|
|
| |
'add r2, #-1024' should just use 'sub r2, #1024' rather than erroring out.
Thumb1 aliases for adding a negative immediate to the stack pointer,
also.
rdar://11192734
llvm-svn: 154123
|
|
|
|
|
|
|
|
|
|
| |
A MOVCCr instruction can be commuted by inverting the condition. This
can help reduce register pressure and remove unnecessary copies in some
cases.
<rdar://problem/11182914>
llvm-svn: 154033
|
|
|
|
|
|
|
|
|
| |
The CMP->CMN alias was matching for an immediate of zero when it
should only match for negative values.
rdar://11129224
llvm-svn: 153689
|
|
|
|
|
|
| |
t2PseudoExpand.
llvm-svn: 153135
|
|
|
|
|
|
| |
rdar://11065671
llvm-svn: 152954
|
|
|
|
|
|
| |
rdar://11058464
llvm-svn: 152883
|
|
|
|
|
|
| |
direct call.
llvm-svn: 151645
|
|
|
|
|
|
| |
prediction. ...", it is breaking the Clang build during the Compiler-RT part.
llvm-svn: 151630
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the processor keeps a return addresses stack (RAS) which stores the address
and the instruction execution state of the instruction after a function-call
type branch instruction.
Calling a "noreturn" function with normal call instructions (e.g. bl) can
corrupt RAS and causes 100% return misprediction so LLVM should use a
unconditional branch instead. i.e.
mov lr, pc
b _foo
The "mov lr, pc" is issued in order to get proper backtrace.
rdar://8979299
llvm-svn: 151623
|
|
|
|
| |
llvm-svn: 151384
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I'll let the buildbots determine the compile time improvements from this
change, but 464.h264ref has 5% faster codegen at -O2.
This patch does cause some assembly changes. Branch folding can make
different decisions about calls with dead return values.
CriticalAntiDepBreaker may choose different registers because its
liveness tracking is affected. MachineCopyPropagation may sometimes
leave a dead copy behind.
llvm-svn: 151331
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
value is zero. Instead of a cmov + op, issue an conditional op instead. e.g.
cmp r9, r4
mov r4, #0
moveq r4, #1
orr lr, lr, r4
should be:
cmp r9, r4
orreq lr, lr, #1
That is, optimize (or x, (cmov 0, y, cond)) to (or.cond x, y). Similarly extend
this to xor as well as (and x, (cmov -1, y, cond)) => (and.cond x, y).
It's possible to extend this to ADD and SUB but I don't think they are common.
rdar://8659097
llvm-svn: 151224
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
| |
llvm-svn: 148742
|
|
|
|
| |
llvm-svn: 148601
|
|
|
|
|
|
|
|
| |
Explicit pc-relative syntax. For example, "ldrb r2, [pc, #-22]".
rdar://10250964
llvm-svn: 148432
|
|
|
|
| |
llvm-svn: 148427
|
|
|
|
|
|
|
|
|
|
| |
The QQ and QQQQ registers are not 'real', they are pseudo-registers used
to model some vld and vst instructions.
This makes the call clobber lists longer, but I intend to get rid of
those soon.
llvm-svn: 148151
|
|
|
|
|
|
|
|
| |
These map to the ASR, LSR, LSL, ROR instruction definitions.
rdar://10615373
llvm-svn: 147094
|
|
|
|
| |
llvm-svn: 146981
|
|
|
|
| |
llvm-svn: 146710
|
|
|
|
| |
llvm-svn: 146570
|
|
|
|
|
|
|
|
|
|
| |
When 'cmp rn #imm' doesn't match due to the immediate not being representable,
but 'cmn rn, #-imm' does match, use the latter in place of the former, as
it's equivalent.
rdar://10552389
llvm-svn: 146567
|
|
|
|
|
|
| |
rdar://10549767
llvm-svn: 146520
|
|
|
|
|
|
| |
rdar://10549786
llvm-svn: 146518
|
|
|
|
| |
llvm-svn: 146511
|
|
|
|
|
|
|
|
|
|
|
| |
When the immediate operand of an AND or BIC instruction isn't representable
in the immediate field of the instruction, but the bitwise negation of the
immediate is, assemble the instruction as the inverse operation instead
with the inverted immediate as the operand.
rdar://10550057
llvm-svn: 146283
|
|
|
|
| |
llvm-svn: 146111
|
|
|
|
|
|
| |
rdar://10542474
llvm-svn: 146046
|
|
|
|
|
|
|
|
|
| |
Fix the alias to encode 'mul r5, r6' as if it were 'mul r5, r6, r5' so we
match gas.
rdar://10532439
llvm-svn: 145922
|
|
|
|
|
|
| |
rdar://10449724
llvm-svn: 144684
|
|
|
|
|
|
|
| |
These immediate operands all use the same simple logic for rendering to
MCInst, so have them share the method for doing so.
llvm-svn: 144439
|
|
|
|
|
|
| |
rdar://10422955
llvm-svn: 144242
|
|
|
|
|
|
|
|
|
|
|
| |
When '~imm' is encodable as a t2_so_imm but plain 'imm' is not. For example,
mov r2, #-3
becomes
mvn r2, #2
rdar://10349224
llvm-svn: 143235
|
|
|
|
|
|
|
|
|
|
|
| |
Outside an IT block, "add r3, #2" should select a 32-bit wide encoding
rather than generating an error indicating the 16-bit encoding is only
legal in an IT block (outside, the 'S' suffic is required for the 16-bit
encoding).
rdar://10348481
llvm-svn: 143201
|
|
|
|
|
|
| |
rdar://10348844
llvm-svn: 143110
|
|
|
|
|
|
| |
rdar://10348584
llvm-svn: 143108
|
|
|
|
|
|
|
|
|
| |
We were parsing label references to the i12 encoding, which isn't right.
They need to go to the pci variant instead.
More of rdar://10348687
llvm-svn: 143068
|
|
|
|
| |
llvm-svn: 143034
|
|
|
|
|
|
| |
PR11220
llvm-svn: 142801
|