| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
just one level deep. On the testcase we go from getting this:
F1: ; preds = %T2
%F = and i1 true, %cond ; <i1> [#uses=1]
br i1 %F, label %X, label %Y
to a fully threaded:
F1: ; preds = %T2
br label %Y
This changes gets us to the point where we're forming (too many) switch
instructions on doug's strswitch testcase.
llvm-svn: 86646
|
| |
|
|
| |
llvm-svn: 86645
|
| |
|
|
| |
llvm-svn: 86642
|
| |
|
|
| |
llvm-svn: 86641
|
| |
|
|
| |
llvm-svn: 86639
|
| |
|
|
|
|
|
|
| |
except that the result may not be a constant. Switch jump threading to
use it so that it gets things like (X & 0) -> 0, which occur when phi preds
are deleted and the remaining phi pred was a zero.
llvm-svn: 86637
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch forbids implicit conversion of DenseMap::const_iterator to
DenseMap::iterator which was possible because DenseMapIterator inherited
(publicly) from DenseMapConstIterator. Conversion the other way around is now
allowed as one may expect.
The template DenseMapConstIterator is removed and the template parameter
IsConst which specifies whether the iterator is constant is added to
DenseMapIterator.
Actually IsConst parameter is not necessary since the constness can be
determined from KeyT but this is not relevant to the fix and can be addressed
later.
Patch by Victor Zverovich!
llvm-svn: 86636
|
| |
|
|
| |
llvm-svn: 86635
|
| |
|
|
| |
llvm-svn: 86634
|
| |
|
|
|
|
|
|
| |
lame API.
Also, Stringrefify some more MemoryBuffer functions, and add two performance FIXMEs.
llvm-svn: 86630
|
| |
|
|
|
|
| |
be renamed to break anti-dependencies.
llvm-svn: 86628
|
| |
|
|
|
|
| |
simplification, this handles the foldable fcmp x,x cases among many others.
llvm-svn: 86627
|
| |
|
|
|
|
| |
and ConstantFoldCompareInstOperands.
llvm-svn: 86626
|
| |
|
|
| |
llvm-svn: 86625
|
| |
|
|
|
|
|
| |
Simplify[IF]Cmp pieces. Add some predicates to CmpInst to
determine whether a predicate is fp or int.
llvm-svn: 86624
|
| |
|
|
|
|
| |
not necessary.
llvm-svn: 86621
|
| |
|
|
|
|
| |
individual operands instead of taking a temporary array
llvm-svn: 86619
|
| |
|
|
| |
llvm-svn: 86616
|
| |
|
|
|
|
|
|
| |
takes decimated instructions and applies identities to them. This
is pretty minimal at this point, but I plan to pull some instcombine
logic out into these and similar routines.
llvm-svn: 86613
|
| |
|
|
| |
llvm-svn: 86606
|
| |
|
|
| |
llvm-svn: 86604
|
| |
|
|
|
|
|
| |
simplifies instruction users of PHIs when the phi is eliminated. This
will be moved to transforms/utils after some other refactoring.
llvm-svn: 86603
|
| |
|
|
| |
llvm-svn: 86602
|
| |
|
|
| |
llvm-svn: 86601
|
| |
|
|
| |
llvm-svn: 86600
|
| |
|
|
| |
llvm-svn: 86592
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
was generated. This caused code like this:
## The asm code for the function
.section __TEXT,__const
.align 2
lJTI11_0:
LJTI11_0:
.long LBB11_16
.long LBB11_4
.long LBB11_5
.long LBB11_6
.long LBB11_7
.long LBB11_8
.long LBB11_9
.long LBB11_10
.long LBB11_11
.long LBB11_12
.long LBB11_13
.long LBB11_14
Leh_func_end11: ## <---now in the wrong section!
The `Leh_func_end11' would then end up in the wrong section, causing the
resulting EH frame information to be wrong:
__ZL11CheckRightsjPKcbRbRP6NSData.eh:
.set Lset500eh,Leh_frame_end11-Leh_frame_begin11
.long Lset500eh ; Length of Frame Information Entry
Leh_frame_begin11:
.long Leh_frame_begin11-Leh_frame_common
.long Leh_func_begin11-.
.set Lset501eh,Leh_func_end11-Leh_func_begin11
.long Lset501eh ; FDE address range
`Lset501eh' is now something huge instead of the real value.
The X86 back-end generates the jump table after the EH information is
emitted. Do the same here.
llvm-svn: 86588
|
| |
|
|
|
|
|
|
|
|
|
|
| |
instructions. This makes CodeGen dumps significantly less noisy.
Example before:
BL <ga:@bar>, %R0<imp-def>, %R1<imp-def,dead>, %R2<imp-def,dead>, %R3<imp-def,dead>, %R12<imp-def,dead>, %LR<imp-def,dead>, %D0<imp-def,dead>, %D1<imp-def,dead>, %D2<imp-def,dead>, %D3<imp-def,dead>, %D4<imp-def,dead>, %D5<imp-def,dead>, %D6<imp-def,dead>, %D7<imp-def,dead>, %D16<imp-def,dead>, %D17<imp-def,dead>, %D18<imp-def,dead>, %D19<imp-def,dead>, %D20<imp-def,dead>, %D21<imp-def,dead>, %D22<imp-def,dead>, %D23<imp-def,dead>, %D24<imp-def,dead>, %D25<imp-def,dead>, %D26<imp-def,dead>, %D27<imp-def,dead>, %D28<imp-def,dead>, %D29<imp-def,dead>, %D30<imp-def,dead>, %D31<imp-def,dead>, %CPSR<imp-def,dead>, %FPSCR<imp-def,dead>
Same example after:
BL <ga:@bar>, %R0<imp-def>, %R1<imp-def,dead>, %LR<imp-def,dead>, %CPSR<imp-def,dead>, ...
llvm-svn: 86583
|
| |
|
|
|
|
| |
GVN to be more aggressive. Patch by Hans Wennborg! (with a comment added by me)
llvm-svn: 86582
|
| |
|
|
|
|
| |
dependencies were overly conservative for memory access that are known not to alias.
llvm-svn: 86580
|
| |
|
|
| |
llvm-svn: 86575
|
| |
|
|
|
|
|
|
|
|
|
|
| |
the loop. This is needed because with indirectbr it may not be possible
for LoopSimplify to guarantee that all loop exit predecessors are
inside the loop. This fixes PR5437.
LCCSA no longer actually requires LoopSimplify form, but for now it
must still have the dependency because the PassManager doesn't know
how to schedule LoopSimplify otherwise.
llvm-svn: 86569
|
| |
|
|
| |
llvm-svn: 86565
|
| |
|
|
| |
llvm-svn: 86564
|
| |
|
|
| |
llvm-svn: 86549
|
| |
|
|
| |
llvm-svn: 86548
|
| |
|
|
|
|
| |
namespace to match function declaration in Debug.h.
llvm-svn: 86544
|
| |
|
|
|
|
| |
http://llvm.org/bugs/show_bug.cgi?id=5149
llvm-svn: 86543
|
| |
|
|
| |
llvm-svn: 86525
|
| |
|
|
|
|
| |
it to a normal binop. Patch by Alastair Lynn, testcase by me.
llvm-svn: 86524
|
| |
|
|
| |
llvm-svn: 86522
|
| |
|
|
| |
llvm-svn: 86521
|
| |
|
|
|
|
| |
putchar in case there is an error.
llvm-svn: 86515
|
| |
|
|
| |
llvm-svn: 86511
|
| |
|
|
| |
llvm-svn: 86510
|
| |
|
|
|
|
| |
used by a chain of other PHIs.
llvm-svn: 86503
|
| |
|
|
| |
llvm-svn: 86499
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
two problems addressed
here:
1) We need to avoid processing sigma nodes as phi nodes for constraint generation.
2) We need to generate constraints for comparisons against constants properly.
This includes our first working ABCD test!
llvm-svn: 86498
|
| |
|
|
| |
llvm-svn: 86497
|
| |
|
|
| |
llvm-svn: 86494
|