| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
| |
after the given instruction; make sure to handle that case correctly.
(It's difficult to trigger; the included testcase involves a dead
block, but I don't think that's a requirement.)
While I'm here, get rid of the unnecessary warning about
SimplifyInstructionsInBlock, since it should work correctly as far as I know.
llvm-svn: 128782
|
|
|
|
|
|
|
| |
Based on PR9429, but no testcase because I can't figure out how to trigger it
anymore given other changes to the relevant code.
llvm-svn: 128781
|
|
|
|
|
|
|
|
|
|
| |
It's possible to craft an input that hits the recursion limits in a way
that SimplifyDemandedBits doesn't simplify the icmp but ComputeMaskedBits
can infer which bits are zero.
No test case as it depends on too many other things. Fixes PR9609.
llvm-svn: 128777
|
|
|
|
| |
llvm-svn: 128767
|
|
|
|
| |
llvm-svn: 128765
|
|
|
|
|
|
|
|
| |
When the greedy register allocator is splitting multiple global live ranges, it
tends to look at the same interference data many times. The InterferenceCache
class caches queries for unaltered LiveIntervalUnions.
llvm-svn: 128764
|
|
|
|
|
|
| |
This is more compact and faster than using DenseMap.
llvm-svn: 128763
|
|
|
|
|
|
|
|
| |
registers that arise from argument shuffling with the soft float ABI. These
instructions are particularly slow on Cortex A8. This fixes one half of
<rdar://problem/8674845>.
llvm-svn: 128759
|
|
|
|
|
|
|
|
| |
transformations in target-specific DAG combines without causing DAGCombiner to
delete the same node twice. If you know of a better way to avoid this (see my
next patch for an example), please let me know.
llvm-svn: 128758
|
|
|
|
|
|
|
|
|
|
| |
operand in am2offset;
instead of the second operand in addrmode_imm12.
rdar://problem/9225289
llvm-svn: 128757
|
|
|
|
| |
llvm-svn: 128751
|
|
|
|
| |
llvm-svn: 128750
|
|
|
|
|
|
| |
rdar://problem/9224276
llvm-svn: 128749
|
|
|
|
|
|
|
|
| |
UNPREDICTABLE.
rdar://problem/9224120
llvm-svn: 128748
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
definition so that
all the instruction have:
let Inst{31-27} = 0b1110; // non-predicated
Before, the ARM decoder was confusing:
> 0x40 0xf3 0xb8 0x80
as:
Opcode=16 Name=ADCSSrs Format=ARM_FORMAT_DPSOREGFRM(5)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-------------------------------------------------------------------------------------------------
| 1: 0: 0: 0| 0: 0: 0: 0| 1: 0: 1: 1| 1: 0: 0: 0| 1: 1: 1: 1| 0: 0: 1: 1| 0: 1: 0: 0| 0: 0: 0: 0|
-------------------------------------------------------------------------------------------------
adcs pc, r8, r0, asr #6
since the cond field for ADCSSrs is a wild card, and so is ADCrs, with the ADCSSrs having Inst{20} as '1'.
Now, the AR decoder behaves correctly:
> 0x40 0xf3 0xb8 0x80
> END
Executing command: /Volumes/data/lldb/llvm/Debug+Asserts/bin/llvm-mc -disassemble -triple=arm-apple-darwin -debug-only=arm-disassembler mc-input.txt
Opcode=19 Name=ADCrs Format=ARM_FORMAT_DPSOREGFRM(5)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-------------------------------------------------------------------------------------------------
| 1: 0: 0: 0| 0: 0: 0: 0| 1: 0: 1: 1| 1: 0: 0: 0| 1: 1: 1: 1| 0: 0: 1: 1| 0: 1: 0: 0| 0: 0: 0: 0|
-------------------------------------------------------------------------------------------------
adcshi pc, r8, r0, asr #6
>
rdar://problem/9223094
llvm-svn: 128746
|
|
|
|
| |
llvm-svn: 128745
|
|
|
|
|
|
|
|
|
|
| |
- Localize the check if an icmp has one use to a place where we know we're
introducing something that's likely more expensive than a sext from i1.
- Add an assert to make sure a case that would lead to a miscompilation is
folded away earlier.
- Fix a typo.
llvm-svn: 128744
|
|
|
|
|
|
| |
possible. rdar://9216009
llvm-svn: 128743
|
|
|
|
|
|
| |
right after the code that is removed.
llvm-svn: 128742
|
|
|
|
| |
llvm-svn: 128741
|
|
|
|
|
|
| |
object file appropriately.
llvm-svn: 128739
|
|
|
|
| |
llvm-svn: 128736
|
|
|
|
|
|
|
|
| |
should reject the instruction
as invalid.
llvm-svn: 128734
|
|
|
|
| |
llvm-svn: 128733
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
only one unknown bit.
int test1(unsigned x) { return (x&8) ? 0 : -1; }
int test3(unsigned x) { return (x&8) ? -1 : 0; }
before (x86_64):
_test1:
andl $8, %edi
cmpl $1, %edi
sbbl %eax, %eax
ret
_test3:
andl $8, %edi
cmpl $1, %edi
sbbl %eax, %eax
notl %eax
ret
after:
_test1:
shrl $3, %edi
andl $1, %edi
leal -1(%rdi), %eax
ret
_test3:
shll $28, %edi
movl %edi, %eax
sarl $31, %eax
ret
llvm-svn: 128732
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 128731
|
|
|
|
| |
llvm-svn: 128730
|
|
|
|
|
|
| |
should improve src line debug info when sdisel is used. rdar://9199118
llvm-svn: 128728
|
|
|
|
|
|
| |
handles delay slots correctly.
llvm-svn: 128724
|
|
|
|
|
|
|
|
| |
$addrmode_imm12 => (ops GPR:$base, i32imm:$offsimm).
rdar://problem/9219356
llvm-svn: 128722
|
|
|
|
| |
llvm-svn: 128718
|
|
|
|
| |
llvm-svn: 128709
|
|
|
|
|
|
| |
list of operands. Simplify and rename them accordingly.
llvm-svn: 128708
|
|
|
|
|
|
|
|
| |
had gotten out of sync: isCastable didn't think it was possible to
cast the x86_mmx type to anything, while it did think it possible
to cast an i64 to x86_mmx.
llvm-svn: 128705
|
|
|
|
|
|
| |
rdar://8911343
llvm-svn: 128696
|
|
|
|
| |
llvm-svn: 128692
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
all LDR/STR changes and left them to a future patch. Passing all
checks now.
- Implement asm parsing support for LDRT, LDRBT, STRT, STRBT and
fix the encoding wherever is possible.
- Add a new encoding bit to describe the index mode used and teach
printAddrMode2Operand to check by the addressing mode which index
mode to print.
- Testcases
llvm-svn: 128689
|
|
|
|
|
|
|
| |
It is using a trivial rewriter that doesn't know how to insert spill code
requested by the standard spiller.
llvm-svn: 128688
|
|
|
|
|
|
| |
The LocalStackSlotAllocation pass was creating illegal registers.
llvm-svn: 128687
|
|
|
|
| |
llvm-svn: 128683
|
|
|
|
|
|
|
|
| |
even try.
Thanks Eli!
llvm-svn: 128676
|
|
|
|
|
|
|
|
|
|
|
| |
accumulator forwarding:
vadd d3, d0, d1
vmul d3, d3, d2
=>
vmul d3, d0, d2
vmla d3, d1, d2
llvm-svn: 128665
|
|
|
|
|
|
|
|
| |
Inst{4} = 0.
rdar://problem/9213022
llvm-svn: 128662
|
|
|
|
|
|
| |
handling of FP comparisons.
llvm-svn: 128650
|
|
|
|
|
|
|
|
|
| |
liveness.
Turn them into noop KILL instructions instead. This lets the scavenger know when
super-registers are killed and defined.
llvm-svn: 128645
|
|
|
|
|
|
|
|
| |
A8.6.23 BLX (immediate)
rdar://problem/9212921
llvm-svn: 128644
|
|
|
|
| |
llvm-svn: 128643
|
|
|
|
|
|
|
|
|
|
|
|
| |
This way, shrinkToUses() will ignore the instruction that is about to be
deleted, and we avoid leaving invalid live ranges that SplitKit doesn't like.
Fix a misunderstanding in MachineVerifier about <def,undef> operands. The
<undef> flag is valid on def operands where it has the same meaning as <undef>
on a use operand. It only applies to sub-register defines which also read the
full register.
llvm-svn: 128642
|
|
|
|
| |
llvm-svn: 128639
|
|
|
|
| |
llvm-svn: 128635
|