Chris Lattner
|
9b75e148fd
|
Know some identities about tokenfactor nodes.
llvm-svn: 19699
|
2005-01-19 18:01:40 +00:00 |
Chris Lattner
|
32a5f02598
|
Know some simple identities. This improves codegen for (1LL << N).
llvm-svn: 19698
|
2005-01-19 17:29:49 +00:00 |
Chris Lattner
|
a9d53f9fb9
|
Keep track of the retval type as well.
llvm-svn: 19670
|
2005-01-18 19:26:36 +00:00 |
Chris Lattner
|
b07e2d2084
|
Allow setcc operations to have nonbool types.
llvm-svn: 19656
|
2005-01-18 02:52:03 +00:00 |
Chris Lattner
|
2b4b79581d
|
Fix the completely broken FP constant folds for setcc's.
llvm-svn: 19651
|
2005-01-18 02:11:55 +00:00 |
Chris Lattner
|
16f64df93a
|
Refactor code into a new method.
llvm-svn: 19635
|
2005-01-17 17:15:02 +00:00 |
Chris Lattner
|
4e550ebb38
|
Add assertions.
llvm-svn: 19596
|
2005-01-16 02:23:22 +00:00 |
Chris Lattner
|
0fe7776da5
|
Eliminate unneeded extensions.
llvm-svn: 19577
|
2005-01-16 00:17:20 +00:00 |
Chris Lattner
|
630d1937bf
|
Print extra type for nodes with extra type info.
llvm-svn: 19575
|
2005-01-15 21:11:37 +00:00 |
Chris Lattner
|
09d1b3d01d
|
Common code factored out.
llvm-svn: 19572
|
2005-01-15 07:14:32 +00:00 |
Chris Lattner
|
1001c6e2cd
|
Add new SIGN_EXTEND_INREG, ZERO_EXTEND_INREG, and FP_ROUND_INREG operators.
llvm-svn: 19568
|
2005-01-15 06:17:04 +00:00 |
Chris Lattner
|
3b8e719d1d
|
Adjust to CopyFromReg changes, implement deletion of truncating/extending
stores/loads.
llvm-svn: 19562
|
2005-01-14 22:38:01 +00:00 |
Chris Lattner
|
39c6744c9f
|
Start implementing truncating stores and extending loads.
llvm-svn: 19559
|
2005-01-14 22:08:15 +00:00 |
Chris Lattner
|
e727af06c8
|
Add new ImplicitDef node, rename CopyRegSDNode class to RegSDNode.
llvm-svn: 19535
|
2005-01-13 20:50:02 +00:00 |
Chris Lattner
|
4b1be0dfeb
|
Print new node.
llvm-svn: 19526
|
2005-01-13 17:59:10 +00:00 |
Chris Lattner
|
4dfd2cfc0c
|
Do not fold (zero_ext (sign_ext V)) -> (sign_ext V), they are not the same.
This fixes llvm-test/SingleSource/Regression/C/casts.c
llvm-svn: 19519
|
2005-01-12 18:51:15 +00:00 |
Chris Lattner
|
40e7982c2c
|
New method
llvm-svn: 19517
|
2005-01-12 18:37:47 +00:00 |
Chris Lattner
|
844277fb1e
|
Print new operations.
llvm-svn: 19464
|
2005-01-11 05:57:01 +00:00 |
Chris Lattner
|
a86fa4455b
|
shift X, 0 -> X
llvm-svn: 19453
|
2005-01-11 04:25:13 +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
|
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
|
2a6db3c351
|
Add support for FP->INT conversions and back.
llvm-svn: 19369
|
2005-01-08 08:08: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
|
4d5ba99283
|
Simplify: truncate ({zero|sign}_extend (X))
llvm-svn: 19353
|
2005-01-07 21:56:24 +00:00 |
Chris Lattner
|
9c667933c1
|
Implement RemoveDeadNodes
llvm-svn: 19345
|
2005-01-07 21:09:16 +00:00 |
Chris Lattner
|
061a1ea9e3
|
Complete rewrite of the SelectionDAG class.
llvm-svn: 19327
|
2005-01-07 07:46:32 +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 |
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
|
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
|
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 |