summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Adjust r194296 to not apply the alias replacement for externallyJoerg Sonnenberger2013-11-221-1/+8
| | | | | | | | available always-inline functions. This breaks libc++'s locale implementation. Code generation for this case should be fixed, but this is a stop gap fix for clang 3.4. llvm-svn: 195501
* Debug Info: add a "Debug Info Version" module flag to output the current debugManman Ren2013-11-221-0/+5
| | | | | | | | info version number. Will error out when modules have different version numbers. llvm-svn: 195495
* Revert r193994 and part of r193995Justin Bogner2013-11-221-2/+4
| | | | | | | | | | | | | Not long ago I made the CodeGen of for loops simplify the condition at -O0 in the same way we do for if and conditionals. Unfortunately this ties how loops and simple conditions work together too tightly, which makes features such as instrumentation based PGO awkward. Ultimately, we should find a more general way to simplify the logic in a given condition, but for now we'll just avoid using EmitBranchOnBool for loops, like we already do for while and do loops. llvm-svn: 195438
* CodeGen: WhitespaceJustin Bogner2013-11-223-9/+9
| | | | llvm-svn: 195437
* Fix a crash in EmitStoreThroughExtVectorComponentLValue for vectors of odd ↵Joey Gouly2013-11-211-0/+6
| | | | | | | | | | | | | | | | | | | sizes. In OpenCL a vector of 3 elements, acts like a vector of four elements. So for a vector of size 3 the '.hi' and '.odd' accessors, would access the elements {2, 3} and {1, 3} respectively. However, in EmitStoreThroughExtVectorComponentLValue we are still operating on a vector of size 3, so we should only access {2} and {1}. We do this by checking the last element to be accessed, and ignore it if it is out-of-bounds. EmitLoadOfExtVectorElementLValue doesn't have a similar problem, because it does a direct shufflevector with undef, so an out-of-bounds access just gives an undef value. Patch by Anastasia Stulova! llvm-svn: 195367
* Implemented Neon scalar vdup_lane intrinsics.Ana Pazos2013-11-211-0/+25
| | | | | | Fixed scalar dup alias and added test case. llvm-svn: 195329
* Implemented Neon scalar by element intrinsics.Ana Pazos2013-11-211-6/+45
| | | | | | | Intrinsics implemented: vqdmull_lane, vqdmulh_lane, vqrdmulh_lane, vqdmlal_lane, vqdmlsl_lane scalar Neon intrinsics. llvm-svn: 195326
* [-cxx-abi microsoft] Emit linkonce_odr definitions for declarations of ↵Hans Wennborg2013-11-213-0/+21
| | | | | | | | | | | | | | | static data members with inline initializers (PR17689) This makes Clang emit a linkonce_odr definition for 'val' in the code below, to be compatible with MSVC-compiled code: struct Foo { static const int val = 1; }; Differential Revision: http://llvm-reviews.chandlerc.com/D2233 llvm-svn: 195283
* [NVPTX] Update ABI handlingJustin Holewinski2013-11-201-6/+16
| | | | | | For PTX, we want the target to handle struct returns directly. llvm-svn: 195268
* Add a mangler entry point for TBAA rather than using RTTI directlyReid Kleckner2013-11-191-7/+3
| | | | | | | | | | | | | | | | | | | | Summary: RTTI is not yet implemented for the Microsoft C++ ABI and isn't expected soon. We could easily add the mangling, but the error is what prevents us from silently miscompiling code that expects RTTI. Instead, add a new mangleTypeName entry point that simply forwards to mangleName or mangleType to produce a string that isn't part of the ABI. Itanium can continue to use RTTI names to avoid unecessary test breakage. This also seems like the right design. The fact that TBAA names happen to be RTTI names is now an implementation detail of the mangler, rather than part of TBAA. Differential Revision: http://llvm-reviews.chandlerc.com/D2153 llvm-svn: 195168
* Implement AArch64 neon instructions class SIMD lsone and SIMD lone-post.Hao Liu2013-11-191-0/+127
| | | | llvm-svn: 195079
* DebugInfo: Update caller based on DIType's MDNode* ctor becoming explicit in ↵David Blaikie2013-11-181-1/+2
| | | | | | r195055. llvm-svn: 195056
* Implement the newly added AArch64 ACLE functions for ld1/st1 with 2/3/4 vectors.Hao Liu2013-11-181-0/+86
| | | | | | The functions are like: vst1_s8_x2 ... llvm-svn: 194991
* Add -freroll-loops to enable loop rerollingHal Finkel2013-11-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | This adds -freroll-loops (and -fno-reroll-loops in the usual way) to enable loop rerolling as part of the optimization pass manager. This transformation can enable vectorization, reduce code size (or both). Briefly, loop rerolling can transform a loop like this: for (int i = 0; i < 3200; i += 5) { a[i] += alpha * b[i]; a[i + 1] += alpha * b[i + 1]; a[i + 2] += alpha * b[i + 2]; a[i + 3] += alpha * b[i + 3]; a[i + 4] += alpha * b[i + 4]; } into this: for (int i = 0; i < 3200; ++i) { a[i] += alpha * b[i]; } Loop rerolling is currently disabled by default at all optimization levels. llvm-svn: 194967
* Remove unused but set variable.Benjamin Kramer2013-11-161-4/+0
| | | | llvm-svn: 194920
* Implemented aarch64 Neon scalar vmulx_lane intrinsicsAna Pazos2013-11-151-7/+80
| | | | | | | | | | | | | | Implemented aarch64 Neon scalar vfma_lane intrinsics Implemented aarch64 Neon scalar vfms_lane intrinsics Implemented legacy vmul_n_f64, vmul_lane_f64, vmul_laneq_f64 intrinsics (v1f64 parameter type) using Neon scalar instructions. Implemented legacy vfma_lane_f64, vfms_lane_f64, vfma_laneq_f64, vfms_laneq_f64 intrinsics (v1f64 parameter type) using Neon scalar instructions. llvm-svn: 194889
* Fix typo in CGRecordLayoutBuilder.cpp: s/Field/Fields/ in commentHans Wennborg2013-11-151-1/+1
| | | | llvm-svn: 194863
* Remove an unused local from r194827Alp Toker2013-11-151-1/+0
| | | | llvm-svn: 194835
* [-cxx-abi microsoft] Emit thunks for pointers to virtual member functionsHans Wennborg2013-11-153-47/+136
| | | | | | | | | | | | | | | | Instead of storing the vtable offset directly in the function pointer and doing a branch to check for virtualness at each call site, the MS ABI generates a thunk for calling the function at a specific vtable offset, and puts that in the function pointer. This patch adds support for emitting such thunks. However, it doesn't support pointers to virtual member functions that are variadic, have an incomplete aggregate return type or parameter, or are overriding a function in a virtual base class. Differential Revision: http://llvm-reviews.chandlerc.com/D2104 llvm-svn: 194827
* Fix test failures after addrspacecast added.Matt Arsenault2013-11-151-4/+8
| | | | | | Bitcasts between address spaces are no longer allowed. llvm-svn: 194765
* [AArch64] Add support for legacy AArch32 NEON scalar shift right by immediateChad Rosier2013-11-141-0/+11
| | | | | | and accumulate instructions. llvm-svn: 194732
* [OpenCL] Make sure we put string literals in the constant address space.Joey Gouly2013-11-141-4/+9
| | | | llvm-svn: 194717
* [AArch64 neon] support poly64 and relevant intrinsic functions.Kevin Qin2013-11-141-0/+1
| | | | llvm-svn: 194660
* Implement aarch64 neon instruction class misc.Kevin Qin2013-11-142-0/+283
| | | | llvm-svn: 194657
* Implement AArch64 NEON instruction set AdvSIMD (table).Jiangning Liu2013-11-141-2/+229
| | | | llvm-svn: 194649
* Don't use alias from derived dtor to base dtor at -O0.Rafael Espindola2013-11-131-0/+5
| | | | | | | | | | This patch disables aliasing (and rauw) of derived dtors to base dtors at -O0. This optimization can have a negative impact on the debug quality. This was a latent bug for some time with local classes, but got noticed when it was generalized and broke gdb's destrprint.exp. llvm-svn: 194618
* -fms-extensions: Recognize _alloca as an alias for the alloca builtinReid Kleckner2013-11-131-0/+1
| | | | | | Differential Revision: http://llvm-reviews.chandlerc.com/D1989 llvm-svn: 194617
* [AArch64] Tests for legacy AArch32 NEON scalar shift by immediate instructions.Chad Rosier2013-11-131-9/+9
| | | | | | | A number of non-overloaded intrinsics have been replaced by thier overloaded counterparts. llvm-svn: 194599
* Drop windows specific handling of equivalent destructors.Rafael Espindola2013-11-131-9/+0
| | | | | | | | | Now that the relevant tests use -mconstructor-aliases and the missing features have been implemented, we can just drop this. No functionality change. llvm-svn: 194595
* No need to use CGM.getCXXABI() from CXXABITimur Iskhodzhanov2013-11-131-4/+4
| | | | llvm-svn: 194584
* Add -fprofile-sample-use to Clang's driver.Diego Novillo2013-11-131-0/+12
| | | | | | | | This adds a new option -fprofile-sample-use=filename to Clang. It tells the driver to schedule the SampleProfileLoader pass and passes on the name of the profile file to use. llvm-svn: 194567
* Avoid producing mismatched comdats.Rafael Espindola2013-11-121-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | The problem was that given template<typename T> struct foo { ~foo() {} }; template class foo<int>; We would produce a alias, creating a comdat with D0 and D1, since the symbols have to be weak. Another TU is not required to have a explicit template instantiation definition or an explict template instantiation declaration and for template<typename T> struct foo { ~foo() {} }; foo<int> a; we would produce a comdat with only one symbol in it. llvm-svn: 194520
* Keep the old function order in CodeGenModule::applyReplacements.Rafael Espindola2013-11-121-2/+16
| | | | | | | | | | | | | | The original decls are created when used. The replacements are created at the end of the TU in reverse order. This makes the original order far better for testing. This is particularly important since the replacement logic could be used even when -mconstructor-aliases is not used, but that would make many tests hard to read. This is a fixed version of r194357 which handles replacing a destructor with another which is an alias to a third one. llvm-svn: 194452
* [mips] Partially revert r193640. Stack alignment should not be determined byAkira Hatanaka2013-11-111-8/+8
| | | | | | the floating point register mode. llvm-svn: 194426
* Fix pr17875.Rafael Espindola2013-11-111-3/+1
| | | | | | | | The assert this patch deletes was valid only when aliasing D2 to D1, not when looking at a base class. Since the assert was in the path where we had already decided to not produce an alias, just drop it. llvm-svn: 194411
* [AArch64] Add support for NEON scalar floating-point convert to fixed-point ↵Chad Rosier2013-11-111-0/+14
| | | | | | instructions. llvm-svn: 194395
* Revert "Keep the old function order in CodeGenModule::applyReplacements."Rafael Espindola2013-11-111-14/+2
| | | | | | | | This reverts commit r194357. Debugging a cast failure during bootstrap. llvm-svn: 194358
* Keep the old function order in CodeGenModule::applyReplacements.Rafael Espindola2013-11-101-2/+14
| | | | | | | | | | | The original decls are created when used. The replacements are created at the end of the TU in reverse order. This makes the original order far better for testing. This is particularly important since the replacement logic could be used even when -mconstructor-aliases is not used, but that would make many tests hard to read. llvm-svn: 194357
* Avoid double StringMap lookups. No functionality change.Benjamin Kramer2013-11-101-4/+4
| | | | llvm-svn: 194355
* Don't emit an internal destructor that is identical to an external one.Rafael Espindola2013-11-091-13/+13
| | | | | | | It is not safe to emit alias to undefined (not supported by ELF or COFF), but it is safe to rauw when the alias would have been internal or linkonce_odr. llvm-svn: 194307
* Use rauw for all discardable aliases, not just linkonce_odr.Rafael Espindola2013-11-081-1/+1
| | | | llvm-svn: 194296
* Remove an incorrect optimization inside Clang's IRGen. Its check to determineNick Lewycky2013-11-081-15/+8
| | | | | | | | | | | whether we can safely lower a conditional operator to select was insufficient. I've left a large comment in place to explaining the sort of problems that this transform can encounter in clang in the hopes of discouraging others from reimplementing it wrongly again in the future. (The test should also help with that, but it's easy to work around any single test I might add and think that your particular implementation doesn't miscompile any code.) llvm-svn: 194289
* If a linkonce_odr dtor/ctor is identical to another one, just rauw.Rafael Espindola2013-11-081-6/+7
| | | | | | | Unlike an alias a rauw is always safe, so we don't need to avoid this optimization when the replacement is not know to be available in every TU. llvm-svn: 194288
* ubsan: Only emit constants for filenames and type descriptors once.Will Dietz2013-11-082-4/+19
| | | | | | | | Produces neater IR in significantly less time. (~18% faster -O0 compile time for sqlite3 with -fsanitize=undefined) llvm-svn: 194231
* Minor refinement of VTableBuilder.h: fix wrong indentation, rename a struct ↵Timur Iskhodzhanov2013-11-071-3/+3
| | | | | | field with a more appropriate name llvm-svn: 194202
* [-fms-extensions] Add support for __FUNCDNAME__David Majnemer2013-11-061-0/+4
| | | | | | | | | | | | | | | | Summary: Similar to __FUNCTION__, MSVC exposes the name of the enclosing mangled function name via __FUNCDNAME__. This implementation is very naive and unoptimized, it is expected that __FUNCDNAME__ would be used rarely in practice. Reviewers: rnk, rsmith, thakis CC: cfe-commits, silvas Differential Revision: http://llvm-reviews.chandlerc.com/D2109 llvm-svn: 194181
* Fix the -cxx-abi microsoft -mconstructor-aliases combination.Rafael Espindola2013-11-061-2/+2
| | | | | | | | | | On the microsoft ABI clang is producing one weak_odr and one linkonce_odr destructor, which is reasonable since only one is required. The fix is simply to move the assert past the special case treatment of linkonce_odr. llvm-svn: 194158
* Fix PR17738 - add support for vtordisp thunks when using -cxx-abi microsoftTimur Iskhodzhanov2013-11-062-3/+25
| | | | llvm-svn: 194132
* Implement AArch64 Neon instruction set Perm.Jiangning Liu2013-11-061-0/+12
| | | | llvm-svn: 194124
* Implement AArch64 Neon instruction set Bitwise Extract.Jiangning Liu2013-11-061-0/+4
| | | | llvm-svn: 194119
OpenPOWER on IntegriCloud