- Jan 25, 2008
-
-
Nate Begeman authored
llvm-svn: 46343
-
Steve Naroff authored
Replace Sema::CheckVariableInitList, CheckConstantInitList, and CheckForCharArrayInitializer with CheckInitializerListTypes. The new routine now supports struct/union initializers. This is a modified version of a patch by Eli Friedman. This version passes all of the clang tests and supports vectors:-) Note that Eli and I are still unsatisfied the implementation of CheckInitializerListTypes(). We'd like to find a more elegant implementation. Nevertheless, this is a complex part of the standard (and may be hard to simplify). Since the complexity is localized to this routine, we can iterate without too much disruption:-) llvm-svn: 46339
-
Anton Korobeynikov authored
This should fix bunch of issues. llvm-svn: 46337
-
Chris Lattner authored
llvm-svn: 46336
-
Chris Lattner authored
line of the file, in the common case where a file ends with a newline. llvm-svn: 46335
-
Devang Patel authored
llvm-svn: 46333
-
Chris Lattner authored
llvm-svn: 46330
-
Ted Kremenek authored
information is not separated into a "base" and "sub" type. Eventually the value-tracking logic will know about LValues and RValues, but not about specialized LValues and RValues; separating the "kind" information into bits indicating whether an ExprValue is an LValue or an RValue from the bits that specify the actual value type makes this separation easier. llvm-svn: 46329
-
- Jan 24, 2008
-
-
Steve Naroff authored
Exclude vectors from Type::isScalar() predicate. llvm-svn: 46328
-
Ted Kremenek authored
llvm-svn: 46327
-
Ted Kremenek authored
llvm-svn: 46326
-
Ted Kremenek authored
llvm-svn: 46323
-
Ted Kremenek authored
a Stmt* is a block-level expression when we INSERT a value into the map, and not also when we QUERY a value. llvm-svn: 46321
-
Chris Lattner authored
llvm-svn: 46320
-
Ted Kremenek authored
the value map as if the expressions were non-block-level expressions. llvm-svn: 46319
-
Chris Lattner authored
llvm-svn: 46318
-
Ted Kremenek authored
we falsely constructed an APInt to represent the constant '1' instead of using an APSInt (which has a sign). llvm-svn: 46317
-
Ted Kremenek authored
APInt. While some operators were already specifically overloaded for APSInt, others resulted in using the overloaded operator methods in APInt, which would result in the signedness bit being lost. Modified the APSInt(APInt&) constructor to be "explicit" and to take an extra (optional) flag to indicate the signedness. Making the ctor explicit will catch any implicit conversations between APSInt -> APInt -> APSInt that results in the signedness flag being lost. llvm-svn: 46316
-
Chris Lattner authored
can't be aliased to other known objects. This allows us to know that byval pointer args don't alias globals, etc. llvm-svn: 46315
-
Chris Lattner authored
llvm-svn: 46314
-
Chris Lattner authored
llvm-svn: 46313
-
Ted Kremenek authored
Added some workarounds for loss of signess information on some APSInt operations. Considering the best route to integrate these into APSInt directly. (FIXME's in GRConstants.cpp). llvm-svn: 46310
-
Chris Lattner authored
This case returns the value in ST(0) and then has to convert it to an SSE register. This causes significant codegen ugliness in some cases. For example in the trivial fp-stack-direct-ret.ll testcase we used to generate: _bar: subl $28, %esp call L_foo$stub fstpl 16(%esp) movsd 16(%esp), %xmm0 movsd %xmm0, 8(%esp) fldl 8(%esp) addl $28, %esp ret because we move the result of foo() into an XMM register, then have to move it back for the return of bar. Instead of hacking ever-more special cases into the call result lowering code we take a much simpler approach: on x86-32, fp return is modeled as always returning into an f80 register which is then truncated to f32 or f64 as needed. Similarly for a result, we model it as an extension to f80 + return. This exposes the truncate and extensions to the dag combiner, allowing target independent code to hack on them, eliminating them in this case. This gives us this code for the example above: _bar: subl $12, %esp call L_foo$stub addl $12, %esp ret The nasty aspect of this is that these conversions are not legal, but we want the second pass of dag combiner (post-legalize) to be able to hack on them. To handle this, we lie to legalize and say they are legal, then custom expand them on entry to the isel pass (PreprocessForFPConvert). This is gross, but less gross than the code it is replacing :) This also allows us to generate better code in several other cases. For example on fp-stack-ret-conv.ll, we now generate: _test: subl $12, %esp call L_foo$stub fstps 8(%esp) movl 16(%esp), %eax cvtss2sd 8(%esp), %xmm0 movsd %xmm0, (%eax) addl $12, %esp ret where before we produced (incidentally, the old bad code is identical to what gcc produces): _test: subl $12, %esp call L_foo$stub fstpl (%esp) cvtsd2ss (%esp), %xmm0 cvtss2sd %xmm0, %xmm0 movl 16(%esp), %eax movsd %xmm0, (%eax) addl $12, %esp ret Note that we generate slightly worse code on pr1505b.ll due to a scheduling deficiency that is unrelated to this patch. llvm-svn: 46307
-
Chris Lattner authored
1. we already know the value is dead, so don't bother replacing it with undef. 2. The very case the comment describes actually makes the load live which asserts in deletenode. If we do the replacement and the node becomes live, just treat it as new. This fixes a failure on X86/2008-01-16-InvalidDAGCombineXform.ll with some local changes in my tree. llvm-svn: 46306
-
Chris Lattner authored
dead stuff around. This gets fed into the isel pass and causes certain foldings from happening because nodes have extraneous uses floating around. For example, if we turned foo(bar(x)) -> baz(x), we sometimes left bar(x) around. llvm-svn: 46305
-
Chris Lattner authored
llvm-svn: 46304
-
Chris Lattner authored
llvm-svn: 46303
-
Gordon Henriksen authored
llvm-svn: 46302
-
Ted Kremenek authored
llvm-svn: 46300
-
Ted Kremenek authored
Added initial support for integer casting operations to GRConstants. llvm-svn: 46298
-
Anton Korobeynikov authored
llvm-svn: 46296
-
Owen Anderson authored
Move some functionality for adding flags to MachineInstr's into methods on MachineInstr rather than LiveVariables. llvm-svn: 46295
-
Ted Kremenek authored
llvm-svn: 46294
-
Evan Cheng authored
llvm-svn: 46292
-
Ted Kremenek authored
Added "multiplication" support for equality sets. llvm-svn: 46289
-
Ted Kremenek authored
llvm-svn: 46288
-
Chris Lattner authored
error instead of subtly with a mysterious one. llvm-svn: 46287
-
Evan Cheng authored
Let each target decide byval alignment. For X86, it's 4-byte unless the aggregare contains SSE vector(s). For x86-64, it's max of 8 or alignment of the type. llvm-svn: 46286
-
- Jan 23, 2008
-
-
Ted Kremenek authored
causing problems with Dot. llvm-svn: 46285
-
Ted Kremenek authored
llvm-svn: 46284
-