mirror of https://github.com/golang/go.git
Add 2 more cases:
if a { x = value } else { x = a } => x = a && value
if a { x = a } else { x = value } => x = a || value
AND case goes from:
00006 (8) TESTB AX, AX
00007 (8) JNE 9
00008 (13) MOVL AX, BX
00009 (13) MOVL BX, AX
00010 (13) RET
to:
00006 (13) ANDL BX, AX
00007 (13) RET
OR goes from:
00006 (19) TESTB AX, AX
00007 (19) JNE 9
00008 (24) MOVL BX, AX
00009 (24) RET
to:
00006 (24) ORL BX, AX
00007 (24) RET
compilecmp linux/amd64:
runtime
runtime.lock2 847 -> 869 (+2.60%)
runtime.addspecial 542 -> 517 (-4.61%)
runtime.tracebackPCs changed
runtime.scanstack changed
runtime.mallocinit changed
runtime.traceback2 2238 -> 2206 (-1.43%)
runtime [cmd/compile]
runtime.lock2 860 -> 882 (+2.56%)
runtime.scanstack changed
runtime.addspecial 542 -> 517 (-4.61%)
runtime.traceback2 2238 -> 2206 (-1.43%)
runtime.lockWithRank 870 -> 890 (+2.30%)
runtime.tracebackPCs changed
runtime.mallocinit changed
strconv
strconv.ryuFtoaFixed32 changed
strconv.ryuFtoaFixed64 639 -> 638 (-0.16%)
strconv.readFloat changed
strconv.ryuFtoaShortest changed
strings
strings.(*Replacer).build changed
strconv [cmd/compile]
strconv.readFloat changed
strconv.ryuFtoaFixed64 639 -> 638 (-0.16%)
strconv.ryuFtoaFixed32 changed
strconv.ryuFtoaShortest changed
strings [cmd/compile]
strings.(*Replacer).build changed
regexp
regexp.makeOnePass.func1 changed
regexp [cmd/compile]
regexp.makeOnePass.func1 changed
encoding/json
encoding/json.indirect changed
database/sql
database/sql.driverArgsConnLocked changed
vendor/golang.org/x/text/unicode/norm
vendor/golang.org/x/text/unicode/norm.Form.transform changed
go/doc/comment
go/doc/comment.parseSpans changed
internal/diff
internal/diff.tgs changed
log/slog
log/slog.(*handleState).appendNonBuiltIns 1898 -> 1877 (-1.11%)
testing/fstest
testing/fstest.(*fsTester).checkGlob changed
runtime/pprof
runtime/pprof.(*profileBuilder).build changed
cmd/internal/dwarf
cmd/internal/dwarf.isEmptyInlinedCall 254 -> 244 (-3.94%)
go/printer
go/printer.keepTypeColumn 302 -> 270 (-10.60%)
go/printer.(*printer).binaryExpr changed
cmd/compile/internal/syntax
cmd/compile/internal/syntax.(*scanner).rune changed
cmd/compile/internal/syntax.(*scanner).number 2137 -> 2153 (+0.75%)
Change-Id: I7f95f54b03a35d0b616c40f38b415a7feb71be73
Reviewed-on: https://go-review.googlesource.com/c/go/+/666835
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Jakub Ciolek <jakub@ciolek.dev>
TryBot-Bypass: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
|
||
|---|---|---|
| .. | ||
| abi | ||
| alias3.dir | ||
| arenas | ||
| asmhdr.dir | ||
| chan | ||
| closure3.dir | ||
| closure5.dir | ||
| codegen | ||
| ddd2.dir | ||
| dwarf | ||
| fixedbugs | ||
| import2.dir | ||
| import4.dir | ||
| interface | ||
| internal/runtime/sys | ||
| intrinsic.dir | ||
| ken | ||
| linkname.dir | ||
| linknameasm.dir | ||
| method4.dir | ||
| retjmp.dir | ||
| stress | ||
| syntax | ||
| typeparam | ||
| uintptrescapes.dir | ||
| wasmmemsize.dir | ||
| 64bit.go | ||
| 235.go | ||
| README.md | ||
| alg.go | ||
| alias.go | ||
| alias1.go | ||
| alias2.go | ||
| alias3.go | ||
| align.go | ||
| append.go | ||
| append1.go | ||
| args.go | ||
| armimm.go | ||
| asmhdr.go | ||
| assign.go | ||
| assign1.go | ||
| atomicload.go | ||
| bigalg.go | ||
| bigmap.go | ||
| blank.go | ||
| blank1.go | ||
| bom.go | ||
| bombad.go | ||
| bounds.go | ||
| cannotassign.go | ||
| chancap.go | ||
| chanlinear.go | ||
| char_lit.go | ||
| char_lit1.go | ||
| checkbce.go | ||
| clear.go | ||
| clearfat.go | ||
| closedchan.go | ||
| closure.go | ||
| closure1.go | ||
| closure2.go | ||
| closure3.go | ||
| closure4.go | ||
| closure5.go | ||
| closure6.go | ||
| closure7.go | ||
| cmp.go | ||
| cmp6.go | ||
| cmplx.go | ||
| cmplxdivide.c | ||
| cmplxdivide.go | ||
| cmplxdivide1.go | ||
| complit.go | ||
| complit1.go | ||
| compos.go | ||
| const.go | ||
| const1.go | ||
| const2.go | ||
| const3.go | ||
| const4.go | ||
| const5.go | ||
| const6.go | ||
| const7.go | ||
| const8.go | ||
| convT2X.go | ||
| convert.go | ||
| convert1.go | ||
| convert2.go | ||
| convert3.go | ||
| convert4.go | ||
| convinline.go | ||
| convlit.go | ||
| convlit1.go | ||
| copy.go | ||
| copy1.go | ||
| crlf.go | ||
| ddd.go | ||
| ddd1.go | ||
| ddd2.go | ||
| decl.go | ||
| declbad.go | ||
| defer.go | ||
| defererrcheck.go | ||
| deferfin.go | ||
| defernil.go | ||
| deferprint.go | ||
| deferprint.out | ||
| devirt.go | ||
| directive.go | ||
| directive2.go | ||
| divide.go | ||
| divmod.go | ||
| embedfunc.go | ||
| embedvers.go | ||
| empty.go | ||
| env.go | ||
| eof.go | ||
| eof1.go | ||
| escape.go | ||
| escape2.go | ||
| escape2n.go | ||
| escape3.go | ||
| escape4.go | ||
| escape5.go | ||
| escape6.go | ||
| escape_array.go | ||
| escape_calls.go | ||
| escape_closure.go | ||
| escape_field.go | ||
| escape_goto.go | ||
| escape_hash_maphash.go | ||
| escape_iface.go | ||
| escape_indir.go | ||
| escape_level.go | ||
| escape_make_non_const.go | ||
| escape_map.go | ||
| escape_mutations.go | ||
| escape_param.go | ||
| escape_reflect.go | ||
| escape_runtime_atomic.go | ||
| escape_selfassign.go | ||
| escape_slice.go | ||
| escape_struct_param1.go | ||
| escape_struct_param2.go | ||
| escape_struct_return.go | ||
| escape_sync_atomic.go | ||
| escape_unsafe.go | ||
| fibo.go | ||
| finprofiled.go | ||
| float_lit.go | ||
| float_lit2.go | ||
| float_lit3.go | ||
| floatcmp.go | ||
| for.go | ||
| func.go | ||
| func1.go | ||
| func2.go | ||
| func3.go | ||
| func4.go | ||
| func5.go | ||
| func6.go | ||
| func7.go | ||
| func8.go | ||
| funcdup.go | ||
| funcdup2.go | ||
| fuse.go | ||
| gc.go | ||
| gc1.go | ||
| gc2.go | ||
| gcgort.go | ||
| gcstring.go | ||
| goprint.go | ||
| goprint.out | ||
| goto.go | ||
| heapsampling.go | ||
| helloworld.go | ||
| helloworld.out | ||
| if.go | ||
| import.go | ||
| import1.go | ||
| import2.go | ||
| import4.go | ||
| import5.go | ||
| import6.go | ||
| index.go | ||
| index0.go | ||
| index1.go | ||
| index2.go | ||
| indirect.go | ||
| indirect1.go | ||
| init.go | ||
| init1.go | ||
| initcomma.go | ||
| initexp.go | ||
| initialize.go | ||
| initializerr.go | ||
| initloop.go | ||
| inline.go | ||
| inline_big.go | ||
| inline_caller.go | ||
| inline_callers.go | ||
| inline_endian.go | ||
| inline_literal.go | ||
| inline_math_bits_rotate.go | ||
| inline_sync.go | ||
| inline_testingbloop.go | ||
| inline_variadic.go | ||
| int_lit.go | ||
| intcvt.go | ||
| intrinsic.go | ||
| intrinsic_atomic.go | ||
| iota.go | ||
| label.go | ||
| label1.go | ||
| linkmain.go | ||
| linkmain_run.go | ||
| linkname.go | ||
| linkname3.go | ||
| linknameasm.go | ||
| linkobj.go | ||
| linkx.go | ||
| linkx_run.go | ||
| literal.go | ||
| literal2.go | ||
| live.go | ||
| live1.go | ||
| live2.go | ||
| live_regabi.go | ||
| live_uintptrkeepalive.go | ||
| loopbce.go | ||
| mainsig.go | ||
| makechan.go | ||
| makemap.go | ||
| makenew.go | ||
| makeslice.go | ||
| mallocfin.go | ||
| map.go | ||
| map1.go | ||
| mapclear.go | ||
| maplinear.go | ||
| maymorestack.go | ||
| mergemul.go | ||
| method.go | ||
| method1.go | ||
| method2.go | ||
| method3.go | ||
| method4.go | ||
| method5.go | ||
| method6.go | ||
| method7.go | ||
| named.go | ||
| named1.go | ||
| newinline.go | ||
| nil.go | ||
| nilcheck.go | ||
| nilptr.go | ||
| nilptr2.go | ||
| nilptr3.go | ||
| nilptr4.go | ||
| nilptr5.go | ||
| nilptr5_aix.go | ||
| nilptr5_wasm.go | ||
| nilptr_aix.go | ||
| noinit.go | ||
| nosplit.go | ||
| nowritebarrier.go | ||
| nul1.go | ||
| opt_branchlikely.go | ||
| parentype.go | ||
| peano.go | ||
| phiopt.go | ||
| print.go | ||
| print.out | ||
| printbig.go | ||
| printbig.out | ||
| prove.go | ||
| prove_constant_folding.go | ||
| prove_invert_loop_with_unused_iterators.go | ||
| prove_popcount.go | ||
| range.go | ||
| range2.go | ||
| range3.go | ||
| range4.go | ||
| rangegen.go | ||
| recover.go | ||
| recover1.go | ||
| recover2.go | ||
| recover3.go | ||
| recover4.go | ||
| recover5.go | ||
| reflectmethod1.go | ||
| reflectmethod2.go | ||
| reflectmethod3.go | ||
| reflectmethod4.go | ||
| reflectmethod5.go | ||
| reflectmethod6.go | ||
| reflectmethod7.go | ||
| reflectmethod8.go | ||
| rename.go | ||
| rename1.go | ||
| reorder.go | ||
| reorder2.go | ||
| retjmp.go | ||
| return.go | ||
| rotate.go | ||
| rotate0.go | ||
| rotate1.go | ||
| rotate2.go | ||
| rotate3.go | ||
| rune.go | ||
| runtime.go | ||
| shift1.go | ||
| shift2.go | ||
| shift3.go | ||
| sieve.go | ||
| sigchld.go | ||
| sigchld.out | ||
| simassign.go | ||
| sizeof.go | ||
| slice3.go | ||
| slice3err.go | ||
| slicecap.go | ||
| sliceopt.go | ||
| solitaire.go | ||
| stack.go | ||
| stackobj.go | ||
| stackobj2.go | ||
| stackobj3.go | ||
| strcopy.go | ||
| strength.go | ||
| string_lit.go | ||
| stringrange.go | ||
| struct0.go | ||
| switch.go | ||
| switch2.go | ||
| switch3.go | ||
| switch4.go | ||
| switch5.go | ||
| switch6.go | ||
| switch7.go | ||
| tailcall.go | ||
| tighten.go | ||
| tinyfin.go | ||
| torture.go | ||
| turing.go | ||
| typecheck.go | ||
| typecheckloop.go | ||
| typeswitch.go | ||
| typeswitch1.go | ||
| typeswitch2.go | ||
| typeswitch2b.go | ||
| typeswitch3.go | ||
| uintptrescapes.go | ||
| uintptrescapes2.go | ||
| uintptrescapes3.go | ||
| uintptrkeepalive.go | ||
| undef.go | ||
| unsafe_slice_data.go | ||
| unsafe_string.go | ||
| unsafe_string_data.go | ||
| unsafebuiltins.go | ||
| used.go | ||
| utf.go | ||
| varerr.go | ||
| varinit.go | ||
| wasmexport.go | ||
| wasmexport2.go | ||
| wasmmemsize.go | ||
| weak.go | ||
| winbatch.go | ||
| writebarrier.go | ||
| zerodivide.go | ||
| zerosize.go | ||
README.md
The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.
To run just these tests, execute:
../bin/go test cmd/internal/testdir
To run just tests from specified files in this directory, execute:
../bin/go test cmd/internal/testdir -run='Test/(file1.go|file2.go|...)'
Standard library tests should be written as regular Go tests in the appropriate package.
The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:
- it is most naturally expressed using the test runner; or
- it is also applicable to
gccgoand other Go tool chains.