1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00
Commit Graph

40837 Commits

Author SHA1 Message Date
Dan Gohman
5e5f1c9e8f Basic FastISel support for floating-point constants.
llvm-svn: 55401
2008-08-27 01:09:54 +00:00
Owen Anderson
a0b7e0ab93 Fix handling of inttoptr and ptrtoint when unhandled operands are present.
llvm-svn: 55400
2008-08-27 00:35:37 +00:00
Owen Anderson
c5d2fe6354 Add support for fast isel of inttoptr and ptrtoint in the cases where truncation is not needed.
llvm-svn: 55399
2008-08-27 00:31:01 +00:00
Owen Anderson
a8911f33f8 Factor out a large amoutn of the cast handling code in fast isel into helper methods.
This simultaneously makes the code simpler and adds support for sext as well.

llvm-svn: 55398
2008-08-26 23:46:32 +00:00
Dan Gohman
284f18a884 Add a MachineInstrBuilder method for adding floating-point
immediate operands.

llvm-svn: 55397
2008-08-26 23:19:23 +00:00
Owen Anderson
0cee245fdc Add support for fast isel of zext.
llvm-svn: 55396
2008-08-26 23:14:49 +00:00
Gabor Greif
4b86114f92 disallow direct access to SDValue::ResNo, provide a getter instead
llvm-svn: 55394
2008-08-26 22:36:50 +00:00
Owen Anderson
d33f25d615 Add support for fptosi of constants in fast isel.
llvm-svn: 55393
2008-08-26 22:34:28 +00:00
Owen Anderson
14510f8fee Put a heuristic in place to prevent GVN from falling into bad cases with massively complicated CFGs.
This speeds up a particular testcase from 12+ hours to 5 seconds with little perceptible loss of quality.

llvm-svn: 55391
2008-08-26 22:07:42 +00:00
Dan Gohman
3e50c6348a Optimize SelectionDAG's topological sort to use one pass instead
of two, and to not need a scratch std::vector. Also, use the
SelectionDAG's topological sort in LegalizeDAG instead of having
a separate implementation.

llvm-svn: 55389
2008-08-26 21:42:18 +00:00
Dan Gohman
57b5f9b931 Refactor the bitcast code into its own function.
llvm-svn: 55387
2008-08-26 21:28:54 +00:00
Dan Gohman
84d7f86244 Refactor a bunch of FastISelEmitter code into a helper class, and
put each major step in a separate function. This makes the high
level sequence of events easier to follow.

llvm-svn: 55385
2008-08-26 21:21:20 +00:00
Dan Gohman
58882d14c4 Make FastISel use the correct argument type when casting GEP indices.
llvm-svn: 55384
2008-08-26 20:57:08 +00:00
Dan Gohman
722e912650 Don't select binary instructions with illegal types.
llvm-svn: 55383
2008-08-26 20:52:40 +00:00
Owen Anderson
b15e88b671 Add support for fast isel of sitofp, and remove some unnecessary and imprecise legality checks.
llvm-svn: 55381
2008-08-26 20:37:00 +00:00
Cedric Venet
62a65ed510 - small bug corrected: incorrect iterator type.
- fix to please VS: add a return after an assert.

llvm-svn: 55380
2008-08-26 19:49:04 +00:00
Owen Anderson
821ddf6726 Use a combination of copyRegToReg and ISD::BIT_CONVERT when doing fast isel of bitcasts,
allowing it to support the full range of conversions people might ask for in a correct manner.

llvm-svn: 55378
2008-08-26 18:51:24 +00:00
Owen Anderson
fc7b8f3073 These assertions should be return false's instead, allowing the client to detect the failure.
llvm-svn: 55377
2008-08-26 18:50:40 +00:00
Owen Anderson
9e2381b77d We need to check that the return type is correct, even in cases where we don't
have a return type that differs from the operand types.

llvm-svn: 55376
2008-08-26 18:50:00 +00:00
Owen Anderson
5fef19facf Make TargetInstrInfo::copyRegToReg return a bool indicating whether the copy requested
was inserted or not.  This allows bitcast in fast isel to properly handle the case
where an appropriate reg-to-reg copy is not available.

llvm-svn: 55375
2008-08-26 18:03:31 +00:00
Devang Patel
211c05f7a3 If IV is used in a int-to-float cast inside the loop then try to eliminate the cast operation.
llvm-svn: 55374
2008-08-26 17:57:54 +00:00
Owen Anderson
76c3c73a7a Add support for fast isel of non-constant fptosi instructions.
llvm-svn: 55373
2008-08-26 17:44:42 +00:00
Gabor Greif
ee460cd197 fix doxygen comment
llvm-svn: 55372
2008-08-26 17:44:40 +00:00
Ted Kremenek
5f192023b2 Grammar fix.
llvm-svn: 55371
2008-08-26 16:41:15 +00:00
Ted Kremenek
909c1c36e2 Added "str()" method to raw_string_ostream.
str() mirrors the same method in std::ostringstream.
str() flushes the buffered stream contents to string and returns a reference to the string.

llvm-svn: 55370
2008-08-26 16:34:01 +00:00
Chris Lattner
1804f18b34 code simplification, no functionality change.
llvm-svn: 55363
2008-08-26 07:01:28 +00:00
Chris Lattner
006fc6636d stabilize more printing, this doesn't cause a problem
in the example attached to PR2590, but is a problem in general.

llvm-svn: 55361
2008-08-26 06:50:46 +00:00
Chris Lattner
6adb1b1b26 stablize SubRegsSet printing, part of PR2590
llvm-svn: 55360
2008-08-26 06:49:06 +00:00
Chris Lattner
e589d360a1 Stabilize 'getDwarfRegNumFull' output to not depend on random memory
orders, part of PR2590

llvm-svn: 55359
2008-08-26 06:43:25 +00:00
Chris Lattner
c5c00890e5 If an xmm register is referenced explicitly in an inline asm, make sure to
assign it to a version of the xmm register with the regclass that matches its
type.  This fixes PR2715, a bug handling some crazy xpcom case in mozilla.

llvm-svn: 55358
2008-08-26 06:19:02 +00:00
Chris Lattner
4367c5c58b typo fix.
llvm-svn: 55355
2008-08-26 06:07:47 +00:00
Dan Gohman
815d50b9e6 Actually recycle SDNode allocations. SelectionDAG is using
RecyclingAllocator, but this change is needed for the nodes
to actually be recycled. This cuts SelectionDAG's memory
usage high-water-mark in half in some cases.

llvm-svn: 55351
2008-08-26 01:44:34 +00:00
Dan Gohman
5438048f54 Avoid a warning about isTargetNullPtr being unused in release builds.
llvm-svn: 55350
2008-08-26 01:38:29 +00:00
Owen Anderson
9c207563a1 Throw the switch to allow FastISel to emit instructions whose return types different from their inputs. Next step: adding lowering pattens in FastISel that actually use these newly available opcodes.
llvm-svn: 55349
2008-08-26 01:22:59 +00:00
Evan Cheng
65d29b2553 This is done.
llvm-svn: 55348
2008-08-26 01:13:44 +00:00
Owen Anderson
7e677167d6 Enhance TableGen to emit code for FastISel of opcodes with variadic return types without slowing down opcodes that are not variadic. No such opcodes are currently generated, but in theory it should be a matter of just hitting the switch.
llvm-svn: 55347
2008-08-26 00:42:26 +00:00
Owen Anderson
9264f41ef2 Add a RetVT parameter to emitted FastISel methods, so that we will be able to pass the desired return
type down.  This is not currently used.

llvm-svn: 55345
2008-08-25 23:58:18 +00:00
Owen Anderson
19b73e58e8 Deepen the map structure tablegen uses to compute FastISel patterns, in preparation for having patterns
with return types that differ from their input types.  This is not yet used.

llvm-svn: 55344
2008-08-25 23:43:09 +00:00
Dale Johannesen
f201a3aaf3 Implement 32 & 64 bit versions of PPC atomic
binary primitives.

llvm-svn: 55343
2008-08-25 22:34:37 +00:00
Evan Cheng
45e24233c7 Unbreak build.
llvm-svn: 55342
2008-08-25 22:20:39 +00:00
Evan Cheng
19738e3956 80 col. violations.
llvm-svn: 55341
2008-08-25 21:58:43 +00:00
Owen Anderson
1532aad9a8 Expand bitcast support in fast isel to support bitcasts of non-constant values by emitting reg-reg copies.
llvm-svn: 55340
2008-08-25 21:32:34 +00:00
Evan Cheng
569b489cf5 Try approach to moving call address load inside of callseq_start. Now it's done during the preprocess of x86 isel. callseq_start's chain is changed to load's chain node; while load's chain is the last of callseq_start or the loads or copytoreg nodes inserted to move arguments to the right spot.
llvm-svn: 55338
2008-08-25 21:27:18 +00:00
Dale Johannesen
fbb408de74 Remove PPC-specific lowering for atomics; the
generic stuff works fine.

Mark rewritten cmp-and-swap as not using CR1.

llvm-svn: 55336
2008-08-25 21:09:52 +00:00
Owen Anderson
27491bbf2c Add support for fast isel of (integer) immediate materialization pattens, and use them to support
bitcast of constants in fast isel.

llvm-svn: 55325
2008-08-25 20:20:32 +00:00
Dale Johannesen
6431c39237 Adjust grep's for new code sequence.
llvm-svn: 55320
2008-08-25 18:53:58 +00:00
Dale Johannesen
39bd83dbc0 It's important for the cmp-and-swap to balance
loads and stores but it's even more important for
it to store the right value.:(

llvm-svn: 55319
2008-08-25 18:53:26 +00:00
Bill Wendling
7f52506926 Nevermind. This broke the bootstrap (?!).
llvm-svn: 55318
2008-08-25 18:32:39 +00:00
Bill Wendling
f86b246fdb MOVQ2DQ and MOVQ2DQ use SSE2. We should conditionalize the use of these
instructions on having SSE2.

llvm-svn: 55317
2008-08-25 18:20:52 +00:00
Chris Lattner
df2af1f4c5 Fix pasto (values -> types) noticed by Josh Conner
llvm-svn: 55315
2008-08-25 17:03:15 +00:00