- Mar 13, 2008
-
-
Evan Cheng authored
llvm-svn: 48311
-
Dale Johannesen authored
calls here. This was done earlier for params in the varargs part of the params; any float params that survive to here are in the non-varargs part, and must not be promoted. llvm-svn: 48310
-
Steve Naroff authored
- For explicit ivar refers, make sure the cast is propagated to the AST. - Don't free the base (since it is still in use). This fixes the recent regression to test/Rewriter/objc-ivar-receiver-1.m. llvm-svn: 48309
-
- Mar 12, 2008
-
-
Evan Cheng authored
Experimental scheduler change to schedule / coalesce the copies added for function livein's. Take 2008-03-10-RegAllocInfLoop.ll, the schedule looks like this after these copies are inserted: entry: 0x12049d0, LLVM BB @0x1201fd0, ID#0: Live Ins: %EAX %EDX %ECX %reg1031<def> = MOVPC32r 0 %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def> %reg1028<def> = MOV32rr %EAX %reg1029<def> = MOV32rr %EDX %reg1030<def> = MOV32rr %ECX %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x1201910 + 0] %reg1025<def> = MOV32rr %reg1029 %reg1026<def> = MOV32rr %reg1030 %reg1024<def> = MOV32rr %reg1028 The copies unnecessarily increase register pressure and it will end up requiring a physical register to be spilled. With -schedule-livein-copies: entry: 0x12049d0, LLVM BB @0x1201fa0, ID#0: Live Ins: %EAX %EDX %ECX %reg1031<def> = MOVPC32r 0 %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def> %reg1024<def> = MOV32rr %EAX %reg1025<def> = MOV32rr %EDX %reg1026<def> = MOV32rr %ECX %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x12018e0 + 0] Much better! llvm-svn: 48307
-
Ted Kremenek authored
Changed CallRetValSymbol to SymbolConjured to allow "conjured" symbols to be created for any expression, not just CallExprs. Added experimental support for conjuring symbols during assingments where the RHS is "unknown". This allows more value tracking for path-sensitivity. Fixed bug in "assumption" logic when processing symbolic constraints; we would improperly mark constraints we didn't support as infeasible. llvm-svn: 48306
-
Duncan Sands authored
the fcopysign expansion from LegalizeDAG to get rid of what seems to be a bug: the use of sign extension means that when copying the sign bit from an f32 to an f64, the upper 32 bits of the f64 (now an i64) are set, not just the top bit... I also generalized it to work for any sized floating point types, and removed the bogosity: SDOperand Mask1 = (SrcVT == MVT::f64) ? DAG.getConstantFP(BitsToDouble(1ULL << 63), SrcVT) : DAG.getConstantFP(BitsToFloat(1U << 31), SrcVT); Mask1 = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask1); (here SrcNVT is an integer with the same size as SrcVT). As far as I can see this takes a 1 << 63, converts to a double, converts that to a floating point constant then converts that to an integer constant, ending up with... 1 << 63 as an integer constant! So I just generate this integer constant directly. llvm-svn: 48305
-
Steve Naroff authored
llvm-svn: 48304
-
Steve Naroff authored
Avoid using the "unnamed struct field" extension (enabled with -fms-extensions). This feature/extension silently does the wrong thing in g++. As far as I can tell, g++ simply throws the field away entirely (note that it works fine with gcc). Since I am now always casting the object (for other reasons), accessing protected/public fields simply requires the cast refer to the defining class. This solution is simpler all around (thanks to Chris for suggesting it). llvm-svn: 48302
-
Ted Kremenek authored
no summaries (useful for false-path pruning). llvm-svn: 48301
-
Ted Kremenek authored
of function calls. This is useful in pruning paths. llvm-svn: 48299
-
Dan Gohman authored
can be called from within a debuger without having -debug specified on the command-line. llvm-svn: 48298
-
Dan Gohman authored
llvm-svn: 48297
-
Dan Gohman authored
llvm-svn: 48296
-
Duncan Sands authored
llvm-svn: 48295
-
Duncan Sands authored
getCopyToParts problem was noticed by the new LegalizeTypes infrastructure. In order to avoid this kind of thing in the future I've added a check that EXTRACT_ELEMENT is only used with integers. Once LegalizeTypes is up and running most likely BUILD_PAIR and EXTRACT_ELEMENT can be removed, in favour of using apints instead. llvm-svn: 48294
-
Chris Lattner authored
llvm-svn: 48290
-
Chris Lattner authored
1. There is now a "PAListPtr" class, which is a smart pointer around the underlying uniqued parameter attribute list object, and manages its refcount. It is now impossible to mess up the refcount. 2. PAListPtr is now the main interface to the underlying object, and the underlying object is now completely opaque. 3. Implementation details like SmallVector and FoldingSet are now no longer part of the interface. 4. You can create a PAListPtr with an arbitrary sequence of ParamAttrsWithIndex's, no need to make a SmallVector of a specific size (you can just use an array or scalar or vector if you wish). 5. All the client code that had to check for a null pointer before dereferencing the pointer is simplified to just access the PAListPtr directly. 6. The interfaces for adding attrs to a list and removing them is a bit simpler. Phase #2 will rename some stuff (e.g. PAListPtr) and do other less invasive changes. llvm-svn: 48289
-
Steve Naroff authored
Use the "used" attribute. Without it, g++ removes all the meta-data:-( This doesn't happen when compiling straight C code. llvm-svn: 48287
-
Ted Kremenek authored
from the sources, and to try and generate only a single path from sources to roots. llvm-svn: 48286
-
Chris Lattner authored
llvm-svn: 48285
-
Steve Naroff authored
-Wrap objc runtime calls with "extern "C"" (for now). llvm-svn: 48284
-
Evan Cheng authored
llvm-svn: 48283
-
Owen Anderson authored
Improve the return slot optimization to be both more aggressive (not limited to sret parameters), and safer (when the passed pointer might be invalid). Thanks to Duncan and Chris for the idea behind this, and extra thanks to Duncan for helping me work out the trap-safety. llvm-svn: 48280
-
Evan Cheng authored
X86 lowering normalize vector 0 to v4i32. However DAGCombine can fold (sub x, x) -> 0 after legalization. It can create a zero vector of a type that's not expected (e.g. v8i16). We don't want to disable the optimization since leaving a (sub x, x) is really bad. Add isel patterns for other types of vector 0 to ensure correctness. It's highly unlikely to happen other than in bugpoint reduced test cases. llvm-svn: 48279
-
Owen Anderson authored
llvm-svn: 48278
-
Owen Anderson authored
feed the PHI instructions. We'll need these IDs in order to update LiveIntervals properly. llvm-svn: 48277
-
Chris Lattner authored
llvm-svn: 48276
-
Steve Naroff authored
This should "fix" all but one of the test failure. llvm-svn: 48275
-
Evan Cheng authored
llvm-svn: 48274
-
Ted Kremenek authored
llvm-svn: 48273
-
Ted Kremenek authored
llvm-svn: 48272
-
Steve Naroff authored
llvm-svn: 48271
-
Chris Lattner authored
LoadLibraryPermanently. The current code modifies the value of a pointer that is passed by value, so the caller never gets the message. Patch by Julien Lerouge! llvm-svn: 48270
-
Dale Johannesen authored
llvm-svn: 48269
-
Anton Korobeynikov authored
llvm-svn: 48268
-
Devang Patel authored
llvm-svn: 48267
-
Steve Naroff authored
Make ivar rewrite C++ friendly (since C++ forces a unified namespace for typedefs/structures). The previous version of the rewriter generated both a type def and structure def for each class (which doesn't fly in C++). llvm-svn: 48266
-
Dan Gohman authored
the automated CallingConv code to handle return values typically don't support multiple return values. llvm-svn: 48265
-
Dale Johannesen authored
llvm-svn: 48264
-
Evan Cheng authored
llvm-svn: 48263
-