Nick Lewycky
5f274047bd
Treat BBs that use BBs as proper predecessors and successors in the CFG.
...
llvm-svn: 47989
2008-03-06 06:54:53 +00:00
Dale Johannesen
8322b6fb70
Clarify that CALLSEQ_START..END may not be nested,
...
and add some protection against creating such.
llvm-svn: 47957
2008-03-05 19:14:03 +00:00
Evan Cheng
e0b3c221ab
Add a target lowering hook to control whether it's worthwhile to compress fp constant.
...
For x86, if sse2 is available, it's not a good idea since cvtss2sd is slower than a movsd load and it prevents load folding. On x87, it's important to shrink fp constant since fldt is very expensive.
llvm-svn: 47931
2008-03-05 01:30:59 +00:00
Dan Gohman
b987fe16e4
Codegen support for i128 SINT_TO_FP.
...
llvm-svn: 47928
2008-03-05 01:08:17 +00:00
Evan Cheng
18064ddb5b
Refactor code. Remove duplicated functions that basically do the same thing as
...
findRegisterUseOperandIdx, findRegisterDefOperandIndx. Fix some naming inconsistencies.
llvm-svn: 47927
2008-03-05 00:59:57 +00:00
Devang Patel
26d0fac377
Revert SmallVector ctor variants.
...
llvm-svn: 47908
2008-03-04 21:54:56 +00:00
Devang Patel
27426dedc0
Add FunctionType ctor variant that takes SmallVector params.
...
llvm-svn: 47895
2008-03-04 18:57:05 +00:00
Evan Cheng
acb7d77409
Fix 80 column violations.
...
llvm-svn: 47877
2008-03-04 03:19:19 +00:00
Evan Cheng
b5b16810ac
Rename isOperand() to isOperandOf() (and other similar methods). It always confuses me.
...
llvm-svn: 47872
2008-03-04 00:41:45 +00:00
Bill Wendling
8d64999daf
This is the initial check-in for adding register scavenging to PPC. (Currently,
...
PPC-64 doesn't work.) This also lowers the spilling of the CR registers so that
it uses a register other than the default R0 register (the scavenger scrounges
for one). A significant part of this patch fixes how kill information is
handled.
llvm-svn: 47863
2008-03-03 22:19:16 +00:00
Devang Patel
d0d7028a2b
s/isReturnStruct()/hasStructRetAttr()/g
...
llvm-svn: 47857
2008-03-03 21:46:28 +00:00
Chris Lattner
5b84600196
Stub out a Path::GetMainExecutable call to find the path to the
...
main executable of a program. This needs to be implemented on windows.
llvm-svn: 47835
2008-03-03 02:55:43 +00:00
Chris Lattner
d1fc75add0
make operand accessors const-correct
...
llvm-svn: 47814
2008-03-02 05:32:05 +00:00
Chris Lattner
ffde7a642a
Add a new ShuffleVectorInst::getMaskValue method.
...
llvm-svn: 47813
2008-03-02 05:28:33 +00:00
Nick Lewycky
b02fe64d8b
Add an unwind_to field to basic blocks, making them Users instead of Values.
...
This is the first checkin for PR1269, the new EH infrastructure.
llvm-svn: 47802
2008-03-02 02:48:09 +00:00
Dale Johannesen
cfd005f2ea
Add MVT::is128BitVector and is64BitVector. Shrink
...
unaligned load/store code using them. Per review
of unaligned load/store vector patch.
llvm-svn: 47782
2008-03-01 03:40:57 +00:00
Devang Patel
cb72d92471
Add pass to promote sret.
...
This pass transforms
%struct._Point = type { i32, i32, i32, i32, i32, i32 }
define internal void @foo(%struct._Point* sret %agg.result)
into
%struct._Point = type { i32, i32, i32, i32, i32, i32 }
define internal %struct._Point @foo()
This pass updates foo() clients appropriately to use
getresult instruction to extract return values.
This pass is not yet ready for prime time.
llvm-svn: 47776
2008-02-29 23:34:08 +00:00
Anton Korobeynikov
875da2420a
Use enumeration for preffered EH dwarf encoding reason
...
llvm-svn: 47770
2008-02-29 22:09:08 +00:00
Evan Cheng
5beb036eab
Don't fill eh frames even though these are text sections.
...
llvm-svn: 47765
2008-02-29 19:36:59 +00:00
Dan Gohman
2b8022a8c6
Add support to APInt for shift and rotate operations with APInt
...
instead of uint32_t for the shift/rotate count operand type.
llvm-svn: 47741
2008-02-29 01:40:47 +00:00
Dan Gohman
45a26a462f
Add a method to APFloat to convert directly from APInt.
...
llvm-svn: 47738
2008-02-29 01:26:11 +00:00
Dale Johannesen
310201ba32
Interface of getByValTypeAlignment differed between
...
generic & x86 versions; change generic to follow x86
and improve comments. Add PPC version (not right
for non-Darwin.)
llvm-svn: 47734
2008-02-28 22:31:51 +00:00
Duncan Sands
6a4acca399
Document that the shuffle mask may contain undef
...
values.
llvm-svn: 47719
2008-02-28 17:12:11 +00:00
Evan Cheng
f8b1257d2e
Add a quick and dirty "loop aligner pass". x86 uses it to align its loops to 16-byte boundaries.
...
llvm-svn: 47703
2008-02-28 00:43:03 +00:00
Devang Patel
351830e819
Remove dead code.
...
llvm-svn: 47700
2008-02-27 23:33:51 +00:00
Anton Korobeynikov
7bd4b77e30
Preparation step for some cleanup/generalization in EH information emission:
...
provide TAI hook for selection of EH data emission format. Currently unused.
llvm-svn: 47699
2008-02-27 23:33:50 +00:00
Anton Korobeynikov
ecfe55a801
Assert on invalid PHINode::addIncoming() arguments. Patch by Erick Tryzelaar!
...
llvm-svn: 47697
2008-02-27 22:37:28 +00:00
Nick Kledzik
f32192eb76
fixes from review of first commit
...
llvm-svn: 47695
2008-02-27 22:25:36 +00:00
Evan Cheng
da92e34fe3
Fix a bug in dead spill slot elimination.
...
llvm-svn: 47687
2008-02-27 19:57:11 +00:00
Dan Gohman
0cfccf801d
Add -analyze support to postdomtree.
...
llvm-svn: 47680
2008-02-27 18:38:29 +00:00
Duncan Sands
cadfe810f3
LegalizeTypes support for INSERT_VECTOR_ELT.
...
llvm-svn: 47669
2008-02-27 10:18:23 +00:00
Evan Cheng
295ae42ede
Don't track max alignment during stack object allocations since they can be deleted later. Let PEI compute it.
...
llvm-svn: 47668
2008-02-27 10:04:56 +00:00
Bill Wendling
2cae66e28b
Final de-tabification.
...
llvm-svn: 47663
2008-02-27 06:33:05 +00:00
Chris Lattner
d2a01e1994
Add path separator support, patch by Sam Bishop.
...
llvm-svn: 47662
2008-02-27 06:17:10 +00:00
Evan Cheng
7553230e3a
Spiller now remove unused spill slots.
...
llvm-svn: 47657
2008-02-27 03:04:06 +00:00
Dan Gohman
938e74654b
Convert the last remaining users of the non-APInt form of
...
ComputeMaskedBits to use the APInt form, and remove the
non-APInt form.
llvm-svn: 47654
2008-02-27 01:23:58 +00:00
Devang Patel
c68e26f9fe
Add comment.
...
llvm-svn: 47653
2008-02-27 01:20:54 +00:00
Dan Gohman
689d8cac04
Convert SimplifyDemandedMask and ShrinkDemandedConstant to use APInt.
...
Change several cases in SimplifyDemandedMask that don't ever do any
simplifying to reuse the logic in ComputeMaskedBits instead of
duplicating it.
llvm-svn: 47648
2008-02-27 00:25:32 +00:00
Devang Patel
5c00c6bafa
Remove unncessary ReturnInst constructors.
...
llvm-svn: 47633
2008-02-26 22:12:58 +00:00
Bill Wendling
8fb166bf6c
Rename PrintableName to Name.
...
llvm-svn: 47629
2008-02-26 21:47:57 +00:00
Anton Korobeynikov
ba0d97969e
Update per review. Patch by Mikhail Glushenkov!
...
llvm-svn: 47628
2008-02-26 21:44:24 +00:00
Bill Wendling
50f5c4be14
Change "Name" to "AsmName" in the target register info. Gee, a refactoring tool
...
would have been a Godsend here!
llvm-svn: 47625
2008-02-26 21:11:01 +00:00
Nick Kledzik
7ebb5aa81a
first commit of new LTO system. It is not hooked up in the llvm/tools/Makefile, so no one will build it be default yet
...
llvm-svn: 47621
2008-02-26 20:26:43 +00:00
Devang Patel
0be97b2118
Use SmallVector while constructing ReturnInst.
...
llvm-svn: 47619
2008-02-26 19:38:17 +00:00
Devang Patel
e5766a12da
Avoid const_casts
...
llvm-svn: 47616
2008-02-26 19:15:26 +00:00
Devang Patel
6d492c3caf
Remove unnecessary getOperand/setOperand overriders.
...
Simplify getReturnValue()
llvm-svn: 47614
2008-02-26 19:08:13 +00:00
Devang Patel
e0f9c6f281
Unify to ReturnInst::init() member functions.
...
llvm-svn: 47611
2008-02-26 18:49:29 +00:00
Devang Patel
b35d15edf9
Optimize most common case by using single RetVal in ReturnInst.
...
llvm-svn: 47607
2008-02-26 17:56:20 +00:00
Bill Wendling
ebb707d162
Detabify
...
llvm-svn: 47597
2008-02-26 10:49:39 +00:00
Evan Cheng
40c26c71c0
Refactor inline asm constraint matching code out of SDIsel into TargetLowering.
...
llvm-svn: 47587
2008-02-26 02:33:44 +00:00
Devang Patel
5b3d61f5ed
Pass const vectors by reference.
...
llvm-svn: 47577
2008-02-26 00:12:13 +00:00
Eli Friedman
c1fb49b19f
Add missing include (for ptrdiff_t).
...
llvm-svn: 47576
2008-02-25 23:35:32 +00:00
Dan Gohman
4089604796
Factor the assert for indexed loads/stores out of LoadSDNode
...
and StoreSDNode into LSBaseSDNode.
llvm-svn: 47570
2008-02-25 22:16:29 +00:00
Chris Lattner
6292d580de
add an assertion to catch a null PATypeHolder, patch by Erick Tryzelaar
...
llvm-svn: 47563
2008-02-25 21:28:46 +00:00
Dan Gohman
012abf0109
Convert MaskedValueIsZero and all its users to use APInt. Also add
...
a SignBitIsZero function to simplify a common use case.
llvm-svn: 47561
2008-02-25 21:11:39 +00:00
Chris Lattner
a2c10fa860
add LSBaseSDNode::getOffset at Dan's request.
...
llvm-svn: 47558
2008-02-25 19:31:21 +00:00
Chris Lattner
9fb1d740a6
prune #includes, fit in 80 cols.
...
llvm-svn: 47556
2008-02-25 19:21:38 +00:00
Chris Lattner
93caf1f29d
make this self contained.
...
llvm-svn: 47555
2008-02-25 19:20:57 +00:00
Dan Gohman
4f288e3298
Add a new method to SDNode/SDOperand named getValueSizeInBits
...
that combines getValueType and MVT::getSizeInBits, since this
occurrs frequently.
llvm-svn: 47552
2008-02-25 19:08:02 +00:00
Evan Cheng
fc540545f1
Correctly determine whether a argument load can be folded into its uses.
...
llvm-svn: 47545
2008-02-25 08:50:41 +00:00
Bill Wendling
a369a6add8
Some platforms use the same name for 32-bit and 64-bit registers (like
...
%r3 on PPC) in their ASM files. However, it's hard for humans to read
during debugging. Adding a new field to the register data that lets you
specify a different name to be printed than the one that goes into the
ASM file -- %x3 instead of %r3, for instance.
llvm-svn: 47534
2008-02-24 00:56:13 +00:00
Scott Michel
36bbc39272
Merge current work back to tree to minimize diffs and drift. Major highlights
...
for CellSPU modifications:
- SPUInstrInfo.td refactoring: "multiclass" really is _your_ friend.
- Other improvements based on refactoring effort in SPUISelLowering.cpp,
esp. in SPUISelLowering::PerformDAGCombine(), where zero amount shifts and
rotates are now eliminiated, other scalar-to-vector-to-scalar silliness
is also eliminated.
- 64-bit operations are being implemented, _muldi3.c gcc runtime now
compiles and generates the right code. More work still needs to be done.
llvm-svn: 47532
2008-02-23 18:41:37 +00:00
Devang Patel
a56b43b442
Remove unnecessary "inline" keywords.
...
llvm-svn: 47516
2008-02-23 01:11:02 +00:00
Devang Patel
63d29fccdf
Use dyn_cast instead of isa + cast.
...
llvm-svn: 47511
2008-02-23 00:47:00 +00:00
Evan Cheng
676068324b
Forgot this.
...
llvm-svn: 47510
2008-02-23 00:46:11 +00:00
Devang Patel
f674975a65
To support multiple return values, now ret instruction supports multiple operands instead of one aggregate operand.
...
llvm-svn: 47508
2008-02-23 00:35:18 +00:00
Dale Johannesen
ae08bdb4cf
Split ParameterAttributes.h, putting the complicated
...
stuff into ParamAttrsList.h. Per feedback from
ParamAttrs changes.
llvm-svn: 47504
2008-02-22 22:17:59 +00:00
Evan Cheng
c7ef6dc2db
Remove an invalid assertion now that there are implicit virtual register operands.
...
llvm-svn: 47493
2008-02-22 19:25:04 +00:00
Devang Patel
f7d8b7679b
Add StripDeadPrototypes pass.
...
llvm-svn: 47488
2008-02-22 18:39:29 +00:00
Dale Johannesen
a96eb3a1d8
Pass alignment on ByVal parameters, from FE, all
...
the way through. It is now used for codegen.
llvm-svn: 47484
2008-02-22 17:49:45 +00:00
Anton Korobeynikov
fd4b209731
Add smart refcounting pointer class to ADT back (known before as IntrusiveSPtr.h).
...
llvm-svn: 47482
2008-02-22 17:26:05 +00:00
Anton Korobeynikov
5eaa8e774e
Unbreak build for VC2008. Patch by Argiris Kirtzidis!
...
llvm-svn: 47480
2008-02-22 10:11:21 +00:00
Evan Cheng
fa73e0c64e
Enable re-materialization of instructions which have virtual register operands if
...
the definition of the operand also reaches its uses.
llvm-svn: 47475
2008-02-22 09:24:50 +00:00
Devang Patel
8ae63af4b1
Read and write getresult.
...
llvm-svn: 47471
2008-02-22 02:49:49 +00:00
Chris Lattner
7d3c05df5b
minor cleanups to LSBaseSDNode.
...
llvm-svn: 47469
2008-02-22 01:54:35 +00:00
Andrew Lenharth
b8f9871711
Better names as per Evan's request
...
llvm-svn: 47435
2008-02-21 16:11:38 +00:00
Andrew Lenharth
db9cd46f5d
Atomic op support. If any gcc test uses __sync builtins, it might start failing on archs that haven't implemented them yet
...
llvm-svn: 47430
2008-02-21 06:45:13 +00:00
Anton Korobeynikov
9f8c4b85cf
Add convenient helper to get suffix of the file
...
llvm-svn: 47397
2008-02-20 19:41:22 +00:00
Dan Gohman
62071ec646
Remove inline keywords from in-class function definitions, for
...
consistency.
llvm-svn: 47393
2008-02-20 19:29:58 +00:00
Devang Patel
de35f122f2
getresult type is the type of indexed aggregate element
...
llvm-svn: 47392
2008-02-20 19:26:55 +00:00
Devang Patel
6266d7147e
Specify GetResultInst index as an unsigned.
...
llvm-svn: 47390
2008-02-20 19:10:47 +00:00
Devang Patel
aae784581e
Fix typo. Add const version of getAggregateValue() accessor member function.
...
llvm-svn: 47386
2008-02-20 18:36:16 +00:00
Dan Gohman
48d03d5a2d
Add explicit keywords.
...
llvm-svn: 47382
2008-02-20 16:44:09 +00:00
Dan Gohman
00fed8a97e
Add an intersects method to APInt, to capture a common idiom.
...
llvm-svn: 47379
2008-02-20 16:08:11 +00:00
Anton Korobeynikov
9c87c6526e
Add 'sink' cmdline option. Patch by Mikhail Glushenkov!
...
llvm-svn: 47377
2008-02-20 12:38:07 +00:00
Anton Korobeynikov
c41f5b6af4
Fix newly-introduced 4.3 warnings
...
llvm-svn: 47375
2008-02-20 12:07:57 +00:00
Anton Korobeynikov
b2dfae5fed
And final pack of warnings silencing
...
llvm-svn: 47372
2008-02-20 11:27:04 +00:00
Anton Korobeynikov
7dd00942cc
Update gcc 4.3 warnings fix patch with recent head changes
...
llvm-svn: 47368
2008-02-20 11:10:28 +00:00
Anton Korobeynikov
0c5e186924
Unbreak build with gcc 4.3: provide missed includes and silence most annoying warnings.
...
llvm-svn: 47367
2008-02-20 11:08:44 +00:00
Bill Wendling
becea18656
Fixed typo.
...
llvm-svn: 47365
2008-02-20 09:14:09 +00:00
Bill Wendling
9a2a1ddf6e
More constification of things. More comments added. No functionality
...
changes. (Sorry for any formatting changes that creeped in.)
llvm-svn: 47362
2008-02-20 07:36:31 +00:00
Nick Lewycky
0b6cdd1eff
Add 'umax' similar to 'smax' SCEV. Closes PR2003.
...
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
2008-02-20 06:48:22 +00:00
Dan Gohman
28b341cbf5
Add some comments to Intrinsic::getDeclaration to clarify how to
...
get declarations for overloaded intrinsics.
llvm-svn: 47353
2008-02-20 01:07:51 +00:00
Dale Johannesen
7eccf11cfb
Add Alignment field to ParameterAttributes and
...
treat more or less rationally in interface
functions, subject to change. No functional change.
llvm-svn: 47352
2008-02-19 23:51:49 +00:00
Devang Patel
a74d2cbb6f
Add GetResultInst. First step for multiple return value support.
...
llvm-svn: 47348
2008-02-19 22:15:16 +00:00
Dale Johannesen
ecb2b233b1
Expand ParameterAttributes to 32 bits (in preparation
...
for adding alignment info, not there yet). Clean up
interfaces to reference ParameterAttributes consistently.
llvm-svn: 47342
2008-02-19 21:38:47 +00:00
Chris Lattner
ae2f8bc116
remove the LowerSelect pass. The last client was the old Sparc backend, which is long dead by now.
...
llvm-svn: 47323
2008-02-19 07:49:17 +00:00
Chris Lattner
010e9fb704
remove the lower packed pass. It can never work and even the parts that
...
could work don't work fully. This fixes PR1705. Oh yeah, we don't have
packed types anymore either ;-)
llvm-svn: 47322
2008-02-19 07:39:17 +00:00
Evan Cheng
bb577266bf
- When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type.
...
- X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC.
llvm-svn: 47290
2008-02-18 23:04:32 +00:00
Duncan Sands
a85448506d
Simplify caller updating using a CallSite, as
...
requested by Chris. While there, do the same
for an existing function committed by someone
called "lattner" :)
llvm-svn: 47273
2008-02-18 17:32:13 +00:00
Roman Levenstein
a7d4ae1435
New helper function getMBBFromIndex() that given an index in any instruction of an MBB returns a pointer the MBB. Reviewed by Evan.
...
llvm-svn: 47267
2008-02-18 09:35:30 +00:00
Owen Anderson
b0dee942db
Add support for setting parameters to CallSite.
...
llvm-svn: 47249
2008-02-18 00:10:55 +00:00
Owen Anderson
48dd6a0f96
Add a predicate to Argument to check for the StructRet attribute.
...
llvm-svn: 47248
2008-02-17 23:22:28 +00:00
Andrew Lenharth
c178981b85
llvm.memory.barrier, and impl for x86 and alpha
...
llvm-svn: 47204
2008-02-16 01:24:58 +00:00
Dan Gohman
a9386d8501
Rename CountMemOperands to ComputeMemOperandsEnd to reflect what
...
it actually does. Simplify CountOperands a little by reusing
ComputeMemOperandsEnd. And reword some comments for both.
llvm-svn: 47198
2008-02-16 00:36:48 +00:00
Scott Michel
3ad0263173
Make tblgen a little smarter about constants smaller than i32. Currently,
...
tblgen will complain if a sign-extended constant does not fit into a
data type smaller than i32, e.g., i16. This causes a problem when certain
hex constants are used, such as 0xff for byte masks or immediate xor
values.
tblgen will try the sign-extended value first and, if the sign extended
value would overflow, it tries to see if the unsigned value will fit.
Consequently, a software developer can now safely incant:
(XORHIr16 R16C:$rA, 0xffff)
which is somewhat clearer and more informative than incanting:
(XORHIr16 R16C:$rA, (i16 -1))
even if the two are bitwise equivalent.
Tblgen also outputs the 64-bit unsigned constant in the generated ISel code
when getTargetConstant() is invoked.
llvm-svn: 47188
2008-02-15 23:05:48 +00:00
Evan Cheng
bb357cd8a6
- Removing the infamous r2rMap_ and rep() method. Now the coalescer will update
...
register defs and uses after each successful coalescing.
- Also removed a number of hacks and fixed some subtle kill information bugs.
llvm-svn: 47167
2008-02-15 18:24:29 +00:00
Evan Cheng
2cb3fd8f72
Added CommuteChangesDestination(). This returns true if commuting the specified
...
machine instr will change its definition register.
llvm-svn: 47166
2008-02-15 18:21:33 +00:00
Dan Gohman
e34f24132b
Change MemOperand's size and offset to be 64-bit.
...
llvm-svn: 47151
2008-02-15 01:29:57 +00:00
Duncan Sands
0056f1e823
In TargetLowering::LowerCallTo, don't assert that
...
the return value is zero-extended if it isn't
sign-extended. It may also be any-extended.
Also, if a floating point value was returned
in a larger floating point type, pass 1 as the
second operand to FP_ROUND, which tells it
that all the precision is in the original type.
I think this is right but I could be wrong.
Finally, when doing libcalls, set isZExt on
a parameter if it is "unsigned". Currently
isSExt is set when signed, and nothing is
set otherwise. This should be right for all
calls to standard library routines.
llvm-svn: 47122
2008-02-14 17:28:50 +00:00
Nate Begeman
1ef1013b6c
Change how FP immediates are handled.
...
1) ConstantFP is now expand by default
2) ConstantFP is not turned into TargetConstantFP during Legalize
if it is legal.
This allows ConstantFP to be handled like Constant, allowing for
targets that can encode FP immediates as MachineOperands.
As a bonus, fix up Itanium FP constants, which now correctly match,
and match more constants! Hooray.
llvm-svn: 47121
2008-02-14 08:57:00 +00:00
Nate Begeman
8352abdd98
Support a new type of MachineOperand, MO_FPImmediate, used for holding
...
FP Immediates, crazily enough
llvm-svn: 47117
2008-02-14 07:39:30 +00:00
Nate Begeman
929fd03fbe
Nuke dead comment
...
llvm-svn: 47114
2008-02-14 07:23:11 +00:00
Dan Gohman
5562e340b7
Fix a typo in a comment.
...
llvm-svn: 47097
2008-02-13 22:32:12 +00:00
Dan Gohman
99b38405e3
Simplify some logic in ComputeMaskedBits. And change ComputeMaskedBits
...
to pass the mask APInt by value, not by reference.
llvm-svn: 47096
2008-02-13 22:28:48 +00:00
Dan Gohman
588498082a
Rename APInt's isPositive to isNonNegative, to reflect what it
...
actually does.
llvm-svn: 47090
2008-02-13 22:09:18 +00:00
Dan Gohman
d22101a970
Add countTrailingOnes member functions to APInt.
...
llvm-svn: 47086
2008-02-13 21:11:05 +00:00
Dan Gohman
547ea0a60d
Fix a typo in a comment.
...
llvm-svn: 47085
2008-02-13 20:56:53 +00:00
Dan Gohman
2181ea3b6c
Add count{Leading,Trailing}Ones_{32,64} functions with simple implementations.
...
llvm-svn: 47084
2008-02-13 20:54:54 +00:00
Nicolas Geoffray
72fa78e195
Enable exception handling int JIT
...
llvm-svn: 47079
2008-02-13 18:39:37 +00:00
Devang Patel
8190e4fbe0
Remove use of ltdl
...
llvm-svn: 47065
2008-02-13 17:11:39 +00:00
Evan Cheng
9c21fd25f0
Simplify.
...
llvm-svn: 47059
2008-02-13 09:18:16 +00:00
Evan Cheng
d4ddda68fa
Initial support for copy elimination by commuting its definition MI.
...
PR1877.
A3 = op A2 B0<kill>
...
B1 = A3 <- this copy
...
= op A3 <- more uses
==>
B2 = op B0 A2<kill>
...
B1 = B2 <- now an identify copy
...
= op B2 <- more uses
This speeds up FreeBench/neural by 29%, Olden/bh by 12%, oopack_v1p8 by 53%.
llvm-svn: 47046
2008-02-13 03:01:43 +00:00
Evan Cheng
da24989368
- Added removeValNo() to remove all live ranges of a particular value#.
...
- removeRange() can now update value# information.
llvm-svn: 47044
2008-02-13 02:48:26 +00:00
Evan Cheng
95894280dc
Added debugging routine dumpUses.
...
llvm-svn: 47042
2008-02-13 02:45:38 +00:00
Dan Gohman
09023887f8
Convert SelectionDAG::ComputeMaskedBits to use APInt instead of uint64_t.
...
Add an overload that supports the uint64_t interface for use by clients
that haven't been updated yet.
llvm-svn: 47039
2008-02-13 00:35:47 +00:00
Dan Gohman
f65b0b112c
Change APInt::getBitsSet to accept a "half-open" range, where the
...
hiBit parameter marks the index one past the last desired set bit.
llvm-svn: 47032
2008-02-12 21:47:33 +00:00
Owen Anderson
274aa2846e
Re-apply the patch to improve the optimizations of memcpy's, with several
...
bugs fixed. This now passes PPC bootstrap.
llvm-svn: 47026
2008-02-12 21:15:18 +00:00
Dan Gohman
3e4b49b4a6
Add a doxygen comment for SrcValueSDNode, to make its purpose
...
clear and to clarify how it differs from MemOperandSDNode.
llvm-svn: 47015
2008-02-12 18:52:52 +00:00
Dan Gohman
b7bbe43ad3
Correct the order of the arguments in the examples in the comments
...
for APInt::getBitsSet. And fix an off-by-one bug in "wrapping" mode.
llvm-svn: 46978
2008-02-11 23:45:14 +00:00
Ted Kremenek
dbef529071
The factories for ImutAVLTree/ImmutableSet/ImmutableMap now take an (optional)
...
BumpPtrAllocator argument to their constructors. This BumpPtrAllocator
will be used to allocate trees. If no BumpPtrAllocator is provided, one
is created (as before).
llvm-svn: 46975
2008-02-11 23:11:12 +00:00
Dan Gohman
861923ed06
From Chris' review: change MemOperandSDNode's constructor to pass its
...
argument by reference, rather than by value.
llvm-svn: 46960
2008-02-11 18:56:50 +00:00
Ted Kremenek
f06b7ac532
Added "Profile" method to APFloat for use with FoldingSet.
...
Added member template "Add" to FoldingSetNodeID that allows "adding" arbitrary
objects to a profile via dispatch to FoldingSetTrait<T>::Profile().
Removed FoldingSetNodeID::AddAPFloat and FoldingSetNodeID::APInt, as their
functionality is now replaced using the above mentioned member template.
llvm-svn: 46957
2008-02-11 17:24:50 +00:00
Duncan Sands
b9bf0dcb7c
Add arbitrary integer support to getRegisterType and
...
getNumRegisters. This is needed for calling functions
with apint parameters or return values.
llvm-svn: 46956
2008-02-11 11:09:23 +00:00
Wojciech Matyjewicz
76c2b22ee4
Fix PR1798 - an error in the evaluation of SCEVAddRecExpr at an
...
arbitrary iteration.
The patch:
1) changes SCEVSDivExpr into SCEVUDivExpr,
2) replaces PartialFact() function with BinomialCoefficient(); the
computations (essentially, the division) in BinomialCoefficient() are
performed with the apprioprate bitwidth necessary to avoid overflow;
unsigned division is used instead of the signed one.
Computations in BinomialCoefficient() require support from the code
generator for APInts. Currently, we use a hack rounding up the
neccessary bitwidth to the nearest power of 2. The hack is easy to turn
off in future.
One remaining issue: we assume the divisor of the binomial coefficient
formula can be computed accurately using 16 bits. It means we can handle
AddRecs of length up to 9. In future, we should use APInts to evaluate
the divisor.
Thanks to Nicholas for cooperation!
llvm-svn: 46955
2008-02-11 11:03:14 +00:00
Duncan Sands
204c89cafa
Add a isBigEndian method to complement isLittleEndian.
...
llvm-svn: 46954
2008-02-11 10:37:04 +00:00
Dan Gohman
cabaec582f
Rename MRegisterInfo to TargetRegisterInfo.
...
llvm-svn: 46930
2008-02-10 18:45:23 +00:00
Wojciech Matyjewicz
2e45476439
Add a check if the initial value of the induction variable is 0 (the method comment says it should be).
...
llvm-svn: 46907
2008-02-09 18:06:58 +00:00
Dan Gohman
672d341167
Change ConstantSDNode to store an APInt instead of a uint64_t, and
...
begin adding some methods to use it this way.
llvm-svn: 46899
2008-02-08 22:59:30 +00:00
Dan Gohman
3d296e049c
Add an isSignedIntN, like isIntN but for signed integer values instead of
...
unsigned.
llvm-svn: 46894
2008-02-08 21:58:15 +00:00
Evan Cheng
90f03a0b88
It's not always safe to fold movsd into xorpd, etc. Check the alignment of the load address first to make sure it's 16 byte aligned.
...
llvm-svn: 46893
2008-02-08 21:20:40 +00:00
Ted Kremenek
557bbab669
Constified operator<< in APSInt.
...
llvm-svn: 46882
2008-02-08 07:14:19 +00:00
Dan Gohman
1f255f2db7
Avoid needlessly casting away const qualifiers.
...
llvm-svn: 46876
2008-02-08 03:26:46 +00:00
Dan Gohman
eb7c8e4f6b
Follow Chris' suggestion; change the PseudoSourceValue accessors
...
to return pointers instead of references, since this is always what
is needed.
llvm-svn: 46857
2008-02-07 18:41:25 +00:00
Dan Gohman
011075cfdb
Add support to FoldingSet for hashing APInt objects.
...
llvm-svn: 46833
2008-02-06 23:09:15 +00:00
Dan Gohman
f00842e086
Re-apply the memory operand changes, with a fix for the static
...
initializer problem, a minor tweak to the way the
DAGISelEmitter finds load/store nodes, and a renaming of the
new PseudoSourceValue objects.
llvm-svn: 46827
2008-02-06 22:27:42 +00:00
Anton Korobeynikov
b1576212e7
Don't dereference an invalid pointer if string is empty.
...
llvm-svn: 46781
2008-02-05 23:34:40 +00:00
Dale Johannesen
e8fa3130f8
Implement sseregparm.
...
llvm-svn: 46764
2008-02-05 20:46:33 +00:00
Ted Kremenek
3277f38b25
Added FoldingSet profiling support to ImmutableSet.
...
llvm-svn: 46757
2008-02-05 18:50:25 +00:00
Ted Kremenek
571ad3913c
Changed profiling method for ImmutableMap to once again just use its
...
unique ImutAVLTree* for profiling.
Modified ImutAVLTree:
(1) changed ComputeHash() to ComputeDigest() and
(2) changed Profile() to use the computed digest and
(3) modified insertion of IMutAVLTree into the FoldingSet owned by
the ImutAVLTreeFactory object to use profiling instead of computing
a direct hash. This fixes a bug where our abuse of the FoldingSet would
not work when the FoldingSet was resized.
llvm-svn: 46753
2008-02-05 17:30:43 +00:00
Dale Johannesen
bf7691e2e8
Missed one.
...
llvm-svn: 46733
2008-02-05 01:12:10 +00:00
Evan Cheng
ca7db1ca34
Unbreak teh build.
...
llvm-svn: 46729
2008-02-05 00:25:13 +00:00
Dale Johannesen
9b7f4064e3
Do not unconditionally redefine vec_ext_v16qi and
...
vec_ext_v4si builtins. This is a hack; they should
be defined here, then resolved in the X86 BE.
However there is enough other stuff missing in the
X86 BE for SSE41 that this will do for now.
llvm-svn: 46727
2008-02-04 23:27:29 +00:00
Evan Cheng
352062f5f7
Typo.
...
llvm-svn: 46725
2008-02-04 23:10:38 +00:00
Ted Kremenek
f2e96e37f4
Modified 'Profile' method of ImmutableMap to use the 'Profile' method
...
of the contained ImutAVLTree root.
llvm-svn: 46719
2008-02-04 21:17:02 +00:00
Ted Kremenek
9679f99479
Modified node creation of ImutAVLTree to do a hash lookup for an existing
...
node in the FoldingSet of nodes held by the Factory object. If we
we find a node with a matching hash, we do a full structural comparison.
Nodes are also now inserted into the FoldingSet only when we mark them
Immutable, as their children can change during intermediate-rebalancing.
The 'Profile' method for ImutAVLTree is no longer used when looking up
existing ImutAVLTrees with a given set of contents; instead the Profile method
is used by other clients that wish to insert such a tree into a folding set.
This means that we are not using FoldingSet in ImutAVLTreeFactory in the way
it was intended, but instead are using it as an opaque hashtable.
llvm-svn: 46717
2008-02-04 21:15:24 +00:00
Ted Kremenek
6dab41ed32
Added "bucket_iterators" to FoldingSet. Bucket iterators allow iteration
...
over all the nodes in a particular bucket.
llvm-svn: 46716
2008-02-04 21:11:17 +00:00
Ted Kremenek
62853a3478
constified operator~().
...
llvm-svn: 46707
2008-02-04 16:57:26 +00:00
Nate Begeman
ead8dfeef2
SSE 4.1 Intrinsics and detection
...
llvm-svn: 46681
2008-02-03 07:18:54 +00:00
Chris Lattner
6ea106139d
Change the 'global modification' APIs in SelectionDAG to take a new
...
DAGUpdateListener object pointer instead of just returning a vector
of deleted nodes. This makes the interfaces more efficient (no more
allocating a vector [at least a malloc], filling it in, then walking
it) and more clean. This also allows the client to be notified of
nodes that are *changed* but not deleted.
llvm-svn: 46677
2008-02-03 06:49:24 +00:00
Evan Cheng
c57ec111f2
SDIsel processes llvm.dbg.declare by recording the variable debug information descriptor and its corresponding stack frame index in MachineModuleInfo. This only works if the local variable is "homed" in the stack frame. It does not work for byval parameter, etc.
...
Added ISD::DECLARE node type to represent llvm.dbg.declare intrinsic. Now the intrinsic calls are lowered into a SDNode and lives on through out the codegen passes.
For now, since all the debugging information recording is done at isel time, when a ISD::DECLARE node is selected, it has the side effect of also recording the variable. This is a short term solution that should be fixed in time.
llvm-svn: 46659
2008-02-02 04:07:54 +00:00
Gordon Henriksen
b75d9e974d
Fixing a bug creating floating point constants of type other
...
than double through the C bindings. Thanks to Tomas Lindquist
Olsen for reporting it.
llvm-svn: 46656
2008-02-02 01:07:50 +00:00
Evan Cheng
9ff6b89bd9
Frame index can be negative.
...
llvm-svn: 46655
2008-02-02 00:17:00 +00:00
Evan Cheng
d6222fc11d
Remove the nasty LABEL hack with a much less evil one. Now llvm.dbg.func.start implies a stoppoint is set. SelectionDAGISel records a new source line but does not create a ISD::LABEL node for this special stoppoint. Asm printer will magically print this label. This ensures nothing is emitted before.
...
llvm-svn: 46635
2008-02-01 09:10:45 +00:00
Evan Cheng
abe3a9ad27
Rename RecordLabel to RecordSourceLine because that's what it is doing.
...
llvm-svn: 46628
2008-02-01 02:05:57 +00:00
Anton Korobeynikov
1cc154d068
Add convenient std::string helpers to StringMap. Patch by Mikhail Glushenkov!
...
llvm-svn: 46625
2008-01-31 23:02:33 +00:00
Evan Cheng
2a533e6894
Revert 46556 and 46585. Dan please fix the PseudoSourceValue problem and re-commit.
...
llvm-svn: 46623
2008-01-31 21:00:00 +00:00
Anton Korobeynikov
91b7d99e8a
Reapply the patch with fix.
...
llvm-svn: 46615
2008-01-31 17:43:25 +00:00
Chris Lattner
87c2925656
revert anton's recent stringmap patch, which breaks clang.
...
llvm-svn: 46614
2008-01-31 17:24:51 +00:00
Anton Korobeynikov
55998b56a0
Make StringMap to be more STL'ish. Patch by Mikhail Glushenkov!
...
llvm-svn: 46612
2008-01-31 12:30:40 +00:00
Anton Korobeynikov
45e5afd820
Whitespace cleanup
...
llvm-svn: 46611
2008-01-31 12:10:41 +00:00
Evan Cheng
705212577d
Add an extra operand to LABEL nodes which distinguishes between debug, EH, or misc labels. This fixes the EH breakage. However I am not convinced this is *the* solution.
...
llvm-svn: 46609
2008-01-31 09:59:15 +00:00
Evan Cheng
a63f6736f3
MRegisterInfo::getLocation() is a really bad idea. Its function is to calculate the offset from frame pointer to a stack slot and then storing the delta in a MachineLocation object. The name is bad (it implies a getter), and MRegisterInfo doesn't need to know about MachineLocation.
...
Replace getLocation() with getFrameIndexOffset() which returns the delta from frame pointer to stack slot. Dwarf writer can then use the information for whatever it wants.
llvm-svn: 46597
2008-01-31 03:37:28 +00:00
Dan Gohman
562ed58408
Avoid unnecessarily casting away const, fixing a FIXME.
...
llvm-svn: 46591
2008-01-31 01:05:10 +00:00
Dan Gohman
703a070e12
Fix a typo in a comment.
...
llvm-svn: 46588
2008-01-31 00:44:33 +00:00
Dan Gohman
3993809a0c
Rename ISD::FLT_ROUNDS to ISD::FLT_ROUNDS_ to avoid conflicting
...
with the real FLT_ROUNDS (defined in <float.h>).
llvm-svn: 46587
2008-01-31 00:41:03 +00:00
Dan Gohman
4326d513ab
Create a new class, MemOperand, for describing memory references
...
in the backend. Introduce a new SDNode type, MemOperandSDNode, for
holding a MemOperand in the SelectionDAG IR, and add a MemOperand
list to MachineInstr, and code to manage them. Remove the offset
field from SrcValueSDNode; uses of SrcValueSDNode that were using
it are all all using MemOperandSDNode now.
Also, begin updating some getLoad and getStore calls to use the
PseudoSourceValue objects.
Most of this was written by Florian Brander, some
reorganization and updating to TOT by me.
llvm-svn: 46585
2008-01-31 00:25:39 +00:00
Evan Cheng
07f3cd3242
A semi-gross fix for a debug info issue. When inserting the "function start" label (i.e. first label in the entry block) take care to insert it at the beginning of the block.
...
llvm-svn: 46568
2008-01-30 19:35:32 +00:00
Evan Cheng
918b9c9335
Even though InsertAtEndOfBasicBlock is an ugly hack it still deserves a proper name. Rename it to EmitInstrWithCustomInserter since it does not necessarily insert
...
instruction at the end.
llvm-svn: 46562
2008-01-30 18:18:23 +00:00
Dan Gohman
dd9be7d05e
Add a new PseudoSourceValue class, which will be used to help track
...
memory reference information in the backend. Most of this was written by
Florian Brander, cleanup and updating to TOT by me.
llvm-svn: 46556
2008-01-30 16:35:31 +00:00
Dan Gohman
13d1327796
Factor the addressing mode and the load/store VT out of LoadSDNode
...
and StoreSDNode into their common base class LSBaseSDNode. Member
functions getLoadedVT and getStoredVT are replaced with the common
getMemoryVT to simplify code that will handle both loads and stores.
llvm-svn: 46538
2008-01-30 00:15:11 +00:00
Ted Kremenek
acc17d1b24
Altered ctor for APSInt to accept an optional "isUnsigned" flag. Default
...
behavior is unchanged.
llvm-svn: 46521
2008-01-29 18:55:14 +00:00
Dan Gohman
6f9748b626
Add comments describing what the loop depth values mean. Also, make a
...
minor simplification to the loop depth calculation code.
llvm-svn: 46511
2008-01-29 12:12:40 +00:00
Dan Gohman
c1c27c9fda
Fix a typo in a comment.
...
llvm-svn: 46507
2008-01-29 12:06:33 +00:00
Dan Gohman
522401f26e
Add explicit keywords.
...
llvm-svn: 46506
2008-01-29 11:36:12 +00:00
Duncan Sands
390baa691d
Use getPreferredAlignmentLog or getPreferredAlignment
...
to get the alignment of global variables, rather than
using hand-made versions.
llvm-svn: 46495
2008-01-29 06:23:44 +00:00
Dale Johannesen
f12104ce4b
Handle 'X' constraint in asm's better.
...
llvm-svn: 46485
2008-01-29 02:21:21 +00:00
Ted Kremenek
752475ffa1
Added destructor for template class FoldingSetNodeWrapper.
...
Added getValue() to FoldingSetNodeWrapper.
llvm-svn: 46465
2008-01-28 22:05:23 +00:00
Nick Lewycky
6b070b1b93
Handle some more combinations of extend and icmp. Fixes PR1940.
...
llvm-svn: 46431
2008-01-28 03:48:02 +00:00
Owen Anderson
7ad72080a6
Fixes for BreakCriticalMachineCodeEdge by Fernando.
...
llvm-svn: 46419
2008-01-27 19:51:03 +00:00
Chris Lattner
9c66a1b961
make isExactlyValue work for long double.
...
llvm-svn: 46410
2008-01-27 06:19:08 +00:00
Bill Wendling
629a569ce9
The CorrelatedExpressionElimination pass is known to be buggy. Remove it.
...
This fixes PR1769.
llvm-svn: 46408
2008-01-27 06:11:41 +00:00
Chris Lattner
266b518f13
make this 64-bit safe
...
llvm-svn: 46402
2008-01-26 19:50:30 +00:00
Chris Lattner
f2a0e6c176
Reorder a field to reduce the size of StackObject. Note that this
...
may require a clean rebuild on leopard. :(
llvm-svn: 46360
2008-01-25 17:49:41 +00:00
Duncan Sands
b9f1e3df90
Add more assertions to catch accesses outside of
...
arrays. Also, as a convenience, don't barf, just
return false, if someone calls isTruncStoreLegal
or isLoadXLegal with an extended type for the in
memory type.
llvm-svn: 46352
2008-01-25 10:20:53 +00:00
Chris Lattner
93f4f5970c
move this field back. Moving the field causes miscompilations (!) of voronoi and others.
...
llvm-svn: 46350
2008-01-25 07:29:34 +00:00
Chris Lattner
1ce075bcaa
move MachineFrameInfo::CreateFixedObject out of line, give MachineFrameInfo
...
a reference to TargetFrameInfo. Rearrange order of fields in StackObject to
save a word.
llvm-svn: 46348
2008-01-25 07:19:06 +00:00
Chris Lattner
72795598b9
add a fixme.
...
llvm-svn: 46346
2008-01-25 06:20:20 +00:00
Ted Kremenek
274df5b7db
Added additional overloaded operators for APSInt to match the operators of
...
APInt.
While some operators were already specifically overloaded for APSInt, others
resulted in using the overloaded operator methods in APInt, which would result
in the signedness bit being lost.
Modified the APSInt(APInt&) constructor to be "explicit" and to take an
extra (optional) flag to indicate the signedness. Making the ctor explicit
will catch any implicit conversations between APSInt -> APInt -> APSInt that
results in the signedness flag being lost.
llvm-svn: 46316
2008-01-24 18:59:52 +00:00
Chris Lattner
5740a10d2c
Add hasByValAttr() and hasNoAliasAttr() methods to the Argument class.
...
llvm-svn: 46314
2008-01-24 17:47:11 +00:00