- Mar 13, 2008
-
-
Evan Cheng authored
llvm-svn: 48341
-
Devang Patel authored
Thanks Daniel Dunbar! llvm-svn: 48340
-
Ted Kremenek authored
to be run on other declarations of blocks of code (e.g., Objective-C methods.) llvm-svn: 48339
-
Evan Cheng authored
llvm-svn: 48338
-
Evan Cheng authored
llvm-svn: 48337
-
Evan Cheng authored
Don't try to sink 3-address instruction if convertToThreeAddress created more than one instructions. llvm-svn: 48336
-
Evan Cheng authored
llvm-svn: 48335
-
Evan Cheng authored
llvm-svn: 48334
-
Evan Cheng authored
TwoAddressInstructionPass enhancement. After it converts a two address instruction into a 3-address one, sink it past the instruction that kills the read-mod-write register if its definition is used past the kill. This reduces the number of live register by one. llvm-svn: 48333
-
Chris Lattner authored
llvm-svn: 48332
-
Chris Lattner authored
This still isn't right, but is slightly nicer. llvm-svn: 48331
-
Chris Lattner authored
Set the start of DeclStmt range. Right now the end is meaningless though. llvm-svn: 48330
-
Christopher Lamb authored
Get rid of a pseudo instruction and replace it with subreg based operation on real instructions, ridding the asm printers of the hack used to do this previously. In the process, update LowerSubregs to be careful about eliminating copies that have side affects. Note: the coalescer will have to be careful about this too, when it starts coalescing insert_subreg nodes. llvm-svn: 48329
-
Chris Lattner authored
llvm-svn: 48328
-
Chris Lattner authored
llvm-svn: 48327
-
Chris Lattner authored
llvm-svn: 48326
-
Chris Lattner authored
llvm-svn: 48325
-
Anders Carlsson authored
llvm-svn: 48324
-
Chris Lattner authored
llvm-svn: 48323
-
Ted Kremenek authored
we gracefully back out and return NULL for the CFG, allowing clients to skip analyzing functions with these CFGs. We will add support later. Modified base ASTConsumer "CFGVisitor" to detect when a CFG is not constructed and to emit a warning. llvm-svn: 48322
-
Evan Cheng authored
llvm-svn: 48321
-
Nick Lewycky authored
successors. This makes it support nounwind. llvm-svn: 48320
-
Evan Cheng authored
llvm-svn: 48319
-
Dan Gohman authored
llvm-svn: 48318
-
Dan Gohman authored
llvm-svn: 48317
-
Dan Gohman authored
llvm-svn: 48316
-
Dan Gohman authored
Pass* to PMDataManager*. PMDataManager is more specific than Pass, so this more accurately describes the objects that are being stored. This eliminates the need for several dynamic_casts to PMDataManager*. It does introduce one dynamic_cast though, in dumpPasses(). Give this one a comment describing why a dynamic_cast is being used. llvm-svn: 48315
-
Dan Gohman authored
a Pass*. PMDataManager* is what it actually holds, so this makes it clearer. llvm-svn: 48314
-
Dan Gohman authored
llvm-svn: 48313
-
Dan Gohman authored
llvm-svn: 48312
-
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
-