Commit Graph

25331 Commits

Author SHA1 Message Date
Daniel Dunbar 0f8155ae4e Prevent assert when using '"' in names (via hexadecimal).
Update LangRef to mention \xx quoting in names.

llvm-svn: 57538
2008-10-14 23:51:43 +00:00
Daniel Dunbar 389529a7df Change getLLVMName to use raw_ostream & PrintLLVMName.
- Avoids duplicated quotification code.
 - Remove QuoteNameIfNeeded.
 - No functionality change.

llvm-svn: 57537
2008-10-14 23:28:09 +00:00
Dale Johannesen 28106756af Accept -march=i586, because gcc does (a synonym
for pentium).  Fixes
gcc.target/i386/20000720-1.c
gcc.target/i386/pr26826.c

llvm-svn: 57528
2008-10-14 22:06:33 +00:00
Evan Cheng 07d53b1d33 Rename LoadX to LoadExt.
llvm-svn: 57526
2008-10-14 21:26:46 +00:00
Jim Grosbach b7c01f5f48 Update ARM Insn encoding to get endian-ness to match the documentation (31-0 left to right)
llvm-svn: 57524
2008-10-14 20:36:24 +00:00
Dan Gohman 9c4b7d5c4f Fix command-line option printing to print two spaces where needed,
instead of requiring all "short description" strings to begin with
two spaces. This makes these strings less mysterious, and it fixes
some cases where short description strings mistakenly did not
begin with two spaces.

llvm-svn: 57521
2008-10-14 20:25:08 +00:00
Evan Cheng d885f6e139 Combine (fcmp cc0 x, y) | (fcmp cc1 x, y) into a single fcmp when possible.
llvm-svn: 57515
2008-10-14 18:44:08 +00:00
Evan Cheng ce70752b11 - Somehow I forgot about one / une.
- Renumber fcmp predicates to match their icmp counterparts.
- Try swapping operands to expose more optimization opportunities.

llvm-svn: 57513
2008-10-14 18:13:38 +00:00
Evan Cheng c36231b95e Fix indentation.
llvm-svn: 57508
2008-10-14 17:15:39 +00:00
Evan Cheng 67786cce66 Optimize anding of two fcmp into a single fcmp if the operands are the same. e.g. uno && ueq -> ueq
ord && olt -> olt
     ord && ueq -> oeq

llvm-svn: 57507
2008-10-14 17:15:11 +00:00
Nuno Lopes a67f06b9c7 little optimization: reuse getPointerToGlobalIfAvailable(CGV) value in emitGlobals()
llvm-svn: 57484
2008-10-14 10:04:52 +00:00
Dan Gohman 56b6885104 When doing the very-late shift-and address-mode optimization,
create a new DAG node to represent the new shift to keep the
DAG consistent, even though it'll almost always be folded into
the address.

If a user of the resulting address has multiple uses, the
nodes may get revisited by a later MatchAddress call, in which
case DAG inconsistencies do matter.

This fixes PR2849.

llvm-svn: 57465
2008-10-13 20:52:04 +00:00
Evan Cheng da9b752883 FIX PR2794. Make sure SIGN_EXTEND_INREG nodes introduced by LegalizeSetCCOperands are leglized. Patch by Richard Pennington.
llvm-svn: 57460
2008-10-13 18:46:18 +00:00
Evan Cheng 4c499c4fa6 Also update sub-register intervals after a trivial computation is rematt'ed for a copy instruction. PR2775.
llvm-svn: 57458
2008-10-13 18:35:52 +00:00
Matthijs Kooijman f7d3cb5435 Make InstructionCombining::getBitCastOperand() recognize GEP instructions and
constant expression with all zero indices as being the same as a bitcast.

llvm-svn: 57442
2008-10-13 15:17:01 +00:00
Matthijs Kooijman 43686a6665 * Make TargetLowering not crash when TargetMachine::getTargetAsmInfo() returns
null. This assumes that any target that does not have AsmInfo, does not
   support "LocAndDot".

llvm-svn: 57438
2008-10-13 12:41:46 +00:00
Matthijs Kooijman c8d7988da8 Make MachineFunction not crash when TargetMachine::getRegisterInfo() returns
NULL, but just hide some debug output then.

llvm-svn: 57437
2008-10-13 12:37:16 +00:00
Gabor Greif cf1d1b7fbc do not use deprecated interfaces
llvm-svn: 57433
2008-10-13 10:21:17 +00:00
Nick Lewycky 707663eda8 Disallow the construction of SCEVs with could-not-compute operands. Catch CNCs
returned by BinomialCoefficient and don't try to operate with them. This
replaces the previous fix for PR2857.

llvm-svn: 57431
2008-10-13 03:58:02 +00:00
Chris Lattner c52af45304 calls can be supported.
llvm-svn: 57428
2008-10-13 01:59:13 +00:00
Dale Johannesen cc98e28f37 Change TAG_ names to DW_TAG for gcc (testsuite) compatibility.
llvm-svn: 57425
2008-10-12 21:23:01 +00:00
Owen Anderson fe1f3d6e08 Fix a bug in live-in detection that caused lost-copy problems to show up.
llvm-svn: 57424
2008-10-12 20:39:30 +00:00
Anton Korobeynikov 46a9c01fff Update size of inst correctly with segment override.
llvm-svn: 57414
2008-10-12 10:30:11 +00:00
Owen Anderson de9812de43 Add special-case code to allow null-guards on calls to malloc.
llvm-svn: 57413
2008-10-12 08:10:46 +00:00
Owen Anderson f2699bb57d Make Escape Analysis work for any pointer.
llvm-svn: 57412
2008-10-12 07:33:29 +00:00
Dale Johannesen ba074c0fed Change Dwarf comments starting with AT_ to DW_AT_ to
match gcc.  Helps with the testsuite.

llvm-svn: 57410
2008-10-12 06:20:47 +00:00
Owen Anderson 198966dbef Fix crashes and infinite loops.
llvm-svn: 57408
2008-10-12 06:03:38 +00:00
Owen Anderson 36b48de43c Duncan convinced me that it's not possible to transform control-based escapes into
data-based ones.  Just be conservative when analyzing control-based escapes.

llvm-svn: 57400
2008-10-12 03:59:45 +00:00
Chris Lattner c46186e890 fix typo
llvm-svn: 57388
2008-10-11 23:59:03 +00:00
Chris Lattner da435910e8 Fix PR2697 by rewriting the '(X / pos) op neg' logic. This also changes
a couple other cases for clarity, but shouldn't affect correctness.

Patch by Eli Friedman!

llvm-svn: 57387
2008-10-11 22:55:00 +00:00
Chris Lattner 2753955fc0 Change CALLSEQ_BEGIN and CALLSEQ_END to take TargetConstant's as
parameters instead of raw Constants.  This prevents the constants from
being selected by the isel pass, fixing PR2735.

llvm-svn: 57385
2008-10-11 22:08:30 +00:00
Chris Lattner d57b7603f9 rearrange some code.
llvm-svn: 57384
2008-10-11 22:07:19 +00:00
Duncan Sands 23ee981e8e Fix comment typo.
llvm-svn: 57381
2008-10-11 19:34:24 +00:00
Anton Korobeynikov 2589777f3f Add ability to override segment (mostly for code emitter purposes).
llvm-svn: 57380
2008-10-11 19:09:15 +00:00
Daniel Dunbar d94184395f Unbreak DbgStopPointInst::getFileName().
llvm-svn: 57373
2008-10-11 06:40:56 +00:00
Chris Lattner fb1f4a1329 simplify comparison
llvm-svn: 57371
2008-10-11 00:08:02 +00:00
Dale Johannesen 05b54c2af4 Fix SSE4.1 roundss, roundsd. While the instructions have
the same pattern as roundpd/roundps, the Intel compiler 
builtins do not:  rounds* has an extra operand.  Fixes
gcc.target/i386/sse4_1-rounds[sd]-[1234].c

llvm-svn: 57370
2008-10-10 23:51:03 +00:00
Devang Patel 647a1e532b Check loop exit predicate properly while eliminating one iteration loop.
This patch fixes PR 2869

llvm-svn: 57369
2008-10-10 22:02:57 +00:00
Anton Korobeynikov 58deb69040 Fix a thinko and unbreak sparc default CC
llvm-svn: 57368
2008-10-10 21:47:37 +00:00
Dale Johannesen 4f2791617e Remove some overzealous checks that were rejecting
valid comments in inline assembly.
gcc.target/i386/20011009-1.c

llvm-svn: 57365
2008-10-10 21:04:42 +00:00
Anton Korobeynikov f8a4a0e959 Extend set of return registers on sparc until someone will implement MRV support there. At least, this will allow libgcc compile, however we are not ABI-compatible with stuff compiled with native gcc.
llvm-svn: 57364
2008-10-10 20:30:14 +00:00
Anton Korobeynikov b80b485264 Ignore extra 'r' modifier for now
llvm-svn: 57363
2008-10-10 20:29:50 +00:00
Anton Korobeynikov 76baad1ffc Use expand for smul_lohi for now
llvm-svn: 57362
2008-10-10 20:29:31 +00:00
Anton Korobeynikov 281cf247a5 Add rudimentary support for 'r' register operand
llvm-svn: 57359
2008-10-10 20:28:10 +00:00
Anton Korobeynikov b8736566c2 Cleanup
llvm-svn: 57358
2008-10-10 20:27:31 +00:00
Oscar Fuentes 45fde6fc4f CMake: updated lib/Analysis/CMakeLists.txt.
llvm-svn: 57357
2008-10-10 18:51:36 +00:00
Mon P Wang 297364cd3b Revert r57340 move guard mutex in getPointerToFunction as this can cause
deadlock issues with java

llvm-svn: 57356
2008-10-10 18:07:10 +00:00
Nuno Lopes e3127f3f80 fix memleak by cleaning the global sets on pass exit
llvm-svn: 57353
2008-10-10 16:25:50 +00:00
Anton Korobeynikov 3db2173021 Add rudimentary asmprinter support for printing inline asm operands for sparc.
llvm-svn: 57346
2008-10-10 10:15:03 +00:00
Anton Korobeynikov 9aaaa4035e Add dummy 'm' inline asm constraint handler for Sparc. I'm not sure, whether it is correct, however :)
llvm-svn: 57345
2008-10-10 10:14:47 +00:00
Anton Korobeynikov 1f9487b916 Cleanup
llvm-svn: 57344
2008-10-10 10:14:15 +00:00
Owen Anderson 45d41c6741 Add a basic intra-procedural escape analysis. This hasn't be extensively tested yet, but feedback is welcome.
llvm-svn: 57342
2008-10-10 08:36:25 +00:00
Mon P Wang 6e5eccf86b Moved guard mutex upwards to guard materializing a function
in getPointerToFunction

llvm-svn: 57340
2008-10-10 01:47:42 +00:00
Mon P Wang dfcc1ff8f8 Added missing print functions that take a raw_ostream
llvm-svn: 57339
2008-10-10 01:43:55 +00:00
Dale Johannesen 62a2e5cb2f Generated files for previous checkin.
llvm-svn: 57331
2008-10-09 23:01:34 +00:00
Dale Johannesen 4f0bd68cfe Add a "loses information" return value to APFloat::convert
and APFloat::convertToInteger.  Restore return value to
IEEE754.  Adjust all users accordingly.

llvm-svn: 57329
2008-10-09 23:00:39 +00:00
Dale Johannesen 54306fe499 Rename APFloat::convertToAPInt to bitcastToAPInt to
make it clearer what the function does.  No functional
change.

llvm-svn: 57325
2008-10-09 18:53:47 +00:00
Nick Lewycky 03c5fa18f1 Don't drop alignment on globals when cloning.
llvm-svn: 57320
2008-10-09 06:27:14 +00:00
Chris Lattner 1a84f86271 get CodeGen/Alpha/mul128.ll to work.
llvm-svn: 57318
2008-10-09 04:50:56 +00:00
Dale Johannesen d796164e89 Align EH tables before label is emitted, not after,
thus aligning the label.

llvm-svn: 57310
2008-10-08 21:50:21 +00:00
Dale Johannesen 66e08292aa (re)Put const weak strings in appropriate section on Darwin.
g++dg/abi/key2.C

llvm-svn: 57309
2008-10-08 21:49:47 +00:00
Nuno Lopes 06c67f88d7 dont specialize weak functions and the like
llvm-svn: 57305
2008-10-08 18:45:59 +00:00
Jim Grosbach d83529e8c4 Comment to be explicit that the enumeration values for CondCodes matter.
llvm-svn: 57295
2008-10-08 16:24:35 +00:00
Duncan Sands 32052e8272 Use template to distinguish between function variants.
GCC 4.4.0 gives an error on the "int" declaration for example
saying that it has already been declared (using the "short"
one). Using templates here allow the compiler to distinguish
between the function to choose.

Also, "llvm/Support/DataTypes.h" was not included, leading to
error messages about not knowing "uint32_t" for example.

Patch by Samuel Tardieu.

llvm-svn: 57292
2008-10-08 07:44:52 +00:00
Duncan Sands 26ff6f9c54 Add <cstdio> include where needed by gcc-4.4.
Patch by Samuel Tardieu.

llvm-svn: 57291
2008-10-08 07:23:46 +00:00
Chris Lattner 9b1300ba55 regenerate
llvm-svn: 57290
2008-10-08 06:44:45 +00:00
Chris Lattner 152acb5325 Add missing semicolumns in parser rules, those missing semicolumns
are required to compile with the latest Bison.

Patch by Samuel Tardieu!

llvm-svn: 57289
2008-10-08 06:44:36 +00:00
Chris Lattner 42d5785dbd Add parentheses to avoid warnings in GCC 4.4.0,
patch by Samuel Tardieu!

llvm-svn: 57288
2008-10-08 06:42:28 +00:00
Owen Anderson bfe12ee668 Fix the case where an instruction is not properly marked as using all registers that alias its inputs.
llvm-svn: 57286
2008-10-08 04:30:51 +00:00
Dan Gohman 60ad173dfe Remove -disable-fast-isel. Use cl::boolOrDefault with -fast-isel
instead.

So now: -fast-isel or -fast-isel=true enable fast-isel, and
-fast-isel=false disables it. Fast-isel is also on by default
with -fast, and off by default otherwise.

llvm-svn: 57270
2008-10-07 23:00:56 +00:00
Dan Gohman b3ba449cfb Add MBB successors and physreg Uses in the same order that
SDISel typically adds them in. This makes it a little easier
to compare FastISel output with SDISel output.

llvm-svn: 57266
2008-10-07 22:10:33 +00:00
Dan Gohman c1d47c56f9 Avoid emitting redundant materializations of integer constants
for things like null pointers, which at this level aren't
different from regular integer constants.

llvm-svn: 57265
2008-10-07 22:03:27 +00:00
Dan Gohman d3917157d5 Instead of emitting an implicit use for the super-register of
X86::CL that was used, emit an EXTRACT_SUBREG from the CL
super-register to CL. This more precisely describes how the
CL register is being used.

llvm-svn: 57264
2008-10-07 21:50:36 +00:00
Jim Grosbach f311fe142c Unconditional branch instruction encoding fix. Needs to use ABI, not AXI, to get the proper opcode bits.
llvm-svn: 57262
2008-10-07 21:08:09 +00:00
Jim Grosbach b53acd8caa need ARM.h for ARMCC definition
llvm-svn: 57261
2008-10-07 21:01:51 +00:00
Owen Anderson 1d338fc6a4 Add an option to enable StrongPHIElimination, for ease of testing.
llvm-svn: 57259
2008-10-07 20:22:28 +00:00
Jim Grosbach c084e84028 Encode the conditional execution predicate when JITing.
llvm-svn: 57258
2008-10-07 19:05:35 +00:00
Dale Johannesen 422ef88f31 Model hardwired inputs & outputs of x86 8-bit divides correctly.
Fixes local RA miscompilation of gcc.c-torture/execute/20020904-1.c -O0.

llvm-svn: 57257
2008-10-07 18:54:28 +00:00
Andrew Lenharth 21dca9cbb1 Use Dan's supperior check
llvm-svn: 57255
2008-10-07 18:27:23 +00:00
Andrew Lenharth 5aa1cc4065 Correctly set attributes when removing args during cloning. Fixes PR2765
llvm-svn: 57254
2008-10-07 18:08:38 +00:00
Jim Grosbach 2fb5c3938b Clarify naming and correct conditional so that CMP and CMN instructions get the Rn operand encoded properly
llvm-svn: 57252
2008-10-07 17:42:09 +00:00
Jim Grosbach 1d54d4f375 Fix Opcode values of CMP and CMN
llvm-svn: 57251
2008-10-07 17:40:46 +00:00
Andrew Lenharth d69bdaef64 No need for |=
llvm-svn: 57249
2008-10-07 17:11:29 +00:00
Andrew Lenharth 6d409f08be Use ADDC if it is valid at any smaller size. Do it right this time
llvm-svn: 57248
2008-10-07 17:09:16 +00:00
Andrew Lenharth 6606f17e50 Use ADDC if it is valid at any smaller size. fixes test/Codegen/Generic/i128-addsub.ll on x86
llvm-svn: 57247
2008-10-07 17:03:15 +00:00
Anders Carlsson 1699ad9030 Certain patterns involving the "movss" instruction were marked as requiring SSE2, when in reality movss is an SSE1 instruction.
llvm-svn: 57246
2008-10-07 16:14:11 +00:00
Andrew Lenharth 3a9be150be Expand arith on machines without carry flags
llvm-svn: 57243
2008-10-07 14:15:42 +00:00
Andrew Lenharth 64861a7181 Note that ADDC and company don't actually expand yet (missing in legalize
llvm-svn: 57226
2008-10-07 02:10:26 +00:00
Dale Johannesen 7221af384d Mark negative-zero-to-int conversion as Inexact,
since -0.0 can't be represented as an int.
This prevents llvm from reducing -0.0 to a
load-and-convert of int 0.  Fixes
ieee.exp/mzero[2356].c in gcc testsuite.

llvm-svn: 57224
2008-10-07 00:40:01 +00:00
Dan Gohman bef9b0bef0 Correctly handle calls with no return values. This fixes
2006-01-23-UnionInit on x86-64 when inlining is not enabled.

llvm-svn: 57223
2008-10-07 00:12:37 +00:00
Devang Patel 40aafce00d Fix typo, fix PR 2865.
llvm-svn: 57221
2008-10-06 23:22:54 +00:00
Dale Johannesen 6c6729f3a8 Be more precise about which conversions of NaNs
are Inexact.  (These are not Inexact as defined
by IEEE754, but that seems like a reasonable way
to abstract what happens:  information is lost.)

llvm-svn: 57218
2008-10-06 22:59:10 +00:00
Evan Cheng 94d14f2d45 Fix PR2850 and PR2863. Only generate movddup for 128-bit SSE vector shuffles.
llvm-svn: 57210
2008-10-06 21:13:08 +00:00
Dale Johannesen 6271b0a83c Temporarily revert functionality change from my previous patch;
it is too aggressive.

llvm-svn: 57203
2008-10-06 20:43:48 +00:00
Devang Patel c3e3ca9a45 Remove interfaces implemented by dead pass from the list of available passes.
Patch By Matthijs Kooijman.

llvm-svn: 57202
2008-10-06 20:36:36 +00:00
Dale Johannesen fff2995532 Mark shortening NaN conversions as Inexact. PR 2856.
Improve description of unsupported formats.

llvm-svn: 57185
2008-10-06 18:22:29 +00:00
Devang Patel c0f3b52e65 It is possible that all functions in one module are not being
optimized for size. Set OptForSize for each function separately.

llvm-svn: 57182
2008-10-06 18:03:39 +00:00
Dan Gohman dfe979bcb0 Don't dereference the end() iterator. Thanks to
ENABLE_EXPENSIVE_CHECKS for finding this.

llvm-svn: 57181
2008-10-06 18:00:07 +00:00
Devang Patel ab379c905b Remove unncessary isDeclaration() checks.
llvm-svn: 57179
2008-10-06 17:30:07 +00:00
Matthijs Kooijman cbe5e16eb5 Allow scalarrepl to treat an all-zero GEP just as bitcast.
This includes not marking a GEP involving a vector as unsafe, but only when it
has all zero indices. This allows scalarrepl to work in a few more cases.

llvm-svn: 57177
2008-10-06 16:23:31 +00:00
Chris Lattner 7875876e46 reorder #include order, patch by Kenneth Boyd!
llvm-svn: 57148
2008-10-06 03:54:25 +00:00
Chris Lattner 0c41861f39 Add #include to get alloca, patch by Kenneth Boyd!
llvm-svn: 57147
2008-10-06 03:53:16 +00:00
Chris Lattner 851e72cd22 fix an incorrect and extremely confusing error message
llvm-svn: 57123
2008-10-05 18:24:03 +00:00
Chris Lattner 4744ed5f94 make the autoupgrade code for ret attributes dramatically simpler
and actually work.  We can now read the llvm 2.3 bc file from PR2849

llvm-svn: 57122
2008-10-05 18:22:09 +00:00
Nuno Lopes 0ea0fce8fe regenerate
llvm-svn: 57114
2008-10-05 16:49:34 +00:00
Nuno Lopes 33b90e3f59 clean ArgTypeListI production: free the PATypeHolder
llvm-svn: 57113
2008-10-05 16:49:03 +00:00
Anton Korobeynikov 37e560cde1 Emit type-correct constant null. Also fix a typo.
Patch by Robert G. Jakabosky!

llvm-svn: 57110
2008-10-05 15:07:06 +00:00
Anton Korobeynikov d2aded08ac Fix weird think-o and unbreak build on all gcc-3.4.x-based platforms (e.g. mingw)
llvm-svn: 57106
2008-10-05 08:53:29 +00:00
Chris Lattner f9325e5f67 this case is matched now.
llvm-svn: 57096
2008-10-05 02:16:12 +00:00
Chris Lattner 917a6c1343 rewrite bswap matching to be more general, allowing arbitrary
shifting and masking inside a bswap expr.  This allows it to handle
the cases from PR2842, which involve the intermediate 'or' 
expressions being shifted, not just the input value.

llvm-svn: 57095
2008-10-05 02:13:19 +00:00
Chris Lattner ca91f265c4 fix a bug where the bswap matcher could match a case involving
ashr.  It should only apply to lshr.

llvm-svn: 57089
2008-10-05 00:50:57 +00:00
Chris Lattner 2416896b3c wrap some long lines and expand i32 mul's to libcalls, inspired by a
patch by Mikael Lepisto!

llvm-svn: 57077
2008-10-04 21:27:46 +00:00
Oscar Fuentes b5abd78ab5 CMake: Reflected changes on source file structure. New plugin support
for llvmc2 incomplete.

llvm-svn: 57076
2008-10-04 21:18:50 +00:00
Duncan Sands 1d35e9aebe Ignore loads from and stores to local memory (i.e. allocas)
when deciding whether to mark a function readnone/readonly.
Since the pass is currently run before SROA, this may be
quite helpful.  Requested by Chris on IRC.

llvm-svn: 57050
2008-10-04 13:24:24 +00:00
Nick Lewycky fc9bc3cf23 Allow the construction of SCEVs with SCEVCouldNotCompute operands, by
implementing folding. Fixes PR2857.

llvm-svn: 57049
2008-10-04 11:19:07 +00:00
Anton Korobeynikov b52ef06c8c Revert r56675 - it breaks unwinding runtime everywhere.
llvm-svn: 57048
2008-10-04 11:09:36 +00:00
Argyrios Kyrtzidis a6f9bb7905 Add implementations for sys::Memory::setWritable and sys::Memory::setExecutable on Win32 platform.
llvm-svn: 57047
2008-10-04 08:15:32 +00:00
Argyrios Kyrtzidis 68fec886ed Fix compilation error on MSVC.
llvm-svn: 57046
2008-10-04 08:11:49 +00:00
Dan Gohman 13b048268b Fix fast-isel's handling of atomic instructions. They may
expand to multiple basic blocks, in which case fast-isel
needs to informed of which block to use as it resumes
inserting instructions.

llvm-svn: 57040
2008-10-04 00:56:36 +00:00
Dan Gohman 78bb44fcd4 Fix a bug in the local allocator's liveness computation where it
was setting kill flags on tied uses in two-address instructions.
The kill flags were causing the allocator to think it could
allocate the use and its tied def in different registers.

llvm-svn: 57039
2008-10-04 00:31:14 +00:00
Dale Johannesen 8c36a1c09c Make atomic Swap work, 64-bit on x86-32.
Make it all work in non-pic mode.

llvm-svn: 57034
2008-10-03 22:25:52 +00:00
Dan Gohman e21903987f Clean up some multiple-return-value code that is no longer
applicable.

llvm-svn: 57033
2008-10-03 22:21:24 +00:00
Devang Patel e4924e1026 Fix function attribute verification check.
Thanks Duncan!

llvm-svn: 57029
2008-10-03 21:11:02 +00:00
Dale Johannesen 5d60c1ebb1 Pass MemOperand through for 64-bit atomics on 32-bit,
incidentally making the case where the memop is a
pointer deref work.  Fix cmp-and-swap regression.

llvm-svn: 57027
2008-10-03 19:41:08 +00:00
Devang Patel f963403b58 Nick Lewycky's patch.
While hosting instruction check PHI node.

llvm-svn: 57025
2008-10-03 18:57:37 +00:00
Dan Gohman b62cd7ea98 Use -1ULL instead of uint64_t(-1), at Anton's suggestion.
llvm-svn: 57021
2008-10-03 17:56:45 +00:00
Devang Patel 37165b13e5 Verify function attributes.
llvm-svn: 57020
2008-10-03 17:50:00 +00:00
Evan Cheng 8428cfc93b Fix typos pointed out by Duncan. Also untabify these files.
llvm-svn: 57018
2008-10-03 17:11:58 +00:00
Daniel Dunbar a8c424bf61 Unbreak build.
llvm-svn: 57017
2008-10-03 17:11:57 +00:00
Dan Gohman 2c836cf187 Avoid creating two TargetLowering objects for each target.
Instead, just create one, and make sure everything that needs
it can access it. Previously most of the SelectionDAGISel
subclasses all had their own TargetLowering object, which was
redundant with the TargetLowering object in the TargetMachine
subclasses, except on Sparc, where SparcTargetMachine
didn't have a TargetLowering object. Change Sparc to work
more like the other targets here.

llvm-svn: 57016
2008-10-03 16:55:19 +00:00
Dan Gohman eae96ce3ec Remove an unused field.
llvm-svn: 57014
2008-10-03 16:17:33 +00:00
Jim Grosbach b22ef71d46 On Darwin ARM, memory needs special handling to do JIT. This patch expands
this handling to work properly for modifying stub functions, relocations
back to entry points after JIT compilation, etc..

llvm-svn: 57013
2008-10-03 16:17:20 +00:00
Jim Grosbach 332ad5e016 Indexing off by one resulted in errant encoding of source register for
reg->reg moves.

llvm-svn: 57011
2008-10-03 15:53:56 +00:00
Jim Grosbach af929abc01 NeedStub/DoesntNeedStub logic was reversed, leading to not using a stub
for global relocations that do need them (libc calls, for example).

llvm-svn: 57010
2008-10-03 15:52:42 +00:00
Nuno Lopes cbff1d08f2 regenerate
llvm-svn: 57009
2008-10-03 15:52:39 +00:00
Nuno Lopes bc7b224ce4 fix more memleaks in ResolveTypeTo() and ParseGlobalVariable()
llvm-svn: 57008
2008-10-03 15:51:46 +00:00
Nuno Lopes 877b7e2128 regenerate with bison 2.3
llvm-svn: 57007
2008-10-03 15:45:58 +00:00
Dan Gohman 0d1e9a8e04 Switch the MachineOperand accessors back to the short names like
isReg, etc., from isRegister, etc.

llvm-svn: 57006
2008-10-03 15:45:36 +00:00
Nuno Lopes 6d8e67f512 fix memleak in FunctionHeaderH
llvm-svn: 57005
2008-10-03 15:44:21 +00:00
Duncan Sands 6e42742d2d The result of getSetCCResultType (eg: i32) may be larger
than the type an i1 is promoted to (eg: i8).  Account
for this.  Noticed by Tilmann Scheller on CellSPU; he
will hopefully take care of fixing this in LegalizeDAG
and adding a testcase!

llvm-svn: 56997
2008-10-03 07:41:46 +00:00
Duncan Sands 3a813a5d3f Teach internalize to preserve the callgraph.
Why?  Because it was there!

llvm-svn: 56996
2008-10-03 07:36:09 +00:00
Nicolas Geoffray 74056ae3d5 Acquire the lock only when necessary. More precisely, do not acquire
the lock when calling a method which may materialize the llvm::Function.

llvm-svn: 56995
2008-10-03 07:27:08 +00:00
Owen Anderson cb4f156b6b SplitBlock should only attempt to update LoopInfo if it is actually being used.
llvm-svn: 56994
2008-10-03 06:55:35 +00:00
Dan Gohman 4e072a75cc Implement fast-isel support for zero-extending from i1.
It turns out that this is a fairly common operation,
and it's easy enough to handle.

llvm-svn: 56990
2008-10-03 01:28:47 +00:00
Dan Gohman b01a9c94d4 Fix X86FastISel to handle dynamic allocas that have avoided
getting inserted into the ValueMap. This avoids infinite
recursion in some rare cases.

llvm-svn: 56989
2008-10-03 01:27:49 +00:00
Dan Gohman 1ab1d31f7a Optimize conditional branches in X86FastISel. This replaces
sequences like this:
       sete    %al
       testb   %al, %al
       jne     LBB11_1
with this:
       je      LBB11_1

llvm-svn: 56969
2008-10-02 22:15:21 +00:00
Dan Gohman a78bae34a5 Add a new MachineBasicBlock utility function, isLayoutSuccessor, that
can be used when deciding if a block can transfer control to another
via a fall-through instead of a branch.

llvm-svn: 56968
2008-10-02 22:09:09 +00:00
Andrew Lenharth 72a9e7367c fix build gcc 4.3
llvm-svn: 56965
2008-10-02 20:15:08 +00:00
Owen Anderson c5b45fec6b Use a multimap rather than a map for holding the list of copies to insert, so we don't lose copies when two of them have
the same source.  I don't know what I was thinking when I wrote this originally.
Note: There's probably a more efficient way to do this, but I need to think about it some more, and about what determinism
guarantees need to be present.

llvm-svn: 56964
2008-10-02 19:40:33 +00:00
Dale Johannesen 867d549fce Handle some 64-bit atomics on x86-32, some of the time.
llvm-svn: 56963
2008-10-02 18:53:47 +00:00
Devang Patel 0db9d67f9a Remove redundant check.
llvm-svn: 56960
2008-10-02 18:38:23 +00:00
Evan Cheng b25f4637dd A Partitioned Boolean Quadratic Programming (PBQP) based register allocator.
Contributed by Lang Hames.

llvm-svn: 56959
2008-10-02 18:29:27 +00:00
Oscar Fuentes e3c43d6279 CMake: Added Host.cpp to lib/System/CMakeLists.txt.
llvm-svn: 56957
2008-10-02 17:39:29 +00:00
Dan Gohman 88536398ff Fix a think-o in isSafeToMove. This fixes it from thinking that
volatile memory references are safe to move.

llvm-svn: 56948
2008-10-02 15:04:30 +00:00
Dan Gohman b158fd751c Work around an interaction between fast-isel and regalloc=local. The
local register allocator's physreg liveness doesn't recognize subregs,
so it doesn't know that defs of %ecx that are immediately followed by
uses of %cl aren't dead. This comes up due to the way fast-isel emits
shift instructions.

This is a temporary workaround. Arguably, local regalloc should
handle subreg references correctly. On the other hand, perhaps
fast-isel should use INSERT_SUBREG instead of just assigning to the
most convenient super-register of %cl when lowering shifts.

This fixes MultiSource/Benchmarks/MallocBench/espresso,
MultiSource/Applications/hexxagon, and others, under -fast.

llvm-svn: 56947
2008-10-02 14:56:12 +00:00
Bill Wendling b04e6edba9 "The original bug was a complaint that _mm_srli_si128 mis-compiled when passed
a constant vector ("{0x123, 0x456}" syntax).  The fix is to simplify the
_mm_srli_si128 macro, and  move the "* 8" from the macro into the compiler
back-end.  I can't change the existing __builtins because so many people are
using them :-(."
Patch by Stuart Hastings!

llvm-svn: 56944
2008-10-02 05:56:52 +00:00
Daniel Dunbar e52e6bfd29 Add llvm::sys::{osName,osVersion} for retrieving operating system name
& version as strings.
 - Win32 code is untested.

llvm-svn: 56942
2008-10-02 01:17:28 +00:00
Devang Patel 9cc9812653 Attributes noinline alwaysinline are incompatible
llvm-svn: 56939
2008-10-01 23:41:25 +00:00
Devang Patel 1b76f2c40b Remove OptimizeForSize global. Use function attribute optsize.
llvm-svn: 56937
2008-10-01 23:18:38 +00:00
Dan Gohman 3b88f10f46 Enable FastISel by default (on x86 and x86-64) with the -fast option.
llvm-svn: 56930
2008-10-01 20:39:19 +00:00
Chris Lattner 41a83d99e6 add a new form of Type::dump that takes a module for type names,
patch provided by Tomas Lindquist Olsen!

llvm-svn: 56929
2008-10-01 20:16:19 +00:00
Dan Gohman 1dd27578dd Make some implicit conversions explicit, to avoid compiler warnings.
llvm-svn: 56927
2008-10-01 19:58:59 +00:00
Dan Gohman 6388dde98e Split x86's ADJCALLSTACK instructions into 32-bit and 64-bit forms.
This allows the 64-bit forms to use+def RSP instead of ESP. This
doesn't fix any real bugs today, but it is more precise and it
makes the debug dumps on x86-64 look more consistent.

Also, add some comments describing the CALL instructions' physreg
operand uses and defs.

llvm-svn: 56925
2008-10-01 18:28:06 +00:00
Jim Grosbach 3dc0a3bce3 Fix typo s/ther/there/
llvm-svn: 56924
2008-10-01 18:16:49 +00:00
Duncan Sands d65a4daeea Factorize code: remove variants of "strip off
pointer bitcasts and GEP's", and centralize the
logic in Value::getUnderlyingObject.  The
difference with stripPointerCasts is that
stripPointerCasts only strips GEPs if all
indices are zero, while getUnderlyingObject
strips GEPs no matter what the indices are.

llvm-svn: 56922
2008-10-01 15:25:41 +00:00
Dan Gohman 94798d31dd Fold trivial two-operand tokenfactors where the operands are equal
immediately.

llvm-svn: 56921
2008-10-01 15:11:19 +00:00
Dan Gohman fbd67be50e Don't prepend a space character for constants in Value::print.
llvm-svn: 56920
2008-10-01 15:09:37 +00:00
Dan Gohman 3a293e7404 Fix typos in comments.
llvm-svn: 56919
2008-10-01 15:07:49 +00:00
Nuno Lopes 96740aad86 revert the addition of Preverves(CallGraph), per Duncan's comments
llvm-svn: 56917
2008-10-01 09:13:40 +00:00
Dan Gohman bb3c5019f8 Mark CALL instructions as having a Use of ESP/RSP.
llvm-svn: 56911
2008-10-01 04:14:30 +00:00
Dan Gohman 67d90de2b0 Call ScalarEvolution's deleteValueFromRecords before deleting an
instruction, not after. This fixes some uses of free'd memory.

llvm-svn: 56908
2008-10-01 02:02:03 +00:00
Bill Wendling 68f12ee567 Implement the -fno-builtin option in the front-end, not in the back-end.
llvm-svn: 56900
2008-10-01 00:59:58 +00:00
Owen Anderson 15e6be8cc5 Mark merged-in VNInfo's as being PHIKilled.
llvm-svn: 56893
2008-09-30 23:58:47 +00:00
Owen Anderson f4a36407c7 Fix a simple error in renumbering kill markaers, that took an inordinant amount of time to track down.
llvm-svn: 56889
2008-09-30 22:51:54 +00:00
Bill Wendling 1782584f56 Just don't transform this memset into "bzero" if no-builtin is specified.
llvm-svn: 56888
2008-09-30 22:05:33 +00:00
Nuno Lopes 5093ab4c76 add preserversCFG() + preservers(CallGraph)
llvm-svn: 56887
2008-09-30 22:04:30 +00:00
Bill Wendling e818bc159f - Initialize "--no-builtin" to "false".
- Testcase for r56885.

llvm-svn: 56886
2008-09-30 21:40:30 +00:00
Bill Wendling bd09262e97 Add the new `-no-builtin' flag. This flag is meant to mimic the GCC
`-fno-builtin' flag. Currently, it's used to replace "memset" with "_bzero"
instead of "__bzero" on Darwin10+. This arguably violates the meaning of this
flag, but is currently sufficient. The meaning of this flag should become more
specific over time.

llvm-svn: 56885
2008-09-30 21:22:07 +00:00
Dan Gohman b486350b15 Move the primary fast-isel top-level comments to FastISel.cpp, where
they'll be a little more visible. Also, update and reword them a bit.

llvm-svn: 56877
2008-09-30 20:48:29 +00:00
Nuno Lopes 2bd7b24f1a add AU.setPreservesCFG() since this pass only adds and removes function attributes
llvm-svn: 56868
2008-09-30 18:34:38 +00:00
Dan Gohman 86aa16a69a Optimize SelectionDAG's AssignTopologicalOrder even further.
Completely eliminate the TopOrder std::vector. Instead, sort
the AllNodes list in place. This also eliminates the need to
call AllNodes.size(), a linear-time operation, before
performing the sort.

Also, eliminate the Sources temporary std::vector, since it
essentially duplicates the sorted result as it is being
built.

This also changes the direction of the topological sort
from bottom-up to top-down. The AllNodes list starts out in
roughly top-down order, so this reduces the amount of
reordering needed. Top-down is also more convenient for
Legalize, and ISel needed only minor adjustments.

llvm-svn: 56867
2008-09-30 18:30:35 +00:00
Evan Cheng 1a9a0b7b4e Add runStaticConstructorsDestructors which runs ctors / dtors of a single module. Patch by David Chisnall.
llvm-svn: 56849
2008-09-30 15:51:21 +00:00
Evan Cheng 9156bd2f48 Re-apply 56835 along with header file changes.
llvm-svn: 56848
2008-09-30 15:44:16 +00:00
Duncan Sands 2b9adce1d0 Revert commit 56835 since it breaks the build.
"If a re-materializable instruction has a register
operand, the spiller will change the register operand's
spill weight to HUGE_VAL to avoid it being spilled.
However, if the operand is already in the queue ready
to be spilled, avoid re-materializing it".

llvm-svn: 56837
2008-09-30 10:00:30 +00:00
Evan Cheng 9469049f7d If a re-materializable instruction has a register operand, the spiller will change the register operand's spill weight to HUGE_VAL to avoid it being spilled. However, if the operand is already in the queue ready to be spilled, avoid re-materializing it.
llvm-svn: 56835
2008-09-30 06:36:58 +00:00
Nick Lewycky e8ced3ec19 Fix misoptimization of: xor i1 (icmp eq (X, C1), icmp s[lg]t (X, C2))
llvm-svn: 56834
2008-09-30 06:08:34 +00:00
Dan Gohman 8392f0c75d Fix X86FastISel's output for x86-32 PIC constant pool addresses.
llvm-svn: 56829
2008-09-30 01:21:32 +00:00
Dan Gohman 6ebe734ca6 Move the GlobalBaseReg field out of X86ISelDAGToDAG.cpp
and X86FastISel.cpp into X86MachineFunction.h, so that it
can be shared, instead of having each selector keep track
of its own.

llvm-svn: 56825
2008-09-30 00:58:23 +00:00
Dan Gohman 5033136825 Disable all x87 usage, including f32 and f64 when the subtarget
doesn't have SSE(2), with X86FastISel.

llvm-svn: 56823
2008-09-30 00:48:39 +00:00
Dale Johannesen f61a84ec43 Remove misuse of ReplaceNodeResults for atomics with
valid types.  No functional change.

llvm-svn: 56808
2008-09-29 22:25:26 +00:00
Dan Gohman 4aa9095398 Fix FastISel to not initialize the PIC-base register multiple times
in functions with PIC references from more than one basic block.

llvm-svn: 56807
2008-09-29 21:55:50 +00:00
Dan Gohman c02dbf451e Fix an over-pessimization about GlobalVariable addresses in X86FastISel.
llvm-svn: 56802
2008-09-29 21:13:15 +00:00
Devang Patel 221fe42006 Support inreg, zext and sext as return value attributes.
llvm-svn: 56801
2008-09-29 20:49:50 +00:00
Evan Cheng 82237f2f42 Fix PR2835. Do not change the width of a volatile load.
llvm-svn: 56792
2008-09-29 17:26:18 +00:00
Duncan Sands 57512a1be4 Speed up these passes when the callgraph has
huge simply connected components.  Suggested
by Chris.

llvm-svn: 56787
2008-09-29 14:59:04 +00:00
Nuno Lopes ffc9da6772 remove redundant test (mayBeOverriden() includes hasLinkOnceLinkage)
llvm-svn: 56786
2008-09-29 14:40:32 +00:00
Duncan Sands e340e18783 Tweak some comments.
llvm-svn: 56784
2008-09-29 13:35:31 +00:00
Duncan Sands 08d91178e9 Rename isWeakForLinker to mayBeOverridden. Use it
instead of hasWeakLinkage in a bunch of optimization
passes.

llvm-svn: 56782
2008-09-29 11:25:42 +00:00
Evan Cheng 3774b2f292 Re-apply 56683 with fixes.
llvm-svn: 56748
2008-09-27 01:56:22 +00:00
Daniel Dunbar 1d5e766016 Unbreak build.
llvm-svn: 56727
2008-09-27 00:22:09 +00:00