2012/6/29 Richard Guenther <richard.guent...@gmail.com>:
> On Thu, Jun 28, 2012 at 5:23 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
>> Hello,
>>
>> I faced a problem with usage of force_gimple_operand function for
>> specific tree. I have a TARGET_MEM_REF tree node whose address I want
>> to pass as argument to the function call. I use build_fold_addr_expr
>> to get address tree and then pass it to force_gimple_operand which
>> generates strange sequence of statements.
>>
>> Original mem ref: MEM[base: arr_5, index: ivtmp.130_22, step: 8, offset: 0B]
>>
>> build_fold_addr_expr result: &MEM[base: dirlist_5, index:
>> ivtmp.130_22, step: 8, offset: 0B]
>>
>> force_gimple_operand result:
>> D.5638_65 = MEM[base: dirlist_5, index: ivtmp.130_22, step: 8, offset: 0B];
>> D.5639_66 = D.5638_65;
>> D.5640_67 = D.5639_66;
>> D.5642_68 = D.5640_67;
>> D.5641_69 = &D.5642_68;
>>
>> Code produced by force_gimple_operand is incorrect, has changed
>> semantics compared to original tree and fails later at gimple
>> verification.
>>
>> Do I use wrong interfaces?
>
> You cannot take the address of a TARGET_MEM_REF.
>
> Richard.

I found I should use tree_mem_ref_addr. Thanks for help!

Ilya

>
>> Thanks
>> Ilya

Reply via email to