Commit Graph

23955 Commits

Author SHA1 Message Date
Anton Korobeynikov 84fd5698f3 Whitespace cleanup
llvm-svn: 53298
2008-07-09 13:20:27 +00:00
Anton Korobeynikov 2633a040a3 Move flag decoding stuff into special hook
llvm-svn: 53297
2008-07-09 13:20:07 +00:00
Anton Korobeynikov ab778022d5 Properly handle linkonce stuff
llvm-svn: 53296
2008-07-09 13:19:38 +00:00
Anton Korobeynikov 7680198798 Provide skeletone code for calculation of section, where global should be emitted into
llvm-svn: 53295
2008-07-09 13:19:08 +00:00
Anton Korobeynikov 3ee57868a5 Use 'llvm-linkonce' consistently
llvm-svn: 53294
2008-07-09 13:18:38 +00:00
Anton Korobeynikov 21539c6d1e Add default section name resolution routine
llvm-svn: 53292
2008-07-09 13:18:02 +00:00
Anton Korobeynikov aab504fb19 Constify
llvm-svn: 53291
2008-07-09 13:17:36 +00:00
Anton Korobeynikov 9e4ab5023a Add code for default section falgs computation
llvm-svn: 53290
2008-07-09 13:16:59 +00:00
Duncan Sands 37ab611e8e Remove some unneeded includes.
llvm-svn: 53289
2008-07-09 12:08:25 +00:00
Duncan Sands 5e266c914a Redo LegalizeTypes soft float support for
SINT_TO_FP and UINT_TO_FP.  This now produces
the same code as LegalizeDAG (the previous
code was based on a mistaken idea of what
LegalizeDAG did in this case).

llvm-svn: 53288
2008-07-09 12:07:22 +00:00
Duncan Sands b9e63db718 Forgot to update the chain result when softening
loads.

llvm-svn: 53287
2008-07-09 11:15:31 +00:00
Duncan Sands ed811f0ec1 LegalizeTypes soft float support for FP_TO_SINT and
FP_TO_UINT.

llvm-svn: 53286
2008-07-09 11:13:46 +00:00
Duncan Sands 8090f8576f LegalizeTypes support for powi soft float.
llvm-svn: 53285
2008-07-09 11:11:47 +00:00
Duncan Sands c52d3bf646 Make the role of MVT::i32 clearer here, and add a
note since it is not clear whether it is correct.

llvm-svn: 53284
2008-07-09 08:07:41 +00:00
Nick Lewycky bb89c2a3f6 Simplify, suggested by Chris Lattner.
llvm-svn: 53283
2008-07-09 07:35:26 +00:00
Nick Lewycky f9c27c343a Fold (a < 8) && (b < 8) into (a|b) < 8 for unsigned less or greater than.
llvm-svn: 53282
2008-07-09 07:29:11 +00:00
Evan Cheng 7898e98026 Missed alignment argument on stores lowered from memcpy.
llvm-svn: 53281
2008-07-09 06:38:06 +00:00
Evan Cheng 49c8e68e4c Back out 53254. It broke ppc debug info codegen.
llvm-svn: 53280
2008-07-09 06:36:53 +00:00
Bill Wendling 88d2506ae2 Make the DICountVisitor not a visitor. This keeps us from calling virtual
functions and junk.

llvm-svn: 53279
2008-07-09 06:02:33 +00:00
Bill Wendling a2279686cf Silence warning by initializing variable.
llvm-svn: 53278
2008-07-09 05:55:53 +00:00
Bruno Cardoso Lopes bcc2139ba6 Fixed features usage.
llvm-svn: 53277
2008-07-09 05:32:22 +00:00
Nick Lewycky 364661c43e Fold ((1 << a) & 1) to (a == 0).
llvm-svn: 53276
2008-07-09 05:20:13 +00:00
Chris Lattner a660f4bb07 Add a little wrapper header that is put around bc files when emitting
bc files for modules with a target triple that indicates they are for
darwin.  The reader unconditionally handles this, and the writer could
turn this on for more targets if we care.

This change has two benefits for darwin:

1) it allows us to encode the cpu type of the file in an easy to read
   place that doesn't require decoding the bc file.
2) it works around a bug (IMO) in darwin's AR where it is incapable of
   handling files that are not a multiple of 8 bytes long.  BC files
   are only guaranteed to be multiples of 4 bytes long.

llvm-svn: 53275
2008-07-09 05:14:23 +00:00
Chris Lattner 304deea9e6 random bugfix sitting in my tree.
llvm-svn: 53274
2008-07-09 05:12:07 +00:00
Bruno Cardoso Lopes 7ceec57703 Fixe typos and 80 column size problems
llvm-svn: 53272
2008-07-09 04:45:36 +00:00
Nick Lewycky 0d3645e673 Reduce x - y to -y when we know the 'x' part will get masked off anyways.
llvm-svn: 53271
2008-07-09 04:32:37 +00:00
Bruno Cardoso Lopes a6ce3cee2f MipsTargetLowering cleanup
llvm-svn: 53270
2008-07-09 04:15:08 +00:00
Nick Lewycky b36bd47419 Remove getValueRange from SCEV. It wasn't doing anything there anyways, and a
more complete version is now available from the LoopVR pass.

llvm-svn: 53269
2008-07-09 03:21:51 +00:00
Dan Gohman 1526985bac Consistently put quotes around pass names in debugging output.
llvm-svn: 53268
2008-07-09 00:50:40 +00:00
Devang Patel 51cbf928ab If loop induction variable's start value is less then its exit value then do not split the loop.
llvm-svn: 53265
2008-07-09 00:12:01 +00:00
Dan Gohman 919936815e const-ify SelectionDAG::getNodeValueTypes.
llvm-svn: 53264
2008-07-09 00:00:42 +00:00
Dan Gohman f188fa4499 It's no longer necessary to test if a MachineBasicBlock's
parent is non-null. It now always is.

llvm-svn: 53263
2008-07-08 23:59:09 +00:00
Dan Gohman 8293650d90 Verify that MachineMemOperand alignment is a non-zero power of 2.
llvm-svn: 53262
2008-07-08 23:47:04 +00:00
Dan Gohman e8d8d2ea42 Factor out the code for computing an alignment value, and make it
available to getAtomic in addition to just getLoad and getStore,
to prevent MachineMemOperands with 0 alignment.

llvm-svn: 53261
2008-07-08 23:46:32 +00:00
Owen Anderson 27b8a21dfd Fix the build. Apparently MachineInstr& is no longer implicitly convertable to MachineBasicBlock::iterator.
llvm-svn: 53260
2008-07-08 23:36:37 +00:00
Owen Anderson 45d4475fe5 Make the local register allocator compute (purely local) liveness information for itself
rather than depending on LiveVariables.  This decreases compile time from:
0.5909s (LV + Regalloc) to 0.421s (just regalloc).

llvm-svn: 53256
2008-07-08 22:24:50 +00:00
Dale Johannesen b9097a71d4 Make debug info come out in data-only files.
This is a question of the debugging setup code not
being called at the right time, and it's called from
target-dependent code for some reason.  I have only
attempted to fix Darwin, but I'm pretty sure it's
broken elsewhere; I'll leave that to people who can
test it.

llvm-svn: 53254
2008-07-08 21:56:22 +00:00
Dale Johannesen 45a4ec1a27 Remove some dead code.
llvm-svn: 53253
2008-07-08 21:53:43 +00:00
Evan Cheng 34ef1db87c Do not CSE DEBUG_LOC, DBG_LABEL, DBG_STOPPOINT, DECLARE, and EH_LABEL SDNode's. This improves compile time slightly at -O0 -g.
llvm-svn: 53246
2008-07-08 20:06:39 +00:00
Duncan Sands 0797e5bf05 Remove custom expansion from LegalizeTypes when doing
soft float: experiments show that targets aren't
expecting this for results or for operands.  Add
support select/select_cc result soft float and
correct operand soft float for these.

llvm-svn: 53245
2008-07-08 20:03:24 +00:00
Duncan Sands 360d689db3 Add missing select_cc libcall line, somehow omitted
in LegalizeTypes.

llvm-svn: 53244
2008-07-08 20:00:05 +00:00
Chris Lattner 350e41760a improve comment
llvm-svn: 53243
2008-07-08 18:47:38 +00:00
Chris Lattner 2528d63ba7 Add a new hidden option to the interpreter to cause it to print
out every volatile load and store.  This is useful for tracking 
down insane volatile memory bugs.

llvm-svn: 53241
2008-07-08 17:25:49 +00:00
Chris Lattner 501d78fdc0 Fix PR2496, a really nasty bug which involved sinking volatile loads
into phis.  This is actually the same bug as PR2262 /
2008-04-29-VolatileLoadDontMerge.ll, but I missed checking the first 
predecessor for multiple successors.  Testcase here:
InstCombine/2008-07-08-VolatileLoadMerge.ll

llvm-svn: 53240
2008-07-08 17:18:32 +00:00
Evan Cheng 0a1e672dff Unbreak C++ tests on x86 Darwin.
llvm-svn: 53237
2008-07-08 16:40:43 +00:00
Duncan Sands 12525efdfc LegalizeTypes support for FP_ROUND and FP_EXTEND
soft float.

llvm-svn: 53231
2008-07-08 10:50:55 +00:00
Duncan Sands 66336db096 Add some helpers for manipulating function
parameter attributes.

llvm-svn: 53228
2008-07-08 09:41:30 +00:00
Duncan Sands 441080f7f2 Pacify gcc-4.3.
llvm-svn: 53227
2008-07-08 09:33:14 +00:00
Duncan Sands 78c8872d87 Add some convenience methods for manipulating
call attributes.

llvm-svn: 53223
2008-07-08 08:38:44 +00:00
Chris Lattner d137a08b0d Fix three bugs:
1) evaluate [v]fcmp true/false with undefs to true or false instead
   of undef.
2) fix vector comparisons with undef to return a vector result instead 
   of i1
3) fix vector comparisons with evaluatable results to return vector
   true/false instead of i1 true/false (PR2529)

llvm-svn: 53220
2008-07-08 05:46:34 +00:00
Nick Lewycky 3c947045ef Expand SCEVUDiv of power of 2 to a lshr instruction.
llvm-svn: 53217
2008-07-08 05:05:37 +00:00
Evan Cheng 534952224c Avoid unnecessary string construction during asm printing.
llvm-svn: 53215
2008-07-08 00:55:58 +00:00
Dan Gohman 3b46030375 Pool-allocation for MachineInstrs, MachineBasicBlocks, and
MachineMemOperands. The pools are owned by MachineFunctions.

This drastically reduces the number of calls to malloc/free made
during the "Emit" phase of scheduling, as well as later phases
in CodeGen. Combined with other changes, this speeds up the
"instruction selection" phase of CodeGen by 10% in some cases.

llvm-svn: 53212
2008-07-07 23:14:23 +00:00
Dan Gohman 7f8b6d5f80 Pool-allocation for SDNodes. The pool is allocated once for each function,
and reused across SelectionDAGs.

This drastically reduces the number of calls to malloc/free made during
instruction selection, and improves memory locality.

llvm-svn: 53211
2008-07-07 23:02:41 +00:00
Dan Gohman e5932e5a3d Add some basic Pool-allocation infrastructure. This adds a Recycler class,
for handling bookkeeping for deleted objects, as well as the alist class
template, for keeping lists of objects allocated from Recyclers, and some
related utilities.

llvm-svn: 53210
2008-07-07 22:58:06 +00:00
Evan Cheng 0189604b0a Clean up PPC register specification.
llvm-svn: 53209
2008-07-07 22:22:07 +00:00
Evan Cheng 90a92af176 ATT asm printer just print register AsmName's instead of calling tolower on each charater of Name. This speeds it up by 10%.
llvm-svn: 53208
2008-07-07 22:21:06 +00:00
Evan Cheng 4a898c0b11 TargetRegisterDesc::Name field is the same as the abstract register name. There is no need for targets to specify register names in addition to their AsmName's.
llvm-svn: 53207
2008-07-07 22:19:41 +00:00
Bill Wendling b46e5165bf Use the canonical way to get an empty structure.
llvm-svn: 53206
2008-07-07 21:41:57 +00:00
Bill Wendling 1214860a78 Use StringMap for greater justice!
llvm-svn: 53202
2008-07-07 20:59:31 +00:00
Dan Gohman 9169763955 Fix SDNode::MorphNodeTo (a function used by by SelectNodeTo) to
properly track dead nodes that are on the original SDNode's operand
list but not the new one, and have no other uses.

llvm-svn: 53201
2008-07-07 20:57:48 +00:00
Dan Gohman aedb4a61b8 Move MachineMemOperand's constructor out of line, to avoid a
#include dependency on Support/MathExtras.h in the header file.

llvm-svn: 53200
2008-07-07 20:32:02 +00:00
Dan Gohman 230263c63e Simplify this use of BuildMI. This is also in preparation for
pool-allocating MachineInstrs.

llvm-svn: 53198
2008-07-07 20:09:12 +00:00
Dan Gohman 14464bc61c Use of operator* is redundant and confusing here.
llvm-svn: 53197
2008-07-07 20:08:05 +00:00
Dan Gohman c7fc432b19 Minor const-correctness fixes.
llvm-svn: 53196
2008-07-07 20:06:06 +00:00
Dan Gohman 14ce7d1eba Assert that all MachineInstrs update PhysRegUseDefLists in
their cleanup code. 

llvm-svn: 53194
2008-07-07 19:55:35 +00:00
Evan Cheng 03001cb820 Fix two serious LSR bugs.
1. LSR runOnLoop is always returning false regardless if any transformation is made.
2. AddUsersIfInteresting can create new instructions that are added to DeadInsts. But there is a later early exit which prevents them from being freed.

llvm-svn: 53193
2008-07-07 19:51:32 +00:00
Bruno Cardoso Lopes 5f18582c2e fixed 32-bit fp_to_sint pattern
llvm-svn: 53192
2008-07-07 19:11:24 +00:00
Dan Gohman 768f2c9246 Remove most of the uses of SDOperandPtr, usually replacing it with a
simple const SDOperand*, which is what's usually needed.

For AddNodeIDOperands, which is small, just duplicate the function to
accept an SDUse*.

For SelectionDAG::getNode - Add an overload that accepts SDUse* that
copies the operands into a temporary SDOperand array, but also has
special-case checks for 0 through 3 operands to avoid the copy in
the common cases.

llvm-svn: 53183
2008-07-07 18:26:29 +00:00
Dan Gohman 56e3f63ec5 Add explicit keywords.
llvm-svn: 53179
2008-07-07 18:00:37 +00:00
Dan Gohman e916fd5b96 Use empty() instead of size().
llvm-svn: 53178
2008-07-07 17:52:43 +00:00
Dan Gohman 38740a98b2 Make DenseMap's insert return a pair, to more closely resemble std::map.
llvm-svn: 53177
2008-07-07 17:46:23 +00:00
Evan Cheng d8b83e1292 LegalizeSetCCOperands should legalize the result of ExpandLibCall. Patch by Richard Osborne.
llvm-svn: 53169
2008-07-07 07:18:09 +00:00
Nick Lewycky f5c547d499 Handle 'lshr' instruction with SCEVUDiv object.
Comment the xor %x, -1 case.

llvm-svn: 53167
2008-07-07 06:15:49 +00:00
Bill Wendling ecf34435f4 Prevent option name conflict.
llvm-svn: 53166
2008-07-07 05:42:27 +00:00
Duncan Sands 2fa6cf5c2f LegalizeTypes soft-float support for stores of a
float value.

llvm-svn: 53165
2008-07-07 00:08:12 +00:00
Anton Korobeynikov a970df57bc Add convenient helper for checking whether global is weak in linker sense
having weak or linkonce or common or extweak LLVM linkage.

llvm-svn: 53158
2008-07-05 23:48:30 +00:00
Anton Korobeynikov 9cd0b50f16 Override weak stuff during linking of aliases. This fixes PR2463.
llvm-svn: 53156
2008-07-05 23:33:22 +00:00
Anton Korobeynikov 1bb56dedf5 Properly link alias and function decls. This fixes PR2146
llvm-svn: 53154
2008-07-05 23:03:21 +00:00
Nick Lewycky 9f1a4dc672 Fix missed optimization opportunity when analyzing cast of mul and select.
llvm-svn: 53151
2008-07-05 21:19:34 +00:00
Mon P Wang 5c755ff51b Fixed generating incorrect aligned stores that I backout of r53031
that fixed problems in EmitStackConvert where the source and target type
have different alignment by creating a stack slot with the max
alignment of source and target type.

llvm-svn: 53150
2008-07-05 20:40:31 +00:00
Bruno Cardoso Lopes c9c3f49993 Several changes to Mips backend, experimental fp support being the most
important.
- Cleanup in the Subtarget info with addition of new features, not all support
  yet, but they allow the future inclusion of features easier. Among new features,
  we have : Arch family info (mips1, mips2, ...), ABI info (o32, eabi), 64-bit
  integer
  and float registers, allegrex vector FPU (VFPU), single float only support.
- TargetMachine now detects allegrex core.
- Added allegrex (Mips32r2) sext_inreg instructions.
- *Added Float Point Instructions*, handling single float only, and
  aliased accesses for 32-bit FPUs.
- Some cleanup in FP instruction formats and FP register classes.
- Calling conventions improved to support mips 32-bit EABI.
- Added Asm Printer support for fp cond codes.
- Added support for sret copy to a return register.
- EABI support added into LowerCALL and FORMAL_ARGS.
- MipsFunctionInfo now keeps a virtual register per function to track the
  sret on function entry until function ret.
- MipsInstrInfo FP support into methods (isMoveInstr, isLoadFromStackSlot, ...),
  FP cond codes mapping and initial FP Branch Analysis.
- Two new Mips SDNode to handle fp branch and compare instructions : FPBrcond,
  FPCmp
- MipsTargetLowering : handling different FP classes, Allegrex support, sret
  return copy, no homing location within EABI, non 32-bit stack objects
  arguments, and asm constraint for float.

llvm-svn: 53146
2008-07-05 19:05:21 +00:00
Duncan Sands 93e180342a Rather than having a different custom legalization
hook for each way in which a result type can be
legalized (promotion, expansion, softening etc),
just use one: ReplaceNodeResults, which returns
a node with exactly the same result types as the
node passed to it, but presumably with a bunch of
custom code behind the scenes.  No change if the
new LegalizeTypes infrastructure is not turned on.

llvm-svn: 53137
2008-07-04 11:47:58 +00:00
Duncan Sands 04fb6bf468 Linux also does not require exception handling
moves in order to get correct debug info.  Since
I can't imagine how any target could possibly
be any different, I've just stripped out the
option: now all the world's like Darwin!

llvm-svn: 53134
2008-07-04 09:55:48 +00:00
Bill Wendling 4bb9089db7 Don't return std::vector by value, but pass it in by reference to be filled.
llvm-svn: 53123
2008-07-03 23:13:02 +00:00
Bill Wendling 2e50689435 Revert my previous check-in that split up MachineModuleInfo. It turns out to
slow the compiler down at -O0 some 30% or more. Ooops.

llvm-svn: 53120
2008-07-03 22:53:42 +00:00
Evan Cheng fad8be450d Backed out 53031.
llvm-svn: 53110
2008-07-03 18:20:14 +00:00
Evan Cheng 633e22b3ee Back out 53091 for now.
llvm-svn: 53109
2008-07-03 18:11:29 +00:00
Owen Anderson 3ea90a7d55 Use information already present in the ValueTable to fast-fail when we know there won't be a value number match. This speeds up GVN on a case where there are very few redundancies by ~25%.
llvm-svn: 53108
2008-07-03 17:44:33 +00:00
Devang Patel eb611ddeb2 Do not try to update dominator info while manipulating CFG. This code does not handle all cases and keeps invalid dom info around some cases, which misleads other passes down stream.
Right now, dom info is recaluclated in the end if the loop is switched.

llvm-svn: 53106
2008-07-03 17:37:52 +00:00
Owen Anderson d57cdc3c60 Remove the ability for ADCE to remove unreachable blocks in loop nests, because, as Eli pointed out, SimplifyCFG already does this.
llvm-svn: 53104
2008-07-03 17:21:41 +00:00
Evan Cheng 7d98a48f15 - Remove calls to copyKillDeadInfo which is an N^2 function. Instead, propagate kill / dead markers as new instructions are constructed in foldMemoryOperand, convertToThressAddress, etc.
- Also remove LiveVariables::instructionChanged, etc. Replace all calls with cheaper calls which update VarInfo kill list.

llvm-svn: 53097
2008-07-03 09:09:37 +00:00
Matthijs Kooijman ba5d7efc6c Add newline at the end of Constants.cpp.
llvm-svn: 53092
2008-07-03 07:46:41 +00:00
Anton Korobeynikov 4827deb74f llvm-gcc sometimes marks external declarations hidden, because intializers are
processed separately. Honour such situation and emit PIC relocations properly
in such case.

llvm-svn: 53091
2008-07-03 07:43:14 +00:00
Bill Wendling a96eabaab7 Remove unused function.
llvm-svn: 53090
2008-07-03 07:10:03 +00:00
Devang Patel f94b9826b5 Preserve dom info.
llvm-svn: 53089
2008-07-03 07:04:22 +00:00
Devang Patel 874a3a0b0d Keep track of inherited analysis (e.g. dominator tree).
llvm-svn: 53088
2008-07-03 07:02:30 +00:00
Devang Patel 226edd1826 Remove extra FIXME
llvm-svn: 53087
2008-07-03 06:50:04 +00:00
Devang Patel c4dcf82a16 Reconstruct dom info, if loop is unswitched.
llvm-svn: 53086
2008-07-03 06:48:21 +00:00
Devang Patel e491bb8845 LoopUnswitch does not preserve dominator info in all cases.
llvm-svn: 53085
2008-07-03 05:55:03 +00:00
Dan Gohman b261292917 Reapply r52988, "Simplify addRegisterKilled and addRegisterDead." The
254.gap failure was not due to this mod.

llvm-svn: 53068
2008-07-03 01:18:51 +00:00
Dan Gohman 7722f791f6 Use operator new instead of new char[].
llvm-svn: 53066
2008-07-03 00:53:09 +00:00
Dan Gohman f3c4d7f877 Avoid unnecessarily copying APInt objects.
llvm-svn: 53065
2008-07-03 00:52:03 +00:00
Dan Gohman 4c6db53a36 Correct a comment.
llvm-svn: 53064
2008-07-03 00:51:05 +00:00
Evan Cheng 9f8b66f3f1 Use std::replace instead of std::find and push_back.
llvm-svn: 53063
2008-07-03 00:28:27 +00:00
Devang Patel 7dcfff392a Undo previous patch. It is not that simple to fix dom info here.
llvm-svn: 53062
2008-07-03 00:08:13 +00:00
Evan Cheng 7a265d83bf - Add LiveVariables::replaceKillInstruction. This does a subset of instructionChanged. That is, it only update the VarInfo.kills if the new instruction is known to have the correct dead and kill markers.
- CommuteInstruction copies kill / dead markers over to new instruction. So use replaceKillInstruction instead.

llvm-svn: 53061
2008-07-03 00:07:19 +00:00
Evan Cheng c939f45fe7 commuteInstruction should preserve dead markers.
llvm-svn: 53060
2008-07-03 00:04:51 +00:00
Owen Anderson 30cc028e4a Make LiveVariables even more optional, by making it optional in the call to TargetInstrInfo::convertToThreeAddressInstruction
Also, if LV isn't around, then TwoAddr doesn't need to be updating flags, since they won't have been set in the first place.

llvm-svn: 53058
2008-07-02 23:41:07 +00:00
Dan Gohman 22e9707480 Replace a few uses of SelectionDAG::getTargetNode with
SelectionDAG::SelectNodeTo in the instruction selector. This
updates existing nodes in place instead of creating new ones.

Go back to selecting ISD::DBG_LABEL nodes into
TargetInstrInfo::DBG_LABEL nodes instead of leaving them
unselected, now that SelectNodeTo allows us to update them
in place.

llvm-svn: 53057
2008-07-02 23:23:19 +00:00
Devang Patel 5adfcb5783 Preserve dom info while simplifing loop after the unswitch.
llvm-svn: 53052
2008-07-02 22:58:54 +00:00
Dan Gohman 1b46bfecfe Revert r52988. It broke 254.gap on x86-64.
llvm-svn: 53050
2008-07-02 22:12:55 +00:00
Owen Anderson 8c10c2482a TwoAddressInstructionPass doesn't really require LiveVariables, it just needs to update it if it's already around.
llvm-svn: 53049
2008-07-02 21:28:58 +00:00
Owen Anderson 488b89f608 Use df_ext_iterator to capture the reachable set without allocating an extra set.
Also, move large sets and vectors out of instance variables and onto the stack,
and give them more reasonable sizes.

llvm-svn: 53044
2008-07-02 18:41:09 +00:00
Owen Anderson 6acc782dad Avoid a redundant call.
llvm-svn: 53040
2008-07-02 18:15:31 +00:00
Owen Anderson 323b5755a6 Add support to ADCE for pruning unreachable blocks. This addresses the final
part of PR2509.

llvm-svn: 53038
2008-07-02 18:05:19 +00:00
Duncan Sands 739a0548c4 Add a new getMergeValues method that does not need
to be passed the list of value types, and use this
where appropriate.  Inappropriate places are where
the value type list is already known and may be
long, in which case the existing method is more
efficient.

llvm-svn: 53035
2008-07-02 17:40:58 +00:00
Owen Anderson 9edcf24da9 Use DenseSet rather than SmallPtrSet for the alive set. Using SmallPtrSet
with a huge "size" parameter is actually quite inefficient.

llvm-svn: 53034
2008-07-02 17:32:04 +00:00
Owen Anderson b22a640fe4 A better fix for PR2503 that doesn't pessimize GVN in the presence of unreachable blocks.
llvm-svn: 53032
2008-07-02 17:20:16 +00:00
Mon P Wang 4b7c1acf26 Fixed problem in EmitStackConvert where the source and target type
have different alignment by creating a stack slot with the max
alignment of source and target type.

llvm-svn: 53031
2008-07-02 17:07:12 +00:00
Chris Lattner 6b2c4f6143 instead of aborting on shifts of i1, just implicitly fold them.
The dag combiner can produce a shift of i1 when folding icmp i1's.

llvm-svn: 53030
2008-07-02 17:01:57 +00:00
Duncan Sands d353c265ff Fix typo compounded by a cut-and-pasto.
llvm-svn: 53012
2008-07-02 10:03:53 +00:00
Duncan Sands ed283c49d5 Let AnalyzeNewNode take care of calling ExpungeNode.
This makes sure that all new nodes are expunged, not
just those the top node of a new subtree.

llvm-svn: 53011
2008-07-02 09:56:41 +00:00
Evan Cheng 7e4abde27c - Use a faster priority comparison function if -fast.
- Code clean up.

llvm-svn: 53010
2008-07-02 09:23:51 +00:00
Chris Lattner bedd1b2427 Add a new (simple) StringMap::clear method, patch by Pratik
Solanki!

llvm-svn: 53008
2008-07-02 05:26:32 +00:00
Devang Patel ed50fb5b61 reuse vectors.
llvm-svn: 53007
2008-07-02 01:44:29 +00:00
Devang Patel 57d94d6304 Fix comment.
llvm-svn: 53006
2008-07-02 01:31:19 +00:00
Devang Patel e149d4ed4d Preserve loop data so that it is not fetched everytime it is needed.
Keep track of currentLoop.

llvm-svn: 53005
2008-07-02 01:18:13 +00:00
Bill Wendling 536fb95321 Use the canonical form for getting an empty structure.
llvm-svn: 53003
2008-07-02 00:50:02 +00:00
Bill Wendling 82a9321f56 Sorry. I couldn't sleep at night knowing I put these ugly casts into the source tree.
llvm-svn: 53001
2008-07-02 00:35:47 +00:00
Owen Anderson 31936d6ab6 Add a version of AddString that takes a const char* so we can avoid extraneous
conversions to std::string.

llvm-svn: 52995
2008-07-01 23:49:59 +00:00
Bill Wendling b7bd02be57 Darwin doesn't need exception handling information for the "move" info when
debug information is being output, because it's leet!

llvm-svn: 52994
2008-07-01 23:34:48 +00:00
Evan Cheng c963f6c14b Avoid creating expensive comment string if it's not going to be printed.
llvm-svn: 52992
2008-07-01 23:18:29 +00:00
Owen Anderson 501f207bdf No need to use std::distance. We can just count the number of operands
much more cheaply.

llvm-svn: 52990
2008-07-01 22:34:11 +00:00
Evan Cheng f3202a6375 Simplify addRegisterKilled and addRegisterDead.
llvm-svn: 52988
2008-07-01 22:21:21 +00:00
Bill Wendling c8cdb883df - Update comments.
- Don't use GlobalVariable::LinkageTypes when unsigned works.

llvm-svn: 52987
2008-07-01 22:08:01 +00:00
Dale Johannesen ad6b3a6ed2 Fix longstanding thinko: don't exclude
predessors of exit blocks from tail merging
consideration.

llvm-svn: 52985
2008-07-01 21:50:14 +00:00
Devang Patel 99ad4ba227 Disable dom info verifier by default.
llvm-svn: 52983
2008-07-01 21:36:11 +00:00
Evan Cheng 4c609abd90 Eliminate a compile time warning.
llvm-svn: 52982
2008-07-01 21:35:46 +00:00
Owen Anderson 1d952533c2 Add a version of AsmPrinter::EOL that takes a const char* so that we don't have to do as many implicit std::string constructions.
Unfortunately, this doesn't appear to translate to a real speedup in practice.

llvm-svn: 52981
2008-07-01 21:16:27 +00:00
Bill Wendling c362465dad Remove warning about initialization order.
llvm-svn: 52980
2008-07-01 21:00:31 +00:00
Devang Patel 67c79a4992 Fix typos in comments.
Thanks for the feedback!

llvm-svn: 52978
2008-07-01 19:50:56 +00:00
Dan Gohman e61e120c17 Prune a few dependencies on MachineFunction.h.
llvm-svn: 52976
2008-07-01 18:15:35 +00:00
Evan Cheng 33696cd9cf Do run ComputeLiveOutVRegInfo with -fast.
llvm-svn: 52975
2008-07-01 18:15:04 +00:00
Evan Cheng 2c9773155a Do not use computationally expensive scheduling heuristics with -fast.
llvm-svn: 52971
2008-07-01 18:05:03 +00:00
Evan Cheng fb2573554c Apply Chris' suggestion.
llvm-svn: 52970
2008-07-01 17:59:20 +00:00
Devang Patel 9dbe4d15ec Add dom info verifier.
llvm-svn: 52967
2008-07-01 17:44:24 +00:00
Owen Anderson 3684013910 Make the subregister hashtable output more readable by wrapping the lines,
and mark it const along with the associated changes to TargetRegisterInfo.

llvm-svn: 52966
2008-07-01 17:34:38 +00:00
Duncan Sands b55e5ece96 Highlight that getMergeValues optimization is
being suppressed here.

llvm-svn: 52952
2008-07-01 08:00:49 +00:00
Owen Anderson 2a3a1127e2 Properly handle cases where a predecessor of the block being queried on is unreachable.
This fixes PR2503, though we should also fix other passes not to emit this kind of code.

llvm-svn: 52946
2008-07-01 00:40:58 +00:00
Owen Anderson 49cce257ae Replace the dynamically computed std::set lookup method for subregisters with a hashtable-based
version that is computed by tblgen at the time LLVM is compiled.

llvm-svn: 52945
2008-07-01 00:18:52 +00:00
Dan Gohman b58aff4858 Minimize duplicated code in AsmPrinter::printLabel.
llvm-svn: 52944
2008-07-01 00:16:26 +00:00
Dan Gohman fb19f9402b Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating
the need for a flavor operand, and add a new SDNode subclass,
LabelSDNode, for use with them to eliminate the need for a label id
operand.

Change instruction selection to let these label nodes through
unmodified instead of creating copies of them. Teach the MachineInstr
emitter how to emit a MachineInstr directly from an ISD label node.

This avoids the need for allocating SDNodes for the label id and
flavor value, as well as SDNodes for each of the post-isel label,
label id, and label flavor.

llvm-svn: 52943
2008-07-01 00:05:16 +00:00
Evan Cheng 819b770868 Suppress compiler warning.
llvm-svn: 52934
2008-06-30 22:33:56 +00:00
Evan Cheng 6a323e16f2 Don't run stack slot coloring if -fast.
llvm-svn: 52933
2008-06-30 22:33:16 +00:00
Dan Gohman 9cedf2b7c6 Don't use ISD namespace opcodes for MachineInstrs.
llvm-svn: 52932
2008-06-30 22:23:08 +00:00
Dan Gohman e09a1c88cf Use a simpler but equivalent form of RecordSource.
llvm-svn: 52931
2008-06-30 22:21:03 +00:00
Evan Cheng 0d3628946f Add timing report for various sub-passes under SelectionDAGISel.
llvm-svn: 52930
2008-06-30 22:10:09 +00:00
Dan Gohman 6896901e2c std::ostream and std::string microoptimizations for asm printing.
llvm-svn: 52929
2008-06-30 22:03:41 +00:00
Dan Gohman a76e60a77a Use reserve.
SelectionDAG::allnodes_size is linear, but that doesn't appear to
outweigh the benefit of reducing heap traffic. If it does become a
problem, we should teach SelectionDAG to keep a count of how many
nodes are live, because there are several other places where that
information would be useful as well.

llvm-svn: 52926
2008-06-30 21:04:06 +00:00
Dan Gohman 4246cf8eea Update comments to new-style syntax.
llvm-svn: 52925
2008-06-30 21:00:56 +00:00
Dan Gohman 5c73a886b4 Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect its
purpose, and give it a custom SDNode subclass so that it doesn't
need to have line number, column number, filename string, and
directory string, all existing as individual SDNodes to be the
operands.

This was the only user of ISD::STRING, StringSDNode, etc., so
remove those and some associated code.

This makes stop-points considerably easier to read in
-view-legalize-dags output, and reduces overhead (creating new
nodes and copying std::strings into them) on code containing
debugging information.

llvm-svn: 52924
2008-06-30 20:59:49 +00:00
Evan Cheng 0711d68fa7 Split scheduling from instruction selection.
llvm-svn: 52923
2008-06-30 20:45:06 +00:00
Dale Johannesen 659aeb6186 No need to align the stack if there are no stack
objects.  Fixes a couple of tests on Linux.

llvm-svn: 52921
2008-06-30 20:40:16 +00:00
Evan Cheng d206e2ac2a Remove unneeded include.
llvm-svn: 52920
2008-06-30 20:38:22 +00:00
Dan Gohman 31c8123d07 Replace some std::vectors that showed up in heap profiling with
SmallVectors. Change the signature of TargetLowering::LowerArguments
to avoid returning a vector by value, and update the two targets
which still use this directly, Sparc and IA64, accordingly.

llvm-svn: 52917
2008-06-30 20:31:15 +00:00
Dan Gohman 328e26d0ac Correct the allocation size for CCState's UsedRegs member, which
only needs one bit for each register. UsedRegs is a SmallVector
sized at 16, so this eliminates a heap allocation/free for every
call and return processed by Legalize on most targets.

llvm-svn: 52915
2008-06-30 20:25:31 +00:00
Devang Patel 81ea3bb55c Move dominator info printer into tool/opt/GraphPrinters.cpp
llvm-svn: 52907
2008-06-30 17:32:58 +00:00
Duncan Sands 9e08148f29 ExpungeNode is only needed for new nodes! This
fixes CodeGen/PowerPC/2008-06-19-LegalizerCrash.ll
when using the new LegalizeTypes infrastructure.

llvm-svn: 52903
2008-06-30 16:43:45 +00:00
Duncan Sands 36410f6cde Support for VAARG. As noted in a comment, this is
wrong for types like x86 long double and i1, but
no worse than what is done in LegalizeDAG.

llvm-svn: 52898
2008-06-30 13:55:15 +00:00
Duncan Sands dd5354df89 Support for promoting select_cc operands.
llvm-svn: 52895
2008-06-30 11:50:11 +00:00
Duncan Sands 1ae6ef83ee Revert the SelectionDAG optimization that makes
it impossible to create a MERGE_VALUES node with
only one result: sometimes it is useful to be able
to create a node with only one result out of one of
the results of a node with more than one result, for
example because the new node will eventually be used
to replace a one-result node using ReplaceAllUsesWith,
cf X86TargetLowering::ExpandFP_TO_SINT.  On the other
hand, most users of MERGE_VALUES don't need this and
for them the optimization was valuable.  So add a new
utility method getMergeValues for creating MERGE_VALUES
nodes which by default performs the optimization.
Change almost everywhere to use getMergeValues (and
tidy some stuff up at the same time).

llvm-svn: 52893
2008-06-30 10:19:09 +00:00
Evan Cheng da3db11db3 - Re-apply 52748 and friends with fix. GetConstantStringInfo() returns an empty string for ConstantAggregateZero case which surprises selectiondag.
- Correctly handle memcpy from constant string which is zero-initialized.

llvm-svn: 52891
2008-06-30 07:31:25 +00:00
Chris Lattner 9d3740ed1c Implement split and scalarize for SELECT_CC, fixing PR2504
llvm-svn: 52887
2008-06-30 02:43:01 +00:00
Nick Lewycky 48b1fd74dc Add a value range analysis that lazily computes ranges using ScalarEvolutions.
llvm-svn: 52885
2008-06-30 00:04:21 +00:00
Anton Korobeynikov a7c583d584 Revert (52748 and friends):
Move GetConstantStringInfo to lib/Analysis. Remove
string output routine from Constant. Update all
callers. Change debug intrinsic api slightly to
accomodate move of routine, these now return values
instead of strings.

This unbreaks llvm-gcc bootstrap.

llvm-svn: 52884
2008-06-29 17:57:03 +00:00
Anton Korobeynikov 2e052a81fd Start refactoring of asmprinters: provide a TAI hook, which will select a 'section kind' for a global.
llvm-svn: 52868
2008-06-28 13:45:57 +00:00
Anton Korobeynikov 3c21b05225 Unbreak
llvm-svn: 52866
2008-06-28 11:10:06 +00:00
Anton Korobeynikov a54216acf3 Temporary rever invalid commit
llvm-svn: 52865
2008-06-28 11:09:48 +00:00
Anton Korobeynikov ab9ff5a44f Move printing of module-level GVs into dedicated helper
llvm-svn: 52864
2008-06-28 11:09:32 +00:00
Anton Korobeynikov 9c53d0f0df Use common naming convention
llvm-svn: 52863
2008-06-28 11:09:17 +00:00
Anton Korobeynikov 76b8828c25 Factor out stuff into helper function
llvm-svn: 52862
2008-06-28 11:09:01 +00:00
Anton Korobeynikov 7d345eb4b1 Cleanup
llvm-svn: 52861
2008-06-28 11:08:44 +00:00
Anton Korobeynikov 016d1d0470 Remove X86SharedAsmPrinter
llvm-svn: 52860
2008-06-28 11:08:27 +00:00
Anton Korobeynikov 5643cb7ecc whitespace cleanup
llvm-svn: 52859
2008-06-28 11:08:09 +00:00
Anton Korobeynikov 4e9dfe8391 Make intel asmprinter child of generic asmprinter, not x86 shared asm printer. This leads to some code duplication, which will be resolved later.
llvm-svn: 52858
2008-06-28 11:07:54 +00:00
Anton Korobeynikov bc7cce6b74 Cleanup
llvm-svn: 52857
2008-06-28 11:07:35 +00:00
Anton Korobeynikov 44e99f47ad Whitespace cleanup
llvm-svn: 52856
2008-06-28 11:07:18 +00:00
Chris Lattner 3cffa471d9 Really fix the bootstrap failure.
llvm-svn: 52854
2008-06-28 06:24:50 +00:00
Chris Lattner 1701328675 Add back the capability to include nul characters in strings with
GetConstantStringInfo.  This will hopefully restore llvm-gcc to 
happy bootstrap land.

llvm-svn: 52851
2008-06-28 05:33:32 +00:00
Chris Lattner ebf1f67193 Tighten up checking.
llvm-svn: 52850
2008-06-28 04:37:04 +00:00
Dan Gohman 6f7b5a6392 When folding a bitcast into a load or store, preserve the alignment
information of the original load or store, which is checked to be
at least as good, and possibly better.

llvm-svn: 52849
2008-06-28 00:45:22 +00:00
Seo Sanghyeon 8f7291387f Fix GetMainExecutable. Patch by Sam Bishop.
llvm-svn: 52847
2008-06-27 22:55:30 +00:00
Evan Cheng 9a357637ef Looks like this condition is inverted.
llvm-svn: 52841
2008-06-27 22:11:49 +00:00
Chris Lattner 36b4e8f2fe implement some fixme's by making "autorenaming" in the value symbol table not
thrash the heap with string stuff (e.g. utostr).

llvm-svn: 52838
2008-06-27 21:26:26 +00:00
Chris Lattner 42e983e5a9 simplify some code to avoid string thrashing.
llvm-svn: 52837
2008-06-27 21:25:24 +00:00
Anton Korobeynikov 266f1cc1e4 Use StringSet instead of std::set<std::string>
llvm-svn: 52836
2008-06-27 21:22:49 +00:00
Chris Lattner e43649fa62 Add a new version of Module::getFunction that takes a const char* instead
of a std::string.  This avoids copying the string to the heap in common
cases.  Patch by Pratik Solanki!

llvm-svn: 52834
2008-06-27 21:09:10 +00:00
Devang Patel abc6e6ab9f Add dominator info printer pass.
llvm-svn: 52829
2008-06-27 16:43:21 +00:00
Anton Korobeynikov c1e80a759f Provide correct encoding for PPC LWARX instructions.
Patch by Gary Benson!

llvm-svn: 52828
2008-06-27 16:10:20 +00:00
Bill Wendling 196c78f0be Reduce number of times .size() is called on a vector. Rename some variables to
match normal naming scheme.

llvm-svn: 52820
2008-06-27 07:13:44 +00:00
Owen Anderson 413f7d90db Use a SmallSet when we can to reduce memory allocations.
This speeds up a particular testcase from 0.0302s to 0.0222s in LiveVariables.

llvm-svn: 52819
2008-06-27 07:05:59 +00:00
Owen Anderson 4f024862f6 Cache subregister relationships in a set in TargetRegisterInfo to allow faster lookups.
This speeds up LiveVariables from 0.6279s to 0.6165s on kimwitu++.

llvm-svn: 52818
2008-06-27 06:56:04 +00:00
Chris Lattner dc3f946137 fix the regressions from Eric's patch by making GetConstantStringInfo
tolerate a non-nul-terminated string, and handling a direct global 
reference.

llvm-svn: 52813
2008-06-27 03:36:51 +00:00
Chris Lattner 735705bc3e simplify this check, GetConstantStringInfo validates that a
global is constant already.  No functionality change.

llvm-svn: 52812
2008-06-27 03:18:41 +00:00
Chris Lattner b32a9ef00f when linking globals, make sure to preserve the address space of the global.
llvm-svn: 52810
2008-06-27 03:10:24 +00:00
Bill Wendling 3d92cbffc6 Cruft left from patch revert...sorry. :-(
llvm-svn: 52808
2008-06-27 01:32:08 +00:00
Bill Wendling fcbb9525d0 Reverting broken patch r52803.
llvm-svn: 52806
2008-06-27 01:27:56 +00:00
Owen Anderson 21498f52b2 Don't perform expensive queries checking for super and sub registers when we know that there aren't any.
This speed up LiveVariables on instcombine at -O0 -g from 0.3855s to 0.3503s.  Look for more improvements in this area soon!

llvm-svn: 52804
2008-06-27 01:22:50 +00:00
Bill Wendling f96d046d7c - Remove a use of std::vector.
- Make sure that we're not recalculating the size of a vector
  that never changes.

llvm-svn: 52803
2008-06-27 00:56:36 +00:00
Bill Wendling c758698d2c Refactor the DebugInfoDesc stuff out of the MachineModuleInfo file. Clean up
some uses of std::vector, where it's return std::vector by value. Yuck!

llvm-svn: 52800
2008-06-27 00:09:40 +00:00
Chris Lattner df1cbdd645 duncan points out that isOperationLegal includes a check for
type legality.  Thanks Duncan!

llvm-svn: 52786
2008-06-26 17:16:00 +00:00
Owen Anderson 7df0d58535 Don't create a whole new string just to copy the elements into it.
llvm-svn: 52785
2008-06-26 17:06:02 +00:00
Matthijs Kooijman f61fd54237 Make LLVM compile on DragonFly BSD (PR2499).
Patch by Hasso Tepper!

llvm-svn: 52781
2008-06-26 10:36:58 +00:00
Bill Wendling 3fdca23ee1 Cleanup for unitialized types. Patch by Jean-Daniel Dupas!
llvm-svn: 52775
2008-06-26 08:32:05 +00:00
Chris Lattner d4741e803f "An improved Mach-O file type detection for sys::IdentifyFileType()
This patch add supports for single architecture mach-o files (the current implementation only support Universal Binary), and solve the signature conflict between java class and Universal Binary magics.

Note that this function will always returned dynamic library for Universal Binaries (like the current implementation) because the binary type is not include in the file header."

Patch by Jean-Daniel Dupas!

llvm-svn: 52766
2008-06-26 05:17:18 +00:00
Owen Anderson db0a48b1a7 Reserve the size we'll need in advance.
llvm-svn: 52763
2008-06-26 04:47:41 +00:00
Dale Johannesen a2de8eab61 Fixes the last x86-64 test failure in compat.exp:
<16 x float> is 64-byte aligned (for some reason),
which gets us into the stack realignment code.  The
computation changing FP-relative offsets to SP-relative
was broken, assiging a spill temp to a location
also used for parameter passing.  This
fixes it by rounding up the stack frame to a multiple
of the largest alignment (I concluded it wasn't fixable
without doing this, but I'm not very sure.)

llvm-svn: 52750
2008-06-26 01:51:13 +00:00
Eric Christopher 3f1c75c4d8 Remove unused function.
llvm-svn: 52749
2008-06-26 01:19:35 +00:00
Eric Christopher d0ab9c47e6 Move GetConstantStringInfo to lib/Analysis. Remove
string output routine from Constant. Update all
callers. Change debug intrinsic api slightly to
accomodate move of routine, these now return values
instead of strings.

llvm-svn: 52748
2008-06-26 00:31:12 +00:00
Chris Lattner b1e66ce3bb when we know the signbit of an input to uint_to_fp is zero,
change it to sint_to_fp on targets where that is cheaper (and
visaversa of course).  This allows us to compile uint_to_fp to:

_test:
	movl	4(%esp), %eax
	shrl	$23, %eax
	cvtsi2ss	%eax, %xmm0
	movl	8(%esp), %eax
	movss	%xmm0, (%eax)
	ret

instead of:

	.align	3
LCPI1_0:					##  double
	.long	0	## double least significant word 4.5036e+15
	.long	1127219200	## double most significant word 4.5036e+15
	.text
	.align	4,0x90
	.globl	_test
_test:
	subl	$12, %esp
	movl	16(%esp), %eax
	shrl	$23, %eax
	movl	%eax, (%esp)
	movl	$1127219200, 4(%esp)
	movsd	(%esp), %xmm0
	subsd	LCPI1_0, %xmm0
	cvtsd2ss	%xmm0, %xmm0
	movl	20(%esp), %eax
	movss	%xmm0, (%eax)
	addl	$12, %esp
	ret

llvm-svn: 52747
2008-06-26 00:16:49 +00:00
Owen Anderson b55675e1db Remember which MachineOperand we were processing, so we don't have to scan the list to find it again later.
This speeds up live intervals from 0.37s to 0.30s on instcombine.

llvm-svn: 52745
2008-06-25 23:39:39 +00:00
Dan Gohman 39b07db75a Fix the text in an assert string.
llvm-svn: 52744
2008-06-25 22:14:43 +00:00
Evan Cheng 3fc2372d3a - Fix a x86 vector isel bug: illegal transformation of a vector_shuffle into a
shift.
- Add a readme entry for a missing vector_shuffle optimization that results in
  awful codegen.

llvm-svn: 52740
2008-06-25 20:52:59 +00:00
Duncan Sands 33ff5c8d0d Add support for expanding PPC 128 bit floats.
For this it is convenient to permit floats to
be used with EXTRACT_ELEMENT, so I tweaked
things to allow that.  I also added libcalls
for ppcf128 to i32 forms of FP_TO_XINT, since
they exist in libgcc and this case can certainly
occur (and does occur in the testsuite) - before
the i64 libcall was being used.  Also, the
XINT_TO_FP result seemed to be wrong when
the argument is an i128: the wrong fudge
factor was added (the i32 and i64 cases were
handled directly, but the i128 code fell
through to some generic softening code which
seemed to think it was i64 to f32!).  So I
fixed it by adding a fudge factor that I
found in my breakfast cereal.

llvm-svn: 52739
2008-06-25 20:24:48 +00:00
Chris Lattner 58ecfbdad6 Implement JIT support for global aliases, patch by David Chisnall!
llvm-svn: 52738
2008-06-25 20:21:35 +00:00
Evan Cheng 88ca48b09d Restore DeadArgElim back to 52570. It's breaking 447.dealII.
llvm-svn: 52736
2008-06-25 18:10:09 +00:00
Chris Lattner d3406fc2a7 Switch the PPC backend and target-independent JIT to use the libsystem
InvalidateInstructionCache method instead of calling through
a hook on the JIT.  This is a host feature, not a target feature.

llvm-svn: 52734
2008-06-25 17:18:44 +00:00
Chris Lattner b4325a8316 fix compilation errors in my previous patch
llvm-svn: 52733
2008-06-25 17:17:53 +00:00
Chris Lattner 881d537d2c Add a new InvalidateInstructionCache method to sys::Memory.
llvm-svn: 52731
2008-06-25 17:14:10 +00:00
Dan Gohman 906b630f83 SimpleInstructionSelector is here no more.
llvm-svn: 52725
2008-06-25 16:38:59 +00:00
Duncan Sands 6920b254ad Add/complete support for integer and float
select_cc and friends.  This code could be
factorized a bit but I'm not sure that it's
worth it.

llvm-svn: 52724
2008-06-25 16:34:21 +00:00
Duncan Sands 1b03c2ac98 Pacify gcc-4.3.
llvm-svn: 52723
2008-06-25 16:31:18 +00:00
Dan Gohman aa01afd47c Remove the OrigVT member from AtomicSDNode, as it is redundant with
the base SDNode's VTList.

llvm-svn: 52722
2008-06-25 16:07:49 +00:00
Mon P Wang 6a490371c9 Added MemOperands to Atomic operations since Atomics touches memory.
Added abstract class MemSDNode for any Node that have an associated MemOperand
Changed atomic.lcs => atomic.cmp.swap, atomic.las => atomic.load.add, and
atomic.lss => atomic.load.sub

llvm-svn: 52706
2008-06-25 08:15:39 +00:00
Matthijs Kooijman 2e2001d8b9 Fix a (false) warning on darwin.
llvm-svn: 52705
2008-06-25 08:12:16 +00:00
Matthijs Kooijman 4e1cf1e7d7 Fix some cosmetics in comments.
llvm-svn: 52704
2008-06-25 08:10:21 +00:00
Evan Cheng 5fd28b54c7 - Use O(1) check of basic block size limit.
- Avoid speculatively execute vector ops.

llvm-svn: 52703
2008-06-25 07:50:12 +00:00
Chris Lattner c9c81fb0df Fix PR2488, a case where we deleted stack restores too aggressively.
llvm-svn: 52702
2008-06-25 05:59:28 +00:00
Evan Cheng 73db52ebf8 Enable two-address remat by default.
llvm-svn: 52701
2008-06-25 01:16:38 +00:00
Owen Anderson ee9c30d435 Use push_back rather than operator[], which is incorrect in this cases. Unfortunately, this slow the testcase down a little bit,
but only marginally.

llvm-svn: 52700
2008-06-25 01:05:05 +00:00
Dan Gohman 5ceb8b676c Append to the ActiveTimers std::vector before looking at the timer instead
of after, so that any reallocation it does doesn't get counted for the pass
being timed.  This probably doesn't account for a timing discrepancy I was
looking into, but I'm fixing it anyway.

llvm-svn: 52693
2008-06-24 22:07:07 +00:00
Dale Johannesen e5f4ffbdf1 Add v2f32 (MMX) type to X86. Support is primitive:
load,store,call,return,bitcast.  This is enough to
make call and return work.

llvm-svn: 52691
2008-06-24 22:01:44 +00:00
Owen Anderson 79c69bc45f In ConstantArray::getAsString(), we know the size of the resultant string in advance so we can pre-allocate it and just fill in
the entries.  This improves the time for the AsmPrinter on InstructionCombining.cpp from 0.4248s to 0.3370s.

llvm-svn: 52690
2008-06-24 21:58:29 +00:00
Owen Anderson 230b3eb80c Use SmallVector instead of std::vector for a minor compile time improvement.
llvm-svn: 52689
2008-06-24 21:44:59 +00:00
Dan Gohman 04c8bd7e11 Revert 52645, the loop unroller changes. It caused a regression in 252.eon.
llvm-svn: 52688
2008-06-24 20:44:42 +00:00
Dan Gohman 4be44e62b3 Fix a typo in a comment.
llvm-svn: 52687
2008-06-24 18:00:21 +00:00
Dan Gohman 61163850af Use const_cast instead of a C-style cast.
llvm-svn: 52684
2008-06-24 17:47:37 +00:00
Matthijs Kooijman c702e1d32f Commit the new DeadArgElim pass again, this time with the gcc bootstrap failures fixed.
Also add a testcase to reproduce the gcc bootstrap failure in very much reduced form.

llvm-svn: 52677
2008-06-24 16:30:26 +00:00
Matthijs Kooijman 19a6469e1b Rename a few variables to be more consistent.
llvm-svn: 52672
2008-06-24 09:14:10 +00:00