dylanmckay added inline comments.
================
Comment at: llvm/lib/IR/AutoUpgrade.cpp:4297
+ // address space of 1.
+ if (T.isAMDGPU() && !DL.contains("-G") && !DL.startswith("G")) {
+ return DL.empty() ? std::string("G1") : (DL + "-G1").str();
----------------
dylanmckay wrote:
> arichardson wrote:
> > akhuang wrote:
> > > arichardson wrote:
> > > > arsenm wrote:
> > > > > I would expect datalayout upgrades to work by parsing the old string,
> > > > > and checking the field values inside. I guess directly checking the
> > > > > string isn't a new problem here
> > > > I agree that would be less error prone. I wonder if there are cases
> > > > where the old string may fail to parse so you have to do the textual
> > > > upgrade first. I'm happy to make this change.
> > > >
> > > > @akhuang is there a reason you used string parsing in D67631? Any
> > > > objections to changing the code to parse the datalayout and add missing
> > > > attributes?
> > > I don't think so; parsing the datalayout sounds better to me too.
> > I just looked into parsing the DataLayout instead. Unfortunately the
> > resulting code is more complicated since there are no setters in DataLayout
> > and no way to create a normalized representation.
> > There's also no way to differentiate between no `-G ` passed and `-G0` so
> > something like `e-p:64:64-G0` will be converted to `e-p:64:64-G0-G1`
> >
> I suspect it would be possible to use the existing `DataLayout(StringRef)`
> constructor on the string, then call `getDefaultGlobalsAddressSpace()` on it,
> explicitly ignoring modifying the datalayout for the special case of an
> explicit `-G0`.
>
> For example,
>
> ```cpp
> DataLayout ParsedDL = DataLayout(DL);
> if (T.isAMDGPU() && !DL.contains("-G0")
> &&ParsedDL.getDefaultGlobalsAddressSpace() != 1) {
> return DL.empty() ? std::string("G1") : (DL + "-G1").str();
> }
> ```
>
> As I understand it, this would cover the fact that we cannot distinguish
> between an explicit default globals space of zero, and a datalayout without a
> default globals space (also `DL::getDefaultGlobalsAddressSpace() == 0`) by
> explicitly excluding the special case `-G0`
To be completely correct it should not assume that the global address space is
not at the very start of the data layout as my initial snippet did. I've
removed the `-` prefix from the `contains` check
```
DataLayout ParsedDL = DataLayout(DL);
if (T.isAMDGPU() && !DL.contains("G0")
&&ParsedDL.getDefaultGlobalsAddressSpace() != 1) {
return DL.empty() ? std::string("G1") : (DL + "-G1").str();
}
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84345/new/
https://reviews.llvm.org/D84345
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits