| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
contexts through a number of APIs.
llvm-svn: 78258
|
| |
|
|
|
|
| |
and eliminate complexity. Yay!
llvm-svn: 78243
|
| |
|
|
| |
llvm-svn: 78242
|
| |
|
|
| |
llvm-svn: 78202
|
| |
|
|
| |
llvm-svn: 78179
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
After coalescing reg1027's def and kill are both at the same point:
%reg1027,0.000000e+00 = [56,814:0) 0@70-(814)
bb5:
60 %reg1027<def> = t2MOVr %reg1027, 14, %reg0, %reg0
68 %reg1027<def> = t2LDRi12 %reg1027<kill>, 8, 14, %reg0
76 t2CMPzri %reg1038<kill,undef>, 0, 14, %reg0, %CPSR<imp-def>
84 %reg1027<def> = t2MOVr %reg1027, 14, %reg0, %reg0
96 t2Bcc mbb<bb5,0x2030910>, 1, %CPSR<kill>
Do not remove the kill marker on t2LDRi12.
llvm-svn: 78178
|
| |
|
|
| |
llvm-svn: 78177
|
| |
|
|
|
|
|
|
|
|
|
|
| |
a dirty hack and isn't need anymore since the last x86 code emitter patch)
- Add a target-dependent modifier to addend calculation
- Use R_X86_64_32S relocation for X86::reloc_absolute_word_sext
- Use getELFSectionFlags whenever possible
- fix getTextSection to use TLOF and emit the right text section
- Handle global emission for static ctors, dtors and Type::PointerTyID
- Some minor fixes
llvm-svn: 78176
|
| |
|
|
| |
llvm-svn: 78154
|
| |
|
|
| |
llvm-svn: 78151
|
| |
|
|
| |
llvm-svn: 78145
|
| |
|
|
| |
llvm-svn: 78144
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
copy.
llvm-svn: 78141
|
| |
|
|
| |
llvm-svn: 78139
|
| |
|
|
|
|
| |
This fixes PR4528.
llvm-svn: 78107
|
| |
|
|
|
|
|
|
|
| |
scavenger.
Imp-def is *not* allowed to redefine a live register.
Imp-use is *not* allowed to use a dead register.
llvm-svn: 78106
|
| |
|
|
|
|
|
| |
the masm backend. If anyone cares about masm in the future,
we'll have semantic sections it can hang off of.
llvm-svn: 78096
|
| |
|
|
|
|
|
| |
For an undef operand, MO.getReg() is meaningless and we should not use it.
Undef operands should be skipped entirely.
llvm-svn: 78095
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of registers.
When LowerExtract eliminates an EXTRACT_SUBREG with a kill flag, it moves the
kill flag to the place where the sub-register is killed. This can accidentally
overlap with the use of a sibling sub-register, and we have trouble.
In the test case we have this code:
Live Ins: %R0 %R1 %R2
%R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
%R2H<def> = LOAD16fi <fi#-1>, 0, Mem:LD(2,4) [FixedStack-1 + 0]
%R1L<def> = EXTRACT_SUBREG %R1<kill>, 1
%R0L<def> = EXTRACT_SUBREG %R0<kill>, 1
%R0H<def> = ADD16 %R2H<kill>, %R2L<kill>, %AZ<imp-def>, %AN<imp-def>, %AC0<imp-def>, %V<imp-def>, %VS<imp-def>
subreg: CONVERTING: %R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
subreg: eliminated!
subreg: killed here: %R0H<def> = ADD16 %R2H, %R2L, %R2<imp-use,kill>, %AZ<imp-def>, %AN<imp-def>, %AC0<imp-def>, %V<imp-def>, %VS<imp-def>
The kill flag on %R2 is moved to the last instruction, and the live range overlaps with the definition of %R2H:
*** Bad machine code: Redefining a live physical register ***
- function: f
- basic block: 0x18358c0 (#0)
- instruction: %R2H<def> = LOAD16fi <fi#-1>, 0, Mem:LD(2,4) [FixedStack-1 + 0]
Register R2H was defined but already live.
The fix is to replace EXTRACT_SUBREG with IMPLICIT_DEF instead of eliminating
it completely:
subreg: CONVERTING: %R2L<def> = EXTRACT_SUBREG %R2<kill>, 1
subreg: replace by: %R2L<def> = IMPLICIT_DEF %R2<kill>
Note that these IMPLICIT_DEF instructions survive to the asm output. It is
necessary to fix the stack-color-with-reg test case because of that.
llvm-svn: 78093
|
| |
|
|
|
|
|
|
|
|
|
| |
Implicit operands no longer get a free pass: Imp-use requires a live register
and imp-def requires a dead register.
There is also no special rule allowing redefinition of a sub-register when the
super-register is live. The super register must have imp-kill+imp-def operands
instead.
llvm-svn: 78090
|
| |
|
|
|
|
|
|
|
| |
killed by another operand.
There is probably a better fix. Either 1) scavenger can look at other operands, or
2) livevariables can be smarter about kill markers. Patches welcome.
llvm-svn: 78072
|
| |
|
|
|
|
|
|
|
| |
TLI.computeMaskedBitsForTargetNode from ComputeMaskedBits, since
the former may call back into the latter. This fixes a major
compile time problem on a testcase that happnened to hit this
in a particularly bad way, PR4643.
llvm-svn: 78023
|
| |
|
|
| |
llvm-svn: 78020
|
| |
|
|
|
|
|
|
| |
private,
eliminate IsInTextSection.
llvm-svn: 78017
|
| |
|
|
| |
llvm-svn: 78015
|
| |
|
|
|
|
| |
and others.
llvm-svn: 78003
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When LowerSubregsInstructionPass::LowerInsert eliminates an INSERT_SUBREG
instriction because it is an identity copy, make sure that the same registers
are alive before and after the elimination.
When the super-register is marked <undef> this requires inserting an
IMPLICIT_DEF instruction to make sure the super register is live.
Fix a related bug where a kill flag on the inserted sub-register was not transferred properly.
Finally, clear the undef flag in MachineInstr::addRegisterKilled. Undef implies dead and kill implies live, so they cant both be valid.
llvm-svn: 77989
|
| |
|
|
| |
llvm-svn: 77984
|
| |
|
|
| |
llvm-svn: 77982
|
| |
|
|
| |
llvm-svn: 77976
|
| |
|
|
|
|
| |
trying the standard stuff.
llvm-svn: 77974
|
| |
|
|
|
|
| |
like "LLVM ERROR: llvm: error:" or "LLVM ERROR: ERROR:".
llvm-svn: 77971
|
| |
|
|
|
|
| |
non-trivially coalesced copy, and the copy kills its source register. Trim the source register's live range to the last use if possible. This fixes up kill marker to make the scavenger happy.
llvm-svn: 77967
|
| |
|
|
| |
llvm-svn: 77931
|
| |
|
|
|
|
| |
not been spilled.
llvm-svn: 77912
|
| |
|
|
|
|
| |
instruction.
llvm-svn: 77906
|
| |
|
|
|
|
|
| |
Allow imp-def and imp-use of anything in the scavenger asserts, just like the machine code verifier.
Allow redefinition of a sub-register of a live register.
llvm-svn: 77904
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
support. This isn't immediately interesting, because Legalize
ends up lowering SELECT_CC if the target doesn't support it,
but this simplifies the process.
Also, if the SELECT_CC would be expanded in Legalize, it
can potentially end up with two copies of the condition
expression. By leaving it as SELECT+SETCC, the SELECT can be
expanded into two SELECTs that use a single SETCC.
The two comparisons are usually CSE'd, but depending on
when various expressions get legalized, the comparison
expression could involve calls to library functions, such
that the comparison expression may not be able to be CSE'd.
This will be needed by a future patch.
llvm-svn: 77896
|
| |
|
|
|
|
| |
Use of an <undef> register is treated like an <imp-use>. It is not an error to use a dead <undef> register.
llvm-svn: 77890
|
| |
|
|
|
|
| |
TLOF, unifying all the dwarf targets at the same time.
llvm-svn: 77889
|
| |
|
|
| |
llvm-svn: 77888
|
| |
|
|
|
|
| |
defaults to being ELF.
llvm-svn: 77866
|
| |
|
|
|
|
|
| |
behavior of the LSDA section instead of on some random target hook that
needs to be kept in synch with other points of truth.
llvm-svn: 77855
|
| |
|
|
|
|
|
|
|
|
|
| |
getLSDASection() to be more specific. This makes it pretty obvious
that the ELF LSDA section is being specified wrong in PIC mode. We're
probably getting a lot of startup-time relocations to a readonly page,
which is expensive and bad.
Someone who cares about ELF C++ should investigate this.
llvm-svn: 77847
|
| |
|
|
|
|
| |
TAI.
llvm-svn: 77842
|
| |
|
|
| |
llvm-svn: 77834
|
| |
|
|
|
|
|
|
|
|
|
|
| |
compute it based on what it knows. As part of this, rename getSectionForMergeableConstant
to getSectionForConstant because it works for non-mergable constants also.
The only functionality change from this is that Xcore will start dropping
its jump tables into readonly section instead of data section in -static mode.
This should be fine as the linker resolves the relocations. If this is a
problem, let me know and we'll come up with another solution.
llvm-svn: 77833
|
| |
|
|
| |
llvm-svn: 77821
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to:
.quad X
even on a 32-bit system, where X is not 64-bits. There isn't much that
we can do here, so we just print:
.quad ((X) & 4294967295)
instead.
llvm-svn: 77818
|