You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(3) |
2
|
3
(2) |
4
(3) |
5
|
6
(1) |
7
|
|
8
|
9
(4) |
10
(1) |
11
(2) |
12
(1) |
13
(8) |
14
|
|
15
|
16
|
17
|
18
(2) |
19
(1) |
20
|
21
|
|
22
|
23
|
24
|
25
|
26
|
27
(1) |
28
(2) |
|
29
(6) |
30
|
31
|
|
|
|
|
|
From: Andreas A. <ar...@so...> - 2020-03-18 19:04:20
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=82d1b287d20065f7cae846a73b62ae1feddf90b5 commit 82d1b287d20065f7cae846a73b62ae1feddf90b5 Author: Andreas Arnez <ar...@li...> Date: Tue Mar 3 16:42:04 2020 +0100 s390x: Add directReload function for the register allocator This adds the function directReload_S390() and wires it up to the register allocator, enabling "direct reloading" for various types of instructions. Direct reloading, when applied, avoids loading an operand into a register and thus may reduce spilling. On s390x this slightly reduces the generated code. In order to determine which instructions are relevant for direct reloading, it was tested which direct reloads the register allocator tries to perform in simple programs. Diff: --- VEX/priv/host_generic_reg_alloc3.c | 4 +- VEX/priv/host_s390_defs.c | 76 ++++++++++++++++++++++++++++++++++++++ VEX/priv/host_s390_defs.h | 1 + VEX/priv/main_main.c | 2 +- 4 files changed, 80 insertions(+), 3 deletions(-) diff --git a/VEX/priv/host_generic_reg_alloc3.c b/VEX/priv/host_generic_reg_alloc3.c index 12b2c154f0..21129d4a12 100644 --- a/VEX/priv/host_generic_reg_alloc3.c +++ b/VEX/priv/host_generic_reg_alloc3.c @@ -1181,8 +1181,8 @@ HInstrArray* doRegisterAllocation_v3( /* If the instruction reads exactly one vreg which is currently spilled, and this is the last use of that vreg, see if we can convert the instruction into one that reads directly from the spill slot. - This is clearly only possible for x86 and amd64 targets, since ppc and - arm are load-store architectures. If successful, replace + This is clearly only possible for x86, amd64, and s390x targets, + since ppc and arm are load-store architectures. If successful, replace instrs_in->arr[ii] with this new instruction, and recompute its reg_usage, so that the change is invisible to the standard-case handling that follows. */ diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index b9b2158190..b61cd41a50 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -603,6 +603,82 @@ genReload_S390(HInstr **i1, HInstr **i2, HReg rreg, Int offsetB, Bool mode64) } } +/* Direct reload function. For the given vreg (currently located at the given + spill offset) and a given instruction that reads vreg exactly once, return a + variant of the instruction that references the spill slot directly. Return + NULL if no such instruction is found. */ +HInstr * +directReload_S390(HInstr* i, HReg vreg, Short spill_off) +{ + s390_insn* insn = (s390_insn *) i; + + /* For simplicity, reject spill offsets that may cause trouble with 12-bit + addressing. They probably shouldn't occur anyway. */ + if (!fits_unsigned_12bit(spill_off + 15)) + return NULL; + + /* In case of a spilled GPR, adjust the offset to be right-aligned within the + spill slot. */ + Int delta = hregClass(vreg) == HRcInt64 ? 8 - insn->size : 0; + s390_amode* vreg_am = s390_amode_for_guest_state(spill_off + delta); + s390_opnd_RMI vreg_opnd; + vreg_opnd.tag = S390_OPND_AMODE; + vreg_opnd.variant.am = vreg_am; + + /* v-move <reg>,<vreg> */ + if (insn->tag == S390_INSN_MOVE + && sameHReg(insn->variant.move.src, vreg)) { + return s390_insn_load(insn->size, insn->variant.move.dst, vreg_am); + } + + /* v-store <vreg>,<addr> */ + if (insn->tag == S390_INSN_STORE + && sameHReg(insn->variant.store.src, vreg) + && insn->variant.store.dst->tag == S390_AMODE_B12) { + return s390_insn_memcpy(insn->size, insn->variant.store.dst, vreg_am); + } + + /* v-test <vreg> */ + if (insn->tag == S390_INSN_TEST + && insn->variant.test.src.tag == S390_OPND_REG + && sameHReg(insn->variant.test.src.variant.reg, vreg)) { + return s390_insn_test(insn->size, vreg_opnd); + } + + /* v-<alu> <reg>,<vreg> */ + if (insn->tag == S390_INSN_ALU + && insn->variant.alu.op2.tag == S390_OPND_REG + && sameHReg(insn->variant.alu.op2.variant.reg, vreg)) { + return s390_insn_alu(insn->size, insn->variant.alu.tag, + insn->variant.alu.dst, vreg_opnd); + } + + /* v-<unop> <reg>,<vreg> */ + if (insn->tag == S390_INSN_UNOP + && insn->variant.unop.src.tag == S390_OPND_REG + && sameHReg(insn->variant.unop.src.variant.reg, vreg) + && hregClass(vreg) == HRcInt64) { + /* Some operations define the input size to be different from the insn's + `size' field. Adjust the address accordingly. */ + switch (insn->variant.unop.tag) { + case S390_ZERO_EXTEND_8: + case S390_SIGN_EXTEND_8: vreg_am->d = spill_off + 7; break; + case S390_ZERO_EXTEND_16: + case S390_SIGN_EXTEND_16: vreg_am->d = spill_off + 6; break; + case S390_ZERO_EXTEND_32: + case S390_SIGN_EXTEND_32: vreg_am->d = spill_off + 4; break; + case S390_NEGATE: /* Nothing to adjust. */ break; + default: + goto no_match; + } + return s390_insn_unop(insn->size, insn->variant.unop.tag, + insn->variant.unop.dst, vreg_opnd); + } + +no_match: + return NULL; +} + s390_insn* genMove_S390(HReg from, HReg to, Bool mode64) { switch (hregClass(from)) { diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h index bbafa4fb08..c8ec665377 100644 --- a/VEX/priv/host_s390_defs.h +++ b/VEX/priv/host_s390_defs.h @@ -871,6 +871,7 @@ Int emit_S390Instr ( Bool *, UChar *, Int, const s390_insn *, Bool, const RRegUniverse *getRRegUniverse_S390( void ); void genSpill_S390 ( HInstr **, HInstr **, HReg , Int , Bool ); void genReload_S390 ( HInstr **, HInstr **, HReg , Int , Bool ); +HInstr* directReload_S390 ( HInstr *, HReg, Short ); extern s390_insn* genMove_S390(HReg from, HReg to, Bool mode64); HInstrArray *iselSB_S390 ( const IRSB *, VexArch, const VexArchInfo *, const VexAbiInfo *, Int, Int, Bool, Bool, Addr); diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c index 82155305c7..7a3cb75caf 100644 --- a/VEX/priv/main_main.c +++ b/VEX/priv/main_main.c @@ -961,7 +961,7 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, genSpill = CAST_TO_TYPEOF(genSpill) S390FN(genSpill_S390); genReload = CAST_TO_TYPEOF(genReload) S390FN(genReload_S390); genMove = CAST_TO_TYPEOF(genMove) S390FN(genMove_S390); - // fixs390: consider implementing directReload_S390 + directReload = CAST_TO_TYPEOF(directReload) S390FN(directReload_S390); ppInstr = CAST_TO_TYPEOF(ppInstr) S390FN(ppS390Instr); ppReg = CAST_TO_TYPEOF(ppReg) S390FN(ppHRegS390); iselSB = S390FN(iselSB_S390); |
|
From: Andreas A. <ar...@so...> - 2020-03-18 18:29:25
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=942a48c1db83ffbcbf1f5781d5607f3b42849b67 commit 942a48c1db83ffbcbf1f5781d5607f3b42849b67 Author: Andreas Arnez <ar...@li...> Date: Wed Mar 18 12:24:25 2020 +0100 Bug 417281 - s390x: Fix register usage of conditional moves The s390x register usage callback marks the target register of a conditional move as HRmWrite only. It fails to mention the fact that the target register is also an input to the insn (unless the condition is "never" or "always"). This was discovered while investigating "grail" failures on s390x and fixes the majority of them. Diff: --- NEWS | 1 + VEX/priv/host_s390_defs.c | 14 ++++++++++++-- docs/internals/3_15_BUGSTATUS.txt | 3 --- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index d7852320e5..52377430ce 100644 --- a/NEWS +++ b/NEWS @@ -127,6 +127,7 @@ where XXXXXX is the bug number as listed below. 417906 clone with CLONE_VFORK and no CLONE_VM fails 418435 s390x: memcmp test yields extra "Conditional jump or move depends on uninitialised value(s)" +417281 s390x: /bin/true segfaults with "grail" enabled n-i-bz Fix minor one time leaks in dhat. n-i-bz Add --run-cxx-freeres=no in outer args to avoid inner crashes. n-i-bz Add support for the Linux io_uring system calls diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 80e56f603a..b9b2158190 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -676,8 +676,18 @@ s390_insn_get_reg_usage(HRegUsage *u, const s390_insn *insn) break; case S390_INSN_COND_MOVE: - s390_opnd_RMI_get_reg_usage(u, insn->variant.cond_move.src); - addHRegUse(u, HRmWrite, insn->variant.cond_move.dst); + switch (insn->variant.cond_move.cond) { + case S390_CC_NEVER: + break; + case S390_CC_ALWAYS: + s390_opnd_RMI_get_reg_usage(u, insn->variant.cond_move.src); + addHRegUse(u, HRmWrite, insn->variant.cond_move.dst); + break; + default: + s390_opnd_RMI_get_reg_usage(u, insn->variant.cond_move.src); + addHRegUse(u, HRmModify, insn->variant.cond_move.dst); + break; + } break; case S390_INSN_ALU: diff --git a/docs/internals/3_15_BUGSTATUS.txt b/docs/internals/3_15_BUGSTATUS.txt index ac4b5f48f5..9509426a04 100644 --- a/docs/internals/3_15_BUGSTATUS.txt +++ b/docs/internals/3_15_BUGSTATUS.txt @@ -204,9 +204,6 @@ Uhmm, MUSL .417266 Make memcheck/tests/linux/sigqueue usable with musl Uhmm, MUSL -.417281 s390x: /bin/true segfaults with "grail" enabled -Ongoing - .417377 False-positive "uninitialised value(s)" reports from memcheck .417572 unhandled instruction bytes: 0xC5 0x79 0xD6 0xED 0xC5 0xF9 0x51 |