Dan Gohman [Thu, 16 Apr 2009 03:18:22 +0000 (03:18 +0000)]
Expand GEPs in ScalarEvolution expressions. SCEV expressions can now
have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.
Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.
Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69258
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 16 Apr 2009 03:16:12 +0000 (03:16 +0000)]
encode subgroups into the clang .inc file. -Wall now works!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69257
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Thu, 16 Apr 2009 02:33:41 +0000 (02:33 +0000)]
In -fast mode do what FastISel does.
This code could use some refactoring help!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69254
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Thu, 16 Apr 2009 01:33:10 +0000 (01:33 +0000)]
If FastISel is run and it has known DebugLoc then use it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69253
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Thu, 16 Apr 2009 01:31:54 +0000 (01:31 +0000)]
If location where the function was inlined is not know then do not emit debug info describing inlinied region.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69252
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Thu, 16 Apr 2009 00:53:25 +0000 (00:53 +0000)]
start producing subgroup info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69249
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Thu, 16 Apr 2009 00:45:21 +0000 (00:45 +0000)]
Another testcase for IV shortening.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69247
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Wed, 15 Apr 2009 23:31:51 +0000 (23:31 +0000)]
Eliminate zext over (iv | const) or (signed iv),
and sext over (iv | const), if a longer iv is
available. Allow expressions to have more than
one zext/sext parent. All from OpenSSL.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69241
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 22:33:02 +0000 (22:33 +0000)]
make sure that empty diag groups get known by clang.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69235
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 20:55:08 +0000 (20:55 +0000)]
implement support for writing out diagnostic group tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69219
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 20:41:31 +0000 (20:41 +0000)]
s/RootDbgScope/FunctionDbgScope/g
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69216
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Wed, 15 Apr 2009 20:41:02 +0000 (20:41 +0000)]
Eliminate zext over (iv & const) or ((iv+const)&const)
if a longer iv is available. These subscript forms are
not common; they're a bottleneck in OpenSSL.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69215
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 20:16:12 +0000 (20:16 +0000)]
use UppercaseString instead of EmitAllCaps
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69213
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 20:13:18 +0000 (20:13 +0000)]
use escape string.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69212
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 20:12:52 +0000 (20:12 +0000)]
teach EscapeString and UnescapeString to handle ".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69211
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 20:11:08 +0000 (20:11 +0000)]
Add DISubprogram is not null check.
This fixes test/CodeGen//2009-01-21-invalid-debug-info.m test case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69210
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 20:06:30 +0000 (20:06 +0000)]
Generalize one of the SelectionDAG::ReplaceAllUsesWith overloads
to support replacing a node with another that has a superset of
the result types. Use this instead of calling
ReplaceAllUsesOfValueWith for each value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69209
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 20:02:32 +0000 (20:02 +0000)]
rename -gen-clang-diags-options -> -gen-clang-diag-groups
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69208
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 19:57:42 +0000 (19:57 +0000)]
move clang-specific makefile goop to clang makefile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69206
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 19:48:57 +0000 (19:48 +0000)]
Fix 80-column violations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69204
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 19:48:28 +0000 (19:48 +0000)]
Add a folding table entry for MOV8rr_NOREX.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69203
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 19:42:57 +0000 (19:42 +0000)]
Check isInlinedSubroutine() before creating DW_TAG_inlined_subroutine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69202
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 17:59:11 +0000 (17:59 +0000)]
Fix MachineInstr::getNumExplicitOperands to count
variadic operands correctly. Patch by Jakob Stoklund Olesen!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69190
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 16:55:46 +0000 (16:55 +0000)]
don't infer diag class from parenting relations, make it an explicit field
in the record.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69176
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 16:43:18 +0000 (16:43 +0000)]
include the default mapping in the clang diagnostic .inc files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69173
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 06:26:49 +0000 (06:26 +0000)]
minor cleanups
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69152
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Wed, 15 Apr 2009 06:23:41 +0000 (06:23 +0000)]
Limit the number of times we're willing to chase pointers. Removes an O(n^2)
problem from instcombine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69151
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Gregor [Wed, 15 Apr 2009 04:53:47 +0000 (04:53 +0000)]
Allow jumping to the end of a bitstream while reading
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69145
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Wed, 15 Apr 2009 04:51:05 +0000 (04:51 +0000)]
Check for alignment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69140
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Wed, 15 Apr 2009 02:12:37 +0000 (02:12 +0000)]
More obsessive reformatting. Fixed some validation errors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69130
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:47:03 +0000 (01:47 +0000)]
Don't use "protected:" in classes that aren't intended to be
subclassed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69129
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:44:07 +0000 (01:44 +0000)]
Fix doxygen comment syntax.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69128
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:20:18 +0000 (01:20 +0000)]
Fix X86MachineFunctionInfo's doxygen comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69127
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:19:35 +0000 (01:19 +0000)]
Move MachineRegisterInfo::setRegClass out of line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69126
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:18:49 +0000 (01:18 +0000)]
Move MachineJumpTableInfo::ReplaceMBBInJumpTables out of line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69125
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 01:17:37 +0000 (01:17 +0000)]
Give RemoveRegOperandFromRegInfo a comment and move the
code out of line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69124
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Wed, 15 Apr 2009 01:10:12 +0000 (01:10 +0000)]
Enhance induction variable code to remove the
sext around sext(shorter IV + constant), using a
longer IV instead, when it can figure out the
add can't overflow. This comes up a lot in
subscripting; mainly affects 64 bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69123
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Wed, 15 Apr 2009 00:43:54 +0000 (00:43 +0000)]
Avoid making the transformation enabled by my last patch if the new destinations have phi nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69121
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 00:17:06 +0000 (00:17 +0000)]
While inlining, clone llvm.dbg.func.start intrinsic and adjust
llvm.dbg.region.end instrinsic. This nested llvm.dbg.func.start/llvm.dbg.region.end pair now enables DW_TAG_inlined_subroutine support in code generator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69118
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Wed, 15 Apr 2009 00:16:05 +0000 (00:16 +0000)]
silence a warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69117
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 00:10:26 +0000 (00:10 +0000)]
Construct and emit DW_TAG_inlined_subroutine DIEs for inlined subroutine scopes (only in FastISel mode).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69116
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 00:10:16 +0000 (00:10 +0000)]
Do for GR16_NOREX what r69049 did for GR8_NOREX, to avoid trouble with
the local register allocator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69115
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Wed, 15 Apr 2009 00:06:07 +0000 (00:06 +0000)]
Add a method to check that the subprogram holds debug info for the given Function or not.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69113
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 00:04:23 +0000 (00:04 +0000)]
Add a new MOV8rr_NOREX, and make X86's copyRegToReg use it when
either the source or destination is a physical h register.
This fixes sqlite3 with the post-RA scheduler enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69111
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Wed, 15 Apr 2009 00:04:11 +0000 (00:04 +0000)]
Testcase for r69104.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69110
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Wed, 15 Apr 2009 00:00:48 +0000 (00:00 +0000)]
GR8_NOREX can contain the H registers, since they don't require
REX prefixes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69108
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 14 Apr 2009 23:40:03 +0000 (23:40 +0000)]
Optimize conditional branch on i1 phis with non-constant inputs.
This turns:
eq:
%3 = icmp eq i32 %1, %2
br label %join
ne:
%4 = icmp ne i32 %1, %2
br label %join
join:
%5 = phi i1 [%3, %eq], [%4, %ne]
br i1 %5, label %yes, label %no
=>
eq:
%3 = icmp eq i32 %1, %2
br i1 %3, label %yes, label %no
ne:
%4 = icmp ne i32 %1, %2
br i1 %4, label %yes, label %no
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69102
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 14 Apr 2009 22:50:17 +0000 (22:50 +0000)]
Fix the RUN lines so that this test actually tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69096
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 14 Apr 2009 22:45:05 +0000 (22:45 +0000)]
For the h-register addressing-mode trick, use the correct value for
any non-address uses of the address value. This fixes 186.crafty.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69094
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 14 Apr 2009 22:31:59 +0000 (22:31 +0000)]
Mac OS X 10.6 and above do not use key manager to register EH frames.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69090
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 14 Apr 2009 22:17:14 +0000 (22:17 +0000)]
When the result of an EXTRACT_SUBREG, INSERT_SUBREG, or SUBREG_TO_REG
operator is used by a CopyToReg to export the value to a different
block, don't reuse the CopyToReg's register for the subreg operation
result if the register isn't precisely the right class for the
subreg operation.
Also, rename the h-registers.ll test, now that there are more
than one.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69087
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Tue, 14 Apr 2009 21:31:36 +0000 (21:31 +0000)]
Call CreateProcess with bInheritHandles = TRUE.
Makes llvmc show error messages printed by child processes when run from the
Cygwin/MSYS shell. Since ExecuteAndWait does not return until the child program
has finished execution, this change should be harmless.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69082
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Tue, 14 Apr 2009 21:31:14 +0000 (21:31 +0000)]
Delete trailing whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69081
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 14 Apr 2009 16:57:43 +0000 (16:57 +0000)]
Some of GR8_NOREX registers are only available in 64-bit mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69049
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjiv Gupta [Tue, 14 Apr 2009 02:49:52 +0000 (02:49 +0000)]
Handle aggregate type arguments to direct and indirect calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69022
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Tue, 14 Apr 2009 01:51:40 +0000 (01:51 +0000)]
Use the output of the asm so the optimizer won't
delete it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69018
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Tue, 14 Apr 2009 01:04:19 +0000 (01:04 +0000)]
LoopIndexSplit needs to inform the loop pass manager of the instructions it is
deleting, not just the basic block.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69011
91177308-0d34-0410-b5e6-
96231b3b80d8
Dale Johannesen [Tue, 14 Apr 2009 00:56:56 +0000 (00:56 +0000)]
Do not force asm's to be chained if they don't touch
memory and aren't volatile. This was interfering with
good scheduling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69008
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 14 Apr 2009 00:32:25 +0000 (00:32 +0000)]
Fix PR3934 part 2. findOnlyInterestingUse() was not setting IsCopy and IsDstPhys which are returned by value and used by callee. This happened to work on the earlier test cases because of a logic error in the caller side.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69006
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Dunbar [Mon, 13 Apr 2009 22:26:09 +0000 (22:26 +0000)]
Make these errors more noticable in build logs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68998
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Wilson [Mon, 13 Apr 2009 22:05:19 +0000 (22:05 +0000)]
Change SelectionDAG type legalization to allow BUILD_VECTOR operands to be
promoted to legal types without changing the type of the vector. This is
following a suggestion from Duncan
(http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-February/019923.html).
The transformation that used to be done during type legalization is now
postponed to DAG legalization. This allows the BUILD_VECTORs to be optimized
and potentially handled specially by target-specific code.
It turns out that this is also consistent with an optimization done by the
DAG combiner: a BUILD_VECTOR and INSERT_VECTOR_ELT may be combined by
replacing one of the BUILD_VECTOR operands with the newly inserted element;
but INSERT_VECTOR_ELT allows its scalar operand to be larger than the
element type, with any extra high bits being implicitly truncated. The
result is a BUILD_VECTOR where one of the operands has a type larger the
the vector element type.
Any code that operates on BUILD_VECTORs may now need to be aware of the
potential type discrepancy between the vector element type and the
BUILD_VECTOR operands. This patch updates all of the places that I could
find to handle that case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68996
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 21:06:25 +0000 (21:06 +0000)]
Rename COPY_TO_SUBCLASS to COPY_TO_REGCLASS, and generalize
it accordingly. Thanks to Jakob Stoklund Olesen for pointing
out how this might be useful.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68986
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Wilson [Mon, 13 Apr 2009 20:20:30 +0000 (20:20 +0000)]
Refactor some code in SelectionDAGLegalize::ExpandBUILD_VECTOR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68981
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 13 Apr 2009 20:04:24 +0000 (20:04 +0000)]
PR3934: Fix a bogus two-address pass assertion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68979
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Wendling [Mon, 13 Apr 2009 19:45:05 +0000 (19:45 +0000)]
Get rid of some compile warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68978
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Gregor [Mon, 13 Apr 2009 19:43:10 +0000 (19:43 +0000)]
Add a static APInt::getNumWords
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68977
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 13 Apr 2009 18:13:16 +0000 (18:13 +0000)]
Right now, Debugging information to encode scopes (DW_TAG_lexical_block) relies on DBG_LABEL. Unfortunately this intefers with the quality of optimized code.
This patch updates dwarf writer to encode scoping information in DWARF only in FastISel mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68973
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 13 Apr 2009 17:02:03 +0000 (17:02 +0000)]
Reapply 68847.
Now debug_inlined section is covered by TAI->doesDwarfUsesInlineInfoSection(), which is false by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68964
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 16:09:41 +0000 (16:09 +0000)]
Implement x86 h-register extract support.
- Add patterns for h-register extract, which avoids a shift and mask,
and in some cases a temporary register.
- Add address-mode matching for turning (X>>(8-n))&(255<<n), where
n is a valid address-mode scale value, into an h-register extract
and a scaled-offset address.
- Replace X86's MOV32to32_ and related instructions with the new
target-independent COPY_TO_SUBREG instruction.
On x86-64 there are complicated constraints on h registers, and
CodeGen doesn't currently provide a high-level way to express all of them,
so they are handled with a bunch of special code. This code currently only
supports extracts where the result is used by a zero-extend or a store,
though these are fairly common.
These transformations are not always beneficial; since there are only
4 h registers, they sometimes require extra move instructions, and
this sometimes increases register pressure because it can force out
values that would otherwise be in one of those registers. However,
this appears to be relatively uncommon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68962
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:38:05 +0000 (15:38 +0000)]
Add a new TargetInstrInfo MachineInstr opcode, COPY_TO_SUBCLASS.
This will be used to replace things like X86's MOV32to32_.
Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
in the presense of subregister superclasses and subclasses. It
can now cope with the definition of a virtual register being in
a subclass of a use.
Re-introduce the code for recording register superreg classes and
subreg classes. This is needed because when subreg extracts and
inserts get coalesced away, the virtual registers are left in
the correct subclass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68961
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:29:31 +0000 (15:29 +0000)]
Remove x86's special-case handling for ISD::TRUNCATE and
ISD::SIGN_EXTEND_INREG. Tablegen-generated code can handle
these cases, and the scheduling issues observed earlier
appear to be resolved now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68959
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:28:29 +0000 (15:28 +0000)]
Fix copy+pastos in comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68958
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:24:11 +0000 (15:24 +0000)]
Generalize getRegisterClassForRegister to handle registers
in multiple classes in the case that the classes are all
in subset/superset relations. This function is used by the
fast-isel emitter, which always wants the super-most set.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68957
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:22:29 +0000 (15:22 +0000)]
Don't abort on an aliasing physical register that does not have
a live interval. This is needed for some upcoming subreg changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68956
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:21:32 +0000 (15:21 +0000)]
When assigning a physical register to a MachineOperand, set
the subreg field to 0, since the subreg field is only used
for virtual register subregs. This doesn't change
current functionality; it just eliminates bogus noise from
debug output.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68955
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:18:42 +0000 (15:18 +0000)]
List the l registers before h registers, for consistency.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68954
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:16:56 +0000 (15:16 +0000)]
Add an assertion to verify that a copy was actually emitted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68953
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:14:03 +0000 (15:14 +0000)]
Use X86::SUBREG_8BIT instead of hard-coding the equivalent constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68951
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:13:28 +0000 (15:13 +0000)]
Add a comment about MOVSX64rr8.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68950
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:12:29 +0000 (15:12 +0000)]
Add comments to INSERT_SUBREG, EXTRACT_SURBEG, SUBREG_TO_REG,
and IMPLICIT_DEF.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68949
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 13 Apr 2009 15:04:25 +0000 (15:04 +0000)]
Fix another hard-coded constant to use X86AddrNumOperands.
This unbreaks the JIT on x86-64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68948
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 13 Apr 2009 13:02:49 +0000 (13:02 +0000)]
X86-64 TLS support for local exec and initial exec.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68947
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjiv Gupta [Mon, 13 Apr 2009 09:38:38 +0000 (09:38 +0000)]
While passing arg of types larger than char only one byte at lower end was getting passed. We couldn't catch this as we did not have tests that were passing an int value larger than 256.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68946
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Mon, 13 Apr 2009 07:02:32 +0000 (07:02 +0000)]
Fix ocaml bindings; add "available_externally" linkage type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68945
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Mon, 13 Apr 2009 07:02:02 +0000 (07:02 +0000)]
Fix warning in .ll parser, detect and reject available_externally on function
declarations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68944
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 13 Apr 2009 06:25:37 +0000 (06:25 +0000)]
add AvailableExternally linkage to C bindings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68942
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 13 Apr 2009 05:44:34 +0000 (05:44 +0000)]
Add a new "available_externally" linkage type. This is intended
to support C99 inline, GNU extern inline, etc. Related bugzilla's
include PR3517, PR3100, & PR2933. Nothing uses this yet, but it
appears to work.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68940
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 13 Apr 2009 05:38:23 +0000 (05:38 +0000)]
eliminate unneeded parens.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68939
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Mon, 13 Apr 2009 04:26:27 +0000 (04:26 +0000)]
Regenerate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68938
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Mon, 13 Apr 2009 04:26:06 +0000 (04:26 +0000)]
Link against libffi if available, fall back to "no external calls from
interpreter mode" when it's not.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68937
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Mon, 13 Apr 2009 02:03:40 +0000 (02:03 +0000)]
Add paragraph tags.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68934
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 12 Apr 2009 23:33:13 +0000 (23:33 +0000)]
fix PR3965:SIGINT handler not restored after calling ParseAST(),
patch by Alexei Svitkine!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68929
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 12 Apr 2009 23:00:38 +0000 (23:00 +0000)]
In X86DAGToDAGISel::MatchWrapper, if base or index are set, avoid matching
only if symbolic addresses are RIP relatives.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68924
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Anderson [Sun, 12 Apr 2009 22:31:17 +0000 (22:31 +0000)]
Use a hashtable for TargetRegisterClass::contains.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68922
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 12 Apr 2009 21:55:03 +0000 (21:55 +0000)]
refactor some code into X86DAGToDAGISel::MatchWrapper
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68915
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sun, 12 Apr 2009 20:47:23 +0000 (20:47 +0000)]
Add Kaleidoscope to examples/ so that it gets built regularly and we'll notice
if an API change causes it to be out of date. The code is copied out of
LangImpl7.html.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68912
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sun, 12 Apr 2009 20:15:44 +0000 (20:15 +0000)]
Fix compile error. Pointed out by mait on #llvm IRC!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68910
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 12 Apr 2009 18:22:33 +0000 (18:22 +0000)]
"There was a typo in my previous patch which leads to miscompilation of
strncat :(
strncat(foo, "bar", 99)
would be optimized to
memcpy(foo+strlen(foo), "bar", 100, 1)
instead of
memcpy(foo+strlen(foo), "bar", 4, 1)"
Patch by Benjamin Kramer!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68905
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 12 Apr 2009 10:43:41 +0000 (10:43 +0000)]
Add tests for the parts of X86-64 TLS that are already implemented.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68901
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 12 Apr 2009 07:51:14 +0000 (07:51 +0000)]
fix a cross-block fastisel crash handling overflow intrinsics.
See comment for details. This fixes rdar://
6772169
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68890
91177308-0d34-0410-b5e6-
96231b3b80d8