summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add XOP Intrinsics and testsJan Sjödin2012-01-113-73/+2250
| | | | llvm-svn: 147949
* Fix a bug in the lowering of BUILD_VECTOR for AVX. SCALAR_TO_VECTOR does not ↵Nadav Rotem2012-01-113-9/+26
| | | | | | zero untouched elements. Use INSERT_VECTOR_ELT instead. llvm-svn: 147948
* More tests for ARM FPU features.Evgeniy Stepanov2012-01-111-0/+12
| | | | | | Also remove the svn:eol-style property from the test file. llvm-svn: 147947
* Don't try to create a GEP when the pointee type is unsized (such GEPsDuncan Sands2012-01-112-1/+14
| | | | | | | are invalid). Fixes a crash on array1.C from the GCC testsuite when compiled with dragonegg. llvm-svn: 147946
* Disable the transformation I added in r147936 to see if it fixes someChandler Carruth2012-01-112-10/+14
| | | | | | | | strange build bot failures that look like a miscompile into an infloop. I'll investigate this tomorrow, but I'd both like to know whether my patch is the culprit, and get the bots back to green. llvm-svn: 147945
* Fix -mfpu parsing on ARM.Evgeniy Stepanov2012-01-113-2/+49
| | | | | | | | | - Support gcc-compatible vfpv3 name in addition to vfp3. - Support vfpv3-d16. - Disable neon feature for -mfpu=vfp* (yes, we were emitting Neon instructions for those!). llvm-svn: 147943
* Hoist a really redundant code pattern into a helper function, and deleteChandler Carruth2012-01-111-80/+29
| | | | | | lots of lines of code. No functionality changed. llvm-svn: 147942
* Simplify the AND-rooted mask+shift checking code to match that of theChandler Carruth2012-01-111-8/+6
| | | | | | SRL-rooted code. llvm-svn: 147941
* Unify the interface of the three mask+shift transform helpers, andChandler Carruth2012-01-111-26/+34
| | | | | | | factor the differences that were hiding in one of them into its other caller, the SRL handling code. No change in behavior. llvm-svn: 147940
* Clarify and make explicit some of the requirements for transformingChandler Carruth2012-01-111-52/+64
| | | | | | | | | | mask+shift pairs at the beginning of the ISD::AND case block, and then hoist the final pattern into a helper function, simplifying and reflowing it appropriately. This should have no observable behavior change, but several simplifications fell out of this such as directly computing the new mask constant, etc. llvm-svn: 147939
* Fix undefined code and reenable test case.Jakob Stoklund Olesen2012-01-112-4/+3
| | | | | | | I don't think the compact encoding code is right, but at least is has defined behavior now. llvm-svn: 147938
* Hoist the logic to transform shift+mask combinations into sub-registerChandler Carruth2012-01-111-56/+68
| | | | | | | | extracts and scaled addressing modes into its own helper function. No functionality changed here, just hoisting and layout fixes falling out of that hoisting. llvm-svn: 147937
* Teach the X86 instruction selection to do some heroic transforms toChandler Carruth2012-01-113-0/+213
| | | | | | | | | | | | | | | | | | | | | | | | | | | | detect a pattern which can be implemented with a small 'shl' embedded in the addressing mode scale. This happens in real code as follows: unsigned x = my_accelerator_table[input >> 11]; Here we have some lookup table that we look into using the high bits of 'input'. Each entity in the table is 4-bytes, which means this implicitly gets turned into (once lowered out of a GEP): *(unsigned*)((char*)my_accelerator_table + ((input >> 11) << 2)); The shift right followed by a shift left is canonicalized to a smaller shift right and masking off the low bits. That hides the shift right which x86 has an addressing mode designed to support. We now detect masks of this form, and produce the longer shift right followed by the proper addressing mode. In addition to saving a (rather large) instruction, this also reduces stalls in Intel chips on benchmarks I've measured. In order for all of this to work, one part of the DAG needs to be canonicalized *still further* than it currently is. This involves removing pointless 'trunc' nodes between a zextload and a zext. Without that, we end up generating spurious masks and hiding the pattern. llvm-svn: 147936
* Improved compile time:Stepan Dyatkovskiy2012-01-112-40/+100
| | | | | | | | | | | | 1. Size heuristics changed. Now we calculate number of unswitching branches only once per loop. 2. Some checks was moved from UnswitchIfProfitable to processCurrentLoop, since it is not changed during processCurrentLoop iteration. It allows decide to skip some loops at an early stage. Extended statistics: - Added total number of instructions analyzed. llvm-svn: 147935
* clang/test/CodeGen/vla-4.c: Relax expression for -Asserts.NAKAMURA Takumi2012-01-111-1/+1
| | | | llvm-svn: 147934
* Fixed VLA code generation.Abramo Bagnara2012-01-112-14/+46
| | | | llvm-svn: 147933
* Call asan_init from .preinit_array.Evgeniy Stepanov2012-01-111-0/+8
| | | | | | Protected by an #ifdef, disabled by default. llvm-svn: 147932
* "This change adds alloca/valloc checks to UnixAPIChecker. It includes a ↵Ted Kremenek2012-01-112-48/+99
| | | | | | | | | | | | small refactoring for the common *alloc functions as well as a few tiny wibbles (adds a note to CWE/CERT advisory numbers in the bug output, and fixes a couple 80-column-wide violations.)" Patch by Austin Seipp! llvm-svn: 147931
* Test commit. Minor cleanup in AsanThreadAlexey Samsonov2012-01-111-3/+1
| | | | llvm-svn: 147930
* test/Driver/debug-options-as.c: Mark this as XFAIL:cygwin.NAKAMURA Takumi2012-01-111-2/+2
| | | | | | Also cygwin has not supported integrated-as yet. llvm-svn: 147929
* llvm/test/CodeGen/X86/zext-fold.ll: Relax an expression in stack offset.NAKAMURA Takumi2012-01-111-1/+1
| | | | llvm-svn: 147928
* llvm/test/CodeGen/X86/sub-with-overflow.ll: Add explicit -mtriple=i686-linux.NAKAMURA Takumi2012-01-111-1/+1
| | | | llvm-svn: 147927
* Clarified the SCEV getSmallConstantTripCount interface with in-your-face ↵Andrew Trick2012-01-112-14/+28
| | | | | | | | comments. This interface is misleading and dangerous, but it is actually what we need for unrolling. llvm-svn: 147926
* C11 allows typedefs to be redefined. Implement this in C11 mode, andDouglas Gregor2012-01-114-9/+21
| | | | | | | downgrade the default-error warning to an ExtWarn in C90/99. <rdar://problem/10668057> llvm-svn: 147925
* Add big endian mips support. Based on a patch by Jack Carter.Rafael Espindola2012-01-114-16/+22
| | | | llvm-svn: 147924
* Add the skeleton of an asm parser for mips.Rafael Espindola2012-01-118-2/+119
| | | | llvm-svn: 147923
* ARM Ld/St Optimizer fix.Andrew Trick2012-01-112-3/+50
| | | | | | | | Allow LDRD to be formed from pairs with different LDR encodings. This was the original intention of the pass. Somewhere along the way, the LDR opcodes were refined which broke the optimization. We really don't care what the original opcodes are as long as they both map to the same LDRD and the immediate still fits. Fixes rdar://10435045 ARMLoadStoreOptimization cannot handle mixed LDRi8/LDRi12 llvm-svn: 147922
* Disable test that seems to expose an unrelated Linux issue.Jakob Stoklund Olesen2012-01-111-1/+2
| | | | llvm-svn: 147921
* Revert changes to lib/Driver in r147917; I didn't mean to commit this.Eli Friedman2012-01-111-20/+19
| | | | llvm-svn: 147920
* [asan] remove OS-dependent headers from asan_internal.hKostya Serebryany2012-01-112-21/+13
| | | | llvm-svn: 147919
* Add elidable CXXConstructExpr as block-level expr. It converts an lvalue to ↵Zhongxing Xu2012-01-112-643/+658
| | | | | | a rvalue, which is a useful step during AST evaluation. llvm-svn: 147918
* Start refactoring code for capturing variables and 'this' so that it is ↵Eli Friedman2012-01-116-134/+164
| | | | | | shared between lambda expressions and block literals. llvm-svn: 147917
* [asan] remove OS-dependent includes from asan_interceptors.hKostya Serebryany2012-01-113-53/+54
| | | | llvm-svn: 147916
* After thinking about it, it doesn't seem rightSean Callanan2012-01-111-3/+3
| | | | | | | to make assumptions if the type is unsized. We just give up (and let the JIT handle it) instead. llvm-svn: 147915
* Don't assert but report & return a NULL type if we end up parsing a type we ↵Jim Ingham2012-01-111-2/+12
| | | | | | are in the middle of parsing. llvm-svn: 147914
* [asan] move TSD code into asan_posix.ccKostya Serebryany2012-01-114-24/+37
| | | | llvm-svn: 147913
* Detect when a value is undefined on an edge to a landing pad.Jakob Stoklund Olesen2012-01-113-4/+180
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Consider this code: int h() { int x; try { x = f(); g(); } catch (...) { return x+1; } return x; } The variable x is undefined on the first edge to the landing pad, but it has the f() return value on the second edge to the landing pad. SplitAnalysis::getLastSplitPoint() would assume that the return value from f() was live into the landing pad when f() throws, which is of course impossible. Detect these cases, and treat them as if the landing pad wasn't there. This allows spill code to be inserted after the function call to f(). <rdar://problem/10664933> llvm-svn: 147912
* Exclusively use SplitAnalysis::getLastSplitPoint().Jakob Stoklund Olesen2012-01-114-31/+14
| | | | | | | | | Delete the alternative implementation in LiveIntervalAnalysis. These functions computed the same thing, but SplitAnalysis caches the result. llvm-svn: 147911
* [asan] get rid of the scary TSD destructor code. Now, we store the leaky ↵Kostya Serebryany2012-01-115-103/+18
| | | | | | AsanThreadSummary in TSD and never remove it from there. llvm-svn: 147910
* Add more usage examples.Johnny Chen2012-01-111-0/+4
| | | | llvm-svn: 147909
* Fixed a missing space when reporting errors and warning through the moduleGreg Clayton2012-01-111-3/+4
| | | | | | and also print out the full path and architecture. llvm-svn: 147908
* Add usage examples of recently added functionality.Johnny Chen2012-01-111-0/+6
| | | | llvm-svn: 147907
* If the size of a type can't be determined, defaultSean Callanan2012-01-111-1/+1
| | | | | | to assume it's of pointer size. llvm-svn: 147906
* Typo in test.John McCall2012-01-111-2/+2
| | | | llvm-svn: 147905
* Remove '#if 0' from ExprEngine::InlineCall(), and start fresh by wiring up ↵Ted Kremenek2012-01-115-116/+89
| | | | | | | | | | inlining for straight C calls. My hope is to reimplement this from first principles based on the simplifications of removing unneeded node builders and re-evaluating how C++ calls are handled in the CFG. The hope is to turn inlining "on-by-default" as soon as possible with a core set of things working well, and then expand over time. llvm-svn: 147904
* A couple of big refactorings: 1) Move most attributes of Atom down to ↵Nick Kledzik2012-01-1122-854/+1001
| | | | | | DefinedAtom, so only atoms representing definitions need to implement them. 2) Remove definitionTentative, definitionWeak, mergeDuplicates, and autoHide. Replace with merge and interposable attributes. 3) Make all methods on Atom be virtual so that future object file readers can lazily generated attributes llvm-svn: 147903
* Avoid CSE of instructions which define physical registers across MBBs unlessEvan Cheng2012-01-111-4/+12
| | | | | | the physical registers are not allocatable. llvm-svn: 147902
* Snapshot of initial work for ARM watchpoint support on the debugserver.Johnny Chen2012-01-112-1/+129
| | | | | | It is incomplete and untested; passes the compilation only. llvm-svn: 147901
* Do placeholder conversions on array bounds in both declarators andJohn McCall2012-01-114-4/+30
| | | | | | new-expressions. llvm-svn: 147900
* If the global variable is removed by the linker, then don't constant merge itBill Wendling2012-01-113-6/+43
| | | | | | | | | | | | | | with other symbols. An object in the __cfstring section is suppoed to be filled with CFString objects, which have a pointer to ___CFConstantStringClassReference followed by a pointer to a __cstring. If we allow the object in the __cstring section to be merged with another global, then it could end up in any section. Because the linker is going to remove these symbols in the final executable, we shouldn't bother to merge them. <rdar://problem/10564621> llvm-svn: 147899
OpenPOWER on IntegriCloud