2015-08-06 Cesar Philippidis <cesar@codesourcery.com>
gcc/
* config/nvptx/nvptx.c (nvptx_expand_work_red_addr): Use a
scratch register for worker_red_sym.
@@ -3415,10 +3415,12 @@ nvptx_expand_work_red_addr (tree exp, rtx target,
/* Return offset into worker reduction array. */
unsigned offset = loop.vars[ix].second;
-
+
+ rtx base = gen_reg_rtx (Pmode);
rtx addr = gen_reg_rtx (Pmode);
+ emit_insn (gen_rtx_SET (base, worker_red_sym));
emit_move_insn (addr,
- gen_rtx_PLUS (Pmode, worker_red_sym, GEN_INT (offset)));
+ gen_rtx_PLUS (Pmode, base, GEN_INT (offset)));
emit_insn (gen_rtx_SET (target,
gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr),
UNSPEC_FROM_SHARED)));