Commit 755cd5a9 by Segher Boessenkool Committed by Segher Boessenkool

rs6000: Fix a mistake in cstore_si_as_di (PR68865, PR68879)

convert_move does not know how to zero-extend a constant integer to the
target mode -- simply because it does not know the source mode.  As a
result, 32-bit SImode with the high bit set would be effectively sign-
extended instead of zero-extended.

This patch fixes it.


	PR target/68865
	PR target/68879
	* config/rs6000/rs6000.md (cstore_si_as_di): Force all operands
	into registers.

From-SVN: r231621
parent 150cf347
2015-12-14 Segher Boessenkool <segher@kernel.crashing.org>
PR target/68865
PR target/68879
* config/rs6000/rs6000.md (cstore_si_as_di): Force all operands
into registers.
2015-12-14 Richard Biener <rguenther@suse.de> 2015-12-14 Richard Biener <rguenther@suse.de>
Revert accidentially applied Revert accidentially applied
...@@ -10631,6 +10631,8 @@ ...@@ -10631,6 +10631,8 @@
int uns_flag = unsigned_comparison_operator (operands[1], VOIDmode) ? 1 : 0; int uns_flag = unsigned_comparison_operator (operands[1], VOIDmode) ? 1 : 0;
enum rtx_code cond_code = signed_condition (GET_CODE (operands[1])); enum rtx_code cond_code = signed_condition (GET_CODE (operands[1]));
operands[2] = force_reg (SImode, operands[2]);
operands[3] = force_reg (SImode, operands[3]);
rtx op1 = gen_reg_rtx (DImode); rtx op1 = gen_reg_rtx (DImode);
rtx op2 = gen_reg_rtx (DImode); rtx op2 = gen_reg_rtx (DImode);
convert_move (op1, operands[2], uns_flag); convert_move (op1, operands[2], uns_flag);
......
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