| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
use in expanding SCEVAddExprs with GEPs. The operands of a
SCEVMulExpr need to be multiplied together, not added.
llvm-svn: 72250
|
|
|
|
|
|
|
| |
MultiSource/Benchmarks/Prolangs-C/football and a variety of other
failures.
llvm-svn: 72120
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instructions. It attempts to create high-level multi-operand GEPs,
though in cases where this isn't possible it falls back to casting
the pointer to i8* and emitting a GEP with that. Using GEP instructions
instead of ptrtoint+arithmetic+inttoptr helps pointer analyses that
don't use ScalarEvolution, such as BasicAliasAnalysis.
Also, make the AddrModeMatcher more aggressive in handling GEPs.
Previously it assumed that operand 0 of a GEP would require a register
in almost all cases. It now does extra checking and can do more
matching if operand 0 of the GEP is foldable. This fixes a problem
that was exposed by SCEVExpander using GEPs.
llvm-svn: 72093
|
|
|
|
| |
llvm-svn: 70557
|
|
|
|
|
|
|
| |
always folded by the regular constant folder because it doesn't have
TargetData information.
llvm-svn: 70553
|
|
|
|
|
|
|
|
|
|
|
| |
with the persistent insertion point, and change IndVars to make
use of it. This fixes a bug where IndVars was holding on to a
stale insertion point and forcing the SCEVExpander to continue to
use it.
This fixes PR4038.
llvm-svn: 69892
|
|
|
|
| |
llvm-svn: 69816
|
|
|
|
|
|
|
|
|
|
|
| |
instructions in order to avoid inserting new ones. However, if
the cast instruction is the SCEVExpander's InsertPt, this
causes subsequently emitted instructions to be inserted near
the cast, and not at the location of the original insert point.
Fix this by adjusting the insert point in such cases.
This fixes PR4009.
llvm-svn: 69808
|
|
|
|
|
|
| |
to better handle inserting instructions at the end of a block.
llvm-svn: 69807
|
|
|
|
|
|
| |
the code to minimize dependencies on TargetData.
llvm-svn: 69644
|
|
|
|
| |
llvm-svn: 69450
|
|
|
|
| |
llvm-svn: 69310
|
|
|
|
|
|
|
|
| |
size from the integer, requiring zero extension or truncation. Don't
create ZExtInsts with pointer types. This fixes a regression in
consumer-jpeg.
llvm-svn: 69307
|
|
|
|
|
|
|
| |
not create ICmpInsts with operands of different types. This fixes
a regression in Applications/d/make_dparser.
llvm-svn: 69294
|
|
|
|
|
|
| |
and ptrtoint-of-inttoptr expressions. This fixes a regression in 300.twolf.
llvm-svn: 69293
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.
Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.
Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.
llvm-svn: 69258
|
|
|
|
|
|
| |
PR3296 and PR3302.
llvm-svn: 62160
|
|
|
|
| |
llvm-svn: 60407
|
|
|
|
| |
llvm-svn: 57433
|
|
|
|
| |
llvm-svn: 53217
|
|
|
|
| |
llvm-svn: 52614
|
|
|
|
| |
llvm-svn: 52612
|
|
|
|
| |
llvm-svn: 52464
|
|
|
|
|
|
| |
function, and make use of it in several places.
llvm-svn: 52463
|
|
|
|
|
|
|
|
|
|
|
| |
take into account the instrucion pointed by InsertPt. Thanks to it,
returning the new value of InsertPt to the InsertBinop() caller can be
avoided. The bug was, actually, in visitAddRecExpr() method which wasn't
correctly handling changes of InsertPt. There shouldn't be any
performance regression, as -gvn pass (run after -indvars) removes any
redundant binops.
llvm-svn: 52291
|
|
|
|
|
|
|
|
|
| |
Add a safety measure. It isn't safe to assume in ScalarEvolutionExpander that
all loops are in canonical form (but it should be safe for loops that have
AddRecs).
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
llvm-svn: 52275
|
|
|
|
|
|
| |
Legacy interfaces will be in place for some time. (Merge from use-diet branch.)
llvm-svn: 51200
|
|
|
|
|
|
|
|
| |
Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.
llvm-svn: 49277
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Parse reversed smax and umax as smin and umin and express them with negative
or binary-not SCEVs (which are really just subtract under the hood).
Parse 'xor %x, -1' as (-1 - %x).
Remove dead code (ConstantInt::get always returns a ConstantInt).
Don't use getIntegerSCEV(-1, Ty). The first value is an int, then it gets
passed into a uint64_t. Instead, create the -1 directly from
ConstantInt::getAllOnesValue().
llvm-svn: 47360
|
|
|
|
|
|
| |
before we reuse it.
llvm-svn: 46908
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
| |
llvm-svn: 44319
|
|
|
|
|
|
|
| |
SCEV subclasses to being non-static member functions of the ScalarEvolution
class.
llvm-svn: 43224
|
|
|
|
|
|
| |
for consistency with many other transforms.
llvm-svn: 41957
|
|
|
|
|
|
| |
- Move SCEVExpander::expand() out-of-line workarounding possible toolchain bug
llvm-svn: 41197
|
|
|
|
| |
llvm-svn: 37602
|
|
|
|
|
|
|
|
|
|
| |
This created an ambiguity for expandInTy to decide when to use
sign-extension or zero-extension, but it turns out that most of its callers
don't actually need a type conversion, now that LLVM types don't have
explicit signedness. Drop expandInTy in favor of plain expand, and change
the few places that actually need a type conversion to do it themselves.
llvm-svn: 37591
|
|
|
|
|
|
| |
CodeGen/Generic/2007-04-17-lsr-crash.ll
llvm-svn: 36231
|
|
|
|
|
|
| |
less huge code that needs to be cleaned up by sdisel.
llvm-svn: 35959
|
|
|
|
|
|
| |
Constant::isNullValue() in situations where it is possible.
llvm-svn: 34821
|
|
|
|
| |
llvm-svn: 34798
|
|
|
|
|
|
|
| |
Clean up handling of isFloatingPoint() and dealing with PackedType.
Patch by Gordon Henriksen!
llvm-svn: 33415
|
|
|
|
|
|
|
|
|
| |
rename Type::getIntegralTypeMask to Type::getIntegerTypeMask.
This makes naming much more consistent. For example, there are now no longer any
instances of IntegerType that are not considered isInteger! :)
llvm-svn: 33225
|
|
|
|
|
|
|
| |
Merge ConstantIntegral and ConstantBool into ConstantInt.
Remove ConstantIntegral and ConstantBool from LLVM.
llvm-svn: 33073
|
|
|
|
|
|
|
| |
so the decision of which opcode to use is pushed upward to the caller.
Adjust the callers to pass the expected opcode.
llvm-svn: 32535
|
|
|
|
|
|
|
| |
Rename getZeroExtend and getSignExtend to getZExt and getSExt to match
the the casting mnemonics in the rest of LLVM.
llvm-svn: 32514
|
|
|
|
|
|
| |
now cerr, cout, and NullStream resp.
llvm-svn: 32298
|
|
|
|
| |
llvm-svn: 32179
|
|
|
|
|
|
|
| |
adding a temporary wrapper around the ostream to make it friendly to
functions expecting an LLVM stream. This should be fixed in the future.
llvm-svn: 31990
|
|
|
|
|
|
|
|
|
|
| |
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
|