Evan Cheng
535dbf4ffd
Revert 66358 for now. It's breaking povray, 450.soplex, and 456.hmmer on x86 / Darwin.
...
llvm-svn: 66574
2009-03-10 20:47:18 +00:00
Chris Lattner
93662edfb8
Fix PR3763 by using proper APInt methods instead of uint64_t's.
...
llvm-svn: 66434
2009-03-09 20:22:18 +00:00
Chris Lattner
578b634f56
implement an optimization to codegen c ? 1.0 : 2.0 as load { 2.0, 1.0 } + c*4.
...
For 2009-03-07-FPConstSelect.ll we now produce:
_f:
xorl %eax, %eax
testl %edi, %edi
movl $4, %ecx
cmovne %rax, %rcx
leaq LCPI1_0(%rip), %rax
movss (%rcx,%rax), %xmm0
ret
previously we produced:
_f:
subl $4, %esp
cmpl $0, 8(%esp)
movss LCPI1_0, %xmm0
je LBB1_2 ## entry
LBB1_1: ## entry
movss LCPI1_1, %xmm0
LBB1_2: ## entry
movss %xmm0, (%esp)
flds (%esp)
addl $4, %esp
ret
on PPC the code also improves to:
_f:
cntlzw r2, r3
srwi r2, r2, 5
li r3, lo16(LCPI1_0)
slwi r2, r2, 2
addis r3, r3, ha16(LCPI1_0)
lfsx f1, r3, r2
blr
from:
_f:
li r2, lo16(LCPI1_1)
cmplwi cr0, r3, 0
addis r2, r2, ha16(LCPI1_1)
beq cr0, LBB1_2 ; entry
LBB1_1: ; entry
li r2, lo16(LCPI1_0)
addis r2, r2, ha16(LCPI1_0)
LBB1_2: ; entry
lfs f1, 0(r2)
blr
This also improves the existing pic-cpool case from:
foo:
subl $12, %esp
call .Lllvm$1.$piclabel
.Lllvm$1.$piclabel:
popl %eax
addl $_GLOBAL_OFFSET_TABLE_ + [.-.Lllvm$1.$piclabel], %eax
cmpl $0, 16(%esp)
movsd .LCPI1_0@GOTOFF(%eax), %xmm0
je .LBB1_2 # entry
.LBB1_1: # entry
movsd .LCPI1_1@GOTOFF(%eax), %xmm0
.LBB1_2: # entry
movsd %xmm0, (%esp)
fldl (%esp)
addl $12, %esp
ret
to:
foo:
call .Lllvm$1.$piclabel
.Lllvm$1.$piclabel:
popl %eax
addl $_GLOBAL_OFFSET_TABLE_ + [.-.Lllvm$1.$piclabel], %eax
xorl %ecx, %ecx
cmpl $0, 4(%esp)
movl $8, %edx
cmovne %ecx, %edx
fldl .LCPI1_0@GOTOFF(%eax,%edx)
ret
This triggers a few dozen times in spec FP 2000.
llvm-svn: 66358
2009-03-08 01:51:30 +00:00
Nate Begeman
6b41d33726
Fix a problem with DAGCombine on 64b targets where folding
...
extracts + build_vector into a shuffle would fail, because the
type of the new build_vector would not be legal. Try harder to
create a legal build_vector type. Note: this will be totally
irrelevant once vector_shuffle no longer takes a build_vector for
shuffle mask.
New:
_foo:
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
subps %xmm1, %xmm1
mulps %xmm0, %xmm1
addps %xmm0, %xmm1
movaps %xmm1, 0
Old:
_foo:
xorps %xmm0, %xmm0
movss %xmm0, %xmm1
xorps %xmm2, %xmm2
unpcklps %xmm1, %xmm2
pshufd $80, %xmm1, %xmm1
unpcklps %xmm1, %xmm2
pslldq $16, %xmm2
pshufd $57, %xmm2, %xmm1
subps %xmm0, %xmm1
mulps %xmm0, %xmm1
addps %xmm0, %xmm1
movaps %xmm1, 0
llvm-svn: 65791
2009-03-01 23:44:07 +00:00
Evan Cheng
ec34226c2b
Revert BuildVectorSDNode related patches: 65426, 65427, and 65296.
...
llvm-svn: 65482
2009-02-25 22:49:59 +00:00
Scott Michel
3f8637305f
Introduce the BuildVectorSDNode class that encapsulates the ISD::BUILD_VECTOR
...
instruction. The class also consolidates the code for detecting constant
splats that's shared across PowerPC and the CellSPU backends (and might be
useful for other backends.) Also introduces SelectionDAG::getBUID_VECTOR() for
generating new BUILD_VECTOR nodes.
llvm-svn: 65296
2009-02-22 23:36:09 +00:00
Dan Gohman
c9cfc596a3
Fix a bug that David Greene found in the DAGCombiner's logic
...
that checks whether it's safe to transform a store of a bitcast
value into a store of the original value.
llvm-svn: 65201
2009-02-20 23:29:13 +00:00
Scott Michel
4c5fa6c982
Remove trailing whitespace to reduce later commit patch noise.
...
(Note: Eventually, commits like this will be handled via a pre-commit hook that
does this automagically, as well as expand tabs to spaces and look for 80-col
violations.)
llvm-svn: 64827
2009-02-17 22:15:04 +00:00
Dale Johannesen
1580ab6b7f
Remove more non-DebugLoc getNode variants. Use
...
getCALLSEQ_{END,START} to permit passing no DebugLoc
there. UNDEF doesn't logically have DebugLoc; add
getUNDEF to encapsulate this.
llvm-svn: 63978
2009-02-06 23:05:02 +00:00
Dale Johannesen
c405486235
Remove more non-DebugLoc versions of getNode.
...
llvm-svn: 63969
2009-02-06 21:50:26 +00:00
Dale Johannesen
84498c427e
Propagation in TargetLowering. Includes passing a DL
...
into SimplifySetCC which gets called elsewhere.
llvm-svn: 63583
2009-02-03 00:47:48 +00:00
Duncan Sands
cac6cf74f9
Fix PR3453 and probably a bunch of other potential
...
crashes or wrong code with codegen of large integers:
eliminate the legacy getIntegerVTBitMask and
getIntegerVTSignBit methods, which returned their
value as a uint64_t, so couldn't handle huge types.
llvm-svn: 63494
2009-02-01 18:06:53 +00:00
Bill Wendling
518ecfa97c
Forgot some more DebugLoc propagations.
...
llvm-svn: 63493
2009-02-01 11:19:36 +00:00
Duncan Sands
74179a9dde
Fix PR3401: when using large integers, the type
...
returned by getShiftAmountTy may be too small
to hold shift values (it is an i8 on x86-32).
Before and during type legalization, use a large
but legal type for shift amounts: getPointerTy;
afterwards use getShiftAmountTy, fixing up any
shift amounts with a big type during operation
legalization. Thanks to Dan for writing the
original patch (which I shamelessly pillaged).
llvm-svn: 63482
2009-01-31 15:50:11 +00:00
Bill Wendling
679d743429
Don't use DebugLoc::getUnknownLoc(). Default to something hopefully sensible.
...
llvm-svn: 63473
2009-01-31 03:12:48 +00:00
Bill Wendling
33e437d960
More DebugLoc propagation.
...
llvm-svn: 63454
2009-01-30 23:59:18 +00:00
Bill Wendling
191c1bcb0c
More DebugLoc propagation.
...
llvm-svn: 63452
2009-01-30 23:36:47 +00:00
Bill Wendling
061530382c
More DebugLoc propagation in LOAD etc. methods.
...
llvm-svn: 63451
2009-01-30 23:27:35 +00:00
Bill Wendling
8038d99071
More DebugLoc propagation in floating-point methods.
...
llvm-svn: 63446
2009-01-30 23:15:49 +00:00
Bill Wendling
cebc5ac36d
Standardize comments about folding xforms.
...
llvm-svn: 63443
2009-01-30 23:10:18 +00:00
Bill Wendling
67737da99b
Get rid of the non-DebugLoc-ified getNOT() method.
...
llvm-svn: 63442
2009-01-30 23:03:19 +00:00
Bill Wendling
b3ece8cc6f
Propagate debug loc info for some FP arithmetic methods.
...
llvm-svn: 63441
2009-01-30 22:57:07 +00:00
Bill Wendling
00f0882476
Propagate debug loc info for some FP arithmetic methods.
...
llvm-svn: 63440
2009-01-30 22:53:48 +00:00
Bill Wendling
bfa7cfd7c7
Propagate debug loc info for BIT_CONVERT.
...
llvm-svn: 63439
2009-01-30 22:44:24 +00:00
Bill Wendling
c05f48a66d
Propagate debug loc info for more *_EXTEND methods.
...
llvm-svn: 63437
2009-01-30 22:33:24 +00:00
Bill Wendling
ca9c42acf5
Propagate debug loc info for ANY_EXTEND.
...
llvm-svn: 63436
2009-01-30 22:27:33 +00:00
Bill Wendling
5c326f6512
Propagate debug loc info for some of the *_EXTEND functions.
...
llvm-svn: 63434
2009-01-30 22:23:15 +00:00
Bill Wendling
de0da1da41
- Propagate debug loc info for SELECT.
...
- Added xform for (select X, 1, Y) and (select X, Y, 0), which was commented on,
but missing.
llvm-svn: 63428
2009-01-30 22:02:18 +00:00
Bill Wendling
18aa03303b
Propagate debug loc info for Shifts.
...
llvm-svn: 63424
2009-01-30 21:37:17 +00:00
Bill Wendling
8f8bb57472
Propagate debug loc info for XOR and MatchRotate.
...
llvm-svn: 63420
2009-01-30 21:14:50 +00:00
Bill Wendling
d62cec3ba3
Propagate debug loc info for OR. Also clean up some comments.
...
llvm-svn: 63419
2009-01-30 20:59:34 +00:00
Bill Wendling
e74546802d
Perform obvious constant arithmetic folding.
...
llvm-svn: 63417
2009-01-30 20:50:00 +00:00
Bill Wendling
4f61644d4c
Propagate debug loc info for AND. Also clean up some comments.
...
llvm-svn: 63416
2009-01-30 20:43:18 +00:00
Bill Wendling
79d8e31a5a
Propagate debug loc info in SimplifyBinOpWithSameOpcodeHands.
...
llvm-svn: 63411
2009-01-30 19:25:47 +00:00
Bill Wendling
4d923185fc
Propagate debug loc info in SimplifyNodeWithTwoResults.
...
llvm-svn: 63376
2009-01-30 03:08:40 +00:00
Bill Wendling
7067a571ce
Propagate debug loc info for MULHS.
...
llvm-svn: 63375
2009-01-30 03:00:18 +00:00
Bill Wendling
031d7dcfe2
Propagate debug loc info for SREM and UREM.
...
llvm-svn: 63374
2009-01-30 02:57:00 +00:00
Bill Wendling
f4506379ae
Propagate debug loc info for UDIV.
...
llvm-svn: 63373
2009-01-30 02:55:25 +00:00
Bill Wendling
532bb33a10
Propagate debug loc info for SDIV.
...
llvm-svn: 63372
2009-01-30 02:52:17 +00:00
Bill Wendling
577589aa4a
Forgot to propagate debug loc info here.
...
llvm-svn: 63371
2009-01-30 02:49:26 +00:00
Bill Wendling
ff10c16660
Propagate debug loc info for MUL.
...
llvm-svn: 63369
2009-01-30 02:45:56 +00:00
Bill Wendling
a7791b0e4e
Propagate debug loc info in SUB.
...
llvm-svn: 63368
2009-01-30 02:42:10 +00:00
Bill Wendling
665afce822
Propagate debug loc info in ADDC and ADDE.
...
llvm-svn: 63367
2009-01-30 02:38:00 +00:00
Bill Wendling
1ad9d3d9d1
Propagate debug loc info in DAG combine's "ADD".
...
llvm-svn: 63366
2009-01-30 02:31:17 +00:00
Bill Wendling
030f0fced8
- Propagate debug loc info in combineSelectAndUse().
...
- Modify ReassociateOps so that the resulting SDValue is what the comment claims
it is.
llvm-svn: 63365
2009-01-30 02:23:43 +00:00
Bill Wendling
31986c393f
Propagate debug location info for the token factor.
...
llvm-svn: 63355
2009-01-30 01:13:16 +00:00
Bill Wendling
8165903969
Add DebugLoc propagation to some of the methods in DAG combiner.
...
llvm-svn: 63350
2009-01-30 00:45:56 +00:00
Dan Gohman
9d120d6d8f
Make x86's BT instruction matching more thorough, and add some
...
dagcombines that help it match in several more cases. Add
several more cases to test/CodeGen/X86/bt.ll. This doesn't
yet include matching for BT with an immediate operand, it
just covers more register+register cases.
llvm-svn: 63266
2009-01-29 01:59:02 +00:00
Dan Gohman
bc43253a91
Make isOperationLegal do what its name suggests, and introduce a
...
new isOperationLegalOrCustom, which does what isOperationLegal
previously did.
Update a bunch of callers to use isOperationLegalOrCustom
instead of isOperationLegal. In some case it wasn't obvious
which behavior is desired; when in doubt I changed then to
isOperationLegalOrCustom as that preserves their previous
behavior.
This is for the second half of PR3376.
llvm-svn: 63212
2009-01-28 17:46:25 +00:00
Dan Gohman
0400e83ed8
Add an assertion to the form of SelectionDAG::getConstant that takes
...
a uint64_t to verify that the value is in range for the given type,
to help catch accidental overflow. Fix a few places that relied on
getConstant implicitly truncating the value.
llvm-svn: 63128
2009-01-27 20:39:34 +00:00