- Mar 13, 2008
-
-
Evan Cheng authored
llvm-svn: 48319
-
Evan Cheng authored
llvm-svn: 48311
-
- 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
-
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
-
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
-
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
-
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
-
Evan Cheng authored
llvm-svn: 48274
-
Evan Cheng authored
llvm-svn: 48263
-
Evan Cheng authored
llvm-svn: 48261
-
- Mar 11, 2008
-
-
Anton Korobeynikov authored
llvm-svn: 48257
-
Dan Gohman authored
that merely add passes. This allows them to be used with either FunctionPassManager or PassManager, or even with a custom new kind of pass manager. llvm-svn: 48256
-
Anton Korobeynikov authored
llvm-svn: 48249
-
Evan Cheng authored
llvm-svn: 48246
-
Dan Gohman authored
llvm-svn: 48245
-
Dan Gohman authored
llvm-svn: 48244
-
Christopher Lamb authored
llvm-svn: 48223
-
Evan Cheng authored
llvm-svn: 48221
-
Evan Cheng authored
When the register allocator runs out of registers, spill a physical register around the def's and use's of the interval being allocated to make it possible for the interval to target a register and spill it right away and restore a register for uses. This likely generates terrible code but is before than aborting. llvm-svn: 48218
-
Duncan Sands authored
enhancements. llvm-svn: 48215
-
Chris Lattner authored
into: _test: fldz ret instead of: _test: subl $12, %esp #IMPLICIT_DEF %xmm0 movsd %xmm0, (%esp) fldl (%esp) addl $12, %esp ret llvm-svn: 48213
-
Chris Lattner authored
llvm-svn: 48208
-
Dan Gohman authored
and it's the result that requires expansion. This code is a little confusing because the TargetLoweringInfo tables for [US]INT_TO_FP use the operand type (the integer type) rather than the result type. llvm-svn: 48206
-
Chris Lattner authored
verify the register constraint matches what the instruction expects. llvm-svn: 48205
-
Evan Cheng authored
llvm-svn: 48204
-
Dan Gohman authored
llvm-svn: 48201
-
Dan Gohman authored
llvm-svn: 48196
-
Dan Gohman authored
llvm-svn: 48194
-
Dan Gohman authored
llvm-svn: 48189
-
- Mar 10, 2008
-
-
Evan Cheng authored
llvm-svn: 48175
-
Dan Gohman authored
zero extension when checking if an unsigned multiply is safe. llvm-svn: 48171
-
Evan Cheng authored
llvm-svn: 48170
-
Evan Cheng authored
llvm-svn: 48169
-
Evan Cheng authored
llvm-svn: 48167
-
Scott Michel authored
return ValueType can depend its operands' ValueType. This is a cosmetic change, no functionality impacted. llvm-svn: 48145
-
Bill Wendling authored
llvm-svn: 48142
-