ftynse planned changes to this revision.
ftynse added inline comments.

================
Comment at: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp:736
              "Expected copy/create callback to set replacement value!");
-      if (ReplacementValue == &V)
-        return;
     }
 
----------------
jdoerfert wrote:
> ftynse wrote:
> > jdoerfert wrote:
> > > jdoerfert wrote:
> > > > I was expecting the above logic to be placed here, after the `PrivCB` 
> > > > callback as I assumed we would privatize in the sequential part. Clang 
> > > > does not and we do not either (for now), which is unfortunate. It does 
> > > > duplicate the privatization and makes this patch more complicated than 
> > > > I anticipated. I though we can simply replace `ReplacementValue` by 
> > > > `Reloaded` if `ReplacementValue` wasn't a pointer and therefor put in 
> > > > an alloca. The fact that we need to reload `V` and then "replace twice" 
> > > > seems really unfortunate. 
> > > > 
> > > > What would happen if you do not have `Reloaded` at all but instead make 
> > > > it `V = createlodoad(alloca)`? After all, `Reloaded` is equivalent to 
> > > > `V` in all aspects, right? Would this work? Would we still need the 
> > > > code below? I feel like there must be a minimal solution as we only 
> > > > want to replace the value once on the other side of the call edge.
> > > -"duplicate privatization" +"duplicate replace all uses with"
> > I am not sure I fully follow what you suggest, so I will elaborate on the 
> > two versions I had considered.
> > 
> > 1. Move the code that loads back the value (currently lines 709-725) after 
> > this line.  This will not remove the need for two separate "replace all 
> > uses with": there uses of the original `V` in the body that need to be 
> > replaced with `ReplacementValue`, and there are uses of `V` that could have 
> > been introduced by `PrivCB` for the purpose of //defining// 
> > `ReplacementValue` which should be replaced with `Reloaded` instead. This 
> > doesn't look like it would address your concern about having double 
> > replacement.
> > 
> > 2. I can keep the code that loads back the value in its current place and 
> > pass either `V` or `*Reloaded` to `PrivCB`. This will make sure any 
> > instructions created in `PrivCB` use the `Reloaded` and don't need to be 
> > update via "replace all uses with" pattern. However, this exposes the 
> > pointer mechanism to the caller of `CreateParallel`. The `Value &` that 
> > `PrivCB` receives is not necessarily a value that exists in the user code, 
> > it can be the alloca we constructed in builder. So the implementation of 
> > `PrivCB` needs to be aware of it and can no longer rely on, e.g., keeping a 
> > list of values/instructions that need privatization or directly rely on 
> > types since the type would change. I decided that I did not want to change 
> > the contract that `PrivCB` has with `CreateParallel` because I was not 
> > aware of all its use cases (and have a preference for more "isolated" APIs) 
> > . However, if you think it is acceptable for the builder in order to reduce 
> > the complexity/overhead of the code, I can adapt.
> > 
> > There is a flavor of (2) that changes `PrivCB` to take both `V` and 
> > `Replacement` so that the implementation of `PrivCB` can easily detect when 
> > the pointer mechanism is active.
> Appreciate the detailed explanations!
> 
> > There is a flavor of (2) that changes PrivCB to take both V and Replacement 
> > so that the implementation of PrivCB can easily detect when the pointer 
> > mechanism is active.
> 
> This looks like a sweet-spot. We can avoid adding more replacement logic but 
> the `PrivCB` is aware of what is going on. If you are OK with this solution 
> as well I'd prefer it.
> 
Great, will do this.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92189/new/

https://reviews.llvm.org/D92189

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to