summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* [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
* [ms-inline asm] Don't rewrite out parts of an inline-asm skipped by .if 0 ↵Eli Friedman2012-10-221-24/+1
| | | | | | | | and friends. It's unnecessary and makes the generated assembly less faithful to the original source. llvm-svn: 166440
* [ms-inline asm] Add the isOffsetOf() function.Chad Rosier2012-10-221-0/+5
| | | | | | Part of rdar://12470317 llvm-svn: 166436
* Iterating over a DenseMap<std::pair<BasicBlock*, unsigned>, PHINode*> is notJulien Lerouge2012-10-221-4/+4
| | | | | | | | | deterministic, replace it with a DenseMap<std::pair<unsigned, unsigned>, PHINode*> (we already have a map from BasicBlock to unsigned). <rdar://problem/12541389> llvm-svn: 166435
* [ms-inline asm] Add support for parsing the offset operator. Callback for Chad Rosier2012-10-221-5/+21
| | | | | | | CodeGen in the front-end not implemented yet. rdar://12470317 llvm-svn: 166433
* Don't crash if the load/store pointer is not a GEP.Nadav Rotem2012-10-221-1/+1
| | | | | | Fix by Shivarama Rao <Shivarama.Rao@amd.com> llvm-svn: 166427
* Revert r166407 because it caused analyzer tests to crash and broke self-host ↵Argyrios Kyrtzidis2012-10-221-67/+56
| | | | | | bots. llvm-svn: 166424
* BBVectorize should ignore unreachable blocks.Hal Finkel2012-10-221-0/+13
| | | | | | | | | Unreachable blocks can have invalid instructions. For example, jump threading can produce self-referential instructions in unreachable blocks. Also, we should not be spending time optimizing unreachable code. Fixes PR14133. llvm-svn: 166423
* Add the "ForceSizeOpt" attribute.Nadav Rotem2012-10-224-2/+9
| | | | | | | | | | | | Patch by Quentin Colombet <qcolombet@apple.com> Original description: """ The attached patch is the first step to have a better control on Oz related optimizations. The Oz optimization level focuses on code size, thus I propose to add an attribute called ForceSizeOpt. """ llvm-svn: 166422
* Rename a variable.Nadav Rotem2012-10-221-13/+13
| | | | llvm-svn: 166410
* Vectorizer: optimize the generation of selects. If the condition is uniform, ↵Nadav Rotem2012-10-221-6/+16
| | | | | | generate a scalar-cond select (i1 as selector). llvm-svn: 166409
* Update the loop vectorizer docs.Nadav Rotem2012-10-221-17/+38
| | | | llvm-svn: 166408
* Reapply r166405, teaching tailcallelim to be smarter about nocapture, with aNick Lewycky2012-10-221-56/+67
| | | | | | | | | | | | | | | very small but very important bugfix: bool shouldExplore(Use *U) { Value *V = U->get(); if (isa<CallInst>(V) || isa<InvokeInst>(V)) [...] should have read: bool shouldExplore(Use *U) { Value *V = U->getUser(); if (isa<CallInst>(V) || isa<InvokeInst>(V)) Fixes PR14143! llvm-svn: 166407
* Revert r166405, "Teach TailRecursionElimination to consider 'nocapture' when ↵NAKAMURA Takumi2012-10-221-67/+56
| | | | | | | | deciding whether" It broke selfhosting stage2 in several builders. llvm-svn: 166406
* Teach TailRecursionElimination to consider 'nocapture' when deciding whetherNick Lewycky2012-10-211-56/+67
| | | | | | calls can be marked tail. llvm-svn: 166405
* DataLayout should use itself when calculating the size of a vector.Hal Finkel2012-10-211-2/+4
| | | | | | | | This is important for vectors of pointers because only DataLayout, not the underlying vector type, knows how to calculate the size of the pointers in the vector. Fixes PR14138. llvm-svn: 166401
OpenPOWER on IntegriCloud