summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGExprScalar.cpp
AgeCommit message (Collapse)Author
2012-10-23Switch CodeGenOptions over to a .def file, like we do with LangOptions.Douglas Gregor
llvm-svn: 166497
2012-10-12-fcatch-undefined-behavior: Trap undefined behavior due to conversions to orRichard Smith
from a floating-point type where the source value is not in the range of representable values of the destination type. llvm-svn: 165843
2012-10-09-fcatch-undefined-behavior: emit calls to the runtime library whenever one ↵Richard Smith
of the checks fails. llvm-svn: 165536
2012-10-08Move TargetData to DataLayout.Micah Villmow
llvm-svn: 165395
2012-10-04Fail early with a clear assert if an operation with multiple uses somehow endsLang Hames
up being contracted during codegen. llvm-svn: 165197
2012-10-03Always initialize FPContractable.Benjamin Kramer
false is used as a baseline here, we may want to allow contraction in some of the cases. Found by valgrind. llvm-svn: 165156
2012-10-03Teach getCXXRecordDeclForPointerType about references.Jordan Rose
Then, rename it getPointeeCXXRecordDecl and give it a nice doc comment, and actually use it. No intended functionality change. llvm-svn: 165077
2012-10-02Add FP_CONTRACT support for clang.Lang Hames
Clang will now honor the FP_CONTRACT pragma and emit LLVM fmuladd intrinsics for expressions of the form A * B + C (when they occur in a single statement). llvm-svn: 164989
2012-09-08-fcatch-undefined-behavior: Factor emission of the creation of, and branch to,Richard Smith
the trap BB out of the individual checks and into a common function, to prepare for making this code call into a runtime library. Rename the existing EmitCheck to EmitTypeCheck to clarify it and to move it out of the way of the new EmitCheck. llvm-svn: 163451
2012-08-31Change the representation of builtin functions in the ASTEli Friedman
(__builtin_* etc.) so that it isn't possible to take their address. Specifically, introduce a new type to represent a reference to a builtin function, and a new cast kind to convert it to a function pointer in the operand of a call. Fixes PR13195. llvm-svn: 162962
2012-08-28Fix PR13704Michael Liao
- The increment needs to be signed value to preserve the original value when its data type is larger than 64-bit integer. llvm-svn: 162766
2012-08-25Remove spurious string literal for bool argument.Richard Smith
llvm-svn: 162642
2012-08-25-fcatch-undefined-behavior: add the -ftrapv checks to the set of things caughtRichard Smith
by this mode, and also check for signed left shift overflow. The rules for the latter are a little subtle: * neither C89 nor C++98 specify the behavior of a signed left shift at all * in C99 and C11, shifting a 1 bit into the sign bit has undefined behavior * in C++11, with core issue 1457, shifting a 1 bit *out* of the sign bit has undefined behavior As of this change, we use the C99 rules for all C language variants, and the C++11 rules for all C++ language variants. Once we have individual -fcatch-undefined-behavior= flags, this should be revisited. llvm-svn: 162634
2012-08-24New -fcatch-undefined-behavior features:Richard Smith
* when checking that a pointer or reference refers to appropriate storage for a type, also check the alignment and perform a null check * check that references are bound to appropriate storage * check that 'this' has appropriate storage in member accesses and member function calls llvm-svn: 162523
2012-07-04Remove get(V)BaseClassOffsetInBits, the CharUnit functions should be used ↵Benjamin Kramer
instead. No functionality change. llvm-svn: 159719
2012-06-16Fix Sema and IRGen for atomic compound assignment so it has the right ↵Eli Friedman
semantics when promotions are involved. (As far as I can tell, this only affects some edge cases.) llvm-svn: 158591
2012-06-06reverse r158117.Fariborz Jahanian
llvm-svn: 158119
2012-06-06When doing arithmatic on vla pointer, make sureFariborz Jahanian
to emit vla size to prevent an irgen crash. // rdar://11485774 llvm-svn: 158117
2012-06-06Revert Decl's iterators back to pointer value_type rather than reference ↵David Blaikie
value_type In addition, I've made the pointer and reference typedef 'void' rather than T* just so they can't get misused. I would've omitted them entirely but std::distance likes them to be there even if it doesn't use them. This rolls back r155808 and r155869. Review by Doug Gregor incorporating feedback from Chandler Carruth. llvm-svn: 158104
2012-05-29OpenCL: Fix vector conditional operator CodeGen for the case wherePeter Collingbourne
the operands are vectors of doubles. llvm-svn: 157596
2012-04-30Remove the ref/value inconsistency in filter_decl_iterator.David Blaikie
filter_decl_iterator had a weird mismatch where both op* and op-> returned T* making it difficult to generalize this filtering behavior into a reusable library of any kind. This change errs on the side of value, making op-> return T* and op* return T&. (reviewed by Richard Smith) llvm-svn: 155808
2012-04-27Use enum to set debug info size generated by ClangAlexey Samsonov
llvm-svn: 155697
2012-04-19Implements boxed expressions for Objective-C. <rdar://problem/10194391>Patrick Beard
llvm-svn: 155082
2012-04-10Express the number of ULPs in fpaccuracy metadata as a real rather than a Duncan Sands
rational number, eg as 2.5 rather than 5, 2. OK'd by Peter Collingbourne. llvm-svn: 154388
2012-04-05Make the variant of __builtin_shufflevector that takes the shuffle indexes ↵Eli Friedman
as a vector actually usable. Patch by David Neto. PR12465. llvm-svn: 154128
2012-03-11Unify naming of LangOptions variable/get function across the Clang stack ↵David Blaikie
(Lex to AST). The member variable is always "LangOpts" and the member function is always "getLangOpts". Reviewed by Chris Lattner llvm-svn: 152536
2012-03-10Remove BlockDeclRefExpr and introduce a bit on DeclRefExpr toJohn McCall
track whether the referenced declaration comes from an enclosing local context. I'm amenable to suggestions about the exact meaning of this bit. llvm-svn: 152491
2012-03-10Unify the BlockDeclRefExpr and DeclRefExpr paths so thatJohn McCall
we correctly emit loads of BlockDeclRefExprs even when they don't qualify as ODR-uses. I think I'm adequately convinced that BlockDeclRefExpr can die. llvm-svn: 152479
2012-03-09[AST] Reduce Decl::getASTContext() calls.Daniel Dunbar
- This function is not at all free; pass it around along some hot paths instead of recomputing it deep inside various VarDecl methods. llvm-svn: 152363
2012-03-07Don't even try to directly emit the value of a DeclRefExpr if that declarationRichard Smith
is not usable in a constant expression. ~2.5% speedup on 403.gcc / combine.c. llvm-svn: 152193
2012-03-06Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,Ted Kremenek
NSNumber, and boolean literals. This includes both Sema and Codegen support. Included is also support for new Objective-C container subscripting. My apologies for the large patch. It was very difficult to break apart. The patch introduces changes to the driver as well to cause clang to link in additional runtime support when needed to support the new language features. Docs are forthcoming to document the implementation and behavior of these features. llvm-svn: 152137
2012-03-02Reinstate r151879, r151880, reverted in r151922, along with a bugfix forRichard Smith
scalar emission of DeclRefExprs to const bools: emit scalar bools as i1, not as i8. In addition to the extra unit testing, this has successfully bootstrapped. llvm-svn: 151955
2012-03-02Revert r151879, r151880, "PR12145: Avoid emitting loads of constexpr ↵Daniel Dunbar
variables in contexts where there" and "Fix buildbot: make this test less dependent on the value names in the produced IR." They broke bootstrap. llvm-svn: 151922
2012-03-02PR12145: Avoid emitting loads of constexpr variables in contexts where thereRichard Smith
is no odr-use of the variable. Go slightly beyond what the standard requires for variables of reference type. llvm-svn: 151879
2012-02-28Implement IRGen for the retain-autorelease in the lambda ↵Eli Friedman
conversion-to-block-pointer outside of ARC. Testcases coming up soon. llvm-svn: 151603
2012-02-22Generate an AST for the conversion from a lambda closure type to aDouglas Gregor
block pointer that returns a block literal which captures (by copy) the lambda closure itself. Some aspects of the block literal are left unspecified, namely the capture variable (which doesn't actually exist) and the body (which will be filled in by IRgen because it can't be written as an AST). Because we're switching to this model, this patch also eliminates tracking the copy-initialization expression for the block capture of the conversion function, since that information is now embedded in the synthesized block literal. -1 side tables FTW. llvm-svn: 151131
2012-02-18Fix wrong-code bug: __imag on a scalar lvalue should produce a zero rvalue,Richard Smith
rather than an lvalue referring to the scalar. llvm-svn: 150889
2012-02-15Split reinterpret_casts of member pointers out from CK_BitCast; thisJohn McCall
is general goodness because representations of member pointers are not always equivalent across member pointer types on all ABIs (even though this isn't really standard-endorsed). Take advantage of the new information to teach IR-generation how to do these reinterprets in constant initializers. Make sure this works when intermingled with hierarchy conversions (although this is not part of our motivating use case). Doing this in the constant-evaluator would probably have been better, but that would require a *lot* of extra structure in the representation of constant member pointers: you'd really have to track an arbitrary chain of hierarchy conversions and reinterpretations in order to get this right. Ultimately, this seems less complex. I also wasn't quite sure how to extend the constant evaluator to handle foldings that we don't actually want to treat as extended constant expressions. llvm-svn: 150551
2012-02-14Use a simpler (and more efficient) pattern to pad vectors.Benjamin Kramer
llvm-svn: 150475
2012-02-07simplify a bunch of code to use the well-known LLVM IR types computed by ↵Chris Lattner
CodeGenModule. llvm-svn: 149943
2012-02-06Fix vector splat casts to cast element to the appropriate vector element ↵Craig Topper
before inserting into the vector. Fixes PR11930. llvm-svn: 149855
2012-01-25reapply r148902:Chris Lattner
"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-25Revert 148902 which was part of 148901 which was reverted in r148906.Argyrios Kyrtzidis
Original log: use the new ConstantVector::getSplat method where it makes sense. llvm-svn: 148907
2012-01-25use the new ConstantVector::getSplat method where it makes sense.Chris Lattner
llvm-svn: 148902
2012-01-20More dead code removal (using -Wunreachable-code)David Blaikie
llvm-svn: 148577
2012-01-16Add support for OpenCL 1.1 logical operations.Tanya Lattner
llvm-svn: 148254
2012-01-16Some improvements to the handling of C11 atomic types:David Chisnall
- 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-06Revert r147664; it's breaking clang regression tests.Eli Friedman
llvm-svn: 147681
2012-01-06Silence GCC warnings.Jakub Staszak
llvm-svn: 147664
2011-12-28Small refactoring and simplification of constant evaluation and some of itsRichard Smith
clients. No functionality change. llvm-svn: 147318