summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Add support for additional reduction variables: AND, OR, XOR.Nadav Rotem2012-10-251-7/+42
| | | | | | Patch by Paul Redmond <paul.redmond@intel.com>. llvm-svn: 166649
* Stop running the machine code verifier unconditionally.Jakob Stoklund Olesen2012-10-251-1/+0
| | | | llvm-svn: 166646
* revert accidental changeNadav Rotem2012-10-241-1/+1
| | | | llvm-svn: 166643
* Implement a basic cost model for vector and scalar instructions. Nadav Rotem2012-10-243-20/+160
| | | | llvm-svn: 166642
* Fix a compiler warning with an unused variable.Micah Villmow2012-10-241-1/+0
| | | | llvm-svn: 166634
* [ms-inline asm] Add support for parsing the '.' operator. Given,Chad Rosier2012-10-241-0/+34
| | | | | | | | | | | | [register].field The operator returns the value at the location pointed to by register plus the offset of field within its structure or union. This patch only handles immediate fields (i.e., [eax].4). The original displacement has to be a MCConstantExpr as well. Part of rdar://12470415 and rdar://12470514 llvm-svn: 166632
* Tidy up. No functional change intended.Chad Rosier2012-10-241-14/+15
| | | | llvm-svn: 166630
* Update GVN to support vectors of pointers.Hal Finkel2012-10-241-20/+30
| | | | | | | GVN will now generate ptrtoint instructions for vectors of pointers. Fixes PR14166. llvm-svn: 166624
* whitespaceNadav Rotem2012-10-241-3/+3
| | | | llvm-svn: 166622
* LoopVectorizer: Add a basic cost model which uses the VTTI interface.Nadav Rotem2012-10-241-30/+273
| | | | llvm-svn: 166620
* Fix a miscompilation caused by a typo. When turning a adde with negative valueEvan Cheng2012-10-242-7/+7
| | | | | | | | | into a sbc with a positive number, the immediate should be complemented, not negated. Also added a missing pattern for ARM codegen. rdar://12559385 llvm-svn: 166613
* getSmallConstantTripMultiple should never return zero.Hal Finkel2012-10-241-2/+5
| | | | | | | | | When the trip count is -1, getSmallConstantTripMultiple could return zero, and this would cause runtime loop unrolling to assert. Instead of returning zero, one is now returned (consistent with the existing overflow cases). Fixes PR14167. llvm-svn: 166612
* Add some cleanup to the DataLayout changes requested by Chandler.Micah Villmow2012-10-2410-27/+30
| | | | llvm-svn: 166607
* Back out r166591, not sure why this made it through since I cancelled the ↵Micah Villmow2012-10-2410-39/+14
| | | | | | command. Bleh, sorry about this! llvm-svn: 166596
* Implement a basic VectorTargetTransformInfo interface to be used by the loop ↵Nadav Rotem2012-10-2413-14/+45
| | | | | | and bb vectorizers for modeling the cost of instructions. llvm-svn: 166593
* [ms-inline asm] Create a register operand, rather than a memory operand when weChad Rosier2012-10-242-42/+47
| | | | | | | | | | see the offsetof operator. Previously, we were matching something like MOVrm in the front-end and later matching MOVrr in the back-end. This change makes things more consistent. It also fixes cases where we can't match against a memory operand as the source (test cases coming). Part of rdar://12470317 llvm-svn: 166592
* Delete a directory that wasn't supposed to be checked in yet.Micah Villmow2012-10-2410-14/+39
| | | | llvm-svn: 166591
* Add in support for getIntPtrType to get the pointer type based on the ↵Micah Villmow2012-10-2439-439/+514
| | | | | | | | | address space. This checkin also adds in some tests that utilize these paths and updates some of the clients. llvm-svn: 166578
* Special calling conventions for Intel OpenCL built-in library.Elena Demikhovsky2012-10-247-0/+84
| | | | llvm-svn: 166566
* Teach DAG combine to fold (buildvec (Xint2fp x)) to (Xint2fp (buildvec x))Michael Liao2012-10-241-0/+71
| | | | | | | | - If more than 1 elemennts are defined and target supports the vectorized conversion, use the vectorized one instead to reduce the strength on conversion operation. llvm-svn: 166546
* Add custom conversion from v2u32 to v2f32 in 32-bit modeMichael Liao2012-10-242-0/+24
| | | | | | | - As there's no 64-bit GPRs in 32-bit mode, a custom conversion from v2u32 to v2f32 is added to improve the efficiency of the code generated. llvm-svn: 166545
* [mips] Make sure sret argument is returned in register V0.Akira Hatanaka2012-10-241-2/+3
| | | | llvm-svn: 166539
* Change x86_fastcallcc to require inreg markers. This allows it to knownRafael Espindola2012-10-241-1/+1
| | | | | | | | | the difference from "int x" (which should go in registers and "struct y {int x;}" (which should not). Clang will be updated in the next patches. llvm-svn: 166536
* Keep coding standard. Don't evaluate getNumOperands() every time.Jakub Staszak2012-10-241-1/+1
| | | | llvm-svn: 166531
* Fix ODR violations: a virtual function must be defined, even if it's neverRichard Smith2012-10-241-0/+9
| | | | | | | | | | | | | | | called. Provide an (asserting) definition of Operator's private destructor. Remove destructors from all classes derived from Operator. We don't need them for safety, because their implicit definitions would be ill-formed (they'd call Operator's private destructor), and we don't need them to avoid emitting vtables, because we don't do anything with Operator subclasses which would trigger vtable instantiation. The Operator hierarchy is still a complete disaster with regard to undefined behavior, but this at least allows LLVM to link when using Clang's -fcatch-undefined-behavior with a new vptr-based type checking mechanism. llvm-svn: 166530
* [ms-inline asm] Offset operator - the size should be based on the size of aChad Rosier2012-10-231-0/+4
| | | | | | | pointer, not the size of the variable. Part of rdar://12470317 llvm-svn: 166526
* [ms-inline asm] Clean up comment.Chad Rosier2012-10-231-3/+3
| | | | llvm-svn: 166525
* [ms-inline asm] When parsing inline assembly we set the base register to aChad Rosier2012-10-231-2/+9
| | | | | | | | non-zero value as we don't know the actual value at this point. This is necessary to get the matching correct in some cases. However, the actual value set as the base register doesn't matter, since we're just matching not emitting. llvm-svn: 166523
* Clean up code and put transformation on (build_vec (ext x)) into a helper funcMichael Liao2012-10-231-55/+69
| | | | llvm-svn: 166519
* Make branch heavy code for generating marked up disassembly simplerKevin Enderby2012-10-233-334/+172
| | | | | | | and easier to read by adding a couple helper functions. Suggestion by Chandler Carruth and seconded by Meador Inge! llvm-svn: 166515
* Fix PR14161Michael Liao2012-10-231-1/+4
| | | | | | | - Check index being extracted to be constant 0 before simplfiying. Otherwise, retain the original sequence. llvm-svn: 166504
* Make the indirect branch optimization deterministic. No functionality change.Nadav Rotem2012-10-231-8/+8
| | | | | | Patch by Daniel Reynaud. llvm-svn: 166501
* Silence -Wsign-compareMatt Beaumont-Gay2012-10-231-1/+1
| | | | llvm-svn: 166494
* Use the AliasAnalysis isIdentifiedObj because it also understands mallocs ↵Nadav Rotem2012-10-231-19/+2
| | | | | | | | and c++ news. PR14158. llvm-svn: 166491
* Ignore unreachable blocks when doing memory dependence analysis on non-localBill Wendling2012-10-231-2/+2
| | | | | | | | | | | loads. It's not really profitable and may result in GVN going into an infinite loop when it hits constructs like this: %x = gep %some.type %x, ... Found via an LTO build of LLVM. llvm-svn: 166490
* [ms-inline asm] Add an implementation of the offset operator. This is a followChad Rosier2012-10-232-31/+58
| | | | | | | on patch to r166433. rdar://12470317 llvm-svn: 166488
* Add custom UINT_TO_FP from v4i8/v4i16/v8i8/v8i16 to v4f32/v8f32Michael Liao2012-10-232-19/+52
| | | | | | | | - Replace v4i8/v8i8 -> v8f32 DAG combine with custom lowering to reduce DAG combine overhead. - Extend the support to v4i16/v8i16 as well. llvm-svn: 166487
* Enable lowering ZERO_EXTEND/ANY_EXTEND to PMOVZX from SSE4.1Michael Liao2012-10-234-0/+186
| | | | llvm-svn: 166486
* Grammar.Eric Christopher2012-10-231-1/+1
| | | | llvm-svn: 166485
* This is another TLC patch for separating code for the Darwin and ELF ABIsBill Schmidt2012-10-232-186/+473
| | | | | | | | | | | | | | | | | | | | | for the PowerPC target, and factoring the results. This will ease future maintenance of both subtargets. PPCTargetLowering::LowerCall_Darwin_Or_64SVR4() has grown a lot of special-case code for the different ABIs, making maintenance difficult. This is getting worse as we repair errors in the 64-bit ELF ABI implementation, while avoiding changes to the Darwin ABI logic. This patch splits the routine into LowerCall_Darwin() and LowerCall_64SVR4(), allowing both versions to be significantly simplified. I've factored out chunks of similar code where it made sense to do so. I also performed similar factoring on LowerFormalArguments_Darwin() and LowerFormalArguments_64SVR4(). There are no functional changes in this patch, and therefore no new test cases have been developed. Built and tested on powerpc64-unknown-linux-gnu with no new regressions. llvm-svn: 166480
* Fix typo that somehow escaped both testing and code inspection.Duncan Sands2012-10-231-1/+1
| | | | llvm-svn: 166475
* Transform code like thisDuncan Sands2012-10-232-52/+305
| | | | | | | | | | | | | | | | | | | | | | | | | | | %V = mul i64 %N, 4 %t = getelementptr i8* bitcast (i32* %arr to i8*), i32 %V into %t1 = getelementptr i32* %arr, i32 %N %t = bitcast i32* %t1 to i8* incorporating the multiplication into the getelementptr. This happens all the time in dragonegg, for example for int foo(int *A, int N) { return A[N]; } because gcc turns this into byte pointer arithmetic before it hits the plugin: D.1590_2 = (long unsigned int) N_1(D); D.1591_3 = D.1590_2 * 4; D.1592_5 = A_4(D) + D.1591_3; D.1589_6 = *D.1592_5; return D.1589_6; The D.1592_5 line is a POINTER_PLUS_EXPR, which is turned into a getelementptr on a bitcast of A_4 to i8*, so this becomes exactly the kind of IR that the transform fires on. An analogous transform (with no testcases!) already existed for bitcasts of arrays, so I rewrote it to share code with this one. llvm-svn: 166474
* Per the C++ standard, we need to include the definition of llvm::Calculate inRichard Smith2012-10-232-0/+2
| | | | | | | every TU where it's implicitly instantiated, even if there's an implicit instantiation for the same types available in another TU. llvm-svn: 166470
* Add a comment which explains why the assert fired and how to fix it.Nadav Rotem2012-10-231-0/+4
| | | | llvm-svn: 166467
* implement setXX patternsReed Kotler2012-10-231-4/+181
| | | | llvm-svn: 166459
* Fix typo.Julien Lerouge2012-10-231-1/+1
| | | | llvm-svn: 166456
* Explain why DenseMap is still used here instead of MapVector.Julien Lerouge2012-10-231-1/+9
| | | | llvm-svn: 166454
* [ms-inline-asm] Implement _emit directive (which is roughly equivalent to ↵Eli Friedman2012-10-221-44/+68
| | | | | | | | .byte). <rdar://problem/12470345>. llvm-svn: 166451
* When a block ends in an indirect branch, add its successors to the machine ↵Bill Wendling2012-10-221-0/+5
| | | | | | | | | | basic block. The CFG of the machine function needs to know that the targets of the indirect branch are successors to the indirect branch. <rdar://problem/12529625> llvm-svn: 166448
* Add support for annotated disassembly output for X86 and arm.Kevin Enderby2012-10-223-130/+530
| | | | | | | | | | | Per the October 12, 2012 Proposal for annotated disassembly output sent out by Jim Grosbach this set of changes implements this for X86 and arm. The llvm-mc tool now has a -mdis option to produced the marked up disassembly and a couple of small example test cases have been added. rdar://11764962 llvm-svn: 166445
OpenPOWER on IntegriCloud