Reid Spencer
a4415de894
Shut up some compilers that can't accurately analyze variable usage
...
correctly and emit "may be used uninitialized" warnings.
llvm-svn: 32756
2006-12-23 19:17:57 +00:00
Reid Spencer
c9426f9566
For PR1065:
...
Don't allow CmpInst instances to be processed in FoldSelectOpOp because
you can't easily swap their operands.
llvm-svn: 32753
2006-12-23 18:58:04 +00:00
Reid Spencer
4428c3483b
For PR950:
...
This patch removes the SetCC instructions and replaces them with the ICmp
and FCmp instructions. The SetCondInst instruction has been removed and
been replaced with ICmpInst and FCmpInst.
llvm-svn: 32751
2006-12-23 06:05:41 +00:00
Chris Lattner
9e7640cf02
Switch over Transforms/Scalar to use the STATISTIC macro. For each statistic
...
converted, we lose a static initializer. This also allows GCC to emit warnings
about unused statistics.
llvm-svn: 32690
2006-12-19 21:40:18 +00:00
Reid Spencer
f6bd59ba81
Convert the last uses of CastInst::createInferredCast to a normal cast
...
creation. These changes are still temporary but at least this pushes
knowledge of signedness out closer to where it can be determined properly
and allows signedness to be removed from VMCore.
llvm-svn: 32654
2006-12-18 08:47:13 +00:00
Reid Spencer
67cca26f75
Fix a bug in EvaluateInDifferentType. The type of operand should not be
...
used to determine whether a ZExt or SExt cast is performed. Instead, pass
an "isSigned" bool to the function and determine its value from the opcode
of the cast involved.
Also, clean up some cruft from previous patches.
llvm-svn: 32548
2006-12-13 18:21:21 +00:00
Reid Spencer
8479bb2735
Implement review feedback. Most of this has to do with removing unnecessary
...
cast instructions. A few are bug fixes.
llvm-svn: 32544
2006-12-13 17:19:09 +00:00
Reid Spencer
a9a637d6e2
For mul transforms, when checking for a cast from bool as either operand,
...
make sure to also check that it is a zext from bool, not any other cast
operation type.
llvm-svn: 32539
2006-12-13 08:33:33 +00:00
Reid Spencer
32b08ba50f
Fix and/or/xor (cast A), (cast B) --> cast (and/or/xor A, B)
...
The cast patch introduced the possibility that the wrong cast opcode
could be used and that this transform could trigger on different kinds
of cast operations. This patch rectifies that.
llvm-svn: 32538
2006-12-13 08:27:15 +00:00
Reid Spencer
0e981c9088
Replace inferred getCast(V,Ty) calls with more strict variants.
...
Rename getZeroExtend and getSignExtend to getZExt and getSExt to match
the the casting mnemonics in the rest of LLVM.
llvm-svn: 32514
2006-12-12 23:36:14 +00:00
Chris Lattner
6ff0a2a18d
this can be trunc or bitcast, per line 3092.
...
llvm-svn: 32487
2006-12-12 19:11:20 +00:00
Chris Lattner
2f28a1e015
Fix regression on 400.perlbench last night.
...
llvm-svn: 32486
2006-12-12 18:41:03 +00:00
Reid Spencer
3ac324ab41
Fix numerous inferred casts.
...
llvm-svn: 32479
2006-12-12 09:18:51 +00:00
Bill Wendling
a3246c4272
Changed llvm_ostream et all to OStream. llvm_cerr, llvm_cout, llvm_null, are
...
now cerr, cout, and NullStream resp.
llvm-svn: 32298
2006-12-07 01:30:32 +00:00
Reid Spencer
ff6cd88f93
Update ConstantIntegral Max/Min tests for new interface.
...
llvm-svn: 32288
2006-12-06 20:39:57 +00:00
Chris Lattner
a531ce882e
Detemplatize the Statistic class. The only type it is instantiated with
...
is 'unsigned'.
llvm-svn: 32279
2006-12-06 17:46:33 +00:00
Chris Lattner
e0738f8f8b
add an instcombine xform. This speeds up 462.libquantum from 9.78s to
...
7.48s. This regression is due to unforseen consequences of the cast patch.
llvm-svn: 32209
2006-12-05 01:26:29 +00:00
Reid Spencer
d727d239f8
Update call to CastInst::getCastOpcode for its new signature.
...
llvm-svn: 32166
2006-12-04 02:48:01 +00:00
Chris Lattner
1629b0d995
disable transformations that are invalid for fp vectors. This fixes
...
Transforms/InstCombine/2006-12-01-BadFPVectorXform.ll
llvm-svn: 32112
2006-12-02 00:13:08 +00:00
Reid Spencer
529fb41272
Remove 4 FIXMEs to hack around cast-to-bool problems which no longer exist.
...
llvm-svn: 32051
2006-11-30 23:13:36 +00:00
Chris Lattner
2fd5719f50
implement cast.ll:test35. With this, we recognize:
...
unsigned short swp(unsigned short a) {
return ((a & 0xff00) >> 8 | (a & 0x00ff) << 8);
}
as an idiom for bswap.
llvm-svn: 32011
2006-11-29 07:18:39 +00:00
Chris Lattner
03fdea2e74
Teach instcombine to turn trunc(srl x, c) -> srl (trunc(x), c) when safe.
...
This implements InstCombine/cast.ll:test34. It fires hundreds of times on
176.gcc.
llvm-svn: 32009
2006-11-29 07:04:07 +00:00
Chris Lattner
0409f2c48d
Implement Regression/Transforms/InstCombine/bswap-fold.ll,
...
folding seteq (bswap(x)), c -> seteq(x,bswap(c))
llvm-svn: 32006
2006-11-29 05:02:16 +00:00
Reid Spencer
a866877d2f
Join a split line.
...
llvm-svn: 31996
2006-11-29 01:11:01 +00:00
Reid Spencer
c48fe0fd4d
Undo the last patch until 253.perlbmk passes with these changes.
...
llvm-svn: 31977
2006-11-28 20:23:51 +00:00
Reid Spencer
8587322e79
Remove 4 FIXME's from the CAST patch now that the back end is correctly
...
producing code for "trunc to bool". This passes all tests on Linux.
llvm-svn: 31963
2006-11-28 07:23:01 +00:00
Chris Lattner
b391cbb939
Fix PR1014 and InstCombine/2006-11-27-XorBug.ll.
...
llvm-svn: 31941
2006-11-27 19:55:07 +00:00
Reid Spencer
992d9788b3
For PR950:
...
The long awaited CAST patch. This introduces 12 new instructions into LLVM
to replace the cast instruction. Corresponding changes throughout LLVM are
provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the
exception of 175.vpr which fails only on a slight floating point output
difference.
llvm-svn: 31931
2006-11-27 01:05:10 +00:00
Bill Wendling
1b3a86000a
Removed #include <iostream> and replaced with llvm_* streams.
...
llvm-svn: 31923
2006-11-26 09:46:52 +00:00
Chris Lattner
632c66b8ef
This xform is handled by FoldOpIntoPhi in visitCastInst in a more elegant way.
...
llvm-svn: 31889
2006-11-21 17:05:13 +00:00
Chris Lattner
0a2d29b345
Fix a gcc 4.2 warning.
...
llvm-svn: 31751
2006-11-15 04:53:24 +00:00
Chris Lattner
0114b0c20e
implement InstCombine/shift-simplify.ll by transforming:
...
(X >> Z) op (Y >> Z) -> (X op Y) >> Z
for all shifts and all ops={and/or/xor}.
llvm-svn: 31729
2006-11-14 07:46:50 +00:00
Chris Lattner
616335f272
implement InstCombine/and-compare.ll:test1. This compiles:
...
typedef struct { unsigned prefix : 4; unsigned code : 4; unsigned unsigned_p : 4; } tree_common;
int foo(tree_common *a, tree_common *b) { return a->code == b->code; }
into:
_foo:
movl 4(%esp), %eax
movl 8(%esp), %ecx
movl (%eax), %eax
xorl (%ecx), %eax
# TRUNCATE movb %al, %al
shrb $4, %al
testb %al, %al
sete %al
movzbl %al, %eax
ret
instead of:
_foo:
movl 8(%esp), %eax
movb (%eax), %al
shrb $4, %al
movl 4(%esp), %ecx
movb (%ecx), %cl
shrb $4, %cl
cmpb %al, %cl
sete %al
movzbl %al, %eax
ret
saving one cycle by eliminating a shift.
llvm-svn: 31727
2006-11-14 06:06:06 +00:00
Chris Lattner
65a873caa2
Fix InstCombine/2006-11-10-ashr-miscompile.ll a miscompilation introduced
...
by the shr -> [al]shr patch. This was reduced from 176.gcc.
llvm-svn: 31653
2006-11-10 23:38:52 +00:00
Chris Lattner
cd3c5f59e2
Teach ShrinkDemandedConstant how to handle X+C. This implements:
...
add.ll:test33, add.ll:test34, shift-sra.ll:test2
llvm-svn: 31586
2006-11-09 05:12:27 +00:00
Chris Lattner
d1bcd014a8
reenable factoring of GEP expressions, being more precise about the
...
case that it bad to do.
llvm-svn: 31563
2006-11-08 19:42:28 +00:00
Chris Lattner
77e0e67f23
make this code more efficient by not creating a phi node we are just going to
...
delete in the first place. This also makes it simpler.
llvm-svn: 31562
2006-11-08 19:29:23 +00:00
Chris Lattner
f2cd0aeced
disable this factoring optzn for GEPs for now, this severely pessimizes some
...
loops.
llvm-svn: 31560
2006-11-08 18:49:31 +00:00
Reid Spencer
da1f5b882a
For PR950:
...
This patch converts the old SHR instruction into two instructions,
AShr (Arithmetic) and LShr (Logical). The Shr instructions now are not
dependent on the sign of their operands.
llvm-svn: 31542
2006-11-08 06:47:33 +00:00
Andrew Lenharth
c2f822392c
The wrong parameter was being tested to deturmine i32 vs i64
...
llvm-svn: 31431
2006-11-03 22:45:50 +00:00
Reid Spencer
4bafa71dc1
For PR786:
...
Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining
issues when they see them. All changes pass DejaGnu tests and Olden.
llvm-svn: 31380
2006-11-02 20:25:50 +00:00
Reid Spencer
1abf69e923
For PR950:
...
Replace the REM instruction with UREM, SREM and FREM.
llvm-svn: 31369
2006-11-02 01:53:59 +00:00
Chris Lattner
2cedfa5156
Factor gep instructions through phi nodes.
...
llvm-svn: 31346
2006-11-01 07:43:41 +00:00
Chris Lattner
61ea2af8fe
Turn a phi of many loads into a phi of the address and a single load of the
...
result. This can significantly shrink code and exposes identities more
aggressively.
llvm-svn: 31344
2006-11-01 07:13:54 +00:00
Chris Lattner
e43c3b1681
Fix a bug in the previous patch
...
llvm-svn: 31342
2006-11-01 04:55:47 +00:00
Chris Lattner
7211110992
Fold things like "phi [add (a,b), add(c,d)]" into two phi's and one add.
...
This triggers thousands of times on multisource.
llvm-svn: 31341
2006-11-01 04:51:18 +00:00
Reid Spencer
4665cb220d
Simplify code a bit by changing instances of:
...
InsertNewInstBefore(new CastInst(Val, ValTy, Val->GetName()), I)
into:
InsertCastBefore(Val, ValTy, I)
llvm-svn: 31204
2006-10-26 19:19:06 +00:00
Reid Spencer
6833ffe8b8
For PR950:
...
Make necessary changes to support DIV -> [SUF]Div. This changes llvm to
have three division instructions: signed, unsigned, floating point. The
bytecode and assembler are bacwards compatible, however.
llvm-svn: 31195
2006-10-26 06:15:43 +00:00
Chris Lattner
38ed7d9e49
Fix miscompilation of MallocBench/espresso which code review pointed out
...
but apparently didn't make it into the final patch.
llvm-svn: 31070
2006-10-20 18:20:21 +00:00
Reid Spencer
d414793dbc
For PR950:
...
This patch implements the first increment for the Signless Types feature.
All changes pertain to removing the ConstantSInt and ConstantUInt classes
in favor of just using ConstantInt.
llvm-svn: 31063
2006-10-20 07:07:24 +00:00