Commit Graph

21997 Commits

Author SHA1 Message Date
Evan Cheng
d3713a9b9a Prevent folding of a node with multiple uses if the node already folds a load!
Here is an example where the load ended up being done twice:

%A = global uint 0

uint %test(uint %B, ubyte %C) {
	%tmp = load uint *%A;
	%X = shl uint %tmp, ubyte %C
	%Cv = sub ubyte 32, %C
	%Y = shr uint %B, ubyte %Cv
	%Z = or uint %Y, %X
	store uint %Z, uint* %A
	ret uint %Z
}

==>

	subl $4, %esp
	movl %ebx, (%esp)
	movl 8(%esp), %edx
	movl A, %eax
	movb 12(%esp), %bl
	movb %bl, %cl
	shldl %cl, %edx, %eax
	movb %bl, %cl
	shldl %cl, %edx, A
	movl (%esp), %ebx
	addl $4, %esp
	ret

llvm-svn: 25471
2006-01-20 01:11:03 +00:00
Robert Bocchino
40c6c91f56 ConstantFoldLoadThroughGEPConstantExpr wasn't handling pointers to
packed types correctly.

llvm-svn: 25470
2006-01-19 23:53:23 +00:00
Evan Cheng
d2c0ccedd3 Didn't mean to commit the last one.
llvm-svn: 25469
2006-01-19 23:27:08 +00:00
Evan Cheng
e0f6454c5e Added i16 SH{L|R}D patterns.
llvm-svn: 25468
2006-01-19 23:26:24 +00:00
Chris Lattner
3158146649 add support for ConstantPacked to the linker
llvm-svn: 25467
2006-01-19 23:15:58 +00:00
Chris Lattner
38c4921912 Don't include generated lexer .cpp files.
llvm-svn: 25466
2006-01-19 22:01:51 +00:00
Evan Cheng
4a3ee9d5a6 Bug fix. Flag operand number may be calculated incorrectly.
llvm-svn: 25465
2006-01-19 21:57:10 +00:00
Andrew Lenharth
96520cb68d typo
llvm-svn: 25464
2006-01-19 21:10:38 +00:00
Andrew Lenharth
9abecccdcb nasty nasty patterns
llvm-svn: 25463
2006-01-19 20:49:37 +00:00
Duraid Madina
069b517767 fix boolean XOR (which fixes up comparisons..)
llvm-svn: 25462
2006-01-19 15:18:56 +00:00
Duraid Madina
4b75614c9c BOOM!
llvm-svn: 25460
2006-01-19 14:14:11 +00:00
Duraid Madina
08771721f9 click click
llvm-svn: 25459
2006-01-19 14:13:11 +00:00
Evan Cheng
f168c680e5 Use pattern information to determine whether the use expects this
instruction to produce a result. e.g MUL8m, the instruction does not
produce a explicit result. However it produces an implicit result in
AL which would be copied to a temp. The root operator of the matching
pattern is a mul so the use would expect it to produce a result.

llvm-svn: 25458
2006-01-19 10:12:58 +00:00
Evan Cheng
680a8e070b Avoid generating a redundant setcc.
llvm-svn: 25457
2006-01-19 08:52:46 +00:00
Reid Spencer
585019f629 For PR696:
Don't do floor->floorf conversion if floorf is not available. This checks
the compiler's host, not its target, which is incorrect for cross-compilers
Not sure that's important as we don't build many cross-compilers.

llvm-svn: 25456
2006-01-19 08:36:56 +00:00
Duraid Madina
1946b2ff30 fix calls that return f32
llvm-svn: 25455
2006-01-19 08:31:51 +00:00
Reid Spencer
ae31d4858b Make sure that libm is used during config tests so that ceil, floor, and
friends are actually detected.

llvm-svn: 25454
2006-01-19 08:31:08 +00:00
Reid Spencer
effe3e54e4 For PR696:
Add checks for ceil, ceilf, floor, and floorf

llvm-svn: 25453
2006-01-19 08:22:40 +00:00
Chris Lattner
6e4d8741d5 Implement casts.ll:test26: a cast from float -> double -> integer, doesn't
need the float->double part.

llvm-svn: 25452
2006-01-19 07:40:22 +00:00
Chris Lattner
ad5c08f99e Add a new testcase for an eliminable cast
llvm-svn: 25451
2006-01-19 07:39:20 +00:00
Chris Lattner
b15de45374 implement support for f32 arguments past the first 6 words
llvm-svn: 25450
2006-01-19 07:22:29 +00:00
Reid Spencer
7af5947344 This test passes now.
llvm-svn: 25449
2006-01-19 07:15:47 +00:00
Reid Spencer
f2454f5cd2 1. Identify bytecode modules that have upgraded intrinsics by setting a
boolean flag if we read a function prototype that needs upgrading.
2. Don't upgrade the CallInst instruction until after its been inserted
   into the basic block, and only if we know that we have seen an
   upgraded intrinsic function.

llvm-svn: 25448
2006-01-19 07:02:16 +00:00
Reid Spencer
ff84512a3f Don't forget about casting the result of an upgraded call to an intrinsic
in the case where it needs to cast back to a signed type.

llvm-svn: 25447
2006-01-19 07:00:29 +00:00
Reid Spencer
c2e3662a89 1. Documentation upgrade.
2. Have UpgradeInstrinicCall return an Instruction* instead of a CallInst*
   and return the needed CastInst* if the result of the upgraded call needs
   to be casted back to a signed type.

llvm-svn: 25446
2006-01-19 06:59:26 +00:00
Reid Spencer
997e2d7b3c Add a flag to identify bytecode files that have intrinsic functions that
need to be upgraded.

llvm-svn: 25445
2006-01-19 06:57:58 +00:00
Evan Cheng
cfe9d47379 adc and sbb need an incoming flag to ensure it reads the carry flag
from add / sub.

llvm-svn: 25444
2006-01-19 06:53:20 +00:00
Chris Lattner
8d6787c392 make this work for Reid, who renamed his CVS module dir :)
llvm-svn: 25443
2006-01-19 06:49:46 +00:00
Chris Lattner
49bc00e644 new testcase the autoupgrader in the bc reader fails to handle
llvm-svn: 25442
2006-01-19 06:15:34 +00:00
Reid Spencer
8fd4d8e166 Make get_suffix faster by using a switch on getTypeID rather than a series
of comparisons on the various type objects.

llvm-svn: 25441
2006-01-19 05:37:27 +00:00
Evan Cheng
3f6b496700 Another typo
llvm-svn: 25440
2006-01-19 04:54:52 +00:00
Chris Lattner
60bc56e930 add a note
llvm-svn: 25439
2006-01-19 02:09:38 +00:00
Evan Cheng
be2cf5f948 Two peepholes:
(or (x >> c) | (y << (32 - c))) ==> (shrd x, y, c)
(or (x << c) | (y >> (32 - c))) ==> (shld x, y, c)

llvm-svn: 25438
2006-01-19 01:56:29 +00:00
Evan Cheng
49fa8f2cea Prevent unnecessary CopyToReg when the same HW register appears in two spots
in the pattern.

llvm-svn: 25437
2006-01-19 01:55:45 +00:00
Evan Cheng
ddb170b73e Didn't mean to check that in.
llvm-svn: 25436
2006-01-19 01:52:56 +00:00
Evan Cheng
aebece2f7b A obvious typo
llvm-svn: 25435
2006-01-19 01:46:14 +00:00
Reid Spencer
fd0ae0047a Make sure intrinsic auto-upgrade is invoked correctly.
llvm-svn: 25434
2006-01-19 01:21:04 +00:00
Reid Spencer
e14cf26e04 Don't accept the ctpop, cttz, or ctlz intrinsics with signed arguments. The
interface requires unsigned arguments.

llvm-svn: 25433
2006-01-19 01:20:03 +00:00
Reid Spencer
7ee9a0016a Add a new interface function to AutoUpgrade for simultaneously upgrading
the Function and the CallInst: UpgradeCallsToIntrinsic(Function*). Also,
re-factor the AutoUpgrade implementation to eliminate some duplication of
code.

llvm-svn: 25432
2006-01-19 01:18:29 +00:00
Reid Spencer
21bfb7f6cb Expand test to cover the non-overloaded variants of the arithmetic and
floating point intrinsics.

llvm-svn: 25431
2006-01-19 01:17:06 +00:00
Chris Lattner
d5a7ceda96 If not internalizing, don't mark llvm.global[cd]tors const, as a fix for a
hypothetical future boog.

llvm-svn: 25430
2006-01-19 00:46:54 +00:00
Chris Lattner
197d33ce21 Don't internalize llvm.global[cd]tor unless there are uses of it. This
unbreaks front-ends that don't use __main (like the new CFE).

llvm-svn: 25429
2006-01-19 00:40:39 +00:00
Andrew Lenharth
c7a7422412 was ignoring the legalized chain in this case, fixed SPASS on alpha
llvm-svn: 25428
2006-01-18 23:19:08 +00:00
Andrew Lenharth
00b74b6d92 a reduced test case, the GlobalAddress is never legalized
llvm-svn: 25427
2006-01-18 22:59:33 +00:00
Nate Begeman
6b2bebd70a Get rid of code in the DAGCombiner that is duplicated in SelectionDAG.cpp
Now all constant folding in the code generator is in one place.

llvm-svn: 25426
2006-01-18 22:35:16 +00:00
Chris Lattner
9bc0f6cd90 Temporary work around for a libcall insertion bug: If a target doesn't
support FSIN/FCOS nodes, do not lower sin/cos to them.

llvm-svn: 25425
2006-01-18 21:50:14 +00:00
Chris Lattner
f7623e2065 Make sure that cloning a module clones its target triple and dependent
library list as well.  This should help bugpoint.

llvm-svn: 25424
2006-01-18 21:32:45 +00:00
Chris Lattner
23da2dc2ac Don't assert on 'select_cc SETUO'
llvm-svn: 25423
2006-01-18 19:42:35 +00:00
Chris Lattner
00a483f966 fix out of date comment
llvm-svn: 25422
2006-01-18 19:37:44 +00:00
Chris Lattner
b0d3080ca8 Fix Regression/CodeGen/PowerPC/2006-01-18-InvalidBranchOpcodeAssert.ll
llvm-svn: 25421
2006-01-18 19:35:21 +00:00