Commit Graph
100 Commits
Author SHA1 Message Date
Bill Wendling 00a4d09611 Rename 2.8rc to 2.8.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115863 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-06 23:26:40 +00:00
Bill Wendling c9531c6342 Update
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115554 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-04 20:41:06 +00:00
Bill Wendling 43ab46e2aa Update release notes for 2.8 release.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115548 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-04 19:55:17 +00:00
Bill Wendling 7bcc388e1d PR8200: The MMX unpack instructions were no longer selected. Reverted the parts
that caused this to happen.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115298 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-01 06:48:31 +00:00
Bill Wendling 1e69e8d75c Revert r102604. It was breaking 32-bit Linux. See
http://llvm.org/bugs/show_bug.cgi?id=8153


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115183 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-30 18:05:47 +00:00
Bill Wendling 15c8c33d52 Merge in r114506.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115101 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-29 23:07:19 +00:00
Bill Wendling 0d62b9a9a8 Disable MinGW & shared because it never worked.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@115093 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-29 22:23:19 +00:00
Bill Wendling f928fd96fb Adjust comment to say that assertions are off by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@114337 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-20 18:37:19 +00:00
Bill Wendling 71f7f73dfa Approved by Evan
$ svn merge -c 114220 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r114220 into '.':
U    lib/CodeGen/MachineCSE.cpp
$ svn merge -c 114222 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r114222 into '.':
G    lib/CodeGen/MachineCSE.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@114224 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-17 22:09:07 +00:00
Bill Wendling 19a50033ee Merge AutoUpgrade of EH magic variable.
$ svn merge -c 113600 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113600 into '.':
A    test/Bitcode/AutoUpgradeGlobals.ll
A    test/Bitcode/AutoUpgradeGlobals.ll.bc
U    include/llvm/AutoUpgrade.h
U    lib/Bitcode/Reader/BitcodeReader.cpp
U    lib/VMCore/AutoUpgrade.cpp
$ svn merge -c 113603 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113603 into '.':
G    lib/VMCore/AutoUpgrade.cpp
$ svn merge -c 113615 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113615 into '.':
G    lib/VMCore/AutoUpgrade.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@114020 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-15 21:03:06 +00:00
Bill Wendling ed70cc3e1b $ svn merge -c 113848 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113848 into '.':
U    lib/CodeGen/PeepholeOptimizer.cpp

must not peephole away side effects



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113913 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-15 00:32:40 +00:00
Bill Wendling 7e789a2e81 Approved by Chris:
$ svn merge -c 113911 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113911 into '.':
U    test/Transforms/ConstantMerge/dont-merge.ll
U    lib/Transforms/IPO/ConstantMerge.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113912 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-15 00:32:05 +00:00
Bill Wendling d654cf3977 Approved by Chris
$ svn merge -c 113894 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113894 into '.':
U    test/MC/AsmParser/X86/x86_instructions.s
U    lib/Target/X86/AsmParser/X86AsmParser.cpp

Log:
add a terrible hack to allow out with dx is parens, a gas bug.
This fixes PR8114



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113896 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-14 23:38:48 +00:00
Bill Wendling 139d4669f1 Approved by Chris:
$ svn merge -c 113557 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113557 into '.':
U    include/llvm/Bitcode/LLVMBitCodes.h
U    tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
U    lib/Bitcode/Reader/BitcodeReader.cpp
U    lib/Bitcode/Writer/BitcodeWriter.cpp
$ svn merge -c 113764 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113764 into '.':
U    lib/Bitcode/Reader/BitcodeReader.h
G    lib/Bitcode/Reader/BitcodeReader.cpp
$ svn merge -c 113828 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113828 into '.':
U    lib/VMCore/Metadata.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113853 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-14 20:59:01 +00:00
Bill Wendling 02bf305a3f Approved by Chris:
$ svn merge -c 113057 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113057 into '.':
A    test/Transforms/LoopSimplify/preserve-scev.ll
U    lib/Transforms/Utils/LoopSimplify.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113851 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-14 20:57:16 +00:00
Bill Wendling 732d1a4c8f Approved by Chris:
$ svn merge -c 113820 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113820 into '.':
U    test/Transforms/LICM/crash.ll
U    lib/Transforms/Scalar/LICM.cpp

Log:
fix PR8102, a case where we'd copyValue from a value that we already
deleted.  Fix this by doing the copyValue's before we delete stuff!



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113823 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-14 00:43:35 +00:00
Bill Wendling 4bf8ecce67 Approved by Evan:
$ svn merge -c 113637 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113637 into '.':
U    lib/Target/ARM/ARMBaseInstrInfo.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113639 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-10 21:48:08 +00:00
Bill Wendling 3c941a5acb Approved by Evan.
$ svn merge -c 113576 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113576 into '.':
U    test/CodeGen/ARM/2007-01-19-InfiniteLoop.ll
U    lib/Target/ARM/ARMLoadStoreOptimizer.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113583 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-10 10:21:50 +00:00
Bill Wendling babf51150b Approved by Evan:
$ svn merge -c 113297 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113297 into '.':
U    lib/Target/ARM/Thumb2SizeReduction.cpp
$ svn merge -c 113322 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113322 into '.':
U    lib/Target/ARM/ARMInstrNEON.td
U    lib/Target/ARM/ARMInstrVFP.td
U    lib/Target/ARM/ARMInstrFormats.td
$ svn merge -c 113365 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113365 into '.':
U    lib/Target/ARM/ARMBaseRegisterInfo.cpp
$ svn merge -c 113366 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113366 into '.':
G    lib/Target/ARM/ARMBaseRegisterInfo.cpp
$ svn merge -c 113394 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113394 into '.':
G    lib/Target/ARM/ARMBaseRegisterInfo.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113540 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-09 20:56:38 +00:00
Bill Wendling 587f6ed686 Approved by Evan:
$ svn merge -c 113299 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113299 into '.':
U    lib/CodeGen/VirtRegRewriter.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113531 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-09 20:13:48 +00:00
Bill Wendling aa917ca288 Approved by Duncan:
$ svn merge -c 113483 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113483 into '.':
U    test/FrontendC/2010-05-18-asmsched.c
U    test/FrontendC/asm-reg-var-local.c
$ svn merge -c 113484 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113484 into '.':
U    test/FrontendC/cstring-align.c
$ svn merge -c 113485 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113485 into '.':
U    test/FrontendC/2010-07-14-overconservative-align.c

Fix tests to pass on platforms which don't support -m64.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113529 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-09 20:10:22 +00:00
Bill Wendling 353db582e3 Rename 2.8 to 2.8rc to avoid confusion between release candidate and full release.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113404 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-08 20:45:56 +00:00
Bill Wendling 3bc91aa3b4 Enable optimizations and disable assertions by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113402 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-08 20:25:50 +00:00
Bill Wendling 393dd6c10a Change version from 2.8svn to 2.8.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113400 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-08 20:16:52 +00:00
Bill Wendling 1113b52df0 $ svn merge -c 113255 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113255 into '.':
U    lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
$ svn merge -c 113345 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113345 into '.':
U    lib/Target/ARM/Disassembler/ARMDisassembler.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113353 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-08 10:09:17 +00:00
Bill Wendling 9aabee1c4f $ svn merge -c 113303 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113303 into '.':
A    docs/CommandGuide/llvm-diff.pod
U    docs/CommandGuide/index.html

Log:
Add documentation for llvm-diff.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113310 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-07 23:32:02 +00:00
Bill Wendling 4c0eaab1b5 Approved by Chris:
$ svn merge -c 113257 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113257 into '.':
A    test/Transforms/InstCombine/sqrt.ll
D    test/Transforms/InstCombine/2010-07-19-sqrt.ll

Renaming test.

$ svn merge -c 113260 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113260 into '.':
U    test/Transforms/InstCombine/sqrt.ll
U    lib/Transforms/InstCombine/InstCombineCasts.cpp

Log:
Fix a serious performance regression introduced by r108687 on linux:
turning (fptrunc (sqrt (fpext x))) -> (sqrtf x)  is great, but we have
to delete the original sqrt as well.  Not doing so causes us to do 
two sqrt's when building with -fmath-errno (the default on linux).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113265 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-07 20:14:32 +00:00
Bill Wendling 5770e0a666 Approved by Chris:
$ svn merge -c 113158 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113158 into '.':
U    lib/Target/X86/X86InstrInfo.td

Log:
Redefine LOOP* instructions from I to Ii8PCRel as they take an i8 argument.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113175 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-06 21:50:26 +00:00
Bill Wendling b5502450ca Approved by Chris:
$ svn merge -c 113146 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113146 into '.':
U    test/Transforms/LICM/crash.ll
U    lib/Transforms/Scalar/LICM.cpp

Log:
fix PR8067, an over-aggressive assertion in LICM.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113152 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-06 09:15:29 +00:00
Bill Wendling ed5d32e948 Approved by Chris:
$ svn merge -c 113123 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113123 into '.':
U    examples/Fibonacci/fibonacci.cpp

fit in 80 columns and don't crash on exit, fixes PR8080



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113150 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-06 09:08:13 +00:00
Bill Wendling 390f711778 Approved by Chris:
$ svn merge -c 113109 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113109 into '.':
U    test/Transforms/GlobalOpt/crash.ll
U    lib/Analysis/ValueTracking.cpp

Log:
fix PR8063, a crash in globalopt in the malloc analysis code.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113111 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-05 17:45:44 +00:00
Bill Wendling 43529dbe0c Creating release_28 branch from llvm trunk.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113051 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-04 01:59:36 +00:00
Bill Wendling 7d49f2b1bf Get rid of "passing signed into unsigned parameter" warning on PPC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112995 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-03 19:09:46 +00:00
Bill Wendling ac53061464 Quiesce warning about non-virtual d'tor in virtual class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112991 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-03 18:41:20 +00:00
Bill Wendling 74f9cb2cac Revert int_x86_mmx_palignr_b intrinsic to match llvm-gcc's version.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112886 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-02 22:31:53 +00:00
Bill Wendling bc54ee9a77 - Change __builtin_ia32_palignr intrinsic type to match the pattern in clang.
- Add patterns to match the following MMX builtins:

   * __builtin_ia32_vec_init_v8qi
   * __builtin_ia32_vec_init_v4hi
   * __builtin_ia32_vec_init_v2si
   * __builtin_ia32_vec_ext_v2si

  These builtins do not correspond to a single MMX instruction. They will have
  to be lowered -- most likely in the back-end.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112881 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-02 22:26:35 +00:00
Bill Wendling ee70d3b27f The output of opt -stats must be sent to stderr. Patch by NAKAMURA Takumi!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112724 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-01 18:32:56 +00:00
Bill Wendling 43a6c5e2fc We have a chance for an optimization. Consider this code:
int x(int t) {
  if (t & 256)
    return -26;
  return 0;
}

We generate this:

     tst.w   r0, #256
     mvn     r0, #25
     it      eq
     moveq   r0, #0

while gcc generates this:

     ands    r0, r0, #256
     it      ne
     mvnne   r0, #25
     bx      lr

Scandalous really!

During ISel time, we can look for this particular pattern. One where we have a
"MOVCC" that uses the flag off of a CMPZ that itself is comparing an AND
instruction to 0. Something like this (greatly simplified):

  %r0 = ISD::AND ...
  ARMISD::CMPZ %r0, 0         @ sets [CPSR]
  %r0 = ARMISD::MOVCC 0, -26  @ reads [CPSR]

All we have to do is convert the "ISD::AND" into an "ARM::ANDS" that sets [CPSR]
when it's zero. The zero value will all ready be in the %r0 register and we only
need to change it if the AND wasn't zero. Easy!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112664 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-31 22:41:22 +00:00
Bill Wendling 2d811d38d4 And ANDS pattern to match the t2ANDS pattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112654 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-31 22:05:37 +00:00
Bill Wendling da2ae63206 - Cleanup some whitespaces.
- Convert {0,1} and friends into 0b01, which is identical and more consistent.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112593 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-31 07:50:46 +00:00
Bill Wendling 55c134a261 Use the existing T2I_bin_s_irs pattern instead of creating T2I_bin_sw_irs, which
is meant to do exactly the same thing. Thanks to Jim Grosbach for pointing this
out! :-)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112538 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30 22:05:23 +00:00
Bill Wendling c040719a15 Revert r112461. It was failing on PPC...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112463 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30 04:36:50 +00:00
Bill Wendling 4822bce4aa Create Thumb2sI_cpsr and T2sI_cpsr. These new classes indicate that CPSR is the
optional modified register (instead of reg0). Along with r112461 it will make
sure that the optional define of CPSR is marked as "def" and will thus mark the
instructions using these classes (t2ANDS*) as setting the 's' flag.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112462 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30 01:47:35 +00:00
Bill Wendling 25b141912c When adding a register, we should mark it as "def" if it can optionally define
said (physical) register.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112461 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30 01:36:05 +00:00
Bill Wendling 10ce7f3116 Fix whitespaces. No functionality changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112421 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-29 11:31:07 +00:00
Bill Wendling 1f7bf0e1f5 - Add a parameter to T2I_bin_irs for those patterns which set the S bit.
- Create T2I_bin_sw_irs to be like T2I_bin_w_irs, but that it sets the S bit.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112399 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-29 03:55:31 +00:00
Bill Wendling 2c4b30ebca Name ANDflag to ANDS, which is less stupid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112395 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-29 03:06:09 +00:00
Bill Wendling ac3b935362 File missing from last commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112394 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-29 03:02:28 +00:00
Bill Wendling 0b4aa7d11b Create an ARMISD::AND node. This node is exactly like the "ARM::AND" node, but
it sets the CPSR register.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112393 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-29 03:02:11 +00:00
Bill Wendling 69c5eb59f5 Remove now unneeded command line flag that enables 'optimize compares.'
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112287 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 20:39:09 +00:00
Bill Wendling 6165e87824 Reapply r112176 without removing the other CMN patterns (that was unintentional).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112206 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26 18:33:51 +00:00
Bill Wendling 01b1e1c958 There seems to be a (potential) hardware bug with the CMN instruction and
comparison with 0. These two pieces of code should give identical results:

  rsbs r1, r1, 0
  cmp  r0, r1
  mov  r0, #0
  it   ls
  mov  r0, #1

and:

  cmn  r0, r1
  mov  r0, #0
  it   ls
  mov  r0, #1

However, the CMN gives the *opposite* result when r1 is 0. This is because the
carry flag is set in the CMP case but not in the CMN case. In short, the CMP
instruction doesn't perform a truncate of the (logical) NOT of 0 plus the value
of r0 and the carry bit (because the "carry bit" parameter to AddWithCarry is
defined as 1 in this case, the carry flag will always be set when r0 >= 0). The
CMN instruction doesn't perform a NOT of 0 so there is never a "carry" when this
AddWithCarry is performed (because the "carry bit" parameter to AddWithCarry is
defined as 0).

The AddWithCarry in the CMP case seems to be relying upon the identity:

  ~x + 1 = -x

However when x is 0 and unsigned, this doesn't hold:

   x = 0
  ~x = 0xFFFF FFFF
  ~x + 1 = 0x1 0000 0000
  (-x = 0) != (0x1 0000 0000 = ~x + 1)

Therefore, we should disable *all* versions of CMN, especially when comparing
against zero, until we can limit when the CMN instruction is used (when we know
that the RHS is not 0) or when we have a hardware fix for this.

(See the ARM docs for the "AddWithCarry" pseudo-code.)

This is related to <rdar://problem/7569620>.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112176 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26 09:07:33 +00:00
Bill Wendling 4e34d50272 - Add the LinkerPrivateWeakDefAutoLinkage to the Ada bindings.
- Support the LinkerWeak*Linkage types in llvm-nm and in LinkModules.cpp.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111952 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24 20:00:52 +00:00
Bill Wendling 5e7044bd0e Add comments for what the condition code symbols mean.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111889 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-24 01:11:30 +00:00
Bill Wendling 55ae515f9d Create the new linker type "linker_private_weak_def_auto".
It's similar to "linker_private_weak", but it's known that the address of the
object is not taken. For instance, functions that had an inline definition, but
the compiler decided not to inline it. Note, unlike linker_private and
linker_private_weak, linker_private_weak_def_auto may have only default
visibility.  The symbols are removed by the linker from the final linked image
(executable or dynamic library).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111684 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-20 22:05:50 +00:00
Bill Wendling 5567bb0c5f Correct header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111540 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-19 18:52:17 +00:00
Bill Wendling d400850101 Silence 'unused' warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111539 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-19 18:52:02 +00:00
Bill Wendling f0e132c385 Add the "isCompare" attribute to the defm instead of each individual instr.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111481 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-19 00:05:48 +00:00
Bill Wendling ad422718f9 Minor simplification. Gets rid of a needless temporary.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111430 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18 21:32:07 +00:00
Bill Wendling 3d7ff08c82 Improve whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111384 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18 18:41:13 +00:00
Bill Wendling 86b98b5874 Marked with ATTRIBUTE_USED so that clang doesn't complain.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111383 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-18 18:40:57 +00:00
Bill Wendling de2b151dbf Consider this code snippet:
float t1(int argc) {
  return (argc == 1123) ? 1.234f : 2.38213f;
}

We would generate truly awful code on ARM (those with a weak stomach should look
away):

_t1:
  movw   r1, #1123
  movs   r2, #1
  movs   r3, #0
  cmp    r0, r1
  mov.w  r0, #0
  it     eq
  moveq  r0, r2
  movs   r1, #4
  cmp    r0, #0
  it     ne
  movne  r3, r1
  adr    r0, #LCPI1_0
  ldr    r0, [r0, r3]
  bx     lr

The problem was that legalization was creating a cascade of SELECT_CC nodes, for
for the comparison of "argc == 1123" which was fed into a SELECT node for the ?:
statement which was itself converted to a SELECT_CC node. This is because the
ARM back-end doesn't have custom lowering for SELECT nodes, so it used the
default "Expand".

I added a fairly simple "LowerSELECT" to the ARM back-end. It takes care of this
testcase, but can obviously be expanded to include more cases.

Now we generate this, which looks optimal to me:

_t1:
  movw   r1, #1123
  movs   r2, #0
  cmp    r0, r1
  adr    r0, #LCPI0_0
  it     eq
  moveq  r2, #4
  ldr    r0, [r0, r2]
  bx     lr
  .align  2
LCPI0_0:
  .long   1075344593  @ float 2.382130e+00
  .long   1067316150  @ float 1.234000e+00



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110799 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11 08:43:16 +00:00
Bill Wendling d771041828 Update test to match output of optimize compares for ARM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110765 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11 01:05:02 +00:00
Bill Wendling 38ae997e63 Handle ARM compares as well as converting for ARM adds, subs, and thumb2's adds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110762 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11 00:23:00 +00:00
Bill Wendling 0cce3dd326 Mark ARM compare instructions as isCompare.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110761 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11 00:22:27 +00:00
Bill Wendling bb47d3b471 The optimize comparisons pass removes the "cmp" instruction this is checking for.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110739 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10 22:16:05 +00:00
Bill Wendling 75486dbf4e Turn optimize compares back on with fix. We needed to test that a machine op was
a register before checking if it was defined.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110733 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10 21:38:11 +00:00
Bill Wendling a54e3cddce Turn optimize cmps on by default so that we can get some testing by the nightly
ARM testers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110718 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10 20:23:02 +00:00
Bill Wendling 94f7950e4d Update CMake...sorry for the breakage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110654 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-10 05:16:06 +00:00
Bill Wendling 6cdb1abe4e Merge the OptimizeExts and OptimizeCmps passes into one PeepholeOptimizer
pass. This pass should expand with all of the small, fine-grained optimization
passes to reduce compile time and increase happiment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110627 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-09 23:59:04 +00:00
Bill Wendling c98af3370f Use the "isCompare" machine instruction attribute instead of calling the
relatively expensive comparison analyzer on each instruction. Also rename the
comparison analyzer method to something more in line with what it actually does.

This pass is will eventually be folded into the Machine CSE pass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110539 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-08 05:04:59 +00:00
Bill Wendling 73739d0bf1 Add back in r109901, which adds a Compare flag to the target instructions. It's
useful after all.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110531 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-08 01:49:35 +00:00
Bill Wendling 5b55ff0c15 Revert r109901. The implementation of <rdar://problem/7405933> (r110423) doesn't
need the Compare flag after all.

--- Reverse-merging r109901 into '.':
U    include/llvm/Target/TargetInstrDesc.h
U    include/llvm/Target/Target.td
U    utils/TableGen/InstrInfoEmitter.cpp
U    utils/TableGen/CodeGenInstruction.cpp
U    utils/TableGen/CodeGenInstruction.h



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110424 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-06 01:36:09 +00:00
Bill Wendling e4ddbdfd3c Add the Optimize Compares pass (disabled by default).
This pass tries to remove comparison instructions when possible. For instance,
if you have this code:

   sub r1, 1
   cmp r1, 0
   bz  L1

and "sub" either sets the same flag as the "cmp" instruction or could be
converted to set the same flag, then we can eliminate the "cmp" instruction all
together. This is a important for ARM where the ALU instructions could set the
CPSR flag, but need a special suffix ('s') to do so.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110423 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-06 01:32:48 +00:00
Bill Wendling af33b7b4a7 The lower invoke pass needs to have unreachable code elimination run after it
because it could create such things. This fixes a MingW buildbot test failure.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110279 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-04 23:36:02 +00:00
Bill Wendling 547b6ed16e Testcase for r110248.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110249 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-04 21:56:30 +00:00
Bill Wendling 2464d618c0 The EH prepare passes really want to be the last passes run before code-gen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110248 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-04 21:44:13 +00:00
Bill Wendling 94e4008fba Early exit and reduce indentation. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110069 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-02 22:06:08 +00:00
Bill Wendling 57dba1cf53 Reference the personalities. Don't copy them into a new vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109966 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-01 01:34:21 +00:00
Bill Wendling 1844b1a5a4 Add a "Compare" flag to the target instruction descriptor. This will be used
later to identify and possibly remove superfluous compare instructions -- those
that are testing for and setting a status flag that should already be set.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109901 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-30 22:48:39 +00:00
Bill Wendling dfc2c51d12 It's better to have the arrays, which would trigger the creation of stack
protectors, to be near the stack protectors on the stack. Accomplish this by
tagging the stack object with a predicate that indicates that it would trigger
this. In the prolog-epilog inserter, assign these objects to the stack after the
stack protector but before the other objects.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109481 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-27 01:55:19 +00:00
Bill Wendling 23295cc1dd Using llvm.eh.catch.all.value instead of .llvm.eh.catch.all.value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109462 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-26 22:36:52 +00:00
Bill Wendling 24fdd27683 Alphabetize.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108675 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-19 04:52:56 +00:00
Bill Wendling 7490896f9d Use isPrologLabel() instead of checking the opcode directly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108628 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-17 19:18:44 +00:00
Bill Wendling b9449d6639 Update comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108571 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-16 23:10:00 +00:00
Bill Wendling dc86704114 Consider this function:
void foo() { __builtin_unreachable(); }

It will output the following on Darwin X86:

_func1:
Leh_func_begin0:
        pushq %rbp
Ltmp0:
        movq %rsp, %rbp
Ltmp1:
Leh_func_end0:

This prolog adds a new Call Frame Information (CFI) row to the FDE with an
address that is not within the address range of the code it describes -- part is
equal to the end of the function -- and therefore results in an invalid EH
frame. If we emit a nop in this situation, then the CFI row is now within the
address range.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108568 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-16 22:51:10 +00:00
Bill Wendling 7431beaba2 Rename DBG_LABEL PROLOG_LABEL, because it's only used during prolog emission and
thus is a much more meaningful name.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108563 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-16 22:20:36 +00:00
Bill Wendling a60f0e7f81 Revert. This isn't the correct way to go.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108478 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 23:42:21 +00:00
Bill Wendling e9bf7e692e Handle code gen for the unreachable instruction if it's the only instruction in
the function. We'll just turn it into a "trap" instruction instead.

The problem with not handling this is that it might generate a prologue without
the equivalent epilogue to go with it:

$ cat t.ll
define void @foo() {
entry:
  unreachable
}
$ llc -o - t.ll -relocation-model=pic -disable-fp-elim -unwind-tables
        .section        __TEXT,__text,regular,pure_instructions
        .globl  _foo
        .align  4, 0x90
_foo:                                   ## @foo
Leh_func_begin0:
## BB#0:                                ## %entry
        pushq   %rbp
Ltmp0:
        movq    %rsp, %rbp
Ltmp1:
Leh_func_end0:
...

The unwind tables then have bad data in them causing all sorts of problems.

Fixes <rdar://problem/8096481>.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108473 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 23:32:40 +00:00
Bill Wendling 87ea294b0d Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108452 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 20:04:36 +00:00
Bill Wendling 24173da61d Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108450 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 20:01:02 +00:00
Bill Wendling 9c2a034730 Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister. This time
make sure to allocate enough space in the std::vector.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108449 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 19:58:14 +00:00
Bill Wendling e4a4147c87 Reserve a goodly amount of room for the vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108448 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 19:41:20 +00:00
Bill Wendling 38306d53f9 Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108440 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 18:43:09 +00:00
Bill Wendling dfb4eeb25c Use std::vector instead of TargetRegisterInfo::FirstVirtualRegister.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108438 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 18:40:50 +00:00
Bill Wendling 75a5b71208 Fix headers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108413 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 06:05:18 +00:00
Bill Wendling e010409cab Use std::vector instead of a hard-coded array. The length of that array could
get *very* large, but we only need it to be the size of the number of pregs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108412 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 06:04:38 +00:00
Bill Wendling f7f72bc1ea Use std::vector instead of a hard-coded array. The length of that array could
get *very* large, but we only need it to be the size of thenumber of pregs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108411 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-15 05:56:32 +00:00
Bill Wendling 18f82a9a5d getOrInsertLeaderValue cannot be const because it calls insert.
Patch by Xi Wang!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108188 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-12 20:27:02 +00:00
Bill Wendling 3732396fe1 Use non-bool values for .count.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108048 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-10 18:56:35 +00:00