Chris Lattner
|
f49c27c65c
|
Squelch optimized warning.
llvm-svn: 19475
|
2005-01-11 17:46:49 +00:00 |
Chris Lattner
|
85d70c6fd5
|
Teach legalize to lower MEMSET/MEMCPY/MEMMOVE operations if the target
does not support them.
llvm-svn: 19465
|
2005-01-11 05:57:22 +00:00 |
Chris Lattner
|
844277fb1e
|
Print new operations.
llvm-svn: 19464
|
2005-01-11 05:57:01 +00:00 |
Chris Lattner
|
875def9b71
|
Turn memset/memcpy/memmove into the corresponding operations.
llvm-svn: 19463
|
2005-01-11 05:56:49 +00:00 |
Chris Lattner
|
a86fa4455b
|
shift X, 0 -> X
llvm-svn: 19453
|
2005-01-11 04:25:13 +00:00 |
Chris Lattner
|
1308b488ea
|
Print SelectionDAGs bottom up, include extra info in the node labels
llvm-svn: 19447
|
2005-01-11 00:34:33 +00:00 |
Chris Lattner
|
b241b443b6
|
Add a marker for the graph root.
llvm-svn: 19445
|
2005-01-10 23:52:04 +00:00 |
Chris Lattner
|
12be02722f
|
Put the operation name in each node, put the function name on the graph.
llvm-svn: 19444
|
2005-01-10 23:26:00 +00:00 |
Chris Lattner
|
9e4c76123c
|
Split out SDNode::getOperationName into its own method.
llvm-svn: 19443
|
2005-01-10 23:25:25 +00:00 |
Chris Lattner
|
7f65075be3
|
Implement initial selectiondag printing support. This gets us a nice
graph with no labels! :)
llvm-svn: 19441
|
2005-01-10 23:08:40 +00:00 |
Chris Lattner
|
be02d430a9
|
Lower to the correct functions. This fixes FreeBench/fourinarow
llvm-svn: 19436
|
2005-01-10 21:02:37 +00:00 |
Chris Lattner
|
41b764144d
|
Implement a couple of more simplifications. This lets us codegen:
int test2(int * P, int* Q, int A, int B) {
return P+A == P;
}
into:
test2:
movl 4(%esp), %eax
movl 12(%esp), %eax
shll $2, %eax
cmpl $0, %eax
sete %al
movzbl %al, %eax
ret
instead of:
test2:
movl 4(%esp), %eax
movl 12(%esp), %ecx
leal (%eax,%ecx,4), %ecx
cmpl %eax, %ecx
sete %al
movzbl %al, %eax
ret
ICC is producing worse code:
test2:
movl 4(%esp), %eax #8.5
movl 12(%esp), %edx #8.5
lea (%edx,%edx), %ecx #9.9
addl %ecx, %ecx #9.9
addl %eax, %ecx #9.9
cmpl %eax, %ecx #9.16
movl $0, %eax #9.16
sete %al #9.16
ret #9.16
as is GCC (looks like our old code):
test2:
movl 4(%esp), %edx
movl 12(%esp), %eax
leal (%edx,%eax,4), %ecx
cmpl %edx, %ecx
sete %al
movzbl %al, %eax
ret
llvm-svn: 19430
|
2005-01-10 02:03:02 +00:00 |
Chris Lattner
|
00c231baa7
|
Fix incorrect constant folds, fixing Stepanov after the SHR patch.
llvm-svn: 19429
|
2005-01-10 01:16:03 +00:00 |
Chris Lattner
|
0966a75e76
|
Constant fold shifts, turning this loop:
.LBB_Z5test0PdS__3: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
movl $16000, %ecx
sarl $3, %ecx
cmpl %eax, %ecx
fstpl 16(%esp)
#FP_REG_KILL
jg .LBB_Z5test0PdS__3 # no_exit.1
into:
.LBB_Z5test0PdS__3: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
cmpl $2000, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__3 # no_exit.1
llvm-svn: 19427
|
2005-01-10 00:07:15 +00:00 |
Chris Lattner
|
fde3a212e2
|
Add some folds for == and != comparisons. This allows us to
codegen this loop in stepanov:
no_exit.i: ; preds = %entry, %no_exit.i, %then.i, %_Z5checkd.exit
%i.0.0 = phi int [ 0, %entry ], [ %i.0.0, %no_exit.i ], [ %inc.0, %_Z5checkd.exit ], [ %inc.012, %then.i ] ; <int> [#uses=3]
%indvar = phi uint [ %indvar.next, %no_exit.i ], [ 0, %entry ], [ 0, %then.i ], [ 0, %_Z5checkd.exit ] ; <uint> [#uses=3]
%result_addr.i.0 = phi double [ %tmp.4.i.i, %no_exit.i ], [ 0.000000e+00, %entry ], [ 0.000000e+00, %then.i ], [ 0.000000e+00, %_Z5checkd.exit ] ; <double> [#uses=1]
%first_addr.0.i.2.rec = cast uint %indvar to int ; <int> [#uses=1]
%first_addr.0.i.2 = getelementptr [2000 x double]* %data, int 0, uint %indvar ; <double*> [#uses=1]
%inc.i.rec = add int %first_addr.0.i.2.rec, 1 ; <int> [#uses=1]
%inc.i = getelementptr [2000 x double]* %data, int 0, int %inc.i.rec ; <double*> [#uses=1]
%tmp.3.i.i = load double* %first_addr.0.i.2 ; <double> [#uses=1]
%tmp.4.i.i = add double %result_addr.i.0, %tmp.3.i.i ; <double> [#uses=2]
%tmp.2.i = seteq double* %inc.i, getelementptr ([2000 x double]* %data, int 0, int 2000) ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2.i, label %_Z10accumulateIPddET0_T_S2_S1_.exit, label %no_exit.i
To this:
.LBB_Z4testIPddEvT_S1_T0__1: # no_exit.i
fldl data(,%eax,8)
fldl 16(%esp)
faddp %st(1)
fstpl 16(%esp)
incl %eax
movl %eax, %ecx
shll $3, %ecx
cmpl $16000, %ecx
#FP_REG_KILL
jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
instead of this:
.LBB_Z4testIPddEvT_S1_T0__1: # no_exit.i
fldl data(,%eax,8)
fldl 16(%esp)
faddp %st(1)
fstpl 16(%esp)
incl %eax
leal data(,%eax,8), %ecx
leal data+16000, %edx
cmpl %edx, %ecx
#FP_REG_KILL
jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
llvm-svn: 19425
|
2005-01-09 20:52:51 +00:00 |
Jeff Cohen
|
7d1670da3f
|
Fix VC++ compilation error
llvm-svn: 19423
|
2005-01-09 20:41:56 +00:00 |
Chris Lattner
|
e6f7882c27
|
Print the DAG out more like a DAG in nested format.
llvm-svn: 19422
|
2005-01-09 20:38:33 +00:00 |
Chris Lattner
|
1270acc1ce
|
Print out nodes sorted by their address to make it easier to find them in a list.
llvm-svn: 19421
|
2005-01-09 20:26:36 +00:00 |
Chris Lattner
|
3d5d5022d5
|
Add a simple transformation. This allows us to compile one of the inner
loops in stepanov to this:
.LBB_Z5test0PdS__2: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
cmpl $2000, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2
instead of this:
.LBB_Z5test0PdS__2: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
movl $data, %ecx
movl %ecx, %edx
addl $16000, %edx
subl %ecx, %edx
movl %edx, %ecx
sarl $2, %ecx
shrl $29, %ecx
addl %ecx, %edx
sarl $3, %edx
cmpl %edx, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2
The old instruction selector produced:
.LBB_Z5test0PdS__2: # no_exit.1
fldl 24(%esp)
faddl data(,%eax,8)
fstl 24(%esp)
movl %eax, %ecx
incl %ecx
incl %eax
leal data+16000, %edx
movl $data, %edi
subl %edi, %edx
movl %edx, %edi
sarl $2, %edi
shrl $29, %edi
addl %edi, %edx
sarl $3, %edx
cmpl %edx, %ecx
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2 # no_exit.1
Which is even worse!
llvm-svn: 19419
|
2005-01-09 20:09:57 +00:00 |
Chris Lattner
|
9242c504da
|
Fix a bug legalizing call instructions (make sure to remember all result
values), and eliminate some switch statements.
llvm-svn: 19417
|
2005-01-09 19:43:23 +00:00 |
Chris Lattner
|
02f5ce2077
|
Fix a minor bug legalizing dynamic_stackalloc. This allows us to compile
std::__pad<wchar_t, std::char_traits<wchar_t> >::_S_pad(std::ios_base&, wchar_t, wchar_t*, wchar_t const*, int, int, bool)
from libstdc++
llvm-svn: 19416
|
2005-01-09 19:07:54 +00:00 |
Chris Lattner
|
ec26b48d61
|
Teach legalize to deal with DYNAMIC_STACKALLOC (aka a dynamic llvm alloca)
llvm-svn: 19415
|
2005-01-09 19:03:49 +00:00 |
Chris Lattner
|
a2c5d9168c
|
Handle static alloca arguments to PHI nodes.
llvm-svn: 19409
|
2005-01-09 01:16:24 +00:00 |
Chris Lattner
|
58cfd7945d
|
Use new interfaces to correctly lower varargs and return/frame address intrinsics.
llvm-svn: 19407
|
2005-01-09 00:00:49 +00:00 |
Chris Lattner
|
18d2b34637
|
Add support for llvm.setjmp and longjmp. Only 3 SingleSource/UnitTests fail now.
llvm-svn: 19404
|
2005-01-08 22:48:57 +00:00 |
Chris Lattner
|
c0f31c5e96
|
Tighten up assertions.
llvm-svn: 19397
|
2005-01-08 20:35:13 +00:00 |
Chris Lattner
|
d006195517
|
Silence VS warnings.
llvm-svn: 19384
|
2005-01-08 19:52:31 +00:00 |
Chris Lattner
|
7e6eeba6c5
|
Implement handling of most long operators through libcalls.
Fix a bug legalizing "ret (Val,Val)"
llvm-svn: 19375
|
2005-01-08 19:27:05 +00:00 |
Chris Lattner
|
1f45cd7418
|
Adjust to changes in LowerCAllTo interfaces
llvm-svn: 19374
|
2005-01-08 19:26:18 +00:00 |
Chris Lattner
|
2a6db3c351
|
Add support for FP->INT conversions and back.
llvm-svn: 19369
|
2005-01-08 08:08:56 +00:00 |
Chris Lattner
|
e69daaf71d
|
Implement the 'store FPIMM, Ptr' -> 'store INTIMM, Ptr' optimization for
all targets.
llvm-svn: 19366
|
2005-01-08 06:25:56 +00:00 |
Chris Lattner
|
9a97e4d5b6
|
1ULL << 64 is undefined, don't do it.
llvm-svn: 19365
|
2005-01-08 06:24:30 +00:00 |
Chris Lattner
|
e0f1fe181a
|
Fix a pointer invalidation problem. This fixes Generic/badarg6.ll
llvm-svn: 19361
|
2005-01-07 23:32:00 +00:00 |
Chris Lattner
|
5c66e45b92
|
Fold conditional branches on constants away.
llvm-svn: 19360
|
2005-01-07 22:49:57 +00:00 |
Chris Lattner
|
cda3efa6e5
|
Fix a thinko in the reassociation code, fixing Generic/badlive.ll
llvm-svn: 19359
|
2005-01-07 22:44:09 +00:00 |
Chris Lattner
|
a65a2f0c36
|
Add support for truncating integer casts from long.
llvm-svn: 19358
|
2005-01-07 22:37:48 +00:00 |
Chris Lattner
|
ea4ca94cae
|
Fix a bug in load expansion legalization and ret legalization. This fixes
CodeGen/Generic/select.ll:castconst.
llvm-svn: 19357
|
2005-01-07 22:28:47 +00:00 |
Chris Lattner
|
68a12140c0
|
Legalize unconditional branches too
llvm-svn: 19356
|
2005-01-07 22:12:08 +00:00 |
Chris Lattner
|
19a83990e1
|
Implement support for long GEP indices on 32-bit archs and support for
int GEP indices on 64-bit archs.
llvm-svn: 19354
|
2005-01-07 21:56:57 +00:00 |
Chris Lattner
|
4d5ba99283
|
Simplify: truncate ({zero|sign}_extend (X))
llvm-svn: 19353
|
2005-01-07 21:56:24 +00:00 |
Chris Lattner
|
32f20bfa93
|
implement legalization of a bunch more operators.
llvm-svn: 19352
|
2005-01-07 21:45:56 +00:00 |
Chris Lattner
|
fa854eb012
|
Fix another bug legalizing calls!
llvm-svn: 19350
|
2005-01-07 21:35:32 +00:00 |
Chris Lattner
|
8ea875fb05
|
Fix handling of dead PHI nodes.
llvm-svn: 19349
|
2005-01-07 21:34:19 +00:00 |
Chris Lattner
|
f025d6788c
|
Fix a bug legalizing calls
llvm-svn: 19348
|
2005-01-07 21:34:13 +00:00 |
Chris Lattner
|
473825ccec
|
After legalizing a DAG, delete dead nodes to save space.
llvm-svn: 19346
|
2005-01-07 21:09:37 +00:00 |
Chris Lattner
|
9c667933c1
|
Implement RemoveDeadNodes
llvm-svn: 19345
|
2005-01-07 21:09:16 +00:00 |
Chris Lattner
|
ec3fe7c4a8
|
Teach legalize how to handle condbranches
llvm-svn: 19339
|
2005-01-07 08:19:42 +00:00 |
Chris Lattner
|
7a60d91953
|
Initial implementation of the SelectionDAGISel class. This contains most
of the code for lowering from LLVM code to a SelectionDAG.
llvm-svn: 19331
|
2005-01-07 07:47:53 +00:00 |
Chris Lattner
|
f8ba6987a4
|
This file is obsolete
llvm-svn: 19330
|
2005-01-07 07:47:23 +00:00 |
Chris Lattner
|
dc75059005
|
Initial implementation of the DAG legalization. This still has a long way
to go, but it does work for some non-trivial cases now.
llvm-svn: 19329
|
2005-01-07 07:47:09 +00:00 |
Chris Lattner
|
061a1ea9e3
|
Complete rewrite of the SelectionDAG class.
llvm-svn: 19327
|
2005-01-07 07:46:32 +00:00 |
Reid Spencer
|
57cbe39d1e
|
Change Library Names Not To Conflict With Others When Installed
llvm-svn: 17286
|
2004-10-27 23:18:45 +00:00 |
Reid Spencer
|
c1c320c335
|
We won't use automake
llvm-svn: 17155
|
2004-10-22 03:35:04 +00:00 |
Reid Spencer
|
6a11a75f31
|
Initial automake generated Makefile template
llvm-svn: 17136
|
2004-10-18 23:55:41 +00:00 |
Reid Spencer
|
ace94df71f
|
Update to reflect changes in Makefile rules.
llvm-svn: 16950
|
2004-10-13 11:46:52 +00:00 |
Reid Spencer
|
b84cbf2725
|
Initial version of automake Makefile.am file.
llvm-svn: 16885
|
2004-10-10 20:43:57 +00:00 |
Misha Brukman
|
84e5ff7605
|
Hyphenate target-(in)dependent for more tasty grammar goodness (tm)
llvm-svn: 16854
|
2004-10-08 19:43:31 +00:00 |
Reid Spencer
|
eb04d9bcb4
|
Add #include <iostream> since Value.h does not #include it any more.
llvm-svn: 14622
|
2004-07-04 12:19:56 +00:00 |
Chris Lattner
|
6b7275996c
|
Rename Type::PrimitiveID to TypeId and ::getPrimitiveID() to ::getTypeID()
llvm-svn: 14201
|
2004-06-17 18:19:28 +00:00 |
Chris Lattner
|
560b5e42ab
|
Finegrainify namespacification
llvm-svn: 13948
|
2004-06-02 04:28:06 +00:00 |
Chris Lattner
|
71f1d6d9d8
|
Fix a trivial but blatant bug
llvm-svn: 13947
|
2004-06-02 03:57:43 +00:00 |
Brian Gaeke
|
960707c335
|
Put all LLVM code into the llvm namespace, as per bug 109.
llvm-svn: 9903
|
2003-11-11 22:41:34 +00:00 |
John Criswell
|
4436c49787
|
Added LLVM copyright notice to Makefiles.
llvm-svn: 9312
|
2003-10-20 22:26:57 +00:00 |
John Criswell
|
482202a601
|
Added LLVM project notice to the top of every C++ source file.
Header files will be on the way.
llvm-svn: 9298
|
2003-10-20 19:43:21 +00:00 |
Chris Lattner
|
0605c232b7
|
rename selection directory and library to SelectionDAG
llvm-svn: 7877
|
2003-08-15 04:55:22 +00:00 |
Chris Lattner
|
e81de41edf
|
Add a bunch of new node types, etc
llvm-svn: 7875
|
2003-08-15 04:53:16 +00:00 |
Chris Lattner
|
600d308853
|
Initial checkin of SelectionDAG implementation. This is still rough and
unfinished
llvm-svn: 7717
|
2003-08-11 14:57:33 +00:00 |