https://bugs.kde.org/show_bug.cgi?id=430485

            Bug ID: 430485
           Summary: expr_is_guardable doesn't handle Iex_Qop
           Product: valgrind
           Version: unspecified
          Platform: Other
               URL: https://bugzilla.redhat.com/show_bug.cgi?id=1844910
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: general
          Assignee: jsew...@acm.org
          Reporter: m...@klomp.org
  Target Milestone: ---

After implementing Iop_MAdd/Sub for arm64 (bug #426014) we got a report that
"the impossible happened":

> MSubF64(t15,t21,t22,t23)
> vex: the `impossible' happened:
>    expr_is_guardable: unhandled expr
> vex storage: T total 3295105024 bytes allocated
> vex storage: P total 0 bytes allocated
> 
> valgrind: the 'impossible' happened:
>    LibVEX called failure_exit().

And indeed expr_is_guardable doesn't handle Iex_Qop the tag IRExpr_Qop uses.
It seems something like the following should work (currently untested):

diff --git a/VEX/priv/guest_generic_bb_to_IR.c
b/VEX/priv/guest_generic_bb_to_IR.c
index 0cee970e4..1e72ddacd 100644
--- a/VEX/priv/guest_generic_bb_to_IR.c
+++ b/VEX/priv/guest_generic_bb_to_IR.c
@@ -422,6 +422,8 @@ static Bool expr_is_guardable ( const IRExpr* e )
          return !primopMightTrap(e->Iex.Binop.op);
       case Iex_Triop:
          return !primopMightTrap(e->Iex.Triop.details->op);
+      case Iex_Qop:
+         return !primopMightTrap(e->Iex.Qop.details->op);
       case Iex_ITE:
       case Iex_CCall:
       case Iex_Get:

I am just surprised this hasn't come up before since other arches (ppc, s390)
also implement scalar FMA operations.

Some more background in https://bugzilla.redhat.com/show_bug.cgi?id=1844910
(the fedora valgrind package has the arm64 fma patch backported).

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to