summaryrefslogtreecommitdiffstats
path: root/clang/lib
Commit message (Collapse)AuthorAgeFilesLines
* fix a builder, why didn't clang++ catch this?Chris Lattner2010-07-292-2/+3
| | | | llvm-svn: 109735
* Use a LazyCompoundVal to handle initialization with a string literal, rather ↵Jordy Rose2010-07-291-35/+12
| | | | | | than copying each character. llvm-svn: 109734
* Kill off the 'coerce' ABI passing form. Now 'direct' and 'extend' alwaysChris Lattner2010-07-294-194/+178
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | have a "coerce to" type which often matches the default lowering of Clang type to LLVM IR type, but the coerce case can be handled by making them not be the same. This simplifies things and fixes issues where X86-64 abi lowering would return coerce after making preferred types exactly match up. This caused us to compile: typedef float v4f32 __attribute__((__vector_size__(16))); v4f32 foo(v4f32 X) { return X+X; } into this code at -O0: define <4 x float> @foo(<4 x float> %X.coerce) nounwind { entry: %retval = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2] %coerce = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=2] %X.addr = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3] store <4 x float> %X.coerce, <4 x float>* %coerce %X = load <4 x float>* %coerce ; <<4 x float>> [#uses=1] store <4 x float> %X, <4 x float>* %X.addr %tmp = load <4 x float>* %X.addr ; <<4 x float>> [#uses=1] %tmp1 = load <4 x float>* %X.addr ; <<4 x float>> [#uses=1] %add = fadd <4 x float> %tmp, %tmp1 ; <<4 x float>> [#uses=1] store <4 x float> %add, <4 x float>* %retval %0 = load <4 x float>* %retval ; <<4 x float>> [#uses=1] ret <4 x float> %0 } Now we get: define <4 x float> @foo(<4 x float> %X) nounwind { entry: %X.addr = alloca <4 x float>, align 16 ; <<4 x float>*> [#uses=3] store <4 x float> %X, <4 x float>* %X.addr %tmp = load <4 x float>* %X.addr ; <<4 x float>> [#uses=1] %tmp1 = load <4 x float>* %X.addr ; <<4 x float>> [#uses=1] %add = fadd <4 x float> %tmp, %tmp1 ; <<4 x float>> [#uses=1] ret <4 x float> %add } This implements rdar://8248065 llvm-svn: 109733
* ignore structs that wrap vectors in IR, the abstraction shouldn't add penalty.Chris Lattner2010-07-291-2/+13
| | | | | | | | | | | | | | | | | Before we'd compile the example into something like: %coerce.dive2 = getelementptr %struct.v4f32wrapper* %retval, i32 0, i32 0 ; <<4 x float>*> [#uses=1] %1 = bitcast <4 x float>* %coerce.dive2 to <2 x double>* ; <<2 x double>*> [#uses=1] %2 = load <2 x double>* %1, align 1 ; <<2 x double>> [#uses=1] ret <2 x double> %2 Now we produce: %coerce.dive2 = getelementptr %struct.v4f32wrapper* %retval, i32 0, i32 0 ; <<4 x float>*> [#uses=1] %0 = load <4 x float>* %coerce.dive2, align 1 ; <<4 x float>> [#uses=1] ret <4 x float> %0 llvm-svn: 109732
* move the 'pretty 16-byte vector' inferring code up to be sharedChris Lattner2010-07-291-14/+24
| | | | | | with return values, improving stuff that returns __m128 etc. llvm-svn: 109731
* simplify code by eliminating a premature optimization.Chris Lattner2010-07-291-30/+11
| | | | llvm-svn: 109730
* now that we have CGT around, we can start using preferred typesChris Lattner2010-07-291-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for return values too. Instead of compiling something like: struct foo { int *X; float *Y; }; struct foo test(struct foo *P) { return *P; } to: %1 = type { i64, i64 } define %1 @test(%struct.foo* %P) nounwind { entry: %retval = alloca %struct.foo, align 8 ; <%struct.foo*> [#uses=2] %P.addr = alloca %struct.foo*, align 8 ; <%struct.foo**> [#uses=2] store %struct.foo* %P, %struct.foo** %P.addr %tmp = load %struct.foo** %P.addr ; <%struct.foo*> [#uses=1] %tmp1 = bitcast %struct.foo* %retval to i8* ; <i8*> [#uses=1] %tmp2 = bitcast %struct.foo* %tmp to i8* ; <i8*> [#uses=1] call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp1, i8* %tmp2, i64 16, i32 8, i1 false) %0 = bitcast %struct.foo* %retval to %1* ; <%1*> [#uses=1] %1 = load %1* %0, align 1 ; <%1> [#uses=1] ret %1 %1 } We now get the result more type safe, with: define %struct.foo @test(%struct.foo* %P) nounwind { entry: %retval = alloca %struct.foo, align 8 ; <%struct.foo*> [#uses=2] %P.addr = alloca %struct.foo*, align 8 ; <%struct.foo**> [#uses=2] store %struct.foo* %P, %struct.foo** %P.addr %tmp = load %struct.foo** %P.addr ; <%struct.foo*> [#uses=1] %tmp1 = bitcast %struct.foo* %retval to i8* ; <i8*> [#uses=1] %tmp2 = bitcast %struct.foo* %tmp to i8* ; <i8*> [#uses=1] call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp1, i8* %tmp2, i64 16, i32 8, i1 false) %0 = load %struct.foo* %retval ; <%struct.foo> [#uses=1] ret %struct.foo %0 } That memcpy is completely terrible, but I don't know how to fix it. llvm-svn: 109729
* sink preferred type stuff lower. It's possible that this mightChris Lattner2010-07-291-27/+33
| | | | | | | improve codegen for vaarg or something, because its codepath is getting preferred types now. llvm-svn: 109728
* Transcribe clattner email to SVN.Daniel Dunbar2010-07-291-1/+1
| | | | llvm-svn: 109727
* dissolve some more complexity: make the x86-64 abi lowering codeChris Lattner2010-07-293-57/+13
| | | | | | | compute its own preferred types instead of having CGT compute them then pass them (circuituously) down into ABIInfo. llvm-svn: 109726
* Change #pragma crash to segv, instead of abort.Daniel Dunbar2010-07-291-1/+1
| | | | llvm-svn: 109725
* simplify Get8ByteTypeAtOffset by making it a member of X86_64ABIInfoChris Lattner2010-07-291-24/+20
| | | | llvm-svn: 109724
* now that ABIInfo depends on CGT, it has trivial access to suchChris Lattner2010-07-293-216/+160
| | | | | | | things as TargetData, ASTContext, LLVMContext etc. Stop passing them through so many APIs. llvm-svn: 109723
* cave in to reality and make ABIInfo depend on CodeGenTypes.Chris Lattner2010-07-293-68/+105
| | | | | | This will simplify a bunch of code, coming up next. llvm-svn: 109722
* Teach GRExprEngine::VisitLValue() about FloatingLiteral, ImaginaryLiteral, ↵Ted Kremenek2010-07-291-0/+3
| | | | | | and CharacterLiteral. Fixes an assertion failure reported in PR 7675. llvm-svn: 109719
* Augment RegionStore::BindStruct() to bind symbolicated struct values. This ↵Ted Kremenek2010-07-291-6/+8
| | | | | | fixes a false path issue reported in <rdar://problem/8243408> and also spurs another cause where the idempotent operations checker fires. llvm-svn: 109710
* Change SymbolManager::canSymbolicate() to return true for RecordTypes.Ted Kremenek2010-07-291-1/+10
| | | | llvm-svn: 109709
* Explicitly guard in BasicStore from storing to non-scalars.Ted Kremenek2010-07-291-5/+3
| | | | llvm-svn: 109708
* Remove extraneous guards around the call to getConjuredSymbolVal(). These ↵Ted Kremenek2010-07-291-6/+4
| | | | | | checks are already done within getConjuredSymbolVal() itself. llvm-svn: 109707
* Don't set out-of-line template specialization/definition informationDouglas Gregor2010-07-282-4/+4
| | | | | | | for AST nodes that aren't actually out-of-line (i.e., require a nested-name-specifier). Fixes <rdar://problem/8204126>. llvm-svn: 109704
* pass argument vectors in a type that corresponds to the user type ifChris Lattner2010-07-281-2/+14
| | | | | | | | possible. This improves the example to pass <4 x float> instead of <2 x double> but we still get awful code, and still don't get the return value right. llvm-svn: 109700
* tidy upChris Lattner2010-07-282-13/+10
| | | | llvm-svn: 109699
* Initialize block's imported variable(s) in Fariborz Jahanian2010-07-281-19/+30
| | | | | | | block's synthesized constructor initalizer list. Fixes radar 8240371. llvm-svn: 109698
* Override selected builtin names (e.g. "long int" instead of "long") to match ↵Devang Patel2010-07-281-3/+13
| | | | | | names used by gcc in debug info. This makes gdb testsuite happy. llvm-svn: 109694
* fix some break statements to be formatted more consistently,Chris Lattner2010-07-281-16/+7
| | | | | | remove some now-dead code. llvm-svn: 109690
* use Get8ByteTypeAtOffset for the return value path as well so weChris Lattner2010-07-281-60/+63
| | | | | | don't get errors similar to PR7714 on the return path. llvm-svn: 109689
* refactor the autosizing code, eliminating duplicationChris Lattner2010-07-281-58/+53
| | | | | | and making Get8ByteTypeAtOffset always succeed and documented. llvm-svn: 109685
* Don't die when a member access refers to a non-class member via aDouglas Gregor2010-07-281-0/+3
| | | | | | qualified name. Fixes <rdar://problem/8231724>. llvm-svn: 109682
* fix PR7714 by not referencing off the end of a struct when passed by value inChris Lattner2010-07-281-7/+39
| | | | | | | x86-64 abi. This also improves codegen as well. Some refactoring is needed of this code. llvm-svn: 109681
* Turn off precompiled preamble support for C++Douglas Gregor2010-07-281-1/+2
| | | | llvm-svn: 109680
* When performing code completion for a case statement in a switch whoseDouglas Gregor2010-07-282-4/+25
| | | | | | | condition is not of enumeration type, provide code-completion results containing all values of integral or enumeral type. llvm-svn: 109677
* Support extended vector types in chained PCH.Sebastian Redl2010-07-281-5/+6
| | | | llvm-svn: 109675
* Add a test case for tentative definitions in chained PCH. Fix a bug that ↵Sebastian Redl2010-07-281-1/+4
| | | | | | completely messed up source locations and thus caused a crash whenever a diagnostic was emitted in chained PCH files. llvm-svn: 109660
* Fix flags in global block descriptor whenFariborz Jahanian2010-07-281-15/+22
| | | | | | | block returns structs. Fies radar 8241648. Executable test added to llvm test suite. llvm-svn: 109620
* some cleanups and get alignments correct for various coerce cases.Chris Lattner2010-07-281-9/+16
| | | | llvm-svn: 109607
* The grammar for GNU typeof in C requires an expression to beDouglas Gregor2010-07-281-4/+7
| | | | | | | | | | | | | parenthesized, unlike in C++, e.g., C has: typeof ( expression) C++ has: typeof unary-expression So, once we've parsed a parenthesized expression after typeof, we should only go on to parse the postfix expression suffix if we're in C++. Fixes <rdar://problem/8237491>. llvm-svn: 109606
* Preprocessor: Add support for '#pragma clang __debug crash' and '#pragma clangDaniel Dunbar2010-07-281-0/+28
| | | | | | | | __debug overflow_stack'. - For testing crash reporting stuff... you'd think I could just use some C++ code but Doug keeps fixing stuff! llvm-svn: 109587
* Enable expression transformations in the current-instantiationDouglas Gregor2010-07-281-9/+0
| | | | | | | rebuilder, i.e., remove a silly short-sighted hack from long ago. Thanks to Abramo Bagnara for the test case/bug report! llvm-svn: 109583
* When a nested-name-specifier refers into a current instantiation that hasDouglas Gregor2010-07-281-6/+13
| | | | | | | | dependent bases, construct a dependent nested-name-specifier rather than complaining that the name could not be found within the current instantiation itself. Fixes PR7725. llvm-svn: 109582
* we are not supposed to create an improper callsite using a CallInstr; leave ↵Gabor Greif2010-07-281-0/+1
| | | | | | a fixme mentioning the simplification when CallSite can clone itself llvm-svn: 109575
* construct debug info for "id" by hand. Devang Patel2010-07-281-3/+35
| | | | | | Tested by mi1-var-obj.exp in gdb testsuite. llvm-svn: 109571
* When creating a jump destination, its scope should be the scope of theJohn McCall2010-07-282-1/+6
| | | | | | | | | enclosing normal cleanup, not the top of the EH stack. I'm *really* surprised this hasn't been causing more problems. Fixes rdar://problem/8231514. llvm-svn: 109569
* Added some false positive checking to UnreachableCodeCheckerTom Care2010-07-271-31/+92
| | | | | | | | | - Allowed reporting of dead macros - Added path walking function to search for false positives in conditional statements - Updated some affected tests - Added some false positive test cases llvm-svn: 109561
* Extracted out some useful common functions in IdempotentOperationChecker to ↵Tom Care2010-07-273-86/+86
| | | | | | their own CheckerHelpers file. llvm-svn: 109560
* Record macros in dependent PCHs. Also add various info tables to dependent ↵Sebastian Redl2010-07-273-9/+72
| | | | | | PCHs; tests for this to follow. llvm-svn: 109554
* Revert r109546, it broke linux build.Argyrios Kyrtzidis2010-07-272-62/+90
| | | | llvm-svn: 109550
* Merge PCHWriterDecl.cpp's isRequiredDecl and ↵Argyrios Kyrtzidis2010-07-272-90/+62
| | | | | | | | | | | | CodeGenModule::MayDeferGeneration into a new function, DeclIsRequiredFunctionOrFileScopedVar. This function is part of the public CodeGen interface since it's essentially a CodeGen predicate that is also needed by the PCH mechanism to determine whether a decl needs to be deserialized during PCH loading for codegen purposes. This fixes current (and avoids future) codegen-from-PCH bugs. llvm-svn: 109546
* Fix a minor crash bug with constructs like Obj.Class::ENUM_VALUE.Eli Friedman2010-07-271-4/+4
| | | | llvm-svn: 109537
* Always use current working directory for DW_AT_comp_dir.Devang Patel2010-07-272-14/+1
| | | | llvm-svn: 109535
* PR7724: Don't try to evaluate value-dependent expressions.Eli Friedman2010-07-271-1/+1
| | | | llvm-svn: 109532
OpenPOWER on IntegriCloud