I’m not so sure about this case, as a smart compiler might decide the loop 
warrants alias checking, and then might only perform a single load and store 
and perform all of the computations in registers (or unroll them completely).

I am not aware of compilers doing this today, but they certainly could.

> On Nov 30, 2018, at 12:13 PM, Burak Serdar <bser...@ieee.org> wrote:
> 
> On Fri, Nov 30, 2018 at 11:09 AM Jakob Borg <ja...@kastelo.net 
> <mailto:ja...@kastelo.net>> wrote:
>> 
>> This should only be valid for a loop that doesn’t include any function 
>> calls, or if the compiler can prove that said function calls don’t involve 
>> any synchronization primitives anywhere in the possible call stack.
> 
> ...or any potential pointer aliases:
> 
> p:=&value
> q:=&value
> 
> for ... {
>   total+=*p
>   (*q)++
> }
> 
>> 
>> So maybe it’s optimized in
>> 
>> for … {
>>  total += *p
>> }
>> 
>> but I wouldn’t bet on it in
>> 
>> for … {
>>  total += *p
>>  foo()
>> }
>> 
>> //jb
>> 
>> On 30 Nov 2018, at 19:01, robert engels <reng...@ix.netcom.com> wrote:
>> 
>> I would think the compiler would be free to optimize this as a single load 
>> outside the loop - as Go has no volatile declaration (to inform the compiler 
>> that some other thread might of changed the value of *p)
>> 
>> On Nov 30, 2018, at 11:58 AM, robert engels <reng...@ix.netcom.com> wrote:
>> 
>> It’s as simple as:
>> 
>> var count = 1
>> var p = &count
>> 
>> func X() {
>> total :=0
>> 
>> for i:=0; i <1000000;i++ {
>>    total = total + *p
>> }
>> }
>> 
>> no ?
>> 
>> On Nov 30, 2018, at 11:48 AM, Mark Volkmann <r.mark.volkm...@gmail.com> 
>> wrote:
>> 
>> I think I failed to come up with a good code example. But suppose I need to 
>> do something with a pointer inside a loop that really does require 
>> dereferencing it and the pointer never changes inside the loop. In that case 
>> will the Go compiler optimize that so the dereference doesn't happen in each 
>> loop iteration?
>> 
>> On Fri, Nov 30, 2018 at 11:36 AM Jan Mercl <0xj...@gmail.com> wrote:
>>> 
>>> 
>>> On Fri, Nov 30, 2018 at 6:16 PM Mark Volkmann <r.mark.volkm...@gmail.com> 
>>> wrote:
>>> 
>>>> Will the Go compiler optimize the pointer dereference so it doesn't happen 
>>>> in every loop iteration? If not, is it common practice to do that outside 
>>>> the loop like this?
>>>> 
>>>> myValue := *myPtr
>>>> for _, v := range values {
>>>>        fmt.Printf("%v %v\n", myValue, v)
>>>> }
>>> 
>>> There's no pointer dereference inside the loop. But there's an allocation 
>>> inside the loop, on every iteration, that puts a pointer to a copy of 
>>> myValue into an interface{} that's passed to fmt.Printf. The allocation can 
>>> be probably avoided:
>>> 
>>> myValue := interface{}(*myPtr)
>>> for _, v := range values {
>>>        fmt.Printf("%v %v\n", myValue, v)
>>> }
>>> 
>>> But the %v verb handle pointers in many cases well. If that holds for the 
>>> type of *myPtr then simply:
>>> 
>>> for _, v := range values {
>>>        fmt.Printf("%v %v\n", myPtr, v)
>>> }
>>> 
>>> is what could be good enough.
>>> 
>>> --
>>> 
>>> -j
>> 
>> 
>> 
>> --
>> R. Mark Volkmann
>> Object Computing, Inc.
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>> 
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to