| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 78264
|
| |
|
|
| |
llvm-svn: 78261
|
| |
|
|
| |
llvm-svn: 78251
|
| |
|
|
| |
llvm-svn: 78229
|
| |
|
|
|
|
| |
Patch by Sandeep Patel!
llvm-svn: 78225
|
| |
|
|
|
|
|
| |
PR4572. A few tests have some minor code regressions due to different
coalescing.
llvm-svn: 78217
|
| |
|
|
| |
llvm-svn: 78214
|
| |
|
|
|
|
| |
filecheck
llvm-svn: 78212
|
| |
|
|
| |
llvm-svn: 78211
|
| |
|
|
|
|
| |
command-line options.
llvm-svn: 78204
|
| |
|
|
| |
llvm-svn: 78201
|
| |
|
|
|
|
| |
hope to add a few more.
llvm-svn: 78198
|
| |
|
|
| |
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: 78165
|
| |
|
|
|
|
| |
MMX arguments. This fixes PR4684.
llvm-svn: 78163
|
| |
|
|
| |
llvm-svn: 78157
|
| |
|
|
| |
llvm-svn: 78153
|
| |
|
|
| |
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: 78126
|
| |
|
|
| |
llvm-svn: 78113
|
| |
|
|
| |
llvm-svn: 78111
|
| |
|
|
| |
llvm-svn: 78108
|
| |
|
|
|
|
| |
This fixes PR4528.
llvm-svn: 78107
|
| |
|
|
| |
llvm-svn: 78104
|
| |
|
|
| |
llvm-svn: 78101
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 78086
|
| |
|
|
| |
llvm-svn: 78085
|
| |
|
|
| |
llvm-svn: 78083
|
| |
|
|
|
|
| |
to enable. Added patterns for some binary FP operations.
llvm-svn: 78081
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
__TEXT,__ustring section on darwin.
llvm-svn: 78068
|
| |
|
|
|
|
| |
section on ELF targets.
llvm-svn: 78066
|
| |
|
|
|
|
| |
This fixes PR4666.
llvm-svn: 78056
|
| |
|
|
| |
llvm-svn: 78053
|
| |
|
|
|
|
| |
ValidateRegisterVariable. Make this work for PPC.
llvm-svn: 78051
|
| |
|
|
| |
llvm-svn: 78042
|
| |
|
|
| |
llvm-svn: 78040
|
| |
|
|
| |
llvm-svn: 78038
|
| |
|
|
|
|
| |
interleaved (using appropriate BLOCK_IDs) otherwise ValuePtrs index gets out of sync.
llvm-svn: 78033
|
| |
|
|
|
|
| |
This is a bit of pre-mature optimization. 8-bit variant makes it likely it will be narrowed to a 16-bit instruction.
llvm-svn: 78030
|
| |
|
|
| |
llvm-svn: 78009
|
| |
|
|
|
|
|
| |
few places in InstCombine to use it, to fix problems handling pointer
types. This fixes the recent llvm-gcc bootstrap error.
llvm-svn: 78005
|
| |
|
|
|
|
| |
Add a testcase.
llvm-svn: 77992
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|