| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 78264
|
| |
|
|
| |
llvm-svn: 78261
|
| |
|
|
|
|
| |
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: 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 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
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
and provide a different set of call-clobberred registers.
llvm-svn: 77962
|
| |
|
|
| |
llvm-svn: 77956
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is not just a matter of passing in the target triple from the module;
currently backends are making decisions based on the build and host
architecture. The goal is to migrate to making these decisions based off of the
triple (in conjunction with the feature string). Thus most clients pass in the
target triple, or the host triple if that is empty.
This has one important change in the way behavior of the JIT and llc.
For the JIT, it was previously selecting the Target based on the host
(naturally), but it was setting the target machine features based on the triple
from the module. Now it is setting the target machine features based on the
triple of the host.
For LLC, -march was previously only used to select the target, the target
machine features were initialized from the module's triple (which may have been
empty). Now the target triple is taken from the module, or the host's triple is
used if that is empty. Then the triple is adjusted to match -march.
The take away is that -march for llc is now used in conjunction with the host
triple to initialize the subtarget. If users want more deterministic behavior
from llc, they should use -mtriple, or set the triple in the input module.
llvm-svn: 77946
|
| |
|
|
|
|
| |
Fixes PR4669
llvm-svn: 77940
|
| |
|
|
|
|
| |
all of multisource as well.
llvm-svn: 77939
|
| |
|
|
| |
llvm-svn: 77920
|
| |
|
|
|
|
|
|
|
|
| |
__builtin_bfin_ones does the same as ctpop, so it can be implemented in the front-end.
__builtin_bfin_loadbytes loads from an unaligned pointer with the disalignexcpt instruction. It does the same as loading from a pointer with the low bits masked. It is better if the front-end creates a masked load. We can always instruction select the masked to disalignexcpt+load.
We keep csync/ssync/idle. These intrinsics represent instructions that need workarounds for some silicon revisions. We may even want to convert inline assembler to intrinsics to enable the workarounds.
llvm-svn: 77917
|
| |
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 77903
|
| |
|
|
|
|
| |
We use the same constraints as GCC, including those that are slightly insane for inline assembler.
llvm-svn: 77899
|