Commit 19ef5a8f by Andrew Stubbs Committed by Andrew Stubbs

[pr82089] Don't sign-extend SFV 1 in BImode

This is an update of the patch posted to PR82089 long ago.  We ran into the
same bug on GCN, so we need this fixed as part of this series.

2018-09-27  Andrew Stubbs  <ams@codesourcery.com>
            Tom de Vries  <tom@codesourcery.com>

	PR 82089

	gcc/
	* expmed.c (emit_cstore): Fix handling of result_mode == BImode and
	STORE_FLAG_VALUE == 1.

Co-Authored-By: Tom de Vries <tom@codesourcery.com>

From-SVN: r264666
parent 90e79377
2018-09-27 Andrew Stubbs <ams@codesourcery.com>
Tom de Vries <tom@codesourcery.com>
PR 82089
* expmed.c (emit_cstore): Fix handling of result_mode == BImode and
STORE_FLAG_VALUE == 1.
2018-09-27 Andreas Krebbel <krebbel@linux.ibm.com>
* config/s390/s390.md (PPA_TX_ABORT, PPA_OOO_BARRIER): New
......
......@@ -5464,11 +5464,14 @@ emit_cstore (rtx target, enum insn_code icode, enum rtx_code code,
If STORE_FLAG_VALUE does not have the sign bit set when
interpreted in MODE, we can do this conversion as unsigned, which
is usually more efficient. */
if (GET_MODE_SIZE (int_target_mode) > GET_MODE_SIZE (result_mode))
if (GET_MODE_PRECISION (int_target_mode) > GET_MODE_PRECISION (result_mode))
{
convert_move (target, subtarget,
val_signbit_known_clear_p (result_mode,
STORE_FLAG_VALUE));
gcc_assert (GET_MODE_PRECISION (result_mode) != 1
|| STORE_FLAG_VALUE == 1 || STORE_FLAG_VALUE == -1);
bool unsignedp = (STORE_FLAG_VALUE >= 0);
convert_move (target, subtarget, unsignedp);
op0 = target;
result_mode = int_target_mode;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment