| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
| |
in order to avoid assertion failures in the register scavenger. The assertion
failures were “Bad machine code: Using an undefined physical register” and
“Bad machine code: MBB exits via unconditional fall-through but its successor
differs from its CFG successor!”.
llvm-svn: 155930
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, an unsupported/unknown assembler directive issued a warning.
That's generally unsafe, and inconsistent with the behaviour of pretty
much every system assembler. Now that the MC assemblers are mature
enough to be the default on multiple targets, it's reasonable to
issue errors for these.
For target or platform directives that need to stay warnings, we
should add explicit handlers for them in, e.g., ELFAsmParser.cpp,
DarwinAsmParser.cpp, et. al., and issue the warning there.
rdar://9246275
llvm-svn: 155926
|
|
|
|
|
|
|
|
|
|
|
|
| |
The caller is already responsible for eating any additional input on the
line. Putting an additional EatToEndOfStatement() in ParseStatement()
causes an entire extra statement to be consumed when treating warnings
as errors. For example, test/MC/macros.s will assert() because the
.endmacro directive is missed as a result.
rdar://11355843
llvm-svn: 155925
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch will optimize the following cases on X86
(a > b) ? (a-b) : 0
(a >= b) ? (a-b) : 0
(b < a) ? (a-b) : 0
(b <= a) ? (a-b) : 0
FROM
movl %edi, %ecx
subl %esi, %ecx
cmpl %edi, %esi
movl $0, %eax
cmovll %ecx, %eax
TO
xorl %eax, %eax
subl %esi, %edi
cmovll %eax, %edi
movl %edi, %eax
rdar: 10734411
llvm-svn: 155919
|
|
|
|
|
|
| |
(to generate debug info for local variables) if stack needs realignment
llvm-svn: 155917
|
|
|
|
| |
llvm-svn: 155915
|
|
|
|
| |
llvm-svn: 155909
|
|
|
|
|
|
|
|
|
|
|
| |
- Improved parameter names for clarity
- Added comments
- emitCommonSymbols should return void because its return value is not being
used anywhere
- Attempt to reduce the usage of the RelocationValueRef type. Restricts it
for a single goal and may serve as a step for eventual removal.
llvm-svn: 155908
|
|
|
|
| |
llvm-svn: 155907
|
|
|
|
|
|
|
|
|
| |
The TargetPassManager's default constructor wants to initialize the PassManager
to 'null'. But it's illegal to bind a null reference to a null l-value. Make the
ivar a pointer instead.
PR12468
llvm-svn: 155902
|
|
|
|
| |
llvm-svn: 155899
|
|
|
|
|
|
|
|
|
| |
- There's no point having a different type for the local and global symbol
tables.
- Renamed SymbolTable to GlobalSymbolTable to clarify the intention
- Improved const correctness where relevant
llvm-svn: 155898
|
|
|
|
|
|
| |
Bulldozer feature list.
llvm-svn: 155897
|
|
|
|
| |
llvm-svn: 155896
|
|
|
|
| |
llvm-svn: 155891
|
|
|
|
|
|
| |
and HasCLMUL predicates.
llvm-svn: 155890
|
|
|
|
| |
llvm-svn: 155888
|
|
|
|
| |
llvm-svn: 155885
|
|
|
|
|
|
| |
has no exit blocks. Fixes PR12706!
llvm-svn: 155884
|
|
|
|
|
|
|
|
|
| |
<rdar://problem/11291436>.
This is a second attempt at a fix for this, the first was r155468. Thanks
to Chandler, Bob and others for the feedback that helped me improve this.
llvm-svn: 155866
|
|
|
|
| |
llvm-svn: 155859
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch will optimize -(x != 0) on X86
FROM
cmpl $0x01,%edi
sbbl %eax,%eax
notl %eax
TO
negl %edi
sbbl %eax %eax
llvm-svn: 155853
|
|
|
|
|
|
|
|
|
|
|
| |
Replace some assert() calls w/ actual diagnostics. In a perfect world,
there'd be range checks on these values long before things ever reached
this code. For now, though, issuing a better-late-than-never diagnostic
is still a big improvement over assert().
rdar://11347287
llvm-svn: 155851
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was exposed by SingleSource/UnitTests/Vector/constpool.c.
The computed size of a basic block isn't always a multiple of its known
alignment, and that can introduce extra alignment padding after the
block.
<rdar://problem/11347135>
llvm-svn: 155845
|
|
|
|
| |
llvm-svn: 155832
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On x86-32, structure return via sret lets the callee pop the hidden
pointer argument off the stack, which the caller then re-pushes.
However if the calling convention is fastcc, then a register is used
instead, and the caller should not adjust the stack. This is
implemented with a check of IsTailCallConvention
X86TargetLowering::LowerCall but is now checked properly in
X86FastISel::DoSelectCall.
(this time, actually commit what was reviewed!)
llvm-svn: 155825
|
|
|
|
|
|
|
|
| |
ARM BUILD_VECTORs created after type legalization cannot use i8 or i16
operands, since those types are not legal. Instead use i32 operands, which
will be implicitly truncated by the BUILD_VECTOR to match the element type.
llvm-svn: 155824
|
|
|
|
|
|
|
|
|
| |
relocations are resolved. It's much more reasonable to do this decision when
relocations are just being added - we have all the information at that point.
Also a bit of renaming and extra comments to clarify extensions.
llvm-svn: 155819
|
|
|
|
|
|
| |
known zero in the LHS. Fixes PR12541.
llvm-svn: 155818
|
|
|
|
|
|
|
|
|
|
|
| |
Allow the "SplitCriticalEdge" function to split the edge to a landing pad. If
the pass is *sure* that it thinks it knows what it's doing, then it may go ahead
and specify that the landing pad can have its critical edge split. The loop
unswitch pass is one of these passes. It will split the critical edges of all
edges coming from a loop to a landing pad not within the loop. Doing so will
retain important loop analysis information, such as loop simplify.
llvm-svn: 155817
|
|
|
|
| |
llvm-svn: 155816
|
|
|
|
|
|
|
|
|
| |
- Add comments
- Change field names to be more reasonable
- Fix indentation and naming to conform to coding conventions
- Remove unnecessary includes / replace them by forward declatations
llvm-svn: 155815
|
|
|
|
|
|
| |
even a good hack.
llvm-svn: 155813
|
|
|
|
| |
llvm-svn: 155811
|
|
|
|
|
|
| |
emitter. Needs some major refactoring as these two code emitters are almost identical
llvm-svn: 155810
|
|
|
|
|
|
| |
inputs.
llvm-svn: 155809
|
|
|
|
| |
llvm-svn: 155800
|
|
|
|
| |
llvm-svn: 155798
|
|
|
|
| |
llvm-svn: 155797
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 155795
|
|
|
|
|
|
| |
comments.
llvm-svn: 155793
|
|
|
|
|
|
| |
We don't compute spill weights until after coalescing anyway.
llvm-svn: 155766
|
|
|
|
| |
llvm-svn: 155765
|
|
|
|
|
|
|
|
|
| |
The code could search past the end of the basic block when there was
already a constant pool entry after the block.
Test case with giant basic block in SingleSource/UnitTests/Vector/constpool.c
llvm-svn: 155753
|
|
|
|
|
|
|
|
|
|
| |
This time, also fix the caller of AddGlue to properly handle
incomplete chains. AddGlue had failure modes, but shamefully hid them
from its caller. It's luck ran out.
Fixes rdar://11314175: BuildSchedUnits assert.
llvm-svn: 155749
|
|
|
|
|
|
|
|
|
|
| |
Make sure when parsing the Thumb1 sp+register ADD instruction that
the source and destination operands match. In thumb2, just use the
wide encoding if they don't. In Thumb1, issue a diagnostic.
rdar://11219154
llvm-svn: 155748
|
|
|
|
|
|
| |
Make the operand order of the instruction match that of the asm syntax.
llvm-svn: 155747
|
|
|
|
| |
llvm-svn: 155746
|
|
|
|
|
|
|
|
|
|
|
|
| |
On x86-32, structure return via sret lets the callee pop the hidden
pointer argument off the stack, which the caller then re-pushes.
However if the calling convention is fastcc, then a register is used
instead, and the caller should not adjust the stack. This is
implemented with a check of IsTailCallConvention
X86TargetLowering::LowerCall but is now checked properly in
X86FastISel::DoSelectCall.
llvm-svn: 155745
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, ARMConstantIslandPass would conservatively compute the
address of an aligned basic block as:
RoundUpToAlignment(Offset + UnknownPadding)
This worked fine for the layout algorithm itself, but it could fool the
verify() function because it accounts for alignment padding twice: Once
when adding the worst case UnknownPadding, and again by rounding up the
fictional block offset. This meant that when optimizeThumb2Instructions
would shrink an instruction, the conservative distance estimate could
grow. That shouldn't be possible since the woorst case alignment padding
wss already included.
This patch drops the use of RoundUpToAlignment, and depends only on
worst case padding to compute conservative block offsets. This has the
weird effect that the computed offset for an aligned block may not be
aligned.
The important difference is that shrinking an instruction can never
cause the estimated distance between two instructions to grow. The
estimated distance is always larger than the real distance that only the
assembler knows.
<rdar://problem/11339352>
llvm-svn: 155744
|