aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/gc/testdata
AgeCommit message (Collapse)Author
2016-03-16cmd/compile: fold constants from lsh/rsh/lsh and rsh/lsh/rshTodd Neal
Fixes #14825 Change-Id: Ib44d80579a55c15d75ea2ad1ef54efa6ca66a9a6 Reviewed-on: https://go-review.googlesource.com/20745 Run-TryBot: Todd Neal <todd@tneal.org> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-15cmd/compile: fix load-combiningKeith Randall
Make sure symbol gets carried along by load-combining rule. Add the new load into the right block where we know that mem is live. Use auxInt field to carry i along instead of an explicit ADDQ. Incorporate LEA ops into MOVBQZX and friends. Change-Id: I587f7c6120b98fd2a0d48ddd6ddd13345d4421b4 Reviewed-on: https://go-review.googlesource.com/20732 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Todd Neal <todd@tneal.org>
2016-03-08cmd/compile: fix load combining from a non-zero pointer offsetTodd Neal
When the pointer offset is non-zero in the small loads, we need to add the offset when converting to the larger load. Fixes #14694 Change-Id: I5ba8bcb3b9ce26c7fae0c4951500b9ef0fed54cd Reviewed-on: https://go-review.googlesource.com/20333 Reviewed-by: Keith Randall <khr@golang.org>
2016-03-02all: single space after period.Brad Fitzpatrick
The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-02-23[dev.ssa] cmd/compile: truncate auxint when constructing ProgTodd Neal
The upper bits of 8/16/32 bit constants are undefined. We need to truncate in order to prevent x86.oclass misidentifying the size of the constant. Fixes #14389 Change-Id: I3e5ff79cd904376572a93f489ba7e152a5cb6e60 Reviewed-on: https://go-review.googlesource.com/19740 Reviewed-by: Keith Randall <khr@golang.org>
2016-02-22[dev.ssa] test: add test of pointer aliasingTodd Neal
This adds a test case with aliased pointers to ensure modifications to dse don't remove valid stores. Change-Id: I143653250f46a403835218ec685bcd336d5087ef Reviewed-on: https://go-review.googlesource.com/19795 Reviewed-by: Keith Randall <khr@golang.org>
2016-02-09[dev.ssa] cmd/compile/internal/ssa: handle rewrite of Phis.Alexandru Moșoi
* Phis can have variable number of arguments, but rulegen assumed that each operation has fixed number of arguments. * Rewriting Phis is necessary to handle the following case: func f1_ssa(a bool, x int) int { v := 0 if a { v = -1 } else { v = -1 } return x|v } Change-Id: Iff6bd411b854f3d1d6d3ce21934bf566757094f2 Reviewed-on: https://go-review.googlesource.com/19412 Reviewed-by: Keith Randall <khr@golang.org>
2016-02-04[dev.ssa] cmd/compile: rewrites for constant shiftsTodd Neal
Add rewrite rules to optimize constant shifts. Fixes #10637 Change-Id: I74b724d3e81aeb7098c696d02c050f7fdfd5b523 Reviewed-on: https://go-review.googlesource.com/19106 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Todd Neal <todd@tneal.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-02-04[dev.ssa] cmd/compile/internal/ssa: simplify comparisons with constantsAlexandru Moșoi
* Simplify comparisons of form a + const1 == const2 or a + const1 != const2. * Canonicalize Eq, Neq, Add, Sub to have a constant as first argument. Needed for the above new rules and helps constant folding. Change-Id: I8078702a5daa706da57106073a3e9f640a67f486 Reviewed-on: https://go-review.googlesource.com/19192 Reviewed-by: Keith Randall <khr@golang.org>
2016-01-13[dev.ssa] cmd/compile: fix spill sizesKeith Randall
In code that does: var x, z int32 var y int64 z = phi(x, int32(y)) We silently drop the int32 cast because truncation is a no-op. The phi operation needs to make sure it uses the size of the phi, not the size of its arguments, when generating spills. Change-Id: I1f7baf44f019256977a46fdd3dad1972be209042 Reviewed-on: https://go-review.googlesource.com/18390 Reviewed-by: David Chase <drchase@google.com>
2015-12-07[dev.ssa] test: use new go:noinline featureTodd Neal
Replace old mechanisms for preventing inlining with go:noinline. Change-Id: I021a6450e6d644ec1042594730a9c64d695949a1 Reviewed-on: https://go-review.googlesource.com/17500 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-11-11[dev.ssa] cmd/compile: be safer about uintptr/unsafe.Pointer conversionsKeith Randall
Make sure that when a pointer value is live across a function call, we save it as a pointer. (And similarly a uintptr live across a function call should not be saved as a pointer.) Add a nasty test case. This is probably what is preventing the merge from master to dev.ssa. Signs point to something like this bug happening in mallocgc. Change-Id: Ib23fa1251b8d1c50d82c6a448cb4a4fc28219029 Reviewed-on: https://go-review.googlesource.com/16830 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
2015-10-28[dev.ssa] cmd/compile/internal/ssa: reuse Aux values for PEXTERNTodd Neal
This improves cse and works correctly now that divide by zero is checked explicitly. Change-Id: If54fbe403ed5230b897afc5def644ba9f0056dfd Reviewed-on: https://go-review.googlesource.com/16454 Run-TryBot: Todd Neal <todd@tneal.org> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-10-27[dev.ssa] cmd/compile: better copyingKeith Randall
Replace REP MOVSB with all the copying techniques used by the old compiler. Copy in chunks, DUFFCOPY, etc. Introduces MOVO opcodes and an Int128 type to move around 16 bytes at a time. Change-Id: I1e73e68ca1d8b3dd58bb4af2f4c9e5d9bf13a502 Reviewed-on: https://go-review.googlesource.com/16174 Reviewed-by: Todd Neal <todd@tneal.org> Run-TryBot: Keith Randall <khr@golang.org>
2015-09-22[dev.ssa] cmd/compile: addressed vars and closuresDavid Chase
Cleaned up first-block-in-function code. Added cases for |PHEAP for PPARAM and PAUTO. Made PPARAMOUT act more like PAUTO for purposes of address generation and vardef placement. Added cases for OCLOSUREVAR and Ops for getting closure pointer. Closure ops are scheduled at top of entry block to capture DX. Wrote test that seems to show proper behavior for addressed parameters, locals, and returns. Change-Id: Iee93ebf9e3d9f74cfb4d1c1da8038eb278d8a857 Reviewed-on: https://go-review.googlesource.com/14650 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: David Chase <drchase@google.com>
2015-09-21[dev.ssa] cmd/compile: clean up zeroing. Use duffzero when appropriate.Keith Randall
Change-Id: I4deb03340e87f43179d5e22bf81843c17b5581fc Reviewed-on: https://go-review.googlesource.com/14756 Reviewed-by: David Chase <drchase@google.com>
2015-09-17[dev.ssa] cmd/compile: implement ODOTTYPE and OAS2DOTTYPEKeith Randall
Taken over and completed from Josh's change https://go-review.googlesource.com/#/c/14524/ Change-Id: If5d4f732843cc3e99bd5edda54458f0a8be73e91 Reviewed-on: https://go-review.googlesource.com/14690 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-09-16[dev.ssa] cmd/compile/internal/gc: implement OAPPENDKeith Randall
Change-Id: I1fbce8c421c48074a964b4d9481c92fbc3524f80 Reviewed-on: https://go-review.googlesource.com/14525 Reviewed-by: Todd Neal <todd@tneal.org>
2015-09-15[dev.ssa] cmd/compile/internal/ssa: fix sign extension + load comboKeith Randall
Load-and-sign-extend opcodes were being generated in the wrong block, leading to having more than one memory variable live at once. Fix the rules + add a test. Change-Id: Iadf80e55ea901549c15c628ae295c2d0f1f64525 Reviewed-on: https://go-review.googlesource.com/14591 Reviewed-by: Todd Neal <todd@tneal.org> Run-TryBot: Todd Neal <todd@tneal.org>
2015-09-14[dev.ssa] cmd/compile/internal/ssa: implement slice opcodesKeith Randall
Implement OSLICE, OSLICEARR, OSLICESTR, OSLICE3, OSLICE3ARR. reviewer: Ignore the code in OINDEX, that's from CL 14466. Change-Id: I00cc8aecd4c6f40ea5517cd660bb0ce759d91171 Reviewed-on: https://go-review.googlesource.com/14538 Reviewed-by: Todd Neal <todd@tneal.org>
2015-09-14[dev.ssa] cmd/compile/internal/ssa: fix string indexKeith Randall
Change-Id: I984d3e0410ac38c4e42ae8e3670ea47e2140de76 Reviewed-on: https://go-review.googlesource.com/14466 Reviewed-by: Alexandru Moșoi <alexandru@mosoi.ro> Reviewed-by: Todd Neal <todd@tneal.org>
2015-09-10[dev.ssa] cmd/compile/internal/ssa: add == and != for complexKeith Randall
Change-Id: Iefabce4eb0dbc313dd1863513b45307cc76c545a Reviewed-on: https://go-review.googlesource.com/14468 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-09-10[dev.ssa] cmd/compile/internal/ssa: fix real/imag opsKeith Randall
They were using the result type to look up the op, not the arg type. Change-Id: I0641cba363fa6e7a66ad0860aa340106c10c2cea Reviewed-on: https://go-review.googlesource.com/14469 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-09-10[dev.ssa] cmd/compile/internal/ssa: implement OCFUNCTodd Neal
Change-Id: Ieb9cddf8876bf8cd5ee1705d9210d22c3959e8cc Reviewed-on: https://go-review.googlesource.com/14329 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Todd Neal <todd@tneal.org>
2015-09-09[dev.ssa] cmd/compile/internal/gc: avoid generating test binary fileKeith Randall
Using the main package causes a binary to be generated. That binary clutters up git listings. Use a non-main package instead, so the results of a successful compilation are thrown away. Change-Id: I3ac91fd69ad297a5c0fe035c22fdef290b7dfbc4 Reviewed-on: https://go-review.googlesource.com/14399 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-09-08[dev.ssa] cmd/compile/internal/ssa: fix string slice types.Alexandru Moșoi
Change-Id: I28bc6373bb42d9abf4f179664dbaab8d514a6ab9 Reviewed-on: https://go-review.googlesource.com/14376 Reviewed-by: Keith Randall <khr@golang.org>
2015-09-08[dev.ssa] cmd/compile/internal/ssa: fix defer in functions with no returnKeith Randall
The after-defer test jumps to a deferreturn site. Some functions (those with infinite loops) have no deferreturn site. Add one so we have one to jump to. Change-Id: I505e7f3f888f5e7d03ca49a3477b41cf1f78eb8a Reviewed-on: https://go-review.googlesource.com/14349 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-09-03[dev.ssa] cmd/compile: fix complex128Todd Neal
complex128 was being treated as a complex64 Fixes math/cmplx. Change-Id: I2996915b4cb6b94198d41cf08a30bd8531b9fec5 Reviewed-on: https://go-review.googlesource.com/14206 Reviewed-by: Keith Randall <khr@golang.org>
2015-09-02[dev.ssa] cmd/compile: fix liblink rewrite of -0.0Todd Neal
liblink was rewriting xor by a negative zero (used by SSA for negation) as XORPS reg,reg. Fixes strconv. Change-Id: I627a0a7366618e6b07ba8f0ad0db0e102340c5e3 Reviewed-on: https://go-review.googlesource.com/14200 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Keith Randall <khr@golang.org>
2015-09-02[dev.ssa] cmd/compile: truncate when converting floats to intsTodd Neal
Modified to use the truncating conversion. Fixes reflect. Change-Id: I47bf3200abc2d2c662939a2a2351e2ff84168f4a Reviewed-on: https://go-review.googlesource.com/14167 Reviewed-by: David Chase <drchase@google.com>
2015-09-01[dev.ssa] cmd/compile: fix rare issue caused by liblink rewriteTodd Neal
liblink rewrites MOV $0, reg into XOR reg, reg. Make MOVxconst clobber flags so we don't generate invalid code in the unlikely case that it matters. In testing, this change leads to no additional regenerated flags due to a scheduling fix in CL14042. Change-Id: I7bc1cfee94ef83beb2f97c31ec6a97e19872fb89 Reviewed-on: https://go-review.googlesource.com/14043 Reviewed-by: Keith Randall <khr@golang.org>
2015-09-01[dev.ssa] cmd/compile: add complex arithmeticDavid Chase
Still to do: details, more testing corner cases. (e.g. negative zero) Includes small cleanups for previous CL. Note: complex division is currently done in the runtime, so the division code here is apparently not yet necessary and also not tested. Seems likely better to open code division and expose the widening/narrowing to optimization. Complex64 multiplication and division is done in wide format to avoid cancellation errors; for division, this also happens to be compatible with pre-SSA practice (which uses a single complex128 division function). It would-be-nice to widen for complex128 multiplication intermediates as well, but that is trickier to implement without a handy wider-precision format. Change-Id: I595a4300f68868fb7641852a54674c6b2b78855e Reviewed-on: https://go-review.googlesource.com/14028 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-31[dev.ssa] cmd/compile: make test panic on failureTodd Neal
Change-Id: Ia5483d23fe0b5dd0b6cfe2099e9b475184742716 Reviewed-on: https://go-review.googlesource.com/14074 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-08-29[dev.ssa] cmd/compile: implement OFALLTodd Neal
Frontend has already rewriten fallthrough statements, we just need to ignore them. Change-Id: Iadf89b06a9f8f9e6e2e1e87c934f31add77a19a1 Reviewed-on: https://go-review.googlesource.com/14029 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-08-28[dev.ssa] cmd/compile: implement len/cap(chan)Todd Neal
Change-Id: I1453ba226376ccd4d79780fc0686876d6dde01ee Reviewed-on: https://go-review.googlesource.com/14027 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-28[dev.ssa] cmd/compile: added floating point to [u]int conversionsDavid Chase
Change-Id: I8dee400aef07165f911750de2615b8757f826000 Reviewed-on: https://go-review.googlesource.com/13945 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-28[dev.ssa] cmd/compile: add compose/decompose for complex, phi, constantsDavid Chase
Still to do: arithmetic Change-Id: I31fd23b34980c9ed4b4e304b8597134b2ba6ca5c Reviewed-on: https://go-review.googlesource.com/14024 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-28[dev.ssa] cmd/compile: implement len(map)Todd Neal
Implement len(map) values. Change-Id: If92be96ec9a7a86aeb3ce566d6758aab01c2fa7d Reviewed-on: https://go-review.googlesource.com/13961 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-26[dev.ssa] cmd/compile: fix phi floatsTodd Neal
The code previously always used AX causing errors. For now, just switch off the type in order to at least generate valid code. Change-Id: Iaf13120a24b62456b9b33c04ab31f2d5104b381b Reviewed-on: https://go-review.googlesource.com/13943 Reviewed-by: David Chase <drchase@google.com>
2015-08-25[dev.ssa] cmd/compile: implement OSLICESTRKeith Randall
Add a new function and generic operation to handle bounds checking for slices. Unlike the index bounds checking the index can be equal to the upper bound. Do gc-friendly slicing that generates proper code for 0-length result slices. This is a takeover of Alexandru's original change, (https://go-review.googlesource.com/#/c/12764/) submittable now that the decompose phase is in. Change-Id: I17d164cf42ed7839f84ca949c6ad3289269c9160 Reviewed-on: https://go-review.googlesource.com/13903 Reviewed-by: David Chase <drchase@google.com>
2015-08-25[dev.ssa] cmd/compile: add FP comparison opsDavid Chase
Basic ops, no particular optimization in the pattern matching yet (e.g. x!=x for Nan detection, x cmp constant, etc.) Change-Id: I0043564081d6dc0eede876c4a9eb3c33cbd1521c Reviewed-on: https://go-review.googlesource.com/13704 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-25[dev.ssa] cmd/compile: add [u]int and FP to FP conversionsDavid Chase
Change-Id: I8c17f706a3e0f1fa2d754bfb4ccd1f7a027cb3db Reviewed-on: https://go-review.googlesource.com/13744 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-21[dev.ssa] cmd/compile/internal/ssa: implement OMODTodd Neal
Change-Id: Iec954c4daefef4ab3fa2c98bfb2c70b2dea8dffb Reviewed-on: https://go-review.googlesource.com/13743 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-20[dev.ssa] cmd/compile: add decompose passKeith Randall
Decompose breaks compound objects up into pieces that can be operated on by the target architecture. The decompose pass only does phi ops, the rest is done by the rewrite rules in generic.rules. Compound objects include strings,slices,interfaces,structs,arrays. Arrays aren't decomposed because of indexing (we could support constant indexes, but dynamic indexes can't be handled using SSA). Structs will come in a subsequent CL. TODO: after this pass we have lost the association between, e.g., a string's pointer and its size. It would be nice if we could keep that information around for debugging info somehow. Change-Id: I6379ab962a7beef62297d0f68c421f22aa0a0901 Reviewed-on: https://go-review.googlesource.com/13683 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-08-19[dev.ssa] cmd/compile: used Bounded field to fix empty range loopsKeith Randall
for i, v := range a { } Walk converts this to a regular for loop, like this: for i := 0, p := &a[0]; i < len(a); i++, p++ { v := *p } Unfortunately, &a[0] fails its bounds check when a is the empty slice (or string). The old compiler gets around this by marking &a[0] as Bounded, meaning "don't emit bounds checks for this index op". This change makes SSA honor that same mark. The SSA compiler hasn't implemented bounds check panics yet, so the failed bounds check just causes the current routine to return immediately. Fixes bytes package tests. Change-Id: Ibe838853ef4046c92f76adbded8cca3b1e449e0b Reviewed-on: https://go-review.googlesource.com/13685 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-08-19[dev.ssa] cmd/compile/internal/ssa: implement OHMULTodd Neal
Adds support for high multiply which is used by the frontend when rewriting const division. The frontend currently only does this for 8, 16, and 32 bit integer arithmetic. Change-Id: I9b6c6018f3be827a50ee6c185454ebc79b3094c8 Reviewed-on: https://go-review.googlesource.com/13696 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-18[dev.ssa] cmd/compile/internal/ssa: implement ODIVTodd Neal
Implement integer division for non-consts. Change-Id: If40cbde20e5f0ebb9993064def7be468e4eca076 Reviewed-on: https://go-review.googlesource.com/13644 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-17[dev.ssa] cmd/compile/internal/ssa: New register allocatorKeith Randall
Implement a global (whole function) register allocator. This replaces the local (per basic block) register allocator. Clobbering of registers by instructions is handled properly. A separate change will add the correct clobbers to all the instructions. Change-Id: I38ce4dc7dccb8303c1c0e0295fe70247b0a3f2ea Reviewed-on: https://go-review.googlesource.com/13622 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Todd Neal <todd@tneal.org>
2015-08-17[dev.ssa] cmd/compile: first unoptimized cut at adding FP supportDavid Chase
Added F32 and F64 load, store, and addition. Added F32 and F64 multiply. Added F32 and F64 subtraction and division. Added X15 to "clobber" for FP sub/div Added FP constants Added separate FP test in gc/testdata Change-Id: Ifa60dbad948a40011b478d9605862c4b0cc9134c Reviewed-on: https://go-review.googlesource.com/13612 Reviewed-by: Keith Randall <khr@golang.org>
2015-08-15[dev.ssa] cmd/compile/internal/ssa: Use explicit size for store opsKeith Randall
Using the type of the store argument is not safe, it may change during rewriting, giving us the wrong store width. (Store ptr (Trunc32to16 val) mem) This should be a 2-byte store. But we have the rule: (Trunc32to16 x) -> x So if the Trunc rewrite happens before the Store -> MOVW rewrite, then the Store thinks that the value it is storing is 4 bytes in size and uses a MOVL. Bad things ensue. Fix this by encoding the store width explicitly in the auxint field. In general, we can't rely on the type of arguments, as they may change during rewrites. The type of the op itself (as used by the Load rules) is still ok to use. Change-Id: I9e2359e4f657bb0ea0e40038969628bf0f84e584 Reviewed-on: https://go-review.googlesource.com/13636 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>