- Oct 16, 2007
-
-
Arnold Schwaighofer authored
was stored to the acutal stack slot before the parameters were lowered to their stack slot. This could cause arguments to be overwritten by the return address if the called function had less parameters than the caller function. The update should remove the last failing test case of llc-beta: SPASS. llvm-svn: 43027
-
Evan Cheng authored
llvm-svn: 43026
-
Chris Lattner authored
work with type promotion on x86. llvm-svn: 43025
-
Chris Lattner authored
This fixes a bug Anders noticed. llvm-svn: 43024
-
Steve Naroff authored
Bad cast...need to use dyn_cast_or_null. Also changed Sema::InitBuiltinVaListType (which had the same bug). llvm-svn: 43023
-
Fariborz Jahanian authored
llvm-svn: 43022
-
Steve Naroff authored
Change the type of ObjCStringLiteral from "struct __builtin_CFString *" to "NSConstantString *". This makes the typecheck much happier. Without this change, the type checker would have to special case "struct __builtin_CFString *". This change does assume the interface for NSConstantString is declared in the translation unit. I left ASTContext::getCFConstantStringType() around for now (with a comment that says it is currently unused). llvm-svn: 43021
-
Dan Gohman authored
llvm-svn: 43020
-
- Oct 15, 2007
-
-
Evan Cheng authored
llvm-svn: 43017
-
Dan Gohman authored
llvm-svn: 43016
-
Dan Gohman authored
llvm-svn: 43015
-
Steve Naroff authored
Fix a parser bug with message expressions - need to call ParsePostfixExpressionSuffix(). Now were correctly allow the following... i = [str rangeOfString:@"]"].length; llvm-svn: 43012
-
Steve Naroff authored
Move type compatibility predicates from Type to ASTContext. In addition, the predicates are now instance methods (they were previously static class methods on Type). This allowed me to fix the following hack from this weekend... // FIXME: Devise a way to do this without using strcmp. // Would like to say..."return getAsStructureType() == IdStructType;", but // we don't have a pointer to ASTContext. bool Type::isObjcIdType() const { if (const RecordType *RT = getAsStructureType()) return !strcmp(RT->getDecl()->getName(), "objc_object"); return false; } ...which is now... bool isObjcIdType(QualType T) const { return T->getAsStructureType() == IdStructType; } Side notes: - I had to remove a convenience function from the TypesCompatibleExpr class. int typesAreCompatible() const {return Type::typesAreCompatible(Type1,Type2);} Which required a couple clients get a little more verbose... - Result = TCE->typesAreCompatible(); + Result = Ctx.typesAreCompatible(TCE->getArgType1(), TCE->getArgType2()); Overall, I think this change also makes sense for a couple reasons... 1) Since ASTContext vends types, it makes sense for the type compatibility API to be there. 2) This allows the type compatibility predeciates to refer to data not strictly present in the AST (which I have found problematic on several occasions). llvm-svn: 43009
-
Dan Gohman authored
is welcome! llvm-svn: 43007
-
Anders Carlsson authored
llvm-svn: 43006
-
Chris Lattner authored
unconditionally creating an i64 bitcast. With the future legalizer design, operation legalization can't introduce new nodes with illegal types. This fixes the rest of olden on ppc32. llvm-svn: 43005
-
Evan Cheng authored
llvm-svn: 43004
-
Devang Patel authored
llvm-svn: 43002
-
Dan Gohman authored
from "test" to "foo" so that they don't match the grep -i ST. llvm-svn: 43001
-
Fariborz Jahanian authored
llvm-svn: 43000
-
Ted Kremenek authored
llvm-svn: 42999
-
Ted Kremenek authored
Renamed internal method of ImutAVLTree::RemoveMutableFlag to MarkImmutable. Added enum for bit manipulation (more self-documentating). llvm-svn: 42998
-
Evan Cheng authored
llvm-svn: 42996
-
Chris Lattner authored
llvm-svn: 42995
-
Chris Lattner authored
llvm-svn: 42994
-
Chris Lattner authored
llvm-svn: 42992
-
Chris Lattner authored
llvm-svn: 42991
-
Tanya Lattner authored
llvm-svn: 42990
-
Devang Patel authored
llvm-svn: 42986
-
Devang Patel authored
llvm-svn: 42985
-
Neil Booth authored
integer conversion. In some such cases this makes us one or two orders of magnitude faster than NetBSD's libc. Glibc seems to have a similar fast path. Also, tighten up some upper bounds to save a bit of memory. llvm-svn: 42984
-
Steve Naroff authored
Added ASTContext::setObjcIdType/getObjcIdType(), set by Sema. Also noticed ASTContext::BuiltinVaListType wasn't being initialized to the null type (so I set it). llvm-svn: 42983
-
Duncan Sands authored
getTypeToExpandTo. The difference is that getTypeToExpandTo gives the final result of expansion (eg: i128 -> i32 on a 32 bit machine) while getTypeToTransformTo does just one step (i128 -> i64). llvm-svn: 42982
-
Chris Lattner authored
take a deleted nodes vector, instead of requiring it. One more significant change: Implement the start of a legalizer that just works on types. This legalizer is designed to run before the operation legalizer and ensure just that the input dag is transformed into an output dag whose operand and result types are all legal, even if the operations on those types are not. This design/impl has the following advantages: 1. When finished, this will *significantly* reduce the amount of code in LegalizeDAG.cpp. It will remove all the code related to promotion and expansion as well as splitting and scalarizing vectors. 2. The new code is very simple, idiomatic, and modular: unlike LegalizeDAG.cpp, it has no 3000 line long functions. :) 3. The implementation is completely iterative instead of recursive, good for hacking on large dags without blowing out your stack. 4. The implementation updates nodes in place when possible instead of deallocating and reallocating the entire graph that points to some mutated node. 5. The code nicely separates out handling of operations with invalid results from operations with invalid operands, making some cases simpler and easier to understand. 6. The new -debug-only=legalize-types option is very very handy :), allowing you to easily understand what legalize types is doing. This is not yet done. Until the ifdef added to SelectionDAGISel.cpp is enabled, this does nothing. However, this code is sufficient to legalize all of the code in 186.crafty, olden and freebench on an x86 machine. The biggest issues are: 1. Vectors aren't implemented at all yet 2. SoftFP is a mess, I need to talk to Evan about it. 3. No lowering to libcalls is implemented yet. 4. Various operations are missing etc. 5. There are FIXME's for stuff I hax0r'd out, like softfp. Hey, at least it is a step in the right direction :). If you'd like to help, just enable the #ifdef in SelectionDAGISel.cpp and compile code with it. If this explodes it will tell you what needs to be implemented. Help is certainly appreciated. Once this goes in, we can do three things: 1. Add a new pass of dag combine between the "type legalizer" and "operation legalizer" passes. This will let us catch some long-standing isel issues that we miss because operation legalization often obfuscates the dag with target-specific nodes. 2. We can rip out all of the type legalization code from LegalizeDAG.cpp, making it much smaller and simpler. When that happens we can then reimplement the core functionality left in it in a much more efficient and non-recursive way. 3. Once the whole legalizer is non-recursive, we can implement whole-function selectiondags maybe... llvm-svn: 42981
-
Chris Lattner authored
Make two changes: 1) only xform "store of f32" if i32 is a legal type for the target. 2) only xform "store of f64" if either i64 or i32 are legal for the target. 3) if i64 isn't legal, manually lower to 2 stores of i32 instead of letting a later pass of legalize do it. This is ugly, but helps future changes I'm about to commit. llvm-svn: 42980
-
Chris Lattner authored
llvm-svn: 42979
-
Chris Lattner authored
llvm-svn: 42978
-
Chris Lattner authored
llvm-svn: 42977
-
Chris Lattner authored
llvm-svn: 42976
-
Steve Naroff authored
Teach the type checker about "id". This removes the following bogus warning... [dylan:~/llvm/tools/clang] admin% ../../Debug/bin/clang t.m t.m:29:18: warning: incompatible pointer types assigning 'id' to 'NSString *' resultString = [[NSString alloc] initWithFormat:0 arguments:0]; ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ llvm-svn: 42975
-