* [PATCH] Saner return value for gen_lowpart_no_emit
@ 2011-07-25 10:37 Paolo Bonzini
2011-07-29 13:19 ` Richard Sandiford
0 siblings, 1 reply; 2+ messages in thread
From: Paolo Bonzini @ 2011-07-25 10:37 UTC (permalink / raw)
To: gcc-patches; +Cc: H.J. Lu
For some reason, when I "invented" gen_lowpart_no_emit I defaulted it
to returning the original value of X. Since gen_lowpart_no_emit is
mostly used to return simplifications, the correct thing to return when
conversion fails is NULL. As a follow-up, every use in simplify-rtx.c
could be changed to try other simplifications if gen_lowpart_no_emit
fails; for now, I'm just avoiding a NULL pointer dereference.
2011-07-25 Paolo Bonzini <bonzini@gnu.org>
* rtlhooks.c (gen_lowpart_no_emit_general): Remove.
* rtlhooks-def.h (gen_lowpart_no_emit_general): Remove prototype.
(RTL_HOOKS_GEN_LOWPART_NO_EMIT): Default to gen_lowpart_if_possible.
Index: rtlhooks.c
===================================================================
--- rtlhooks.c (revision 169877)
+++ rtlhooks.c (working copy)
@@ -80,18 +80,6 @@ gen_lowpart_general (enum machine_mode m
}
}
-/* Similar to gen_lowpart, but cannot emit any instruction via
- copy_to_reg or force_reg. Mainly used in simplify-rtx.c. */
-rtx
-gen_lowpart_no_emit_general (enum machine_mode mode, rtx x)
-{
- rtx result = gen_lowpart_if_possible (mode, x);
- if (result)
- return result;
- else
- return x;
-}
-
rtx
reg_num_sign_bit_copies_general (const_rtx x ATTRIBUTE_UNUSED,
enum machine_mode mode ATTRIBUTE_UNUSED,
Index: rtlhooks-def.h
===================================================================
--- rtlhooks-def.h (revision 169877)
+++ rtlhooks-def.h (working copy)
@@ -23,7 +23,7 @@ along with GCC; see the file COPYING3.
#include "rtl.h"
#define RTL_HOOKS_GEN_LOWPART gen_lowpart_general
-#define RTL_HOOKS_GEN_LOWPART_NO_EMIT gen_lowpart_no_emit_general
+#define RTL_HOOKS_GEN_LOWPART_NO_EMIT gen_lowpart_if_possible
#define RTL_HOOKS_REG_NONZERO_REG_BITS reg_nonzero_bits_general
#define RTL_HOOKS_REG_NUM_SIGN_BIT_COPIES reg_num_sign_bit_copies_general
#define RTL_HOOKS_REG_TRUNCATED_TO_MODE reg_truncated_to_mode_general
@@ -38,7 +38,6 @@ along with GCC; see the file COPYING3.
}
extern rtx gen_lowpart_general (enum machine_mode, rtx);
-extern rtx gen_lowpart_no_emit_general (enum machine_mode, rtx);
extern rtx reg_nonzero_bits_general (const_rtx, enum machine_mode, const_rtx,
enum machine_mode,
unsigned HOST_WIDE_INT,
Index: simplify-rtx.c
===================================================================
--- simplify-rtx.c (revision 169877)
+++ simplify-rtx.c (working copy)
@@ -1039,6 +1039,8 @@ simplify_unary_operation_1 (enum rtx_cod
{
rtx inner =
rtl_hooks.gen_lowpart_no_emit (tmode, XEXP (XEXP (op, 0), 0));
+ if (!inner)
+ return NULL_RTX;
return simplify_gen_unary (GET_CODE (op) == ASHIFTRT
? SIGN_EXTEND : ZERO_EXTEND,
mode, inner, tmode);
@@ -1092,6 +1094,8 @@ simplify_unary_operation_1 (enum rtx_cod
{
rtx inner =
rtl_hooks.gen_lowpart_no_emit (tmode, XEXP (XEXP (op, 0), 0));
+ if (!inner)
+ return NULL_RTX;
return simplify_gen_unary (ZERO_EXTEND, mode, inner, tmode);
}
}
@@ -2768,6 +2772,8 @@ simplify_binary_operation_1 (enum rtx_co
if (trueop1 == constm1_rtx)
{
rtx x = rtl_hooks.gen_lowpart_no_emit (mode, op0);
+ if (!x)
+ return NULL_RTX;
return simplify_gen_unary (NEG, mode, x, mode);
}
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Saner return value for gen_lowpart_no_emit
2011-07-25 10:37 [PATCH] Saner return value for gen_lowpart_no_emit Paolo Bonzini
@ 2011-07-29 13:19 ` Richard Sandiford
0 siblings, 0 replies; 2+ messages in thread
From: Richard Sandiford @ 2011-07-29 13:19 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: gcc-patches, H.J. Lu
Paolo Bonzini <bonzini@gnu.org> writes:
> For some reason, when I "invented" gen_lowpart_no_emit I defaulted it
> to returning the original value of X. Since gen_lowpart_no_emit is
> mostly used to return simplifications, the correct thing to return when
> conversion fails is NULL. As a follow-up, every use in simplify-rtx.c
> could be changed to try other simplifications if gen_lowpart_no_emit
> fails; for now, I'm just avoiding a NULL pointer dereference.
>
> 2011-07-25 Paolo Bonzini <bonzini@gnu.org>
>
> * rtlhooks.c (gen_lowpart_no_emit_general): Remove.
> * rtlhooks-def.h (gen_lowpart_no_emit_general): Remove prototype.
> (RTL_HOOKS_GEN_LOWPART_NO_EMIT): Default to gen_lowpart_if_possible.
OK, thanks.
Richard
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-07-29 13:05 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-25 10:37 [PATCH] Saner return value for gen_lowpart_no_emit Paolo Bonzini
2011-07-29 13:19 ` Richard Sandiford
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).