- Mar 03, 2010
-
-
Bill Wendling authored
--- Reverse-merging r97592 into '.': U lib/CodeGen/TargetLoweringObjectFileImpl.cpp llvm-svn: 97657
-
Chris Lattner authored
Scope accelerator. llvm-svn: 97652
-
Chris Lattner authored
entry we're about to process is obviously going to fail, don't bother pushing a scope only to have it immediately be popped. This avoids a lot of scope stack traffic in common cases. Unfortunately, this requires duplicating some of the predicate dispatch. To avoid duplicating the actual logic I pulled each predicate out to its own static function which gets used in both places. llvm-svn: 97651
-
Chris Lattner authored
SwitchOpcodeMatcher) and have DAGISelMatcherOpt form it. This speeds up selection, particularly for X86 which has lots of variants of instructions with only type differences. llvm-svn: 97645
-
Evan Cheng authored
llvm-svn: 97635
-
Bill Wendling authored
llvm-svn: 97631
-
Evan Cheng authored
- Change MachineInstr::isIdenticalTo to take a new option that determines whether it should skip checking defs or at least virtual register defs. This subsumes part of the TargetInstrInfo::isIdentical functionality. - Eliminate TargetInstrInfo::isIdentical and replace it with produceSameValue. In the default case, produceSameValue just checks whether two machine instructions are identical (except for virtual register defs). But targets may override it to check for unusual cases (e.g. ARM pic loads from constant pools). llvm-svn: 97628
-
Evan Cheng authored
llvm-svn: 97627
-
Bill Wendling authored
long test(long x) { return (x & 123124) | 3; } Currently compiles to: _test: orl $3, %edi movq %rdi, %rax andq $123127, %rax ret This is because instruction and DAG combiners canonicalize (or (and x, C), D) -> (and (or, D), (C | D)) However, this is only profitable if (C & D) != 0. It gets in the way of the 3-addressification because the input bits are known to be zero. llvm-svn: 97616
-
- Mar 02, 2010
-
-
Chris Lattner authored
CopyToReg/CopyFromReg/INLINEASM. These are annoying because they have the same opcode before an after isel. Fix this by setting their NodeID to -1 to indicate that they are selected, just like what automatically happens when selecting things that end up being machine nodes. With that done, give IsLegalToFold a new flag that causes it to ignore chains. This lets the HandleMergeInputChains routine be the one place that validates chains after a match is successful, enabling the new hotness in chain processing. This smarter chain processing eliminates the need for "PreprocessRMW" in the X86 and MSP430 backends and enables MSP to start matching it's multiple mem operand instructions more aggressively. I currently #if out the dead code in the X86 backend and MSP backend, I'll remove it for real in a follow-on patch. The testcase changes are: test/CodeGen/X86/sse3.ll: we generate better code test/CodeGen/X86/store_op_load_fold2.ll: PreprocessRMW was miscompiling this before, we now generate correct code Convert it to filecheck while I'm at it. test/CodeGen/MSP430/Inst16mm.ll: Add a testcase for mem/mem folding to make anton happy. :) llvm-svn: 97596
-
Bill Wendling authored
Place the LSDA into the TEXT section on Mach-O. This saves space. llvm-svn: 97592
-
Chris Lattner authored
llvm-svn: 97581
-
Evan Cheng authored
llvm-svn: 97578
-
Evan Cheng authored
llvm-svn: 97577
-
Devang Patel authored
Thanks Duncan! llvm-svn: 97572
-
Chris Lattner authored
was that we weren't properly handling the case when interior nodes of a matched pattern become dead after updating chain and flag uses. Now we handle this explicitly in UpdateChainsAndFlags. llvm-svn: 97561
-
Chris Lattner authored
*does* delete ex-operands that become dead. llvm-svn: 97559
-
Chris Lattner authored
llvm-svn: 97558
-
Chris Lattner authored
DoInstructionSelection. Inline "SelectRoot" into it from DAGISelHeader. Sink some other stuff out of DAGISelHeader into SDISel. Eliminate the various 'Indent' stuff from various targets, which dates to when isel was recursive. 17 files changed, 114 insertions(+), 430 deletions(-) llvm-svn: 97555
-
Eric Christopher authored
llvm-svn: 97545
-
Evan Cheng authored
llvm-svn: 97543
-
Chris Lattner authored
llvm-svn: 97541
-
Chris Lattner authored
stuff now that we don't care about emulating the old broken behavior of the old isel. This eliminates the 'CheckChainCompatible' check (along with IsChainCompatible) which did an incorrect and inefficient scan *up* the chain nodes which happened as the pattern was being formed and does the validation at the end in HandleMergeInputChains when it forms a structural pattern. This scans "down" the graph, which means that it is quickly bounded by nodes already selected. This also handles token factors that get "trapped" in the dag. Removing the CheckChainCompatible nodes also shrinks the generated tables by about 6K for X86 (down to 83K). There are two pieces remaining before I can nuke PreprocessRMW: 1. I xfailed a test because we're now producing worse code in a case that has nothing to do with the change: it turns out that our use of MorphNodeTo will leave dead nodes in the graph which (depending on how the graph is walked) end up causing bogus uses of chains and blocking matches. This is really bad for other reasons, so I'll fix this in a follow-up patch. 2. CheckFoldableChainNode needs to be improved to handle the TF. llvm-svn: 97539
-
Dan Gohman authored
Based on a patch by Micah Villmow for PR6438. llvm-svn: 97538
-
Bill Wendling authored
llvm-svn: 97536
-
Devang Patel authored
Constructors and operators for anonymous aggregates does not names. Do not force empty AT_name attribute in such cases. llvm-svn: 97533
-
Chris Lattner authored
llvm-svn: 97529
-
Chris Lattner authored
new helper function. llvm-svn: 97525
-
- Mar 01, 2010
-
-
Chris Lattner authored
(the most general) the others are dead. llvm-svn: 97511
-
Jakob Stoklund Olesen authored
Don't accidentally produce unspillable intervals for deeply nested loops. llvm-svn: 97496
-
Chris Lattner authored
OPC_SwitchOpcode to use a table lookup instead of having to go through the interpreter for this. llvm-svn: 97469
-
Dan Gohman authored
by Micah Villmow for PR6335. llvm-svn: 97461
-
Chris Lattner authored
llvm-svn: 97441
-
Chris Lattner authored
ComplexPattern at the root be generated multiple times, once for each opcode they are part of. This encourages factoring because the opcode checks get treated just like everything else in the matcher. llvm-svn: 97439
-
Chris Lattner authored
to a scope where every child starts with a CheckOpcode, but executes more efficiently. Enhance DAGISelMatcherOpt to form it. This also fixes a bug in CheckOpcode: apparently the SDNodeInfo objects are not pointer comparable, we have to compare the enum name. llvm-svn: 97438
-
- Feb 28, 2010
-
-
Chris Lattner authored
llvm-svn: 97426
-
Chris Lattner authored
(which gets #included into the middle of each target's DAGISel class) into a .cpp file where it is only compiled once. llvm-svn: 97425
-
Chris Lattner authored
case of MorphNodeTo directly. llvm-svn: 97417
-
Chris Lattner authored
llvm-svn: 97408
-
Dan Gohman authored
llvm-svn: 97360
-