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
(1) |
|
2
|
3
(6) |
4
(5) |
5
|
6
(2) |
7
(1) |
8
|
|
9
|
10
(4) |
11
(2) |
12
(2) |
13
(3) |
14
(1) |
15
|
|
16
(4) |
17
|
18
(3) |
19
(3) |
20
(3) |
21
|
22
|
|
23
(1) |
24
(10) |
25
(13) |
26
(6) |
27
(2) |
28
(3) |
29
(5) |
|
30
(6) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2017-04-04 21:27:46
|
Author: iraisr
Date: Tue Apr 4 22:27:39 2017
New Revision: 16295
Log:
Adjust after adding a 'hint' to IRIfThenElse.
Modified:
branches/VALGRIND_JIT_HACKS/coregrind/m_gdbserver/m_gdbserver.c
branches/VALGRIND_JIT_HACKS/coregrind/m_translate.c
branches/VALGRIND_JIT_HACKS/memcheck/mc_translate.c
Modified: branches/VALGRIND_JIT_HACKS/coregrind/m_gdbserver/m_gdbserver.c
==============================================================================
--- branches/VALGRIND_JIT_HACKS/coregrind/m_gdbserver/m_gdbserver.c (original)
+++ branches/VALGRIND_JIT_HACKS/coregrind/m_gdbserver/m_gdbserver.c Tue Apr 4 22:27:39 2017
@@ -1298,13 +1298,14 @@
}
if (st->tag == Ist_IfThenElse) {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
st = IRStmt_IfThenElse(
- st->Ist.IfThenElse.cond,
- instrument_for_gdbserver_IRStmtVec(st->Ist.IfThenElse.then_leg,
- stmts_out, instr_needed, layout, vge, gWordTy, hWordTy),
- instrument_for_gdbserver_IRStmtVec(st->Ist.IfThenElse.else_leg,
- stmts_out, instr_needed, layout, vge, gWordTy, hWordTy),
- st->Ist.IfThenElse.phi_nodes);
+ ite->cond, ite->hint,
+ instrument_for_gdbserver_IRStmtVec(ite->then_leg, stmts_out,
+ instr_needed, layout, vge, gWordTy, hWordTy),
+ instrument_for_gdbserver_IRStmtVec(ite->else_leg, stmts_out,
+ instr_needed, layout, vge, gWordTy, hWordTy),
+ ite->phi_nodes);
}
addStmtToIRStmtVec(stmts_out, st);
Modified: branches/VALGRIND_JIT_HACKS/coregrind/m_translate.c
==============================================================================
--- branches/VALGRIND_JIT_HACKS/coregrind/m_translate.c (original)
+++ branches/VALGRIND_JIT_HACKS/coregrind/m_translate.c Tue Apr 4 22:27:39 2017
@@ -648,15 +648,14 @@
}
if (st->tag == Ist_IfThenElse) {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
st = IRStmt_IfThenElse(
- st->Ist.IfThenElse.cond,
- vg_SP_update_IRStmtVec(closureV, tyenv,
- st->Ist.IfThenElse.then_leg, out,
+ ite->cond, ite->hint,
+ vg_SP_update_IRStmtVec(closureV, tyenv, ite->then_leg, out,
layout, vge, vai, gWordTy, hWordTy),
- vg_SP_update_IRStmtVec(closureV, tyenv,
- st->Ist.IfThenElse.else_leg, out,
+ vg_SP_update_IRStmtVec(closureV, tyenv, ite->else_leg, out,
layout, vge, vai, gWordTy, hWordTy),
- st->Ist.IfThenElse.phi_nodes);
+ ite->phi_nodes);
}
/* well, not interesting. Just copy and keep going. */
Modified: branches/VALGRIND_JIT_HACKS/memcheck/mc_translate.c
==============================================================================
--- branches/VALGRIND_JIT_HACKS/memcheck/mc_translate.c (original)
+++ branches/VALGRIND_JIT_HACKS/memcheck/mc_translate.c Tue Apr 4 22:27:39 2017
@@ -6256,8 +6256,7 @@
static void instrument_IRStmtVec(IRStmtVec* stmts_in, UInt stmts_in_first,
MCEnv* mce);
-static void do_shadow_IfThenElse(MCEnv* mce, IRExpr* cond, IRStmtVec* then_leg,
- IRStmtVec* else_leg, IRPhiVec* phi_nodes_in)
+static void do_shadow_IfThenElse(MCEnv* mce, IRIfThenElse* ite)
{
IRTemp (*findShadowTmp)(MCEnv* mce, IRTemp orig);
HChar category;
@@ -6269,19 +6268,19 @@
category = 'V';
}
- complainIfUndefined(mce, cond, NULL);
+ complainIfUndefined(mce, ite->cond, NULL);
MCEnv then_mce;
- initMCEnv(mce->tyenv, then_leg, &then_mce, mce);
- instrument_IRStmtVec(then_leg, 0, &then_mce);
+ initMCEnv(mce->tyenv, ite->then_leg, &then_mce, mce);
+ instrument_IRStmtVec(ite->then_leg, 0, &then_mce);
MCEnv else_mce;
- initMCEnv(mce->tyenv, else_leg, &else_mce, mce);
- instrument_IRStmtVec(else_leg, 0, &else_mce);
+ initMCEnv(mce->tyenv, ite->else_leg, &else_mce, mce);
+ instrument_IRStmtVec(ite->else_leg, 0, &else_mce);
IRPhiVec* phi_nodes_out = emptyIRPhiVec();
- for (UInt i = 0; i < phi_nodes_in->phis_used; i++) {
- IRPhi* phi_in = phi_nodes_in->phis[i];
+ for (UInt i = 0; i < ite->phi_nodes->phis_used; i++) {
+ IRPhi* phi_in = ite->phi_nodes->phis[i];
IRPhi* phi_shadow = mkIRPhi(findShadowTmp(mce, phi_in->dst),
findShadowTmp(&then_mce, phi_in->srcThen),
findShadowTmp(&else_mce, phi_in->srcElse));
@@ -6289,8 +6288,8 @@
phi('C', mce, phi_nodes_out, phi_in);
}
- stmt(category, mce, IRStmt_IfThenElse(cond, then_mce.stmts, else_mce.stmts,
- phi_nodes_out));
+ stmt(category, mce, IRStmt_IfThenElse(ite->cond, ite->hint, then_mce.stmts,
+ else_mce.stmts, phi_nodes_out));
deinitMCEnv(&then_mce);
deinitMCEnv(&else_mce);
}
@@ -6440,9 +6439,9 @@
? isBogusAtom(st->Ist.LLSC.storedata)
: False);
case Ist_IfThenElse:
- return isBogusAtom(st->Ist.IfThenElse.cond)
- || isBogusIRStmtVec(st->Ist.IfThenElse.then_leg)
- || isBogusIRStmtVec(st->Ist.IfThenElse.else_leg);
+ return isBogusAtom(st->Ist.IfThenElse.details->cond)
+ || isBogusIRStmtVec(st->Ist.IfThenElse.details->then_leg)
+ || isBogusIRStmtVec(st->Ist.IfThenElse.details->else_leg);
default:
unhandled:
ppIRStmt(st, NULL, 0);
@@ -6566,10 +6565,7 @@
break;
case Ist_IfThenElse:
- do_shadow_IfThenElse(mce, st->Ist.IfThenElse.cond,
- st->Ist.IfThenElse.then_leg,
- st->Ist.IfThenElse.else_leg,
- st->Ist.IfThenElse.phi_nodes);
+ do_shadow_IfThenElse(mce, st->Ist.IfThenElse.details);
/* Note, do_shadow_IfThenElse copies the IfThenElse itself to the
output stmts, because it needs to add instrumentation to the legs
and to phi nodes. Hence skip the copy below. Also skip the
@@ -6981,8 +6977,8 @@
tl_assert(st);
if (st->tag == Ist_IfThenElse) {
- final_tidy_IRStmtVec(st->Ist.IfThenElse.then_leg);
- final_tidy_IRStmtVec(st->Ist.IfThenElse.else_leg);
+ final_tidy_IRStmtVec(st->Ist.IfThenElse.details->then_leg);
+ final_tidy_IRStmtVec(st->Ist.IfThenElse.details->else_leg);
}
if (st->tag != Ist_Dirty)
|
|
From: <sv...@va...> - 2017-04-04 21:26:54
|
Author: iraisr
Date: Tue Apr 4 22:26:45 2017
New Revision: 3345
Log:
Add a 'hint' to If-Then-Else control flow diamon.
Modified:
branches/VEX_JIT_HACKS/priv/ir_defs.c
branches/VEX_JIT_HACKS/priv/ir_opt.c
branches/VEX_JIT_HACKS/pub/libvex_ir.h
Modified: branches/VEX_JIT_HACKS/priv/ir_defs.c
==============================================================================
--- branches/VEX_JIT_HACKS/priv/ir_defs.c (original)
+++ branches/VEX_JIT_HACKS/priv/ir_defs.c Tue Apr 4 22:26:45 2017
@@ -1601,6 +1601,31 @@
ppIRTypeEnvDefd(NULL, defset, depth);
}
+void ppIRIfThenElse_Hint(IRIfThenElse_Hint hint)
+{
+ switch (hint) {
+ case IfThenElse_ThenLikely: vex_printf("IfThenElse_ThenLikely"); break;
+ case IfThenElse_ElseLikely: vex_printf("IfThenElse_ElseLikely"); break;
+ default: vpanic("ppIRIfThenElse_Hint");
+ }
+}
+
+void ppIRIfThenElse(const IRIfThenElse* ite, const IRTypeEnv* tyenv, UInt depth)
+{
+ vex_printf("if (");
+ ppIRExpr(ite->cond);
+ vex_printf(") [");
+ ppIRIfThenElse_Hint(ite->hint);
+ vex_printf("] then {\n");
+ ppIRStmtVec(ite->then_leg, tyenv, depth + 1);
+ print_depth(depth);
+ vex_printf("} else {\n");
+ ppIRStmtVec(ite->else_leg, tyenv, depth + 1);
+ print_depth(depth);
+ vex_printf("}\n");
+ ppIRPhiVec(ite->phi_nodes, depth);
+}
+
void ppIRStmt(const IRStmt* s, const IRTypeEnv* tyenv, UInt depth)
{
print_depth(depth);
@@ -1686,16 +1711,7 @@
vex_printf(" } ");
break;
case Ist_IfThenElse:
- vex_printf("if (");
- ppIRExpr(s->Ist.IfThenElse.cond);
- vex_printf(") then {\n");
- ppIRStmtVec(s->Ist.IfThenElse.then_leg, tyenv, depth + 1);
- print_depth(depth);
- vex_printf("} else {\n");
- ppIRStmtVec(s->Ist.IfThenElse.else_leg, tyenv, depth + 1);
- print_depth(depth);
- vex_printf("}\n");
- ppIRPhiVec(s->Ist.IfThenElse.phi_nodes, depth);
+ ppIRIfThenElse(s->Ist.IfThenElse.details, tyenv, depth);
break;
default:
vpanic("ppIRStmt");
@@ -2214,8 +2230,7 @@
return lg;
}
-
-/* Constructors -- IRStmt */
+/* Constructors -- IRIfThenElse */
IRPhi* mkIRPhi(IRTemp dst, IRTemp srcThen, IRTemp srcElse)
{
@@ -2245,6 +2260,22 @@
return defset;
}
+IRIfThenElse* mkIRIfThenElse(IRExpr* cond, IRIfThenElse_Hint hint,
+ IRStmtVec* then_leg, IRStmtVec* else_leg,
+ IRPhiVec* phi_nodes)
+{
+ IRIfThenElse* ite = LibVEX_Alloc_inline(sizeof(IRIfThenElse));
+ ite->cond = cond;
+ ite->hint = hint;
+ ite->then_leg = then_leg;
+ ite->else_leg = else_leg;
+ ite->phi_nodes = phi_nodes;
+ return ite;
+}
+
+
+/* Constructors -- IRStmt */
+
IRStmt* IRStmt_NoOp ( void )
{
/* Just use a single static closure. */
@@ -2353,15 +2384,14 @@
return s;
}
-IRStmt* IRStmt_IfThenElse(IRExpr* cond, IRStmtVec* then_leg,
- IRStmtVec* else_leg, IRPhiVec* phi_nodes)
-{
- IRStmt* s = LibVEX_Alloc_inline(sizeof(IRStmt));
- s->tag = Ist_IfThenElse;
- s->Ist.IfThenElse.cond = cond;
- s->Ist.IfThenElse.then_leg = then_leg;
- s->Ist.IfThenElse.else_leg = else_leg;
- s->Ist.IfThenElse.phi_nodes = phi_nodes;
+IRStmt* IRStmt_IfThenElse(IRExpr* cond, IRIfThenElse_Hint hint,
+ IRStmtVec* then_leg, IRStmtVec* else_leg,
+ IRPhiVec* phi_nodes)
+{
+ IRStmt* s = LibVEX_Alloc_inline(sizeof(IRStmt));
+ s->tag = Ist_IfThenElse;
+ s->Ist.IfThenElse.details = mkIRIfThenElse(cond, hint, then_leg, else_leg,
+ phi_nodes);
return s;
}
@@ -2673,11 +2703,13 @@
s->Ist.Exit.jk,
deepCopyIRConst(s->Ist.Exit.dst),
s->Ist.Exit.offsIP);
- case Ist_IfThenElse:
- return IRStmt_IfThenElse(deepCopyIRExpr(s->Ist.IfThenElse.cond),
- deepCopyIRStmtVec(s->Ist.IfThenElse.then_leg, parent),
- deepCopyIRStmtVec(s->Ist.IfThenElse.else_leg, parent),
- deepCopyIRPhiVec(s->Ist.IfThenElse.phi_nodes));
+ case Ist_IfThenElse: {
+ const IRIfThenElse* ite = s->Ist.IfThenElse.details;
+ return IRStmt_IfThenElse(deepCopyIRExpr(ite->cond), ite->hint,
+ deepCopyIRStmtVec(ite->then_leg, parent),
+ deepCopyIRStmtVec(ite->else_leg, parent),
+ deepCopyIRPhiVec(ite->phi_nodes));
+ }
default:
vpanic("deepCopyIRStmt");
}
@@ -3822,7 +3854,8 @@
addStmtToIRStmtVec(bb->stmts, st);
}
-IRStmt *addEmptyIfThenElse(IRSB* bb, IRStmtVec* parent, IRExpr* cond)
+IRStmt *addEmptyIfThenElse(IRSB* bb, IRStmtVec* parent, IRExpr* cond,
+ IRIfThenElse_Hint hint)
{
IRStmtVec* then_leg = emptyIRStmtVec();
then_leg->id = nextIRStmtVecID(bb);
@@ -3832,7 +3865,8 @@
else_leg->id = nextIRStmtVecID(bb);
else_leg->parent = parent;
- IRStmt* st = IRStmt_IfThenElse(cond, then_leg, else_leg, emptyIRPhiVec());
+ IRStmt* st = IRStmt_IfThenElse(cond, hint, then_leg, else_leg,
+ emptyIRPhiVec());
addStmtToIRStmtVec(parent, st);
return st;
}
@@ -4120,9 +4154,9 @@
case Ist_Exit:
return isIRAtom(st->Ist.Exit.guard);
case Ist_IfThenElse:
- return isIRAtom(st->Ist.IfThenElse.cond)
- && isFlatIRStmtVec(st->Ist.IfThenElse.then_leg)
- && isFlatIRStmtVec(st->Ist.IfThenElse.else_leg);
+ return isIRAtom(st->Ist.IfThenElse.details->cond)
+ && isFlatIRStmtVec(st->Ist.IfThenElse.details->then_leg)
+ && isFlatIRStmtVec(st->Ist.IfThenElse.details->else_leg);
default:
vpanic("isFlatIRStmt(st)");
}
@@ -4352,8 +4386,8 @@
{
vassert(stmt->tag == Ist_IfThenElse);
- IRStmtVec* then_leg = stmt->Ist.IfThenElse.then_leg;
- IRStmtVec* else_leg = stmt->Ist.IfThenElse.else_leg;
+ IRStmtVec* then_leg = stmt->Ist.IfThenElse.details->then_leg;
+ IRStmtVec* else_leg = stmt->Ist.IfThenElse.details->else_leg;
useBeforeDef_Temp(bb, then_leg, stmt, phi->srcThen, def_counts);
useBeforeDef_Temp(bb, else_leg, stmt, phi->srcElse, def_counts);
@@ -4456,7 +4490,7 @@
useBeforeDef_Expr(bb, stmts, stmt, stmt->Ist.Exit.guard, def_counts);
break;
case Ist_IfThenElse:
- useBeforeDef_Expr(bb, stmts, stmt, stmt->Ist.IfThenElse.cond,
+ useBeforeDef_Expr(bb, stmts, stmt, stmt->Ist.IfThenElse.details->cond,
def_counts);
/* Traversing into legs and phi nodes driven from
sanityCheckIRStmtVec(). */
@@ -5047,8 +5081,8 @@
sanityCheckFail(bb,stmt,"IRStmt.Exit.offsIP: too low");
break;
case Ist_IfThenElse:
- tcExpr(bb, stmts, stmt, stmt->Ist.IfThenElse.cond, gWordTy);
- if (typeOfIRExpr(tyenv, stmt->Ist.IfThenElse.cond) != Ity_I1)
+ tcExpr(bb, stmts, stmt, stmt->Ist.IfThenElse.details->cond, gWordTy);
+ if (typeOfIRExpr(tyenv, stmt->Ist.IfThenElse.details->cond) != Ity_I1)
sanityCheckFail(bb,stmt,"IRStmt.IfThenElse.cond: not :: Ity_I1");
/* Traversing into legs and phi nodes driven from
sanityCheckIRStmtVec(). */
@@ -5116,8 +5150,9 @@
tcStmt(bb, stmts, stmt, require_flat, gWordTy);
if (stmt->tag == Ist_IfThenElse) {
- const IRStmtVec* then_leg = stmt->Ist.IfThenElse.then_leg;
- const IRStmtVec* else_leg = stmt->Ist.IfThenElse.else_leg;
+ const IRIfThenElse* ite = stmt->Ist.IfThenElse.details;
+ const IRStmtVec* then_leg = ite->then_leg;
+ const IRStmtVec* else_leg = ite->else_leg;
if (then_leg->parent == NULL) {
sanityCheckFail(bb, stmt, "IfThenElse.then.parent is NULL");
@@ -5138,8 +5173,7 @@
id_counts, n_ids, gWordTy);
sanityCheckIRStmtVec(bb, else_leg, require_flat, def_counts,
id_counts, n_ids, gWordTy);
- sanityCheckIRPhiNodes(bb, stmts, stmt,
- stmt->Ist.IfThenElse.phi_nodes, def_counts);
+ sanityCheckIRPhiNodes(bb, stmts, stmt, ite->phi_nodes, def_counts);
}
}
}
Modified: branches/VEX_JIT_HACKS/priv/ir_opt.c
==============================================================================
--- branches/VEX_JIT_HACKS/priv/ir_opt.c (original)
+++ branches/VEX_JIT_HACKS/priv/ir_opt.c Tue Apr 4 22:26:45 2017
@@ -510,14 +510,16 @@
st->Ist.Exit.dst,
st->Ist.Exit.offsIP));
break;
- case Ist_IfThenElse:
- e1 = flatten_Expr(tyenv, stmts, st->Ist.IfThenElse.cond);
- addStmtToIRStmtVec(
- stmts, IRStmt_IfThenElse(e1,
- flatten_IRStmtVec(tyenv, st->Ist.IfThenElse.then_leg, parent),
- flatten_IRStmtVec(tyenv, st->Ist.IfThenElse.else_leg, parent),
- st->Ist.IfThenElse.phi_nodes));
+ case Ist_IfThenElse: {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ e1 = flatten_Expr(tyenv, stmts, ite->cond);
+ addStmtToIRStmtVec(stmts,
+ IRStmt_IfThenElse(e1, ite->hint,
+ flatten_IRStmtVec(tyenv, ite->then_leg, parent),
+ flatten_IRStmtVec(tyenv, ite->else_leg, parent),
+ ite->phi_nodes));
break;
+ }
default:
vex_printf("\n");
ppIRStmt(st, tyenv, 0);
@@ -720,8 +722,9 @@
if (st->tag == Ist_IfThenElse) {
/* Consider "then" and "else" legs in isolation. */
- redundant_get_removal_IRStmtVec(tyenv, st->Ist.IfThenElse.then_leg);
- redundant_get_removal_IRStmtVec(tyenv, st->Ist.IfThenElse.else_leg);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ redundant_get_removal_IRStmtVec(tyenv, ite->then_leg);
+ redundant_get_removal_IRStmtVec(tyenv, ite->else_leg);
}
} /* for (UInt i = 0; i < stmts->stmts_used; i++) */
@@ -1009,10 +1012,11 @@
/* Consider "then" and "else" legs in isolation. They get a new env. */
if (st->tag == Ist_IfThenElse) {
- redundant_put_removal_IRStmtVec(tyenv, st->Ist.IfThenElse.then_leg,
- preciseMemExnsFn, pxControl, newHHW());
- redundant_put_removal_IRStmtVec(tyenv, st->Ist.IfThenElse.else_leg,
- preciseMemExnsFn, pxControl, newHHW());
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ redundant_put_removal_IRStmtVec(tyenv, ite->then_leg, preciseMemExnsFn,
+ pxControl, newHHW());
+ redundant_put_removal_IRStmtVec(tyenv, ite->else_leg, preciseMemExnsFn,
+ pxControl, newHHW());
}
}
}
@@ -2862,9 +2866,9 @@
}
case Ist_IfThenElse: {
- vassert(isIRAtom(st->Ist.IfThenElse.cond));
- IRExpr *fcond = fold_Expr(env,
- subst_Expr(env, st->Ist.IfThenElse.cond));
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ vassert(isIRAtom(ite->cond));
+ IRExpr *fcond = fold_Expr(env, subst_Expr(env, ite->cond));
if (fcond->tag == Iex_Const) {
/* Interesting. The condition on this "if-then-else" has folded down
to a constant. */
@@ -2890,22 +2894,18 @@
vpanic("IfThenElse leg lifting unimplemented");
}
- SubstEnv* then_env
- = newSubstEnv(env->tyenv, st->Ist.IfThenElse.then_leg, env);
- IRStmtVec* then_stmts
- = subst_and_fold_Stmts(then_env, st->Ist.IfThenElse.then_leg);
+ SubstEnv* then_env = newSubstEnv(env->tyenv, ite->then_leg, env);
+ IRStmtVec* then_stmts = subst_and_fold_Stmts(then_env, ite->then_leg);
subst_and_fold_PhiNodes(then_env, then_stmts, True /* srcThen */,
- st->Ist.IfThenElse.phi_nodes);
+ ite->phi_nodes);
- SubstEnv* else_env
- = newSubstEnv(env->tyenv, st->Ist.IfThenElse.else_leg, env);
- IRStmtVec* else_stmts
- = subst_and_fold_Stmts(else_env, st->Ist.IfThenElse.else_leg);
+ SubstEnv* else_env = newSubstEnv(env->tyenv, ite->else_leg, env);
+ IRStmtVec* else_stmts = subst_and_fold_Stmts(else_env, ite->else_leg);
subst_and_fold_PhiNodes(else_env, else_stmts, False /* srcThen */,
- st->Ist.IfThenElse.phi_nodes);
+ ite->phi_nodes);
- return IRStmt_IfThenElse(fcond, then_stmts, else_stmts,
- st->Ist.IfThenElse.phi_nodes);
+ return IRStmt_IfThenElse(fcond, ite->hint, then_stmts, else_stmts,
+ ite->phi_nodes);
}
default:
@@ -3214,11 +3214,11 @@
addUses_Expr(set, st->Ist.Exit.guard);
return;
case Ist_IfThenElse: {
- addUses_Expr(set, st->Ist.IfThenElse.cond);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ addUses_Expr(set, ite->cond);
- IRPhiVec* phi_nodes = st->Ist.IfThenElse.phi_nodes;
- for (UInt i = 0; i < phi_nodes->phis_used; i++) {
- const IRPhi* phi = phi_nodes->phis[i];
+ for (UInt i = 0; i < ite->phi_nodes->phis_used; i++) {
+ const IRPhi* phi = ite->phi_nodes->phis[i];
addUses_Temp(set, phi->srcThen);
addUses_Temp(set, phi->srcElse);
}
@@ -3226,10 +3226,8 @@
Int i_unconditional_exit; // TODO-JIT: unused at the moment
/* Consider both legs simultaneously. If either of them reports an
IRTemp in use, then it won't be eliminated. */
- do_deadcode_IRStmtVec(set, st->Ist.IfThenElse.then_leg,
- &i_unconditional_exit);
- do_deadcode_IRStmtVec(set, st->Ist.IfThenElse.else_leg,
- &i_unconditional_exit);
+ do_deadcode_IRStmtVec(set, ite->then_leg, &i_unconditional_exit);
+ do_deadcode_IRStmtVec(set, ite->else_leg, &i_unconditional_exit);
return;
}
default:
@@ -3357,8 +3355,9 @@
IRStmt* st = stmts->stmts[i];
if (st->tag == Ist_IfThenElse) {
- spec_helpers_IRStmtVec(st->Ist.IfThenElse.then_leg, specHelper, any);
- spec_helpers_IRStmtVec(st->Ist.IfThenElse.else_leg, specHelper, any);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ spec_helpers_IRStmtVec(ite->then_leg, specHelper, any);
+ spec_helpers_IRStmtVec(ite->else_leg, specHelper, any);
continue;
}
@@ -4103,12 +4102,15 @@
case Ist_NoOp: case Ist_IMark: case Ist_AbiHint:
case Ist_WrTmp: case Ist_Exit: case Ist_LoadG:
paranoia = 0; break;
- case Ist_IfThenElse:
- anyDone |= do_cse_IRStmtVec(tyenv, st->Ist.IfThenElse.then_leg,
+ case Ist_IfThenElse: {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ anyDone |= do_cse_IRStmtVec(tyenv, ite->then_leg,
allowLoadsToBeCSEd);
- anyDone |= do_cse_IRStmtVec(tyenv, st->Ist.IfThenElse.else_leg,
+ anyDone |= do_cse_IRStmtVec(tyenv, ite->else_leg,
allowLoadsToBeCSEd);
- paranoia = 0; break;
+ paranoia = 0;
+ break;
+ }
default:
vpanic("do_cse_IRStmtVec(1)");
}
@@ -4399,8 +4401,9 @@
}
if (st->tag == Ist_IfThenElse) {
- collapse_AddSub_chains_IRStmtVec(st->Ist.IfThenElse.then_leg);
- collapse_AddSub_chains_IRStmtVec(st->Ist.IfThenElse.else_leg);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ collapse_AddSub_chains_IRStmtVec(ite->then_leg);
+ collapse_AddSub_chains_IRStmtVec(ite->else_leg);
}
} /* for */
}
@@ -4675,8 +4678,9 @@
}
if (st->tag == Ist_IfThenElse) {
- do_redundant_GetI_elimination(tyenv, st->Ist.IfThenElse.then_leg);
- do_redundant_GetI_elimination(tyenv, st->Ist.IfThenElse.else_leg);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ do_redundant_GetI_elimination(tyenv, ite->then_leg);
+ do_redundant_GetI_elimination(tyenv, ite->else_leg);
}
}
}
@@ -4695,10 +4699,9 @@
IRStmt* st = stmts->stmts[i];
if (st->tag == Ist_IfThenElse) {
- do_redundant_PutI_elimination(tyenv, st->Ist.IfThenElse.then_leg,
- pxControl);
- do_redundant_PutI_elimination(tyenv, st->Ist.IfThenElse.else_leg,
- pxControl);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ do_redundant_PutI_elimination(tyenv, ite->then_leg, pxControl);
+ do_redundant_PutI_elimination(tyenv, ite->else_leg, pxControl);
}
if (st->tag != Ist_PutI)
@@ -4898,19 +4901,18 @@
deltaIRExpr(d->mAddr, delta_tmp);
break;
case Ist_IfThenElse: {
- deltaIRExpr(st->Ist.IfThenElse.cond, delta_tmp);
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ deltaIRExpr(ite->cond, delta_tmp);
/* Traverse "then" and "else" legs. Also nested IRStmtVec's need to
be unrolled otherwise the main IRStmtVec will break horribly. */
- deltaIRStmtVec(tyenv, st->Ist.IfThenElse.then_leg, delta_tmp,
- delta_id, stmts);
- deltaIRStmtVec(tyenv, st->Ist.IfThenElse.else_leg, delta_tmp,
- delta_id, stmts);
+ deltaIRStmtVec(tyenv, ite->then_leg, delta_tmp, delta_id, stmts);
+ deltaIRStmtVec(tyenv, ite->else_leg, delta_tmp, delta_id, stmts);
- IRPhiVec* phi_nodes = st->Ist.IfThenElse.phi_nodes;
- for (UInt i = 0; i < phi_nodes->phis_used; i++) {
- phi_nodes->phis[i]->dst += delta_tmp;
- phi_nodes->phis[i]->srcThen += delta_tmp;
- phi_nodes->phis[i]->srcElse += delta_tmp;
+ for (UInt i = 0; i < ite->phi_nodes->phis_used; i++) {
+ IRPhi* phi = ite->phi_nodes->phis[i];
+ phi->dst += delta_tmp;
+ phi->srcThen += delta_tmp;
+ phi->srcElse += delta_tmp;
}
break;
}
@@ -5493,15 +5495,14 @@
aoccCount_Expr(uses, st->Ist.Exit.guard);
return;
case Ist_IfThenElse: {
- aoccCount_Expr(uses, st->Ist.IfThenElse.cond);
- aoccCount_IRStmtVec(uses, st->Ist.IfThenElse.then_leg,
- max_ga_known, max_ga);
- aoccCount_IRStmtVec(uses, st->Ist.IfThenElse.else_leg,
- max_ga_known, max_ga);
- IRPhiVec* phi_nodes = st->Ist.IfThenElse.phi_nodes;
- for (UInt i = 0; i < phi_nodes->phis_used; i++) {
- uses[phi_nodes->phis[i]->srcThen]++;
- uses[phi_nodes->phis[i]->srcElse]++;
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ aoccCount_Expr(uses, ite->cond);
+ aoccCount_IRStmtVec(uses, ite->then_leg, max_ga_known, max_ga);
+ aoccCount_IRStmtVec(uses, ite->else_leg, max_ga_known, max_ga);
+ for (UInt i = 0; i < ite->phi_nodes->phis_used; i++) {
+ IRPhi* phi = ite->phi_nodes->phis[i];
+ uses[phi->srcThen]++;
+ uses[phi->srcElse]++;
}
return;
}
@@ -5918,19 +5919,18 @@
}
return IRStmt_Dirty(d2);
case Ist_IfThenElse: {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
ATmpInfo then_env[A_NENV];
initAEnv(then_env, env);
- IRStmtVec* then_leg
- = atbSubst_StmtVec(tyenv, then_env, st->Ist.IfThenElse.then_leg,
- preciseMemExnsFn, pxControl, uses);
+ IRStmtVec* then_leg = atbSubst_StmtVec(tyenv, then_env, ite->then_leg,
+ preciseMemExnsFn, pxControl, uses);
ATmpInfo else_env[A_NENV];
initAEnv(else_env, env);
- IRStmtVec* else_leg
- = atbSubst_StmtVec(tyenv, else_env, st->Ist.IfThenElse.else_leg,
- preciseMemExnsFn, pxControl, uses);
+ IRStmtVec* else_leg = atbSubst_StmtVec(tyenv, else_env, ite->else_leg,
+ preciseMemExnsFn, pxControl, uses);
- const IRPhiVec* phi_nodes = st->Ist.IfThenElse.phi_nodes;
+ const IRPhiVec* phi_nodes = ite->phi_nodes;
IRPhiVec* out = emptyIRPhiVec();
for (UInt i = 0; i < phi_nodes->phis_used; i++) {
IRPhi* phi = phi_nodes->phis[i];
@@ -5953,7 +5953,7 @@
}
}
- return IRStmt_IfThenElse(atbSubst_Expr(env, st->Ist.IfThenElse.cond),
+ return IRStmt_IfThenElse(atbSubst_Expr(env, ite->cond), ite->hint,
then_leg, else_leg, out);
}
default:
@@ -6309,11 +6309,11 @@
continue;
}
- IRStmtVec* then_leg = st->Ist.IfThenElse.then_leg;
- IRStmtVec* else_leg = st->Ist.IfThenElse.else_leg;
- IRPhiVec* phi_nodes = st->Ist.IfThenElse.phi_nodes;
- for (UInt j = 0; j < phi_nodes->phis_used; j++) {
- const IRPhi* phi = phi_nodes->phis[j];
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ IRStmtVec* then_leg = ite->then_leg;
+ IRStmtVec* else_leg = ite->else_leg;
+ for (UInt j = 0; j < ite->phi_nodes->phis_used; j++) {
+ const IRPhi* phi = ite->phi_nodes->phis[j];
addStmtToIRStmtVec(then_leg, IRStmt_WrTmp(phi->dst,
IRExpr_RdTmp(phi->srcThen)));
addStmtToIRStmtVec(else_leg, IRStmt_WrTmp(phi->dst,
@@ -6719,13 +6719,13 @@
case Ist_Exit:
vassert(isIRAtom(st->Ist.Exit.guard));
break;
- case Ist_IfThenElse:
- vassert(isIRAtom(st->Ist.IfThenElse.cond));
- changed |= do_XOR_TRANSFORM_IRStmtVec(tyenv,
- st->Ist.IfThenElse.then_leg);
- changed |= do_XOR_TRANSFORM_IRStmtVec(tyenv,
- st->Ist.IfThenElse.else_leg);
+ case Ist_IfThenElse: {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ vassert(isIRAtom(ite->cond));
+ changed |= do_XOR_TRANSFORM_IRStmtVec(tyenv, ite->then_leg);
+ changed |= do_XOR_TRANSFORM_IRStmtVec(tyenv, ite->else_leg);
break;
+ }
default:
vex_printf("\n"); ppIRStmt(st, tyenv, 0);
vpanic("do_XOR_TRANSFORMS_IRStmtVec");
@@ -6937,13 +6937,15 @@
case Ist_Exit:
vassert(isIRAtom(st->Ist.Exit.guard));
break;
- case Ist_IfThenElse:
- vassert(isIRAtom(st->Ist.IfThenElse.cond));
+ case Ist_IfThenElse: {
+ IRIfThenElse* ite = st->Ist.IfThenElse.details;
+ vassert(isIRAtom(ite->cond));
considerExpensives_IRStmtVec(hasGetIorPutI, hasVorFtemps,
- tyenv, st->Ist.IfThenElse.then_leg);
+ tyenv, ite->then_leg);
considerExpensives_IRStmtVec(hasGetIorPutI, hasVorFtemps,
- tyenv, st->Ist.IfThenElse.else_leg);
+ tyenv, ite->else_leg);
break;
+ }
default:
bad:
ppIRStmt(st, tyenv, 0);
Modified: branches/VEX_JIT_HACKS/pub/libvex_ir.h
==============================================================================
--- branches/VEX_JIT_HACKS/pub/libvex_ir.h (original)
+++ branches/VEX_JIT_HACKS/pub/libvex_ir.h Tue Apr 4 22:26:45 2017
@@ -2777,17 +2777,60 @@
extern IRTempDefSet* emptyIRTempDefSet(void);
extern IRTempDefSet* deepCopyIRTempDefSet(const IRTempDefSet* defset);
-/* ------------------ Statements ------------------ */
-/* IRStmt and IRStmtVec are mutually recursive. */
+/* --------------- If-Then-Else control flow diamond --------------- */
+
+/* If-Then-Else control flow diamond. It contains:
+ - Guard controling whether "then" or "else" leg is taken
+ - A hint which leg is more likely to be taken (hot path vs cold path)
+ - "then" and "else" legs with vectors of statements
+ At the moment, nested "if-then-else" statements are not supported.
+ - Phi nodes, which are used to merge temporaries from "then" and "else" legs
+
+ A leg can either end with an unconditional exit or join the main flow.
+ At the moment, unconditional exits are not supported.
+*/
+
typedef
- struct _IRStmt
- IRStmt;
+ enum {
+ IfThenElse_ThenLikely=0x1E00,
+ IfThenElse_ElseLikely
+ }
+ IRIfThenElse_Hint;
+
+typedef
+ struct _IRStmtVec
+ IRStmtVec;
typedef
struct _IRTypeEnv
IRTypeEnv;
+typedef
+ struct {
+ IRExpr* cond;
+ IRIfThenElse_Hint hint;
+ IRStmtVec* then_leg;
+ IRStmtVec* else_leg;
+ IRPhiVec* phi_nodes;
+ }
+ IRIfThenElse;
+
+extern void ppIRIfThenElse_Hint(IRIfThenElse_Hint hint);
+extern void ppIRIfThenElse(const IRIfThenElse* ite, const IRTypeEnv* tyenv,
+ UInt depth);
+extern IRIfThenElse* mkIRIfThenElse(IRExpr* cond, IRIfThenElse_Hint hint,
+ IRStmtVec* then_leg, IRStmtVec* else_leg,
+ IRPhiVec* phi_nodes);
+
+
+/* ------------------ Statements ------------------ */
+
+/* IRStmt and IRStmtVec are mutually recursive. */
+typedef
+ struct _IRStmt
+ IRStmt;
+
/* Uniquely identifies IRStmtVec in an IRSB, no matter how deeply nested. */
typedef UShort IRStmtVecID;
@@ -2801,16 +2844,14 @@
to IRStmtVec #0.
- A set which keeps track of which IRTemp's are defined in this IRStmtVec.
*/
-typedef
- struct _IRStmtVec {
- IRStmt** stmts;
- UInt stmts_size;
- UInt stmts_used;
- IRStmtVecID id;
- struct _IRStmtVec* parent;
- IRTempDefSet* defset;
- }
- IRStmtVec;
+struct _IRStmtVec {
+ IRStmt** stmts;
+ UInt stmts_size;
+ UInt stmts_used;
+ IRStmtVecID id;
+ IRStmtVec* parent;
+ IRTempDefSet* defset;
+};
/* Pretty-prints a vector of statements. If 'tyenv' is not NULL, pretty-prints
IRStmtVec's defset using nicer ppIRTypeEnvDefd(). */
@@ -2841,7 +2882,7 @@
typedef
enum {
- Ist_NoOp=0x1E00,
+ Ist_NoOp=0x1F00,
Ist_IMark, /* META */
Ist_AbiHint, /* META */
Ist_Put,
@@ -3098,26 +3139,31 @@
Int offsIP; /* Guest state offset for IP */
} Exit;
- /* If-Then-Else control flow diamond. It contains:
- - Guard controling whether "then" or "else" leg is taken
- - "then" and "else" legs with vectors of statements
- At the moment, nested "if-then-else" statements are not supported.
- - Phi nodes, which are used to merge temporaries from "then" and
- "else" legs
- - TODO-JIT: A hint which leg is more likely to be taken (hot path)
-
- A leg can either end with an unconditional exit or join the main
- flow.
+ /* If-Then-Else control flow diamond. See IRIfThenElse for details.
ppIRIfThenElse output:
- if (<cond>) then { <IRStmtVec> } else { <IRStmtVec> }
- eg. if (t3) then { <then-statements> } else { <else-statements> }
- */
+ if (<cond>) [<hint>] then {
+ <IRTempDefSet>
+ <IRStmtVec>
+ } else {
+ <IRTempDefSet>
+ <IRStmtVec>
+ }
+ <phi-nodes>
+
+ eg. if (t3) [IfThenElse_ThenLikely] then {
+ t4:I32 t7:I32
+
+ t4=0x2
+ t7=Add32(t2,t1)
+ } else {
+ t5:I32
+
+ t5=0x3
+ }
+ t6=phi(t4,t5) */
struct {
- IRExpr* cond;
- IRStmtVec* then_leg;
- IRStmtVec* else_leg;
- IRPhiVec* phi_nodes;
+ IRIfThenElse* details;
} IfThenElse;
} Ist;
};
@@ -3141,8 +3187,9 @@
extern IRStmt* IRStmt_MBE ( IRMBusEvent event );
extern IRStmt* IRStmt_Exit ( IRExpr* guard, IRJumpKind jk, IRConst* dst,
Int offsIP );
-extern IRStmt* IRStmt_IfThenElse(IRExpr* cond, IRStmtVec* then_leg,
- IRStmtVec* else_leg, IRPhiVec* phi_nodes);
+extern IRStmt* IRStmt_IfThenElse(IRExpr* cond, IRIfThenElse_Hint hint,
+ IRStmtVec* then_leg, IRStmtVec* else_leg,
+ IRPhiVec* phi_nodes);
/* Deep-copy an IRStmt.
Parent is required for "if-then-else" statements. */
@@ -3242,7 +3289,8 @@
/* Allocates an empty IfThenElse, assigns it a valid IRStmtVecID
and sets the parent for both then and else legs.
The returned IRStmt is added to the parent IRStmtVec and ready to be used. */
-extern IRStmt *addEmptyIfThenElse(IRSB* bb, IRStmtVec* parent, IRExpr* cond);
+extern IRStmt *addEmptyIfThenElse(IRSB* bb, IRStmtVec* parent, IRExpr* cond,
+ IRIfThenElse_Hint hint);
/*---------------------------------------------------------------*/
/*--- Helper functions for the IR ---*/
|
|
From: <sv...@va...> - 2017-04-04 12:02:26
|
Author: mjw
Date: Tue Apr 4 13:02:14 2017
New Revision: 3344
Log:
Initialize s390_host_hwcaps early in LibVEX_FrontEnd.
VEX svn r3341 split LibVEX_Translate into LibVEX_FrontEnd and
LibVEX_BackEnd. The s390_host_hwcaps (KLUDGE) needs to be initialized
early in LibVEX_FrontEnd.
Modified:
trunk/priv/main_main.c
Modified: trunk/priv/main_main.c
==============================================================================
--- trunk/priv/main_main.c (original)
+++ trunk/priv/main_main.c Tue Apr 4 13:02:14 2017
@@ -438,6 +438,9 @@
break;
case VexArchS390X:
+ /* KLUDGE: export hwcaps. */
+ s390_host_hwcaps = vta->archinfo_host.hwcaps;
+
preciseMemExnsFn
= S390FN(guest_s390x_state_requires_precise_mem_exns);
disInstrFn = S390FN(disInstr_S390);
@@ -951,8 +954,6 @@
case VexArchS390X:
mode64 = True;
- /* KLUDGE: export hwcaps. */
- s390_host_hwcaps = vta->archinfo_host.hwcaps;
rRegUniv = S390FN(getRRegUniverse_S390());
isMove = CAST_TO_TYPEOF(isMove) S390FN(isMove_S390Instr);
getRegUsage
|
|
From: <sv...@va...> - 2017-04-04 11:09:06
|
Author: petarj
Date: Tue Apr 4 12:09:00 2017
New Revision: 16294
Log:
mips: update the list of fixed bugs for 3.12 release
For the record, bug 348924 has been fixed with VEX r3219.
This fix is already available in 3.12 release.
Modified:
trunk/NEWS
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Tue Apr 4 12:09:00 2017
@@ -274,6 +274,7 @@
303877 valgrind doesn't support compressed debuginfo sections.
345307 Warning about "still reachable" memory when using libstdc++ from gcc 5
348345 Assertion fails for negative lineno
+348924 MIPS: Load doubles through memory so the code compiles with the FPXX ABI
351282 V 3.10.1 MIPS softfloat build broken with GCC 4.9.3 / binutils 2.25.1
351692 Dumps created by valgrind are not readable by gdb (mips32 specific)
351804 Crash on generating suppressions for "printf" call on OS X 10.10
|
|
From: <sv...@va...> - 2017-04-04 10:40:33
|
Author: petarj
Date: Tue Apr 4 11:40:22 2017
New Revision: 16293
Log:
mips: update the list of fixed bugs
Bug 340777 has been resolved with different changes over the last two years.
The last important commit is r16261.
Modified:
trunk/NEWS
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Tue Apr 4 11:40:22 2017
@@ -93,6 +93,7 @@
where XXXXXX is the bug number as listed below.
162848 --log-file output isn't split when a program forks
+340777 Illegal instruction on mips (ar71xx)
341481 MIPS64: Iop_CmpNE32 triggers false warning on MIPS64 platforms
342040 Valgrind mishandles clone with CLONE_VFORK | CLONE_VM that clones
to a different stack.
|