|  | @@ -0,0 +1,45 @@
 | 
											
												
													
														|  | 
 |  | +2020-01-23  Jakub Jelinek  <jakub@redhat.com>
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	PR rtl-optimization/93402
 | 
											
												
													
														|  | 
 |  | +	* postreload.c (reload_combine_recognize_pattern): Don't try to adjust
 | 
											
												
													
														|  | 
 |  | +	USE insns.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	* gcc.c-torture/execute/pr93402.c: New test.
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +--- a/gcc/postreload.c.jj	2020-01-12 11:54:36.000000000 +0100
 | 
											
												
													
														|  | 
 |  | ++++ b/gcc/postreload.c	2020-01-23 17:23:25.359929516 +0100
 | 
											
												
													
														|  | 
 |  | +@@ -1078,6 +1078,10 @@ reload_combine_recognize_pattern (rtx_in
 | 
											
												
													
														|  | 
 |  | +       struct reg_use *use = reg_state[regno].reg_use + i;
 | 
											
												
													
														|  | 
 |  | +       if (GET_MODE (*use->usep) != mode)
 | 
											
												
													
														|  | 
 |  | + 	return false;
 | 
											
												
													
														|  | 
 |  | ++      /* Don't try to adjust (use (REGX)).  */
 | 
											
												
													
														|  | 
 |  | ++      if (GET_CODE (PATTERN (use->insn)) == USE
 | 
											
												
													
														|  | 
 |  | ++	  && &XEXP (PATTERN (use->insn), 0) == use->usep)
 | 
											
												
													
														|  | 
 |  | ++	return false;
 | 
											
												
													
														|  | 
 |  | +     }
 | 
											
												
													
														|  | 
 |  | + 
 | 
											
												
													
														|  | 
 |  | +   /* Look for (set (REGX) (CONST_INT))
 | 
											
												
													
														|  | 
 |  | +--- a/gcc/testsuite/gcc.c-torture/execute/pr93402.c.jj	2020-01-23 17:25:46.496803852 +0100
 | 
											
												
													
														|  | 
 |  | ++++ b/gcc/testsuite/gcc.c-torture/execute/pr93402.c	2020-01-23 17:25:05.221425501 +0100
 | 
											
												
													
														|  | 
 |  | +@@ -0,0 +1,21 @@
 | 
											
												
													
														|  | 
 |  | ++/* PR rtl-optimization/93402 */
 | 
											
												
													
														|  | 
 |  | ++
 | 
											
												
													
														|  | 
 |  | ++struct S { unsigned int a; unsigned long long b; };
 | 
											
												
													
														|  | 
 |  | ++
 | 
											
												
													
														|  | 
 |  | ++__attribute__((noipa)) struct S
 | 
											
												
													
														|  | 
 |  | ++foo (unsigned long long x)
 | 
											
												
													
														|  | 
 |  | ++{
 | 
											
												
													
														|  | 
 |  | ++  struct S ret;
 | 
											
												
													
														|  | 
 |  | ++  ret.a = 0;
 | 
											
												
													
														|  | 
 |  | ++  ret.b = x * 11111111111ULL + 111111111111ULL;
 | 
											
												
													
														|  | 
 |  | ++  return ret;
 | 
											
												
													
														|  | 
 |  | ++}
 | 
											
												
													
														|  | 
 |  | ++
 | 
											
												
													
														|  | 
 |  | ++int
 | 
											
												
													
														|  | 
 |  | ++main ()
 | 
											
												
													
														|  | 
 |  | ++{
 | 
											
												
													
														|  | 
 |  | ++  struct S a = foo (1);
 | 
											
												
													
														|  | 
 |  | ++  if (a.a != 0 || a.b != 122222222222ULL)
 | 
											
												
													
														|  | 
 |  | ++    __builtin_abort ();
 | 
											
												
													
														|  | 
 |  | ++  return 0;
 | 
											
												
													
														|  | 
 |  | ++}
 |