Diego, a bit more info. It seems that gimplify_operand is being called in the rewrite_uses pass of tree-ssa-loop-ivopts.c. gimplify_operand() is working on this expr:
<plus_expr 0x2aaaae0ee5f0 type <integer_type 0x2aaaaded5600 unsigned int public unsigned SI size <integer_cst 0x2aaaadec5c00 constant invariant 32> unit size <integer_cst 0x2aaaadec5720 constant invariant 4> align 32 symtab 0 alias set -1 precision 32 min <integer_cst 0x2aaaadec5cf0 0> max <integer_cst 0x2aaaadec5cc0 4294967295>> constant invariant arg 0 <nop_expr 0x2aaaae0eda80 type <integer_type 0x2aaaaded5600 unsigned int> constant invariant arg 0 <view_convert_expr 0x2aaaae0edb80 type <pointer_type 0x2aaaae0d6300> constant static arg 0 <constructor 0x2aaaae0e9a80 type <record_type 0x2aaaadf6ea80 upc_shared_ptr_t> constant>>> arg 1 <integer_cst 0x2aaaae0e9900 type <integer_type 0x2aaaaded5600 unsigned int> constant invari As you can can see, we coerce a constructor into a UPC shared pointer, which works something like a pointer, but it is not inter-operable directly with integers. Typically, we have to locate the places where these sorts of optimizations are attempted and disable them for UPC shared pointers. Thanks for you help. It got me pointed in the right direction. - Gary