| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
through to the generic version. The generic functions use STR/LDR, but T2
needs the t2STR/t2LDR instead so we get the addressing mode correct.
llvm-svn: 99678
|
|
|
|
|
|
|
|
| |
immediate instructions cannot set the condition codes, so they do not have
the extra cc_out operand. We hit an assertion during tail duplication
because the instruction being duplicated had more operands that expected.
llvm-svn: 98001
|
|
|
|
|
|
| |
Radar 7614112.
llvm-svn: 95456
|
|
|
|
|
|
|
| |
Since the mov is executed unconditionally, make sure that the add didn't have
any predicate.
llvm-svn: 93909
|
|
|
|
|
|
|
| |
MachineBasicBlock::canFallThrough(), which is target-independent and more
thorough.
llvm-svn: 90634
|
|
|
|
| |
llvm-svn: 86423
|
|
|
|
| |
llvm-svn: 86408
|
|
|
|
| |
llvm-svn: 86400
|
|
|
|
|
|
| |
tLDRpci_pic.
llvm-svn: 86330
|
|
|
|
|
|
|
|
|
|
| |
except it doesn't care if the definitions' virtual registers differ. This is
used by machine LICM and other MI passes to perform CSE.
- Teach Thumb2InstrInfo::isIdentical() to check two t2LDRpci_pic are identical.
Since pc relative constantpool entries are always different, this requires it
it check if the values can actually the same.
llvm-svn: 86328
|
|
|
|
|
|
|
|
|
|
|
|
| |
load of a GV from constantpool and then add pc. It allows the code sequence to
be rematerializable so it would be hoisted by machine licm.
- Add a late pass to break these pseudo instructions into a number of real
instructions. Also move the code in Thumb2 IT pass that breaks up t2MOVi32imm
to this pass. This is done before post regalloc scheduling to allow the
scheduler to proper schedule these instructions. It also allow them to be
if-converted and shrunk by later passes.
llvm-svn: 86304
|
|
|
|
|
|
| |
stalls, when we used to mix vfp and neon code (the former were used for reg-reg moves)
llvm-svn: 85764
|
|
|
|
|
|
| |
memoperands.
llvm-svn: 85746
|
|
|
|
|
|
|
| |
opcode and operand with a tab. Check for these instructions in the usual
places.
llvm-svn: 85411
|
|
|
|
|
|
|
|
|
|
|
| |
VLDM/VSTM instructions, and without this check, the code assumes that an
offset is allowed, as it would be with VLDR/VSTR. The asm printer,
however, silently drops the offset, producing incorrect code. Since the
address register in this case is either the stack or frame pointer, the
spill location ends up conflicting with some other stack slot or with
outgoing arguments on the stack.
llvm-svn: 81879
|
|
|
|
|
|
| |
cannot fold any immediate offset.
llvm-svn: 80191
|
|
|
|
| |
llvm-svn: 78666
|
|
|
|
| |
llvm-svn: 78549
|
|
|
|
| |
llvm-svn: 78398
|
|
|
|
|
|
|
|
|
|
| |
The semantics of such instructions are unpredictable. We have just been lucky that tests have been passing.
This patch takes pain to ensure all the PEI lowering code does the right thing when lowering frame indices, insert code to manipulate stack pointers, etc. It's also custom lowering dynamic stack alloc into pseudo instructions so we can insert the right instructions at scheduling time.
This fixes PR4659 and PR4682.
llvm-svn: 78361
|
|
|
|
|
|
| |
all of multisource as well.
llvm-svn: 77939
|
|
|
|
|
|
|
|
|
|
| |
the only real caller (GetFunctionSizeInBytes) uses it.
The custom ARM implementation of this is basically reimplementing
an assembler poorly for negligible gain. It should be removed
IMNSHO, but I'll leave that to ARMish folks to decide.
llvm-svn: 77877
|
|
|
|
|
|
| |
/ halfword.
llvm-svn: 77422
|
|
|
|
|
|
| |
and very large stack frames.
llvm-svn: 77401
|
|
|
|
|
|
|
|
|
|
|
| |
- This change also makes it possible to switch between ARM / Thumb on a
per-function basis.
- Fixed thumb2 routine which expand reg + arbitrary immediate. It was using
using ARM so_imm logic.
- Use movw and movt to do reg + imm when profitable.
- Other code clean ups and minor optimizations.
llvm-svn: 77300
|
|
|
|
| |
llvm-svn: 77231
|
|
|
|
| |
llvm-svn: 77227
|
|
|
|
|
|
| |
This also fixes potential problems in ARMBaseInstrInfo routines not recognizing thumb1 instructions when 32-bit and 16-bit instructions mix.
llvm-svn: 77218
|
|
|
|
|
|
| |
more getOpcode calls.
llvm-svn: 77181
|
|
|
|
|
|
| |
classes. t2MOV does not match the RC requirements.
llvm-svn: 77175
|
|
|
|
| |
llvm-svn: 77035
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before:
adr r12, #LJTI3_0_0
ldr pc, [r12, +r0, lsl #2]
LJTI3_0_0:
.long LBB3_24
.long LBB3_30
.long LBB3_31
.long LBB3_32
After:
adr r12, #LJTI3_0_0
add pc, r12, +r0, lsl #2
LJTI3_0_0:
b.w LBB3_24
b.w LBB3_30
b.w LBB3_31
b.w LBB3_32
This has several advantages.
1. This will make it easier to optimize this to a TBB / TBH instruction +
(smaller) table.
2. This eliminate the need for ugly asm printer hack to force the address
into thumb addresses (bit 0 is one).
3. Same codegen for pic and non-pic.
4. This eliminate the need to align the table so constantpool island pass
won't have to over-estimate the size.
Based on my calculation, the later is probably slightly faster as well since
ldr pc with shifter address is very slow. That is, it should be a win as long
as the HW implementation can do a reasonable job of branch predict the second
branch.
llvm-svn: 77024
|
|
|
|
| |
llvm-svn: 76984
|
|
|
|
|
|
| |
instructions on all sub-targets.
llvm-svn: 76925
|
|
|
|
|
|
| |
elimination more exactly for Thumb-2 to get better code gen.
llvm-svn: 76919
|
|
|
|
|
|
| |
that don't allow negative offsets. During frame elimination convert *i12 opcode to a *i8 when necessary due to a negative offset.
llvm-svn: 76883
|
|
|
|
|
|
| |
Minor code duplication cleanup.
llvm-svn: 76124
|
|
|
|
|
|
|
|
| |
modifies CPSR when they are outside the IT blocks, or they can predicated when in Thumb2. Move the implicit def of CPSR to an optional def which defaults CPSR. This allows the 's' bit to be toggled dynamically.
A side-effect of this change is asm printer is now using unified assembly. There are some minor clean ups and fixes as well.
llvm-svn: 75359
|
|
|
|
| |
llvm-svn: 75250
|
|
|
|
| |
llvm-svn: 75067
|
|
|
|
| |
llvm-svn: 75036
|
|
|
|
|
|
| |
shared between ARM and Thumb2. Not yet activated because register information must be generalized first.
llvm-svn: 75010
|
|
Thumb1InstrInfo, Thumb2InstrInfo, Thumb1RegisterInfo and Thumb2RegisterInfo. Move methods from ARMInstrInfo to ARMBaseInstrInfo to prepare for sharing with Thumb2.
llvm-svn: 74731
|