Douglas Gregor
95c326d14a
Use EmitInt, not Emit, to emit unsigned values
...
llvm-svn: 60364
2008-12-01 19:45:16 +00:00
Daniel Dunbar
0132cdc45c
Add test case for __ASSEMBLER__ definition.
...
llvm-svn: 60363
2008-12-01 19:23:47 +00:00
Daniel Dunbar
1f3d7849a8
Add LangOptions marker for assembler-with-cpp mode and use to define
...
__ASSEMBLER__ properly. Patch from Roman Divacky (with minor
formatting changes). Thanks!
llvm-svn: 60362
2008-12-01 18:55:22 +00:00
Douglas Gregor
c12ce19595
Enable blocks in C++
...
llvm-svn: 60361
2008-12-01 18:34:47 +00:00
Douglas Gregor
2dc61144cd
Make sure __null test runs in both 32- and 64-bit. Thanks Anders
...
llvm-svn: 60360
2008-12-01 18:05:11 +00:00
Douglas Gregor
356513d7d0
Parse the exception-specification throw(...), a Microsoft extension
...
llvm-svn: 60359
2008-12-01 18:00:20 +00:00
Scott Michel
08a4e2045d
CellSPU:
...
- Fix v2[if]64 vector insertion code before IBM files a bug report.
- Ensure that zero (0) offsets relative to $sp don't trip an assert
(add $sp, 0 gets legalized to $sp alone, tripping an assert)
- Shuffle masks passed to SPUISD::SHUFB are now v16i8 or v4i32
llvm-svn: 60358
2008-12-01 17:56:02 +00:00
Douglas Gregor
dc37c81448
Add the test for __null
...
llvm-svn: 60357
2008-12-01 17:31:21 +00:00
Douglas Gregor
f7ab50df29
Define NULL to __null in C++, so that it's guaranteed to have the same size as a pointer
...
llvm-svn: 60355
2008-12-01 17:20:57 +00:00
Chris Lattner
001181731b
switch to std::sort until I have time to sort this out.
...
llvm-svn: 60354
2008-12-01 17:00:08 +00:00
Chris Lattner
5fb10b961b
cleanups suggested by duncan, thanks!
...
llvm-svn: 60353
2008-12-01 16:55:19 +00:00
Chris Lattner
2bc97759b3
define array_pod_sort in terms of operator< instead of my brain
...
damaged approximation. This should fix it on big endian platforms
and on 64-bit.
llvm-svn: 60352
2008-12-01 16:50:01 +00:00
Duncan Sands
3d960941b1
There are no longer any places that require a
...
MERGE_VALUES node with only one operand, so get
rid of special code that only existed to handle
that possibility.
llvm-svn: 60349
2008-12-01 11:41:29 +00:00
Duncan Sands
6ed40141f7
Change the interface to the type legalization method
...
ReplaceNodeResults: rather than returning a node which
must have the same number of results as the original
node (which means mucking around with MERGE_VALUES,
and which is also easy to get wrong since SelectionDAG
folding may mean you don't get the node you expect),
return the results in a vector.
llvm-svn: 60348
2008-12-01 11:39:25 +00:00
Bill Wendling
47f733e4ea
Generalize the FoldOrWithConstant method to fold for any two constants which
...
don't have overlapping bits.
llvm-svn: 60344
2008-12-01 08:32:40 +00:00
Bill Wendling
22e761b302
Reduce copy-and-paste code by splitting out the code into its own function.
...
llvm-svn: 60343
2008-12-01 08:23:25 +00:00
Bill Wendling
582fe6b0ca
Use m_Specific() instead of double matching.
...
llvm-svn: 60341
2008-12-01 08:09:47 +00:00
Bill Wendling
4eecfb655b
Move pattern check outside of the if-then statement. This prevents us from fiddling with constants unless we have to.
...
llvm-svn: 60340
2008-12-01 07:47:02 +00:00
Chris Lattner
6f5bf6a718
Rename some variables, only increment BI once at the start of the loop instead of throughout it.
...
llvm-svn: 60339
2008-12-01 07:35:54 +00:00
Chris Lattner
f00aae4968
pull the predMap densemap out of the inner loop of performPRE, so
...
that it isn't reallocated all the time. This is a tiny speedup for
GVN: 3.90->3.88s
llvm-svn: 60338
2008-12-01 07:29:03 +00:00
Chris Lattner
2b07d3ccde
switch a couple more calls to use array_pod_sort.
...
llvm-svn: 60337
2008-12-01 06:52:57 +00:00
Chris Lattner
a29f0e19ff
don't assume iterators implicitly convert to pointers.
...
llvm-svn: 60336
2008-12-01 06:50:46 +00:00
Chris Lattner
2c2dd15a85
Introduce a new array_pod_sort function and switch LSR to use it
...
instead of std::sort. This shrinks the release-asserts LSR.o file
by 1100 bytes of code on my system.
We should start using array_pod_sort where possible.
llvm-svn: 60335
2008-12-01 06:49:59 +00:00
Anders Carlsson
5b3638b6e7
Generate the correct results for the comma expression. Fixes PR3123.
...
llvm-svn: 60334
2008-12-01 06:44:05 +00:00
Anders Carlsson
eade3ad1f1
Revert change that made isNullPointerConstant start emitting warnings. We don't want that :)
...
llvm-svn: 60333
2008-12-01 06:28:23 +00:00
Chris Lattner
2aebea5735
Eliminate use of setvector for the DeadInsts set, just use a smallvector.
...
This is a lot cheaper and conceptually simpler.
llvm-svn: 60332
2008-12-01 06:27:41 +00:00
Anders Carlsson
0309d904f7
Fix test. (0 && (a(),1)) is a valid I-C-E according to C99.
...
llvm-svn: 60331
2008-12-01 06:27:38 +00:00
Chris Lattner
4da78e3774
DeleteTriviallyDeadInstructions is always passed the
...
DeadInsts ivar, just use it directly.
llvm-svn: 60330
2008-12-01 06:14:28 +00:00
Chris Lattner
a68a5a4784
simplify DeleteTriviallyDeadInstructions again, unlike my previous
...
buggy rewrite, this notifies ScalarEvolution of a pending instruction
about to be removed and then erases it, instead of erasing it then
notifying.
llvm-svn: 60329
2008-12-01 06:11:32 +00:00
Chris Lattner
9e6b243428
simplify these patterns using m_Specific. No need to grep for
...
xor in testcase (or is a substring).
llvm-svn: 60328
2008-12-01 05:16:26 +00:00
Chris Lattner
88a1f0213d
Teach jump threading to clean up after itself, DCE and constfolding the
...
new instructions it simplifies. Because we're threading jumps on edges
with constants coming in from PHI's, we inherently are exposing a lot more
constants to the new block. Folding them and deleting dead conditions
allows the cost model in jump threading to be more accurate as it iterates.
llvm-svn: 60327
2008-12-01 04:48:07 +00:00
Chris Lattner
856684d360
The PreVerifier pass preserves everything. In practice, this
...
prevents the passmgr from adding yet-another domtree invocation
for Verifier if there is already one live.
llvm-svn: 60326
2008-12-01 03:58:38 +00:00
Chris Lattner
084b3a47d3
Change instcombine to use FoldPHIArgGEPIntoPHI to fold two operand PHIs
...
instead of using FoldPHIArgBinOpIntoPHI. In addition to being more
obvious, this also fixes a problem where instcombine wouldn't merge two
phis that had different variable indices. This prevented instcombine
from factoring big chunks of code in 403.gcc. For example:
insn_cuid.exit:
- %tmp336 = load i32** @uid_cuid, align 4
- %tmp337 = getelementptr %struct.rtx_def* %insn_addr.0.ph.i, i32 0, i32 3
- %tmp338 = bitcast [1 x %struct.rtunion]* %tmp337 to i32*
- %tmp339 = load i32* %tmp338, align 4
- %tmp340 = getelementptr i32* %tmp336, i32 %tmp339
br label %bb62
bb61:
- %tmp341 = load i32** @uid_cuid, align 4
- %tmp342 = getelementptr %struct.rtx_def* %insn, i32 0, i32 3
- %tmp343 = bitcast [1 x %struct.rtunion]* %tmp342 to i32*
- %tmp344 = load i32* %tmp343, align 4
- %tmp345 = getelementptr i32* %tmp341, i32 %tmp344
br label %bb62
bb62:
- %iftmp.62.0.in = phi i32* [ %tmp345, %bb61 ], [ %tmp340, %insn_cuid.exit ]
+ %insn.pn2 = phi %struct.rtx_def* [ %insn, %bb61 ], [ %insn_addr.0.ph.i, %insn_cuid.exit ]
+ %tmp344.pn.in.in = getelementptr %struct.rtx_def* %insn.pn2, i32 0, i32 3
+ %tmp344.pn.in = bitcast [1 x %struct.rtunion]* %tmp344.pn.in.in to i32*
+ %tmp341.pn = load i32** @uid_cuid
+ %tmp344.pn = load i32* %tmp344.pn.in
+ %iftmp.62.0.in = getelementptr i32* %tmp341.pn, i32 %tmp344.pn
%iftmp.62.0 = load i32* %iftmp.62.0.in
llvm-svn: 60325
2008-12-01 03:42:51 +00:00
Anders Carlsson
8628645e94
Change more code over to using the new Expr::Evaluate
...
llvm-svn: 60324
2008-12-01 02:46:24 +00:00
Anders Carlsson
38eef1de6c
Change more code over to using the new Expr::Evaluate
...
llvm-svn: 60323
2008-12-01 02:42:14 +00:00
Chris Lattner
9d02a70a7d
Teach inst combine to merge GEPs through PHIs. This is really
...
important because it is sinking the loads using the GEPs, but
not the GEPs themselves. This triggers 647 times on 403.gcc
and makes the .s file much much nicer. For example before:
je LBB1_87 ## bb78
LBB1_62: ## bb77
leal 84(%esi), %eax
LBB1_63: ## bb79
movl (%eax), %eax
...
LBB1_87: ## bb78
movl $0, 4(%esp)
movl %esi, (%esp)
call L_make_decl_rtl$stub
jmp LBB1_62 ## bb77
after:
jne LBB1_63 ## bb79
LBB1_62: ## bb78
movl $0, 4(%esp)
movl %esi, (%esp)
call L_make_decl_rtl$stub
LBB1_63: ## bb79
movl 84(%esi), %eax
The input code was (and the GEPs are merged and
the PHI is now eliminated by instcombine):
br i1 %tmp233, label %bb78, label %bb77
bb77:
%tmp234 = getelementptr %struct.tree_node* %t_addr.3, i32 0, i32 0, i32 22
br label %bb79
bb78:
call void @make_decl_rtl(%struct.tree_node* %t_addr.3, i8* null) nounwind
%tmp235 = getelementptr %struct.tree_node* %t_addr.3, i32 0, i32 0, i32 22
br label %bb79
bb79:
%iftmp.12.0.in = phi %struct.rtx_def** [ %tmp235, %bb78 ], [ %tmp234, %bb77 ]
%iftmp.12.0 = load %struct.rtx_def** %iftmp.12.0.in
llvm-svn: 60322
2008-12-01 02:34:36 +00:00
Anders Carlsson
c9687907c5
Use the new Expr::Evaluate
...
llvm-svn: 60321
2008-12-01 02:31:41 +00:00
Anders Carlsson
e7c2ac4b54
Remove dead code.
...
llvm-svn: 60320
2008-12-01 02:25:52 +00:00
Anders Carlsson
1dbffc6e36
Add Sema::isNullPointerConstant which extwarns if necessary. Use it in Sema::CheckConditionalOperands.
...
llvm-svn: 60319
2008-12-01 02:17:22 +00:00
Anders Carlsson
4bb9113da4
Add a new variant of isNullConstantExpr that returns an EvalResult.
...
llvm-svn: 60318
2008-12-01 02:13:57 +00:00
Anders Carlsson
f7fba46331
Use VerifyIntegerConstantExpression for case values.
...
llvm-svn: 60317
2008-12-01 02:13:02 +00:00
Anders Carlsson
564730a857
Emit the correct diagnostic when a comma is in an ICE.
...
llvm-svn: 60316
2008-12-01 02:07:06 +00:00
Chris Lattner
8facc59e72
testcase for my previous commit.
...
llvm-svn: 60315
2008-12-01 01:42:03 +00:00
Chris Lattner
9ce8995d24
Make GVN be more intelligent about redundant load
...
elimination: when finding dependent load/stores, realize that
they are the same if aliasing claims must alias instead of relying
on the pointers to be exactly equal. This makes load elimination
more aggressive. For example, on 403.gcc, we had:
< 68 gvn - Number of instructions PRE'd
< 152718 gvn - Number of instructions deleted
< 49699 gvn - Number of loads deleted
< 6153 memdep - Number of dirty cached non-local responses
< 169336 memdep - Number of fully cached non-local responses
< 162428 memdep - Number of uncached non-local responses
now we have:
> 64 gvn - Number of instructions PRE'd
> 153623 gvn - Number of instructions deleted
> 49856 gvn - Number of loads deleted
> 5022 memdep - Number of dirty cached non-local responses
> 159030 memdep - Number of fully cached non-local responses
> 162443 memdep - Number of uncached non-local responses
That's an extra 157 loads deleted and extra 905 other instructions nuked.
This slows down GVN very slightly, from 3.91 to 3.96s.
llvm-svn: 60314
2008-12-01 01:31:36 +00:00
Chris Lattner
7e61dafc95
Reimplement the non-local dependency data structure in terms of a sorted
...
vector instead of a densemap. This shrinks the memory usage of this thing
substantially (the high water mark) as well as making operations like
scanning it faster. This speeds up memdep slightly, gvn goes from
3.9376 to 3.9118s on 403.gcc
This also splits out the statistics for the cached non-local case to
differentiate between the dirty and clean cached case. Here's the stats
for 403.gcc:
6153 memdep - Number of dirty cached non-local responses
169336 memdep - Number of fully cached non-local responses
162428 memdep - Number of uncached non-local responses
yay for caching :)
llvm-svn: 60313
2008-12-01 01:15:42 +00:00
Bill Wendling
5b902c5b1e
Implement ((A|B)&1)|(B&-2) -> (A&1) | B transformation. This also takes care of
...
permutations of this pattern.
llvm-svn: 60312
2008-12-01 01:07:11 +00:00
Eli Friedman
6f0730ff11
Fix bogus assertion using getSExtValue for legitimate values, like -1 in
...
an 128-bit-wide integer. No testcase; the issue I ran into depends on
local changes.
llvm-svn: 60311
2008-12-01 00:43:48 +00:00
Chris Lattner
8541edec44
Cache analyses in ivars and add some useful DEBUG output.
...
This speeds up GVN from 4.0386s to 3.9376s.
llvm-svn: 60310
2008-12-01 00:40:32 +00:00
Chris Lattner
80c7d81e81
improve indentation, do cheap checks before expensive ones,
...
remove some fixme's. This speeds up GVN very slightly on 403.gcc
(4.06->4.03s)
llvm-svn: 60309
2008-11-30 23:39:23 +00:00
Chris Lattner
47e81d0e90
Eliminate the DepResultTy abstraction. It is now completely
...
redundant with MemDepResult, and MemDepResult has a nicer interface.
llvm-svn: 60308
2008-11-30 23:17:19 +00:00