Commit Graph

47106 Commits

Author SHA1 Message Date
Bill Wendling 72c9722c64 Fix these so that they work on non-x86 Darwin machines.
llvm-svn: 72903
2009-06-04 23:37:19 +00:00
Bill Wendling d6ac8bec21 Specify that this works for Darwin.
llvm-svn: 72899
2009-06-04 22:56:29 +00:00
Bill Wendling 5f0d6c4434 The DWARF unwind info was incorrect. While compiling with
`-fomit-frame-pointer', we would lack the DW_CFA_advance_loc information for a
lot of function, and then they would be `0'. The linker (at least on Darwin)
needs to encode the stack size. In some cases, the stack size is too large to
directly encode. So the linker checks to see if there is a "subl $xxx,%esp"
instruction at the point where the `DW_CFA_def_cfa_offset' says the pc was. If
so, the compact encoding records the offset in the function to where the stack
size is embedded. But because the `DW_CFA_advance_loc' instructions are missing,
it looks before the function and dies.

So, instead of emitting the EH debug label before the stack adjustment
operations, emit it afterwards, right before the frame move stuff.

llvm-svn: 72898
2009-06-04 22:52:30 +00:00
Dan Gohman a5b9645c4b Split the Add, Sub, and Mul instruction opcodes into separate
integer and floating-point opcodes, introducing
FAdd, FSub, and FMul.

For now, the AsmParser, BitcodeReader, and IRBuilder all preserve
backwards compatability, and the Core LLVM APIs preserve backwards
compatibility for IR producers. Most front-ends won't need to change
immediately.

This implements the first step of the plan outlined here:
http://nondot.org/sabre/LLVMNotes/IntegerOverflow.txt

llvm-svn: 72897
2009-06-04 22:49:04 +00:00
Devang Patel 72a4d2fec1 Add new function attribute - noredzone.
Update code generator to use this attribute and remove DisableRedZone target option.
Update llc to set this attribute when -disable-red-zone command line option is used.

llvm-svn: 72894
2009-06-04 22:05:33 +00:00
Dale Johannesen 37bc85f89a Fix FP_TO_UINT->i32 on ppc32 -mcpu=g5. This was
using Promote which won't work because i64 isn't
a legal type.  It's easy enough to use Custom, but
then we have the problem that when the type
legalizer is promoting FP_TO_UINT->i16, it has no
way of telling it should prefer FP_TO_SINT->i32
to FP_TO_UINT->i32.  I have uncomfortably hacked
this by making the type legalizer choose FP_TO_SINT
when both are Custom.
This fixes several regressions in the testsuite.

llvm-svn: 72891
2009-06-04 20:53:52 +00:00
Evan Cheng fa0ac19b82 RALinScan::attemptTrivialCoalescing() was returning a virtual register instead of the physical register it is allocated to. This resulted in virtual register(s) being added the live-in sets.
llvm-svn: 72890
2009-06-04 20:53:36 +00:00
Evan Cheng 9ff058b674 A value defined by an implicit_def can be liven to a use BB. This is unfortunate. But register allocator still has to add it to the live-in set of the use BB.
llvm-svn: 72889
2009-06-04 20:28:22 +00:00
Evan Cheng 60fdf787a7 A value defined by an implicit_def can be liven to a use BB. This is unfortunate. But register allocator still has to add it to the live-in set of the use BB.
llvm-svn: 72888
2009-06-04 20:25:48 +00:00
Douglas Gregor 5c273ce20e CMake: Use explicit dependencies for Xcode (as well as MSVC), to make
the CMake-generated Xcode project build properly.

llvm-svn: 72883
2009-06-04 19:53:37 +00:00
Nick Kledzik 820c62e447 <rdar://problem/6944342> libLTO for darwin should add -static when assembling .s
llvm-svn: 72881
2009-06-04 19:14:08 +00:00
Lang Hames 1a65f61137 Removed SimpleRewriter.
llvm-svn: 72880
2009-06-04 18:45:36 +00:00
Dale Johannesen 12313e327f For XTARGET to work on targets not in the list,
there must also be an XFAIL line.  Fix a couple
examples of this.

llvm-svn: 72876
2009-06-04 18:27:43 +00:00
Dan Gohman 1aa86203f6 Check in test changes that I accidentally left out of r72872.
llvm-svn: 72875
2009-06-04 18:22:31 +00:00
Douglas Gregor 60dd76fbc9 Properly detect malloc_zone_statistics in CMake build system
llvm-svn: 72873
2009-06-04 17:22:52 +00:00
Dan Gohman 7b6b5dd954 Don't do the X * 0.0 -> 0.0 transformation in instcombine, because
instcombine doesn't know when it's safe. To partially compensate
for this, introduce new code to do this transformation in
dagcombine, which can use UnsafeFPMath.

llvm-svn: 72872
2009-06-04 17:12:12 +00:00
Dan Gohman c2eed3b0f8 Fix comments.
llvm-svn: 72870
2009-06-04 16:49:15 +00:00
Torok Edwin 8631e0fd9c --plugin is not needed for bfd anymore. Update docs.
llvm-svn: 72867
2009-06-04 16:08:10 +00:00
Sanjiv Gupta cc68f80549 Remove unused code.
llvm-svn: 72866
2009-06-04 15:16:24 +00:00
Oscar Fuentes 208a87314b CMake: Renamed LLVM_ENABLE_ASSERTS to
LLVM_ENABLE_ASSERTIONS. Fine-tuned the logic that controls the
definition of NDEBUG and _DEBUG macros.

Thanks to Jay Foad for this suggestions.

llvm-svn: 72864
2009-06-04 09:26:16 +00:00
Sanjiv Gupta 7ff7621a1d Custom lower SUB with two register operands.
llvm-svn: 72861
2009-06-04 08:52:28 +00:00
Torok Edwin 63e44bb2a9 Fix comments.
llvm-svn: 72858
2009-06-04 08:18:25 +00:00
Torok Edwin 9b5a47fc3c Add support for outputting ANSI colors to raw_fd_ostream.
llvm-svn: 72854
2009-06-04 07:09:50 +00:00
Eli Friedman 63488f1fbf PR3739, part 2: Use an explicit store to spill XMM registers. (Previously,
the code tried to use "push", which doesn't exist for XMM registers.)

llvm-svn: 72836
2009-06-04 02:32:04 +00:00
Eli Friedman 0cb0c78a26 PR3739, part 1: Disable the red zone on Win64.
llvm-svn: 72830
2009-06-04 02:02:01 +00:00
Dan Gohman aba72ed47f Remove a #include of <iostream>.
llvm-svn: 72828
2009-06-04 01:59:35 +00:00
Evan Cheng 7f5976e11b Re-apply 72756 with fixes. One of those was introduced by we changed MachineInstrBuilder::addReg() interface.
llvm-svn: 72826
2009-06-04 01:15:28 +00:00
Lang Hames bb01ed9a0d Removed more testing code that snuck in earlier.
llvm-svn: 72825
2009-06-04 01:04:22 +00:00
Nick Kledzik cac8c8a9b3 <rdar://problem/6940611> libLTO.dylib needs to let linker specify path to assembler
Add lto_codegen_set_assembler_path() API which allows the linker to specify the
path to the assembler tool to run.  When assembler is used (instead of compiler)
different command line options are used.
Add LTO_API_VERSION #define so clients (linkers) can conditionalize use of new APIs.

llvm-svn: 72823
2009-06-04 00:28:45 +00:00
Bruno Cardoso Lopes 8a1be5e4a9 Use uint8_t and int32_t in {JIT,Machine}CodeEmiters
llvm-svn: 72821
2009-06-04 00:15:51 +00:00
Stuart Hastings 2797e7a483 Evan says it's wrong; back out 72808.
llvm-svn: 72817
2009-06-03 22:59:34 +00:00
Nick Kledzik 9149ac729f <rdar://problem/6941517> C++ static constructors not preserved for static executable using LTO
Move setRelocationModel() to be called before TargetMachine is instantiated.

llvm-svn: 72816
2009-06-03 22:52:12 +00:00
Daniel Dunbar 3cd724e590 Change LTO to run the global opt pass twice.
- This matches llvm-ld.

It took a bit of archeology to figure out what the right thing to do was
(whether this was intentionally added or intentionally removed). My final
conclusion is that Chris added this intentionally here:
  http://llvm.org/viewvc/llvm-project?view=rev&revision=16913
but the changes weren't propogated to llvm-ld until here:
  http://llvm.org/viewvc/llvm-project?view=rev&revision=34058
which was after lto.cpp had been cloned off (of llvm-ld), here:
  http://llvm.org/viewvc/llvm-project?view=rev&revision=29494

From the commit message, it looks like the motivation for running global opt
again is because we ran it prior to inlining. Based on that I updated the
comment and also only run the pass if we actually ran the inliner.

Chris, please review.

llvm-svn: 72811
2009-06-03 21:51:32 +00:00
Eli Friedman ee06b752f0 PR4317: Handle splits where the new block is unreachable correctly in
DominatorTreeBase::Split.

llvm-svn: 72810
2009-06-03 21:42:06 +00:00
Stuart Hastings 679ec6917c Recognize another euphemism for MOVDQ2Q.
llvm-svn: 72808
2009-06-03 21:39:14 +00:00
Evan Cheng ad6f3ff2c0 For Darwin / x86_64, override -relocation-model=static to pic if the output is assembly since Darwin assembler does not really support -static codeine.
I view this as a temporary workaround until the assembler / linker changes.

llvm-svn: 72806
2009-06-03 21:13:54 +00:00
Daniel Dunbar c292601287 Add createStandardLTOPasses to StandardPasses.h, and move lto and llvm-ld over.
- I know it sounds crazy, but I think all the pass lists are now coalesced into
   StandardPasses.h.

llvm-svn: 72805
2009-06-03 21:06:14 +00:00
Dan Gohman d5ca70648c Convert Alpha and Mips to use a MachineFunctionInfo subclass to
carry GlobalBaseReg, and GlobalRetAddr too in Alpha's case. This
eliminates the need for them to search through the
MachineRegisterInfo livein list in order to identify these
virtual registers. EmitLiveInCopies is now the only user of the
virtual register portion of MachineRegisterInfo's livein data.

llvm-svn: 72802
2009-06-03 20:30:14 +00:00
Dan Gohman 4751bb9edb Remove the redundant TM member from X86DAGToDAGISel; replace it
with an accessor method which simply casts the parent class
SelectionDAGISel's TM to the target-specific type.

llvm-svn: 72801
2009-06-03 20:20:00 +00:00
Dan Gohman c380cca7ae Don't attempt to simplify an non-affine IV expression if it can't
be simplified to a loop-invariant value. This fixes PR4315.

llvm-svn: 72798
2009-06-03 19:11:31 +00:00
Mike Stump 25bbcc67fa Make the buildbot see green (to make it easier to spot the next person
that puts a new warning in).

llvm-svn: 72797
2009-06-03 19:07:46 +00:00
Daniel Dunbar 94c7b791b1 Switch opt to using StandardPasses.h
- No functionality change, but please check if you don't believe me.

llvm-svn: 72789
2009-06-03 18:22:15 +00:00
Daniel Dunbar 0460f723f6 Remove some silly code.
llvm-svn: 72788
2009-06-03 18:13:05 +00:00
Daniel Dunbar 6be0aaade7 Add StandardPasses.h which embeds the standard compilation passes shared by
clang/llvm-gcc.
 - Implemented as inline functions for linking simplicity.

llvm-svn: 72786
2009-06-03 17:52:39 +00:00
Bruno Cardoso Lopes d51db005d0 Move ELFCodeEmiter stuff to new files
llvm-svn: 72785
2009-06-03 17:47:27 +00:00
Bruno Cardoso Lopes 2f04887220 Revert 72650
llvm-svn: 72783
2009-06-03 16:55:02 +00:00
Dan Gohman 11231d0c75 Remove unnecessary #includes.
llvm-svn: 72782
2009-06-03 16:47:12 +00:00
Sanjiv Gupta 215921ef94 Emit file directives correctly in case of a .bc is generated by llvm-ld after linking in several .bc files.
llvm-svn: 72781
2009-06-03 16:27:49 +00:00
Torok Edwin b681144334 lets not forget about c++!
llvm-svn: 72778
2009-06-03 15:42:26 +00:00
Sanjiv Gupta b011aa3a5e FrameIndex could be used as a value (addressof (arg)) or as an address.
Expand it exactly like GlobalAddress.
Fix some more crashes (InsertBranch() not being implemented) for compiling hitec libs.

llvm-svn: 72776
2009-06-03 15:31:12 +00:00
Oscar Fuentes 02b68a6e34 CMake: Added missing source file to lib/CodeGen/CMakeLists.txt.
llvm-svn: 72775
2009-06-03 15:29:09 +00:00
Oscar Fuentes 6133813eb4 CMake: Implements and documents option LLVM_ENABLE_ASSERTS.
llvm-svn: 72774
2009-06-03 15:11:25 +00:00
Torok Edwin 8608a4287d Document how easy it is to use the gold plugin and have LTO with autotooled projects.
Please correct the documentation if I missed anything.

llvm-svn: 72773
2009-06-03 15:06:19 +00:00
Sanjiv Gupta a53241a880 Fixed a bug in which signed comparisons were being used instead of unsigned comparisons.
llvm-svn: 72771
2009-06-03 13:36:44 +00:00
Duncan Sands c66ad73e35 Avoid a warning "'U' might be used uninitialized in
this function" when using a not-too-smart compiler.

llvm-svn: 72768
2009-06-03 12:05:18 +00:00
Duncan Sands 06b61a281a At a newline at the end of this file.
llvm-svn: 72767
2009-06-03 11:54:28 +00:00
Jay Foad 1a4eea5ad6 Document how phi and invoke instructions interact with SSA form.
llvm-svn: 72762
2009-06-03 10:20:10 +00:00
Evan Cheng b39a6be77a Fix for PR4225: When rewriter reuse a value in a physical register , it clear the register kill operand marker and its kill ops information. However, the cleared operand may be a def of a super-register. Clear the kill ops info for the super-register's sub-registers as well.
llvm-svn: 72758
2009-06-03 09:00:27 +00:00
Evan Cheng ab0c710fae Temporarily revert 72756 for now.
llvm-svn: 72757
2009-06-03 07:40:47 +00:00
Evan Cheng dfe6e689fd Fold preceding / trailing base inc / dec into the single load / store as well.
llvm-svn: 72756
2009-06-03 06:14:58 +00:00
Evan Cheng d29fc6655f If there is a def of a super-register followed by a use of a sub-register, do *not* add an implicit def of the sub-register. e.g.
EAX = ..., AX<imp-def>
...
    = AX

This creates a double-def. Apparently this used to be necessary but is no longer needed.

Thanks to Anton for pointing this out. Anton, I cannot create a test case without your uncommitted ARM patches. Please check in a test case for me.

llvm-svn: 72755
2009-06-03 05:15:46 +00:00
Bruno Cardoso Lopes dcf60b6b3e Move structures and classes into header files, providing two new headers and
one new .cpp file, in preparation for merging in the Direct Object Emission
changes we're working on. No functional changes.
Fixed coding style issues on the original patch. Patch by Aaron Gray

llvm-svn: 72754
2009-06-03 03:43:31 +00:00
Dan Gohman fc262babc3 Revert r72734. The Darwin assembler doesn't support the static
relocation model on x86-64. Higher level logic should override
the relocation model to PIC on x86_64-apple-darwin.

llvm-svn: 72746
2009-06-03 00:37:20 +00:00
Dan Gohman b003dd907f Change TargetFolder's TD member from a reference to a
pointer, now that ConstantFoldConstantExpression can
accept a null TargetData pointer.

llvm-svn: 72744
2009-06-03 00:13:48 +00:00
Dan Gohman 136bd719f0 Change ConstantFoldConstantExpression to accept a null
TargetData pointer. The only thing it's used for are
calls to ConstantFoldCompareInstOperands and
ConstantFoldInstOperands, which both already accept a
null TargetData pointer. This makes
ConstantFoldConstantExpression easier to use in clients
where TargetData is optional.

llvm-svn: 72741
2009-06-02 21:48:15 +00:00
Dan Gohman d52dddf022 Delete an unnecessary forward declaration.
llvm-svn: 72740
2009-06-02 21:37:43 +00:00
Dan Gohman 760377effc Fix CodeGenPrepare's address-mode sinking to handle unusual
addresses, involving Base values which do not have Pointer type.
This fixes PR4297.

llvm-svn: 72739
2009-06-02 21:29:13 +00:00
Daniel Dunbar 6cbe978df2 NightlyTest: Stop running a separate Olden pass during nightly test.
- Unless I'm mistaken, these results weren't even being reported and just
   served to clobber the previous build products and waste cycles.

llvm-svn: 72738
2009-06-02 21:14:15 +00:00
Torok Edwin 5273aa29eb fix build on VC++2k8.
llvm-svn: 72736
2009-06-02 20:32:59 +00:00
Lang Hames 1dcd70c134 Fixed warning, removed some temporary validation code that snuck in during my last commit.
llvm-svn: 72735
2009-06-02 20:30:03 +00:00
Evan Cheng 448641d87c On Darwin x86_64 small code model doesn't guarantee code address fits in 32-bit.
llvm-svn: 72734
2009-06-02 20:09:31 +00:00
Owen Anderson 5bd914d0ae Undef MemoryFence when compiling on MSVC.
llvm-svn: 72732
2009-06-02 17:35:55 +00:00
Devang Patel 9643e4f985 Simplify assertion message to avoid confusion.
llvm-svn: 72731
2009-06-02 17:26:29 +00:00
Lang Hames fc968ef687 Update to in-place spilling framework. Includes live interval scaling and trivial rewriter.
llvm-svn: 72729
2009-06-02 16:53:25 +00:00
Dale Johannesen 5234d3795f Revert 72707 and 72709, for the moment.
llvm-svn: 72712
2009-06-02 03:12:52 +00:00
Evan Cheng 836894405f Avoid infinite looping in AllGlobalLoadUsesSimpleEnoughForHeapSRA(). This can happen when PHI uses are recursively dependent on each other.
llvm-svn: 72710
2009-06-02 00:56:07 +00:00
Dale Johannesen 7fde88cce8 Add missing file.
llvm-svn: 72709
2009-06-01 23:48:58 +00:00
Nick Kledzik 94e2d973c8 update comments about .objc_ symbols being generated
llvm-svn: 72708
2009-06-01 23:41:09 +00:00
Dale Johannesen 0b8ca79253 Make the implicit inputs and outputs of target-independent
ADDC/ADDE use MVT::i1 (later, whatever it gets legalized to)
instead of MVT::Flag.  Remove CARRY_FALSE in favor of 0; adjust
all target-independent code to use this format.

Most targets will still produce a Flag-setting target-dependent
version when selection is done.  X86 is converted to use i32
instead, which means TableGen needs to produce different code
in xxxGenDAGISel.inc.  This keys off the new supportsHasI1 bit
in xxxInstrInfo, currently set only for X86; in principle this
is temporary and should go away when all other targets have
been converted.  All relevant X86 instruction patterns are
modified to represent setting and using EFLAGS explicitly.  The
same can be done on other targets.

The immediate behavior change is that an ADC/ADD pair are no
longer tightly coupled in the X86 scheduler; they can be
separated by instructions that don't clobber the flags (MOV).
I will soon add some peephole optimizations based on using
other instructions that set the flags to feed into ADC.

llvm-svn: 72707
2009-06-01 23:27:20 +00:00
Dale Johannesen ff10450680 Comment grammaro/clarification.
llvm-svn: 72706
2009-06-01 23:13:42 +00:00
Dale Johannesen 67f472feed Trailing whitespace.
llvm-svn: 72705
2009-06-01 23:12:52 +00:00
Mike Stump 245fa0744f Dcoument that the opauque value used to construct QNaNs is truncated
as necessary.

llvm-svn: 72702
2009-06-01 21:02:35 +00:00
Nick Kledzik b481c2015a <rdar://problem/6927148> libLTO needs to handle i386 magic objc class symbols
Parse __OBJC data structures and synthesize magic .objc_ symbols.
Also, alter mangler so that objc method names are readable.

llvm-svn: 72700
2009-06-01 20:33:09 +00:00
Bill Wendling 5ea3e9db43 Accidental commit. This isn't ready for prime time just yet.
llvm-svn: 72699
2009-06-01 20:18:46 +00:00
Anton Korobeynikov 12694bd8ac Implement review feedback. Make thumb2 'normal' subtarget feature
llvm-svn: 72698
2009-06-01 20:00:48 +00:00
Bruno Cardoso Lopes 9fd794bebf Fix new CodeEmitter stuff to follow LLVM codying style. Patch by Aaron Gray
llvm-svn: 72697
2009-06-01 19:57:37 +00:00
Anton Korobeynikov 2afc641e04 Do not emit "generic" CPU string. This fixes PR4291.
llvm-svn: 72696
2009-06-01 19:03:17 +00:00
Eli Friedman ee94e3cc9e PR4286: Make RewriteLoadUserOfWholeAlloca and
RewriteStoreUserOfWholeAlloca deal with tail padding because 
isSafeUseOfBitCastedAllocation expects them to.  Otherwise, we crash 
trying to erase the bitcast.

llvm-svn: 72688
2009-06-01 09:14:32 +00:00
Nick Lewycky cb8317dac9 Update the bitcode reader to support reading .bc files where the embedded
metadata references non-Constant values such as instructions.

llvm-svn: 72685
2009-06-01 04:42:10 +00:00
Nick Lewycky aed2a66189 Add missing codenames to the .bc analyzer.
llvm-svn: 72684
2009-06-01 04:41:03 +00:00
Dan Gohman c1c2c68945 Fix a grammaro and clarify a comment.
llvm-svn: 72668
2009-05-31 17:52:18 +00:00
Dan Gohman 2299d2ba2f Delete an obsolete sentance from a comment.
llvm-svn: 72667
2009-05-31 16:18:57 +00:00
Dan Gohman 3d507b4b13 Fix the name of the function in this comment.
llvm-svn: 72666
2009-05-31 16:18:03 +00:00
Owen Anderson cc0c75c74d Be more aggressive in doing LoadPRE by tracing backwards when a block only has
a single predecessor.

Patch by Jakub Staszak.

llvm-svn: 72661
2009-05-31 09:03:40 +00:00
Nick Lewycky 0a8fe66a6c Fix typo in error message.
llvm-svn: 72659
2009-05-31 06:07:28 +00:00
Duncan Sands 96e5698741 Rename CustomLowerResults to CustomLowerNode, since
it is used both when a result is illegal and when an
operand is illegal.

llvm-svn: 72658
2009-05-31 04:15:38 +00:00
Bruno Cardoso Lopes b922abb47a Use uint8_t and int32_t in {JIT,Machine}CodeEmiters
llvm-svn: 72650
2009-05-30 23:50:33 +00:00
Bruno Cardoso Lopes 9499ab3287 Add AMD64 elf machine type
llvm-svn: 72635
2009-05-30 21:05:47 +00:00
Bruno Cardoso Lopes a194c3a69e First patch in the direction of splitting MachineCodeEmitter in two subclasses:
JITCodeEmitter and ObjectCodeEmitter. No functional changes yet. Patch by Aaron Gray

llvm-svn: 72631
2009-05-30 20:51:52 +00:00
Chris Lattner 221895303c fix PR4284, a bug in simplifylibcalls handling memcmp. Patch by
Benjamin Kramer!

llvm-svn: 72625
2009-05-30 18:43:04 +00:00
Nick Lewycky 8e2c4f4716 Metadata uses metadata type not empty struct.
llvm-svn: 72623
2009-05-30 16:08:30 +00:00
Mike Stump 5b6bb31eae Add some documentation.
llvm-svn: 72622
2009-05-30 15:19:29 +00:00
Duncan Sands 24ad1feb77 Adjust these tests now that "extern inline"
functions are being output with bodies and
available_externally linkage.

llvm-svn: 72620
2009-05-30 13:57:05 +00:00
Evan Cheng 7142ad75a1 (i64 (zext (srl GR32 8))) -> movzbl AH is not safe since srl 8 only clear the top 8 bits.
llvm-svn: 72618
2009-05-30 08:43:27 +00:00
Nick Lewycky adbc284666 Give embedded metadata its own type instead of relying on EmptyStructTy.
llvm-svn: 72610
2009-05-30 05:06:04 +00:00
Mike Stump 799bf5855e Add support for letting the client choose different flavors of NaNs. Testcase to be
added in clang.

llvm-svn: 72606
2009-05-30 03:49:43 +00:00
Bill Wendling 09f17a8479 Untabification.
llvm-svn: 72604
2009-05-30 01:09:53 +00:00
Bill Wendling c1b9bff66d Untabify.
llvm-svn: 72603
2009-05-30 00:58:37 +00:00
Evan Cheng 9a75111bc6 Untabify.
llvm-svn: 72600
2009-05-30 00:48:34 +00:00
Anton Korobeynikov b6f4538683 Add placeholder for thumb2 stuff
llvm-svn: 72593
2009-05-29 23:41:08 +00:00
Bill Wendling 006459ecd4 Enable GVN Load PRE.
llvm-svn: 72589
2009-05-29 20:38:16 +00:00
Duncan Sands 15de591890 Dan noticed that the verifier wasn't thoroughly checking uses of
invoke results (see the testcases).  Tighten up the checking.

llvm-svn: 72586
2009-05-29 19:39:36 +00:00
Bruno Cardoso Lopes 9d809cad50 Fix some typos
llvm-svn: 72579
2009-05-29 17:08:57 +00:00
Torok Edwin 0b0ddb21fe just show the instruction, its not that slow.
llvm-svn: 72577
2009-05-29 16:58:36 +00:00
Torok Edwin 6a94624a1b for instructions with void type we have no choice but print the instruction as
is, otherwise we get a <badref>.

llvm-svn: 72567
2009-05-29 10:28:44 +00:00
Torok Edwin 72070282eb Add a DEBUG() output to GVN that prints the instruction clobbering a load.
This is useful when trying to figure out why GVN didn't eliminate redundant
loads.

llvm-svn: 72565
2009-05-29 09:46:03 +00:00
Owen Anderson 04cfdd38a2 Fix an issue where phiMap was not being updated properly when doing load PRE.
Diagnosis and patch thanks to Jakub Staszak.

llvm-svn: 72562
2009-05-29 05:37:54 +00:00
Evan Cheng 87b037168e Default isNarrowingProfitable to false.
llvm-svn: 72561
2009-05-29 05:31:40 +00:00
Evan Cheng 8e97b85cde Remove an accidental commit.
llvm-svn: 72560
2009-05-29 05:28:52 +00:00
Evan Cheng 716e688fca More h-registers tricks: folding zext nodes.
llvm-svn: 72558
2009-05-29 01:44:43 +00:00
Evan Cheng 86cdb4b345 Do not try to create a MVT type of width 0.
llvm-svn: 72557
2009-05-28 23:52:18 +00:00
Bill Wendling 2e09bd3d34 The MONITOR and MWAIT instructions have insufficient information for
decoding. Essentially, they both map to the same column in the "opcode
extensions for one- and two-byte opcodes" table in the x86 manual. The RawFrm
complicates decoding this.

Instead, use opcode 0x01, prefix 0x01, and form MRM1r. Then have the code
emitter special case these, a la [SML]FENCE.

llvm-svn: 72556
2009-05-28 23:40:46 +00:00
Daniel Dunbar e88a7d518e NewNightlyTest.pl: Add a -parallel-jobs argument (set # of jobs for make with
-parallel, instead of always using 2).

llvm-svn: 72551
2009-05-28 22:45:24 +00:00
Eli Friedman e4b43e60b3 Add explicit test for PR4280.
llvm-svn: 72539
2009-05-28 21:04:35 +00:00
Eli Friedman e1dc193f35 Re-commit r72514 and r72516 with a fixed version of BR_CC lowering.
This patch removes some special cases for opcodes and does a bit of 
cleanup.

llvm-svn: 72536
2009-05-28 20:40:34 +00:00
Evan Cheng cc3ae1f2ff Fix MOVMSKPDrr encoding.
llvm-svn: 72535
2009-05-28 18:55:28 +00:00
Evan Cheng 60618fe4ac Fix PSIGND encoding bug. Patch by Sean Callanan.
llvm-svn: 72534
2009-05-28 18:48:53 +00:00
Evan Cheng 6673ff08fe Incorporate patch feedbacks.
llvm-svn: 72533
2009-05-28 18:41:02 +00:00
Daniel Dunbar e6986d8e60 NightlyTest: Write "sentdata.txt" files and run the -submit-aux script before
sending data to the server.
 - Otherwise if the server connection fails the external script never runs.

Also, create content before initiating connection to try and decrease time we
are connected to llvm.org.

llvm-svn: 72532
2009-05-28 18:31:40 +00:00
Sanjiv Gupta ae028d48be Emit debug info for locals with proper scope.
llvm-svn: 72531
2009-05-28 18:24:11 +00:00
Bill Wendling f193838d2b Temporarily revert r72514 (and dependent patch r72516). It was causing this
failure during llvm-gcc bootstrap:

Assertion failed: (!Tmp2.getNode() && "Can't legalize BR_CC with legal condition!"), function ExpandNode, file /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp, line 2923.
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/libgcc2.c:1727: internal compiler error: Abort trap
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.

llvm-svn: 72530
2009-05-28 18:18:59 +00:00
Sanjiv Gupta fc4707a331 Mark the branch insns correctly.
llvm-svn: 72529
2009-05-28 17:32:56 +00:00
Sanjiv Gupta 335311c67a Fixing problems that got exposed after the refactoring of LegalizeDAG done in 72447.
llvm-svn: 72521
2009-05-28 06:59:57 +00:00
Eli Friedman 1f906448bc Add a testcase which got fixed by recent legalization work.
llvm-svn: 72517
2009-05-28 05:10:20 +00:00
Eli Friedman 9b9df77260 Remove a couple of useless functions.
llvm-svn: 72516
2009-05-28 04:49:34 +00:00
Eli Friedman 3aa278394e Remove special cases for more opcodes.
This is basically the end of this series of patches for LegalizeDAG; the 
remaining special cases can't be removed without more infrastructure 
work.  There's a FIXME for each relevant opcode near the beginning of
SelectionDAGLegalize::LegalizeOp.

llvm-svn: 72514
2009-05-28 04:39:57 +00:00
Eli Friedman 5806e18ce1 Return the operand rather than a null SDValue when the given SELECT_CC
is actually legal.  Part of LegalizeDAG cleanups.

llvm-svn: 72513
2009-05-28 04:31:08 +00:00
Nick Lewycky 206876e2da Use Operands.data() instead of &Operands[0] where Operands is a potentially
empty SmallVector.

llvm-svn: 72512
2009-05-28 04:08:10 +00:00
Eli Friedman 5df7202d3b Remove special case for SETCC opcode; add some comments explaining why
some special cases are necessary.

llvm-svn: 72511
2009-05-28 03:56:57 +00:00
Jeffrey Yasskin 97021ae319 This patch brings the list of attributes in CPPBackend.cpp up to date with the
list in Attributes.h. It also reorders the CPPBackend list to match so that
it's easier to see that it's complete.

llvm-svn: 72510
2009-05-28 03:16:17 +00:00
Eli Friedman e1bc3798e6 Some minor cleanups.
llvm-svn: 72509
2009-05-28 03:06:16 +00:00
Bill Wendling 0feb0e6071 "The instructions MMX_PSADBWrm and MMX_PSADBWrr have opcode 0b11100000 (e0), but
the Intel manual (screenshot) says it should be 0b11110110 (f6).  The existing
encoding causes a disassembly conflict with MMX_PAVGBrm, which really should be
0f e0."

Patch by Sean Callanan!

llvm-svn: 72508
2009-05-28 02:04:00 +00:00
Evan Cheng a9cda8abf2 Added optimization that narrow load / op / store and the 'op' is a bit twiddling instruction and its second operand is an immediate. If bits that are touched by 'op' can be done with a narrower instruction, reduce the width of the load and store as well. This happens a lot with bitfield manipulation code.
e.g.
orl     $65536, 8(%rax)
=>
orb     $1, 10(%rax)

Since narrowing is not always a win, e.g. i32 -> i16 is a loss on x86, dag combiner consults with the target before performing the optimization.

llvm-svn: 72507
2009-05-28 00:35:15 +00:00
Dan Gohman 4d1823680d Revert 72493 and replace it with a more conservative fix, for now: don't
rewrite the comparison if there is any implicit extension or truncation
on the induction variable. I'm planning for IVUsers to eventually take
over some of the work of this code, and for it to be generalized.

llvm-svn: 72496
2009-05-27 21:10:47 +00:00
Eli Friedman a56159b7e9 Ger rid of some dead code.
llvm-svn: 72494
2009-05-27 20:39:00 +00:00
Dan Gohman f4d85325c0 In ChangeCompareStride, when the stride to be reused is truncated to
a smaller type, promoted its offset back up to the type of the new
comparison. This fixes PR4222.

llvm-svn: 72493
2009-05-27 20:00:18 +00:00
Evan Cheng 4db1631a43 Fix sfence jit encoding. Patch by Sean Callanan.
llvm-svn: 72488
2009-05-27 18:38:01 +00:00
Bill Wendling 0a9ea80013 This looks like it passes now.
llvm-svn: 72485
2009-05-27 17:43:21 +00:00
Bruno Cardoso Lopes a72a505a80 Added support for fround, fextend and FP_TO_SINT
llvm-svn: 72483
2009-05-27 17:23:44 +00:00
Douglas Gregor bbcf90f936 Minor fix for CMake build system
llvm-svn: 72480
2009-05-27 16:52:17 +00:00
Oscar Fuentes 10a71da05a CMake: Set LIBS on llvm-config so we can query the system libraries
used by CMake with --ldflags.

llvm-svn: 72470
2009-05-27 15:49:33 +00:00
Eli Friedman ed795153c7 Minor cleanups; add a better explanation for the issue with
BUILD_VECTOR.

llvm-svn: 72469
2009-05-27 12:42:55 +00:00
Eli Friedman 2892d82378 Remove more special cases for opcodes.
llvm-svn: 72468
2009-05-27 12:20:41 +00:00
Eli Friedman 3b251705fd Remove special cases for more opcodes.
llvm-svn: 72467
2009-05-27 07:58:35 +00:00
Eli Friedman 0e49431422 Removing more special cases from LegalizeDAG.
llvm-svn: 72465
2009-05-27 07:32:27 +00:00
Eli Friedman 568839681c Eliminate more special cases for opcodes.
llvm-svn: 72464
2009-05-27 07:05:37 +00:00
Eli Friedman d6f2834496 Remove more special cases from LegalizeDAG.
llvm-svn: 72456
2009-05-27 03:33:44 +00:00
Eli Friedman b3554158c5 Remove unused argument.
llvm-svn: 72455
2009-05-27 02:21:29 +00:00
Eli Friedman a8f9a0261e Remove more opcode special cases.
llvm-svn: 72454
2009-05-27 02:16:40 +00:00
Dan Gohman 28a9f80811 Add braces around an array initializer.
llvm-svn: 72453
2009-05-27 02:07:15 +00:00
Dan Gohman 1789362d70 Teach SCEVExpander to avoid creating over-indexed GEP indices when
possible. For example, it now emits

  %p.2.ip.1 = getelementptr [3 x [3 x double]]* %p, i64 2, i64 %tmp, i64 1

instead of the equivalent but less obvious

  %p.2.ip.1 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 %tmp, i64 19

llvm-svn: 72452
2009-05-27 02:00:53 +00:00
Dan Gohman 776e4c8d35 Teach BasicAliasAnalysis to understand constant gep indices that fall
beyond their associated static array type.

I believe that this fixes a legitimate bug, because BasicAliasAnalysis
already has code to check for this condition that works for non-constant
indices, however it was missing the case of constant indices. With this
change, it checks for both.

This fixes PR4267, and miscompiles of SPEC 188.ammp and 464.h264.href.

llvm-svn: 72451
2009-05-27 01:48:27 +00:00
Eli Friedman 21d349b3c5 Start of refactoring LegalizeDAG so that we don't need specialized
handling for every single opcode.

llvm-svn: 72447
2009-05-27 01:25:56 +00:00
Eli Friedman acb851a8c0 Don't abuse the quirky behavior of LegalizeDAG for XINT_TO_FP and
FP_TO_XINT.  Necessary for some cleanups I'm working on.  Updated 
from the previous version (r72431) to fix a bug and make some things a 
bit clearer.

llvm-svn: 72445
2009-05-27 00:47:34 +00:00
Dale Johannesen af4fa989e4 Testcase for (llvm-gcc-4.2) 72442 (PR 4242).
llvm-svn: 72443
2009-05-26 23:19:19 +00:00
Daniel Dunbar d96b117872 Back out r72431, it is causing a number of compilation crashes with clang.
llvm-svn: 72436
2009-05-26 21:27:02 +00:00
Stefanus Du Toit 96180b5387 Update CPU capabilities for AMD machines
- added processors k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, and
barcelona with appropriate sse3/4a levels
- added FeatureSSE4A for amdfam10 processors
in X86Subtarget:
- added hasSSE4A
- updated AutoDetectSubtargetFeatures to detect SSE4A
- updated GetCurrentX86CPU to detect family 15 with sse3 as k8-sse3 and
family 10h as amdfam10

New processor names match those used by gcc.

Patch by Paul Redmond!

llvm-svn: 72434
2009-05-26 21:04:35 +00:00
Eli Friedman 8c7bff96ed Don't abuse the quirky behavior of LegalizeDAG for XINT_TO_FP and
FP_TO_XINT.  Necessary for some cleanups I'm working on. 

llvm-svn: 72431
2009-05-26 19:18:56 +00:00
Torok Edwin 49db738833 For the new ar --plugin libLLVMgold.so to work we need libLTO linked with
pthreads, otherwise ar complains of unresolved references to pthread_mutex_*.
LTO doesn't actually use pthreads, but ManagedStatic does.

Fix this by linking in LIBS (that contains pthreads) for LTO and gold.
For now this links in more libs than needed (libffi for example), we can figure
out later how to link in those libs per-tool later.

llvm-svn: 72430
2009-05-26 19:11:47 +00:00
Jeffrey Yasskin 7d287cb7ed LiveVariables::VarInfo contains an AliveBlocks BitVector, which has as many
entries as there are basic blocks in the function.  LiveVariables::getVarInfo
creates a VarInfo struct for every register in the function, leading to
quadratic space use.  This patch changes the BitVector to a SparseBitVector,
which doesn't help the worst-case memory use but does reduce the actual use in
very long functions with short-lived variables.

llvm-svn: 72426
2009-05-26 18:27:15 +00:00
Dan Gohman 2a6606ca20 For the return type of SCEVUDivExpr, use the RHS' type instead of
that of the LHS. It doesn't matter for correctness, but the LHS
is more likely than the RHS to be a pointer type in exotic cases,
and it's more tidy to have it return the integer type.

llvm-svn: 72424
2009-05-26 17:44:05 +00:00
Dan Gohman fae6edc6f2 Give SCEVNaryExpr a doxygen comment.
llvm-svn: 72423
2009-05-26 17:42:32 +00:00
Dan Gohman 9fe212806b In cases where a pointer value is an operand of a multiplication or
division operation, don't attempt to use the operation's value as
the base of a getelementptr. This fixes PR4271.

llvm-svn: 72422
2009-05-26 17:41:16 +00:00
Eli Friedman 4a951bf2ad Delete a bunch of dead code from LegalizeDAG.
llvm-svn: 72414
2009-05-26 08:55:52 +00:00
Evan Cheng 7061ee968c Eliminate VarInfo::UsedBlocks.
llvm-svn: 72411
2009-05-26 06:25:46 +00:00
Chris Lattner 02274a7171 make memdep use the getModRefInfo method for stores instead of the
low-level alias() method, allowing it to reason more aggressively
about pointers into constant memory.  PR4189

llvm-svn: 72403
2009-05-25 21:28:56 +00:00
Nick Lewycky 47be7d135c Audit the type constructors. Previously it was possible to create [0 x void]
or use labels as members of structures for example. Also included a couple of
whitespace fixes.

llvm-svn: 72402
2009-05-25 21:28:11 +00:00
Chris Lattner 9b65031add add some late optimizations that GCC does. It thinks these are a win
even on Core2, not just AMD processors which was a surprise to me.

llvm-svn: 72396
2009-05-25 20:28:19 +00:00
Chris Lattner 9a3f3a5c3d fix typo
llvm-svn: 72395
2009-05-25 19:51:07 +00:00
Chris Lattner be31b7b534 we should eventually add -march=atom and the new atom movbe instruction.
llvm-svn: 72387
2009-05-25 16:34:44 +00:00
Nick Lewycky 4099c7c229 Fix the crash debugger to actually bisect globals once it's determined that it
can't just eliminate all global initializers.

llvm-svn: 72378
2009-05-25 06:29:56 +00:00
Nick Lewycky 6e090c9117 Add a bisection step on the list of instructions before doing the linear
simplification. It's not clear to me whether this can replace the first of the
linear instruction simplification stages or not, so I left it in.

llvm-svn: 72377
2009-05-25 05:30:00 +00:00
Dan Gohman 4d5435d46a Various comment fixes.
llvm-svn: 72376
2009-05-24 23:45:28 +00:00
Dan Gohman 8ca0885d69 Change ScalarEvolution::getSCEVAtScope to always return the original value
in the case where a loop exit value cannot be computed, instead of only in
some cases while using SCEVCouldNotCompute in others. This simplifies
getSCEVAtScope's callers.

llvm-svn: 72375
2009-05-24 23:25:42 +00:00
Eli Friedman ac149ee60a Add a comment which should hopefully make the purpose of this method a
bit clearer.

llvm-svn: 72374
2009-05-24 20:32:10 +00:00
Eli Friedman fd8b335ca4 Minor improvement to FCOPYSIGN to use BIT_CONVERT in cases where the
corresponding integer type is legal.

llvm-svn: 72373
2009-05-24 20:29:11 +00:00
Torok Edwin 26895b518b Move Rewriter.clear() earlier, to avoid triggerring the AssertingVH by
one of the RecursivelyDeleteTriviallyDeadInstructions.
Add a comment explaining why the cache needs to be cleared.

llvm-svn: 72372
2009-05-24 20:08:21 +00:00
Torok Edwin 5349cf5f4b Instead of clearing the rewriter, don't attempt to rewrite dead phi nodes.
Also fix 80 column violation.

llvm-svn: 72371
2009-05-24 19:36:09 +00:00
Dan Gohman 4486da5b78 When rewriting the loop exit test with the canonical induction variable,
leave the original comparison in place if it has other uses, since the
other uses won't be dominated by the new comparison instruction.

llvm-svn: 72369
2009-05-24 19:11:38 +00:00
Dan Gohman 3cdfe749e0 Fix this code for hosts where std::vector doesn't have .data().
Use &Ops[0] instead, which is safe since Ops will never be empty here.

llvm-svn: 72368
2009-05-24 19:02:45 +00:00
Dan Gohman fb56cf1b1d When replacing a floating-point comparison with an integer
comparison, use takeName to give the integer comparison a name.

llvm-svn: 72367
2009-05-24 18:09:01 +00:00
Dan Gohman 291c2e04bd Generalize SCEVExpander::visitAddRecExpr's GEP persuit, and avoid
sending SCEVUnknowns to expandAddToGEP. This avoids the need for
expandAddToGEP to bend the rules and peek into SCEVUnknown
expressions.

Factor out the code for testing whether a SCEV can be factored by
a constant for use in a GEP index. This allows it to handle
SCEVAddRecExprs, by recursing.

As a result, SCEVExpander can now put more things in GEP indices,
so it emits fewer explicit mul instructions.

llvm-svn: 72366
2009-05-24 18:06:31 +00:00
Dan Gohman 071156c19c When the low bits of one operand of an add are zero, that number
of low bits of the other operand are preserved in the output.

llvm-svn: 72365
2009-05-24 18:02:35 +00:00
Torok Edwin d184bc209c The rewriter may hold references to instructions that are deleted because they are trivially dead.
Fix by clearing the rewriter cache before deleting the trivially dead
instructions.
Also make InsertedExpressions use an AssertingVH to catch these
bugs easier.

llvm-svn: 72364
2009-05-24 14:23:16 +00:00
Eli Friedman fe87034cef Rewrite ISD::FCOPYSIGN lowering to never use i64. Not really ideal, but
it's late, and I don't have any better ideas at the moment.  Fixes PR4257.

llvm-svn: 72363
2009-05-24 10:21:20 +00:00
Torok Edwin 6ee6f73973 Make bugpoint emit a bugpoint-reduced-blocks.bc, because bugpoint itself
can crash during instruction simplification (for example if it creates a
broken module).

llvm-svn: 72362
2009-05-24 09:40:47 +00:00
Torok Edwin 5bd3f7b4a2 Add -disable-global-remove option to bugpoint.
Sometimes when bugpointing a crash the bugpoint-reduced-simplified.bc reproduces
a totally different bug than the original one ("GV doesn't have initializer").
Although its useful to report that bug too, I need a way to reduce the original
bug, hence I introduced -disable-global-remove.

llvm-svn: 72361
2009-05-24 09:31:04 +00:00
Eli Friedman cd2e0cd297 Update for CMakeLists; untested, so tell me if there are issues.
llvm-svn: 72360
2009-05-24 09:13:13 +00:00
Eli Friedman a4e1675dac Remove checks of getTypeAction from LegalizeOp; we already assert that
all results and all operands are legal, so this change shouldn't affect 
behavior at all.

llvm-svn: 72359
2009-05-24 08:42:01 +00:00
Eli Friedman 5e0d150689 Disable type legalization in LegalizeDAG.
This leaves around 4000 lines of dead code; I'll clean that up 
in subsequent commits.

llvm-svn: 72358
2009-05-24 02:46:31 +00:00
Nick Lewycky aab930a5db Remove border around table used for layout.
llvm-svn: 72357
2009-05-24 02:46:06 +00:00
Eli Friedman 9c6ab1a34d Make the PPC backend use a legal type for the operands to the BUILD_VECTOR
nodes it generates.

llvm-svn: 72356
2009-05-24 02:03:36 +00:00
Eli Friedman 7badee92ad Fix a bug in the expansion of EXTRACT_SUBVECTOR in
ExpandExtractFromVectorThroughStack.

llvm-svn: 72351
2009-05-23 23:03:28 +00:00
Eli Friedman 2199ed399f Make the X86 backend mark EXTRACT_SUBVECTOR as Expand, at least for the
moment.

llvm-svn: 72350
2009-05-23 22:44:52 +00:00
Eli Friedman 40afdb63ec Add a proper implementation of EXTRACT_SUBVECTOR legalization that
doesn't split legal vector operands.  This is necessary because the 
type legalization (and therefore, vector splitting) code will be going 
away soon.

llvm-svn: 72349
2009-05-23 22:37:25 +00:00
Torok Edwin 86ced8af3d Use latin symbols. I was told not everybody has a UTF-8 capable editor.
llvm-svn: 72343
2009-05-23 20:40:47 +00:00
Torok Edwin cfe9db7380 Write family name last, as other entries in this file.
llvm-svn: 72340
2009-05-23 20:21:09 +00:00
Torok Edwin 0b6513df48 Add myself.
llvm-svn: 72339
2009-05-23 20:19:52 +00:00
Anton Korobeynikov 0b91cc4260 Add ARMv7 architecture, Cortex processors and different FPU modes handling.
llvm-svn: 72337
2009-05-23 19:51:43 +00:00
Anton Korobeynikov fa6f1eea36 Emit ARM Build Attributes
llvm-svn: 72336
2009-05-23 19:51:20 +00:00
Anton Korobeynikov 08bf4c0f5a Propagate CPU string out of SubtargetFeatures
llvm-svn: 72335
2009-05-23 19:50:50 +00:00
Jay Foad c1fca9fb3a Work around a page size issue on Cygwin.
llvm-svn: 72332
2009-05-23 17:57:59 +00:00
Torok Edwin be6a9a151a Fix PR4254.
The DAGCombiner created a negative shiftamount, stored in an
unsigned variable. Later the optimizer eliminated the shift entirely as being
undefined.
Example: (srl (shl X, 56) 48). ShiftAmt is 4294967288.
Fix it by checking that the shiftamount is positive, and storing in a signed
variable.

llvm-svn: 72331
2009-05-23 17:29:48 +00:00
Torok Edwin a602caf369 stat64/open64/lseek64 for the interpreter
llvm-svn: 72329
2009-05-23 16:23:59 +00:00
Torok Edwin 7996339dd8 available_externall linkage is not local, this was confusing the codegenerator,
and it wasn't generating calls through @PLT for these functions.
hasLocalLinkage() is now false for available_externally,
I attempted to fix the inliner and dce to handle available_externally properly.
It passed make check.

llvm-svn: 72328
2009-05-23 14:06:57 +00:00
Eli Friedman 53a71147ba Fix test to account for legalization changes; I think this ends up
running an extra DAGCombine pass which improves the code a bit.

llvm-svn: 72326
2009-05-23 13:15:11 +00:00
Eli Friedman da90dd6d72 Add a new step to legalization to legalize vector math operations. This
will allow simplifying LegalizeDAG to eliminate type legalization.  (I 
have a patch to do that, but it's not quite finished; I'll commit it 
once it's finished and I've fixed any review comments for this patch.)  
See the comment at the beginning of 
lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp for more details on the
motivation for this patch.

llvm-svn: 72325
2009-05-23 12:35:30 +00:00
Eli Friedman dfe4f25355 Make the x86 backend custom-lower UINT_TO_FP and FP_TO_UINT on 32-bit
systems instead of attempting to promote them to a 64-bit SINT_TO_FP or 
FP_TO_SINT.  This is in preparation for removing the type legalization 
code from LegalizeDAG: once type legalization is gone from LegalizeDAG, 
it won't be able to handle the i64 operand/result correctly.

This isn't quite ideal, but I don't think any other operation for any 
target ends up in this situation, so treating this case specially seems 
reasonable.

llvm-svn: 72324
2009-05-23 09:59:16 +00:00
Oscar Fuentes eeac588471 CMake: Use libdl only when available. Fixes build on FreeBSD.
llvm-svn: 72311
2009-05-23 02:37:24 +00:00
Evan Cheng a838a40bc4 Fix bug in FoldFCmp_IntToFP_Cst. If inttofp is a uintofp, use unsigned instead of signed integer constant.
llvm-svn: 72300
2009-05-22 23:10:53 +00:00
Dan Gohman 9069d890e8 Add a note mentioning that uses of the return value of an invoke
must be dominated by the normal label.

llvm-svn: 72285
2009-05-22 21:47:08 +00:00
Oscar Fuentes 770c8e7927 CMake: Use libpthread in tblgen when needed. Updated list of source
files for PIC16 target.

llvm-svn: 72277
2009-05-22 20:55:15 +00:00
Duncan Sands d6fb6501e3 Add a new codegen pass that normalizes dwarf exception handling
code in preparation for code generation.  The main thing it does
is handle the case when eh.exception calls (and, in a future
patch, eh.selector calls) are far away from landing pads.  Right
now in practice you only find eh.exception calls close to landing
pads: either in a landing pad (the common case) or in a landing
pad successor, due to loop passes shifting them about.  However
future exception handling improvements will result in calls far
from landing pads:
(1) Inlining of rewinds.  Consider the following case:
In function @f:
...
  invoke @g to label %normal unwind label %unwinds
...
unwinds:
  %ex = call i8* @llvm.eh.exception()
...

In function @g:
...
  invoke @something to label %continue unwind label %handler
...
handler:
  %ex = call i8* @llvm.eh.exception()
... perform cleanups ...
  "rethrow exception"

Now inline @g into @f.  Currently this is turned into:
In function @f:
...
  invoke @something to label %continue unwind label %handler
...
handler:
  %ex = call i8* @llvm.eh.exception()
... perform cleanups ...
  invoke "rethrow exception" to label %normal unwind label %unwinds
unwinds:
  %ex = call i8* @llvm.eh.exception()
...

However we would like to simplify invoke of "rethrow exception" into
a branch to the %unwinds label.  Then %unwinds is no longer a landing
pad, and the eh.exception call there is then far away from any landing
pads.

(2) Using the unwind instruction for cleanups.
It would be nice to have codegen handle the following case:
  invoke @something to label %continue unwind label %run_cleanups
...
handler:
... perform cleanups ...
  unwind

This requires turning "unwind" into a library call, which
necessarily takes a pointer to the exception as an argument
(this patch also does this unwind lowering).  But that means
you are using eh.exception again far from a landing pad.

(3) Bugpoint simplifications.  When bugpoint is simplifying
exception handling code it often generates eh.exception calls
far from a landing pad, which then causes codegen to assert.
Bugpoint then latches on to this assertion and loses sight
of the original problem.

Note that it is currently rare for this pass to actually do
anything.  And in fact it normally shouldn't do anything at
all given the code coming out of llvm-gcc!  But it does fire
a few times in the testsuite.  As far as I can see this is
almost always due to the LoopStrengthReduce codegen pass
introducing pointless loop preheader blocks which are landing
pads and only contain a branch to another block.  This other
block contains an eh.exception call.  So probably by tweaking
LoopStrengthReduce a bit this can be avoided.

llvm-svn: 72276
2009-05-22 20:36:31 +00:00
Bob Wilson ccbc17b3a3 Only 64-bit targets support TImode libcalls. Disable the TImode shift libcalls
for ARM.  This fixes rdar://6908807.

llvm-svn: 72269
2009-05-22 17:38:41 +00:00
Dan Gohman 781b75a7df Teach IndVarSimplify's FixUsesBeforeDefs to handle InvokeInsts by
assuming that the use of the value is in a block dominated by the
"normal" destination. LangRef.html and other documentation sources
don't explicitly guarantee this, but it seems to be assumed in
other places in LLVM at least.

This fixes an assertion failure on the included testcase, which
is derived from the Ada testsuite.

FixUsesBeforeDefs is a temporary measure which I'm looking to
replace with a more capable solution.

llvm-svn: 72266
2009-05-22 16:47:11 +00:00
Sanjiv Gupta 43becc23c2 Emit debug information for globals (which include automatic variables as well because on PIC16 they are emitted as globals by the frontend).
llvm-svn: 72262
2009-05-22 13:58:45 +00:00
Duncan Sands dfc2e57137 Hopefully fix the build for people with ocaml.
llvm-svn: 72254
2009-05-22 09:22:17 +00:00
Duncan Sands e5e9f09c6d Always verify dominfo if expensive checking is enabled.
llvm-svn: 72253
2009-05-22 08:52:53 +00:00
Dan Gohman 88e06db116 Fix a thinko in the code that adapted SCEVMulExpr operands for
use in expanding SCEVAddExprs with GEPs. The operands of a
SCEVMulExpr need to be multiplied together, not added.

llvm-svn: 72250
2009-05-22 07:14:20 +00:00
Torok Edwin 9c4dcfb4a7 Revert this. There's no way to verifiy indirect calls, and an optimizer can turn
indirect call into direct call, thus the verifier would reject something it
previously accepted.

llvm-svn: 72249
2009-05-22 07:12:05 +00:00
Torok Edwin a39d69684a Verify that calling conventions match function prototype.
This only rejects mismatches between target specific calling convention
and C/LLVM specific calling convention.
There are too many fastcc/C, coldcc/cc42 mismatches in the testsuite, these are
not reject by the verifier.

llvm-svn: 72248
2009-05-22 06:41:43 +00:00
Eli Friedman 0cf811df82 Fix loop-index-split to correctly preserve dominance frontiers. Part of
PR4238.

llvm-svn: 72244
2009-05-22 03:22:46 +00:00
Daniel Dunbar e3384c4f2e Add llvm::triple constructor from arch, vendor, os strings, and recognize
DragonFly OS type.

llvm-svn: 72242
2009-05-22 02:24:11 +00:00
Dan Gohman faa7d055de Update an assertion string to new-style type names.
llvm-svn: 72239
2009-05-22 00:40:35 +00:00
Evan Cheng db338f3f41 80 column violation.
llvm-svn: 72235
2009-05-21 23:47:47 +00:00
Dale Johannesen 4ff70e389e TableGen for fast isel seems to assume an 'imm'
operand is the last in a pattern.  There is no
reason this should be true (although apparently
it always is right now).

llvm-svn: 72232
2009-05-21 22:25:49 +00:00
Eli Friedman 84295eb636 Fix broken logic in DominatorTreeBase::Split. Part of PR4238.
llvm-svn: 72231
2009-05-21 21:47:54 +00:00
Eli Friedman 5d4a6400ce Fix indentation.
llvm-svn: 72227
2009-05-21 21:08:47 +00:00
Eli Friedman 0ac904455e Fix some incorrect logic in DominanceFrontier::splitBlock. Part of
PR4238.

llvm-svn: 72223
2009-05-21 20:40:30 +00:00
Stuart Hastings 6d437694ab Add some missing steps to the sacred testing ritual scriptures.
llvm-svn: 72222
2009-05-21 20:23:59 +00:00
Jay Foad acf199e4cd Tighten up the asserts in SmallVector::operator[]().
If this causes any new assertion failures that I didn't catch in
testing, the fix is usually to change "&v[0]" to "v.data()" for some
SmallVector v.

llvm-svn: 72221
2009-05-21 19:48:58 +00:00
Duncan Sands d334aca93f Add a getAlignOf helper for getting the ABI alignment of a
type as a target independent constant expression.  I confess
that I didn't check that this method works as intended (though
I did test the equivalent hand-written IR a little).  But what
could possibly go wrong!

llvm-svn: 72213
2009-05-21 15:52:21 +00:00
Jay Foad 7d0479f2c2 Use v.data() instead of &v[0] when SmallVector v might be empty.
llvm-svn: 72210
2009-05-21 09:52:38 +00:00
Jay Foad 9fc7856e3b Implement new SmallVector::data() methods.
llvm-svn: 72209
2009-05-21 09:00:37 +00:00
Dan Gohman bf0002e7c1 Teach ValueTracking a new way to analyze PHI nodes, and and teach
Instcombine to be more aggressive about using SimplifyDemandedBits
on shift nodes. This allows a shift to be simplified to zero in the
included test case.

llvm-svn: 72204
2009-05-21 02:28:33 +00:00
Owen Anderson 2ef7cae93b Add Atomic.cpp to the CMake build system.
llvm-svn: 72202
2009-05-21 00:48:56 +00:00
Owen Anderson 1889bbb2c0 Use DataTypes.h instead of stdint.h.
llvm-svn: 72201
2009-05-21 00:48:13 +00:00
Bill Wendling f99bd3a82b Temporarily revert r72191. It was causing an assert during llvm-gcc
bootstrapping.

llvm-svn: 72200
2009-05-21 00:04:55 +00:00
Bill Wendling 8658bb565d Minor code cleanup. No functionality change.
llvm-svn: 72198
2009-05-20 23:31:45 +00:00
Bill Wendling 744668d5af Merge 'ConstructFunctionDbgScope' and 'ConstructAbstractDbgScope'.
llvm-svn: 72197
2009-05-20 23:28:48 +00:00