| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
- BlockAddress has no support of BA + offset form and there is no way to
propagate that offset into machine operand;
- Add BA + offset support and a new interface 'getTargetBlockAddress' to
simplify target block address forming;
- All targets are modified to use new interface and X86 backend is enhanced to
support BA + offset addressing.
llvm-svn: 163743
|
|
|
|
| |
llvm-svn: 163739
|
|
|
|
|
|
| |
already knows how to handle the case where DstRC was NULL, so it's not actually protecting us from anything, and this pattern can come up when using unknown_class operands in the SelectionDAG.
llvm-svn: 163736
|
|
|
|
| |
llvm-svn: 163735
|
|
|
|
|
|
| |
This should be done on the subprogram, not the variable itself.
llvm-svn: 163734
|
|
|
|
| |
llvm-svn: 163729
|
|
|
|
|
|
| |
to the default target.
llvm-svn: 163724
|
|
|
|
| |
llvm-svn: 163721
|
|
|
|
|
|
| |
was fixed in r163713.
llvm-svn: 163715
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
nonvolatile condition register fields across calls under the SVR4 ABIs.
* With the 64-bit ABI, the save location is at a fixed offset of 8 from
the stack pointer. The frame pointer cannot be used to access this
portion of the stack frame since the distance from the frame pointer may
change with alloca calls.
* With the 32-bit ABI, the save location is just below the general
register save area, and is accessed via the frame pointer like the rest
of the save areas. This is an optional slot, so it must only be created
if any of CR2, CR3, and CR4 were modified.
* For both ABIs, save/restore logic is generated only if one of the
nonvolatile CR fields were modified.
I also took this opportunity to clean up an extra FIXME in
PPCFrameLowering.h. Save area offsets for 32-bit GPRs are meaningless
for the 64-bit ABI, so I removed them for correctness and efficiency.
Fixes PR13708 and partially also PR13623. It lets us enable exception handling
on PPC64.
Patch by William J. Schmidt!
llvm-svn: 163713
|
|
|
|
| |
llvm-svn: 163710
|
|
|
|
|
|
|
|
|
|
|
|
| |
behaviour (converting NaN values between float and double).
SelectionDAG::getConstantFP(double Val, EVT VT, bool isTarget);
should not be used when Val is not a simple constant (as the comment in
SelectionDAG.h indicates). This patch avoids using this function
when folding an unknown constant through a bitcast, where it cannot be
guaranteed that Val will be a simple constant.
llvm-svn: 163703
|
|
|
|
|
|
| |
lifetime regions. This is useful for debugging. No testcase because without this check we fail on assertions when finding escaped allocas.
llvm-svn: 163702
|
|
|
|
|
|
|
|
| |
analyzePhysReg() from r163694 to heuristically try and determine the liveness state of a physical register upon arrival at a particular instruction in a block.
The search for liveness is clipped to a specific number of instructions around the target MachineInstr, in order to avoid degenerating into an O(N^2) algorithm. It tries to use various clues about how instructions around (both before and after) a given MachineInstr use that register, to determine its state at the MachineInstr.
llvm-svn: 163695
|
|
|
|
|
|
|
|
| |
an instruction's use of a physical register, analogous to analyzeVirtReg.
Rename RegInfo to VirtRegInfo so as not to be confused with the new PhysRegInfo.
llvm-svn: 163694
|
|
|
|
|
|
|
|
|
| |
was printing a newline that doesn't occur when printing other kinds
of LLVM values. Move the printing of that newline elsewhere, making
globals print the same as other values while leaving the output when
printing an entire module unchanged. Patch by Saša Tomić.
llvm-svn: 163693
|
|
|
|
|
|
| |
dragonegg self-hosting.
llvm-svn: 163687
|
|
|
|
|
|
|
|
|
| |
findLastUseBefore was previous considering virtreg liveness only, leading to
incorrect live intervals for reg units when instrs with physreg operands were
moved up.
llvm-svn: 163685
|
|
|
|
| |
llvm-svn: 163682
|
|
|
|
|
|
|
|
| |
"#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)"
No functional change. Update r163344.
llvm-svn: 163679
|
|
|
|
|
|
|
|
|
|
| |
The input program may contain intructions which are not inside lifetime
markers. This can happen due to a bug in the compiler or due to a bug in
user code (for example, returning a reference to a local variable).
This commit adds checks that all of the instructions in the function and
invalidates lifetime ranges which do not contain all of the instructions.
llvm-svn: 163678
|
|
|
|
|
|
| |
Part of rdar://9797999
llvm-svn: 163667
|
|
|
|
| |
llvm-svn: 163654
|
|
|
|
|
|
|
|
| |
"#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)"
No functional change. Update r163339.
llvm-svn: 163653
|
|
|
|
| |
llvm-svn: 163649
|
|
|
|
| |
llvm-svn: 163648
|
|
|
|
|
|
| |
Add support in the EmitMSInlineAsmStr() function for handling integer consts.
llvm-svn: 163645
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a pair of switch/branch where both depend on the value of the same variable and
the default case of the first switch/branch goes to the second switch/branch.
Code clean up and fixed a few issues:
1> handling the case where some cases of the 2nd switch are invalidated
2> correctly calculate the weight for the 2nd switch when it is a conditional eq
Testing case is modified from Alastair's original patch.
llvm-svn: 163635
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sub-register lane masks are bitmasks that can be used to determine if
two sub-registers of a virtual register will overlap. For example, ARM's
ssub0 and ssub1 sub-register indices don't overlap each other, but both
overlap dsub0 and qsub0.
The lane masks will be accurate on most targets, but on targets that use
sub-register indexes in an irregular way, the masks may conservatively
report that two sub-register indices overlap when the eventually
allocated physregs don't.
Irregular register banks also mean that the bits in a lane mask can't be
mapped onto register units, but the concept is similar.
llvm-svn: 163630
|
|
|
|
|
|
|
|
| |
Apparently, NumSubRegIndices was completely unused before. Adjust it by
one to include the null subreg index, just like getNumRegs() includes
the null register.
llvm-svn: 163628
|
|
|
|
|
|
| |
of lifetime markers. Disabling the pass for now.
llvm-svn: 163623
|
|
|
|
| |
llvm-svn: 163617
|
|
|
|
| |
llvm-svn: 163616
|
|
|
|
|
|
| |
functions. No functional change.
llvm-svn: 163596
|
|
|
|
|
|
| |
table size.
llvm-svn: 163594
|
|
|
|
| |
llvm-svn: 163593
|
|
|
|
|
|
| |
after using bugpoint to reduce the confusion presented by the original names, which no longer mean what they used to.
llvm-svn: 163592
|
|
|
|
|
|
| |
Factor similar code out of FNEG DAG combiner.
llvm-svn: 163587
|
|
|
|
|
|
| |
Patch by Brad Smith!
llvm-svn: 163584
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Hexagon target decided to use a lot of functionality from the
target-independent scheduler. That's fine, and other targets should be
able to do the same. This reorg and API update makes that easy.
For the record, ScheduleDAGMI was not meant to be subclassed. Instead,
new scheduling algorithms should be able to implement
MachineSchedStrategy and be done. But if need be, it's nice to be
able to extend ScheduleDAGMI, so I also made that easier. The target
scheduler is somewhat more apt to break that way though.
llvm-svn: 163580
|
|
|
|
|
|
| |
right now. We'll fix PR13303 a different way.
llvm-svn: 163570
|
|
|
|
| |
llvm-svn: 163569
|
|
|
|
| |
llvm-svn: 163568
|
|
|
|
| |
llvm-svn: 163567
|
|
|
|
| |
llvm-svn: 163561
|
|
|
|
| |
llvm-svn: 163557
|
|
|
|
| |
llvm-svn: 163556
|
|
|
|
|
|
| |
and InlineAsmVariant don't match.
llvm-svn: 163550
|
|
|
|
| |
llvm-svn: 163547
|
|
|
|
| |
llvm-svn: 163545
|