Commit Graph

5590 Commits

Author SHA1 Message Date
Matt Beaumont-Gay 934bbf50fb Placate gcc's -Wreturn-type
llvm-svn: 149104
2012-01-27 00:46:27 +00:00
Bob Wilson a7a61e2701 Make clz/ctz builtins defined for zero on ARM targets. rdar://10732455
ARM supports clz and ctz directly and both operations have well-defined
results for zero.  There is no disadvantage in performance to using the
defined-at-zero versions of llvm.ctlz/cttz intrinsics.  We're running into
ARM-specific code written with the assumption that __builtin_clz(0) == 32,
even though that value is technically undefined.  The code is failing now
because of llvm optimizations that are taking advantage of the undef
behavior (specifically svn r147255).  There's nothing wrong with that
optimization on x86 where any incorrect assumptions about __builtin_clz(0)
will quickly be exposed.  For ARM, though, optimizations based on that undef
behavior are likely to cause subtle bugs.  Other targets with defined-at-zero
clz/ctz support may want to override the default behavior as well.

llvm-svn: 149086
2012-01-26 22:14:27 +00:00
Eric Christopher f59218e5d9 Use createRecordFwdDecl here since that's what we're doing.
llvm-svn: 149051
2012-01-26 07:11:58 +00:00
Eric Christopher 8913bd6c63 Revert previous patch unifying all of the C++ record prep in one area,
the gdb testsuite complains too much about the ordering of items printed,
even if the offsets in the debug info are correct.

This reverts commit 027cb30af828f07750f9185782822297a5c57231.

llvm-svn: 149049
2012-01-26 07:01:04 +00:00
Eric Christopher 5720033cc1 Remove another duplicated variable.
llvm-svn: 149047
2012-01-26 06:20:57 +00:00
Peter Collingbourne 1425b4556a Use function pointers, rather than references, to pass Destroyers
around, in the process cleaning up the various gcc/msvc compiler
workarounds.

llvm-svn: 149036
2012-01-26 03:33:36 +00:00
Eric Christopher 9f94fa368a Tidy and remove some unused variables.
llvm-svn: 149015
2012-01-26 02:05:28 +00:00
Eric Christopher 5bfde1aa42 Collect this information together. No reason to have it split.
llvm-svn: 149013
2012-01-26 01:57:29 +00:00
Eric Christopher a15e6352fe Refactor into its own function.
llvm-svn: 149012
2012-01-26 01:57:13 +00:00
Eli Friedman a98d1f8ca6 Add some ABI tweaks for i386-pc-win32 triple so that we return structs in an MSVC-compatible way. Patch by Joe Groff.
llvm-svn: 148992
2012-01-25 22:46:34 +00:00
Eric Christopher bfecca3331 Clean up comment.
llvm-svn: 148982
2012-01-25 21:47:09 +00:00
NAKAMURA Takumi ccca11a3de Fixup r148926, for -Asserts.
llvm-svn: 148943
2012-01-25 08:58:21 +00:00
Chris Lattner 2d6b7b91b9 reapply r148902:
"use the new ConstantVector::getSplat method where it makes sense."

Also simplify a bunch of code to use the Builder->getInt32 instead
of doing it the hard and ugly way.  Much more progress could be made
here, but I don't plan to do it.

llvm-svn: 148926
2012-01-25 05:34:41 +00:00
Eli Friedman 5995489d27 Fix a crash for an edge case of the GNU ?: extension.
llvm-svn: 148923
2012-01-25 05:04:17 +00:00
Argyrios Kyrtzidis 5a25297c5e Revert 148902 which was part of 148901 which was reverted in r148906.
Original log:
 use the new ConstantVector::getSplat method where it makes sense.

llvm-svn: 148907
2012-01-25 02:58:12 +00:00
Eric Christopher 000b14e796 Refactor the record decl forward declaration code a bit.
llvm-svn: 148904
2012-01-25 02:06:59 +00:00
Eric Christopher 980df5d7ec Typo.
llvm-svn: 148903
2012-01-25 02:06:52 +00:00
Chris Lattner c558d7d176 use the new ConstantVector::getSplat method where it makes sense.
llvm-svn: 148902
2012-01-25 02:06:10 +00:00
Kostya Serebryany 588d6abf7d The following patch adds __attribute__((no_address_safety_analysis)) which will allow to disable
address safety analysis (such as e.g. AddressSanitizer or SAFECode) for a specific function.

When building with AddressSanitizer, add AddressSafety function attribute to every generated function
except for those that have __attribute__((no_address_safety_analysis)).

With this patch we will be able to
1. disable AddressSanitizer for a particular function
2. disable AddressSanitizer-hostile optimizations (such as some cases of load widening) when AddressSanitizer is on.

llvm-svn: 148842
2012-01-24 19:25:38 +00:00
Akira Hatanaka 377152870b Make sure the integer type used to align the vaarg address is the same as the
type of pointers. 

llvm-svn: 148753
2012-01-23 23:59:52 +00:00
Akira Hatanaka 60f5fe6857 Ignore return type if its size is zero.
llvm-svn: 148744
2012-01-23 23:18:57 +00:00
Nick Lewycky 1c8c436a85 Add support for -fno-optimize-sibling-calls. Currently only implemented in the
X86 backend in LLVM.

llvm-svn: 148689
2012-01-23 08:29:12 +00:00
Eli Friedman 5720e34955 Add an assertion that our use-marking actually covers all uses of a variable. The assertion doesn't cover quite as much as it should, but it's a good start, at least.
llvm-svn: 148625
2012-01-21 04:52:58 +00:00
Eric Christopher 45c4d47b8a When adding types to the context chain for record types, just emit
a forward declaration unless we already have a type. We can fill it in
later if it's actually used.

Fixes PR11345

llvm-svn: 148584
2012-01-20 22:10:15 +00:00
David Blaikie e4d798f078 More dead code removal (using -Wunreachable-code)
llvm-svn: 148577
2012-01-20 21:50:17 +00:00
Kostya Serebryany ca95aa03f9 use llvm:Attributes instead of unsigned
llvm-svn: 148554
2012-01-20 17:57:16 +00:00
Seth Cantrell c9196651fc test svn commit access
llvm-svn: 148388
2012-01-18 12:11:32 +00:00
Nick Lewycky 9ed5b156a2 Fix a string over-run detected by ASAN.
llvm-svn: 148375
2012-01-18 03:41:19 +00:00
Nick Lewycky 72cd229398 Fix special king of typo.
llvm-svn: 148368
2012-01-18 01:50:13 +00:00
Fariborz Jahanian 07b5f4ca03 output body of folded case again.
llvm-svn: 148361
2012-01-17 23:55:19 +00:00
Fariborz Jahanian 9ce39e299d Folding away unreachable case statement.
patch (slightly revised) by Aaron Ballman.

llvm-svn: 148359
2012-01-17 23:39:50 +00:00
Douglas Gregor a95f9aaa84 Make sure to initialize ExternalProtocolPtrTy
llvm-svn: 148358
2012-01-17 23:38:32 +00:00
Eli Friedman 65499b45f0 Add __builtin_labs and __builtin_llabs, to complete the set of __builtin_*abs. Patch by Ruben Van Boxem.
llvm-svn: 148340
2012-01-17 22:11:30 +00:00
Richard Smith dd5bdd8de7 Remove constant member pointer support from Expr-based constant emission now
that APValue-based constant emission knows how to emit member pointers.

llvm-svn: 148336
2012-01-17 21:42:19 +00:00
Dan Gohman 5932ce257f Enable the new ObjC ARC autorelease pool elimination pass.
llvm-svn: 148331
2012-01-17 20:54:51 +00:00
John McCall 9701731a3e When initializing a catch variable in ARC, be sure to emit retains
or whatever else is required for the initialization instead of
assuming it can be done with a simple store.

Fixes PR11732.

llvm-svn: 148325
2012-01-17 20:16:56 +00:00
Douglas Gregor 020de3254a Don't eagerly deserialize the 'Protocol' type when initializing code
generation for Objective-C; it may not be needed.

llvm-svn: 148317
2012-01-17 18:36:30 +00:00
David Blaikie f47fa304a4 Remove unnecessary default cases in switches over enums.
This allows -Wswitch-enum to find switches that need updating when these enums are modified.

llvm-svn: 148281
2012-01-17 02:30:50 +00:00
Tanya Lattner 20248226a9 Add support for OpenCL 1.1 logical operations.
llvm-svn: 148254
2012-01-16 21:02:28 +00:00
Fariborz Jahanian 9c882f98cc Fixes a crash during constant folding of a switch and case
statement which has an unscoped case inside it.
Patch by Aaron Ballman

llvm-svn: 148243
2012-01-16 17:35:57 +00:00
David Chisnall fa35df628a Some improvements to the handling of C11 atomic types:
- Add atomic-to/from-nonatomic cast types
- Emit atomic operations for arithmetic on atomic types
- Emit non-atomic stores for initialisation of atomic types, but atomic stores and loads for every other store / load
- Add a __atomic_init() intrinsic which does a non-atomic store to an _Atomic() type.  This is needed for the corresponding C11 stdatomic.h function.
- Enables the relevant __has_feature() checks.  The feature isn't 100% complete yet, but it's done enough that we want people testing it.

Still to do:

- Make the arithmetic operations on atomic types (e.g. Atomic(int) foo = 1; foo++;) use the correct LLVM intrinsic if one exists, not a loop with a cmpxchg.
- Add a signal fence builtin
- Properly set the fenv state in atomic operations on floating point values
- Correctly handle things like _Atomic(_Complex double) which are too large for an atomic cmpxchg on some platforms (this requires working out what 'correctly' means in this context)
- Fix the many remaining corner cases

llvm-svn: 148242
2012-01-16 17:27:18 +00:00
Douglas Gregor ec9fd13c77 De-virtualize getPreviousDecl() and getMostRecentDecl() when we know
we have a redeclarable type, and only use the new virtual versions
(getPreviousDeclImpl() and getMostRecentDeclImpl()) when we don't have
that type information. This keeps us from penalizing users with strict
type information (and is the moral equivalent of a "final" method).

Plus, settle on the names getPreviousDecl() and getMostRecentDecl()
throughout.

llvm-svn: 148187
2012-01-14 16:38:05 +00:00
Zhongxing Xu 82846eae0a Remove a redundant word.
llvm-svn: 148179
2012-01-14 09:08:15 +00:00
Richard Smith dafff94759 constexpr irgen: Add irgen support for APValue::Struct, APValue::Union,
APValue::Array and APValue::MemberPointer. All APValue values can now be emitted
as constants.

Add new CGCXXABI entry point for emitting an APValue MemberPointer. The other
entrypoints dealing with constant member pointers are no longer necessary and
will be removed in a later change.

Switch codegen from using EvaluateAsRValue/EvaluateAsLValue to
VarDecl::evaluateValue. This performs caching and deals with the nasty cases in
C++11 where a non-const object's initializer can refer indirectly to
previously-initialized fields within the same object.

Building the intermediate APValue object incurs a measurable performance hit on
pathological testcases with huge initializer lists, so we continue to build IR
directly from the Expr nodes for array and record types outside of C++11.

llvm-svn: 148178
2012-01-14 04:30:29 +00:00
Eli Friedman 09d272d025 A base subobject type doesn't make sense for unions; don't try to compute it. Based on patch by Yin Ma. Fixes PR11751.
llvm-svn: 148093
2012-01-13 03:58:31 +00:00
Eric Christopher 8c363622d3 Formatting.
llvm-svn: 147989
2012-01-12 01:26:58 +00:00
Eric Christopher ffbc4d0b68 Formatting.
llvm-svn: 147988
2012-01-12 01:26:51 +00:00
Akira Hatanaka 32604a9708 Take into account the pointer to an aggregate that is passed as a hidden
argument when Offset is initialized.

llvm-svn: 147986
2012-01-12 01:10:09 +00:00
Akira Hatanaka 02e13e5005 Call CodeGenTypes::ConvertType to get LLVM::Type*.
Remove function MipsABIInfo::GetFloatingPointTy.

llvm-svn: 147985
2012-01-12 00:52:17 +00:00
Abramo Bagnara fa95ed4074 Fixed VLA code generation.
llvm-svn: 147933
2012-01-11 08:19:46 +00:00