[PATCH] D73664: [PowerPC][Future] Add Support For Functions That Do Not Use A TOC.

Nemanja Ivanovic via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 3 20:10:00 PST 2020


nemanjai added inline comments.


================
Comment at: llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp:241
+          LocalOffset->getLoc(),
+          ".localentry expression is not a valid power of 2.");
+    case 0:
----------------
anil9 wrote:
> Nit : The message is fine just that we are allowing 0 which is not a power of 2, and we are not allowing 2 which is a power of 2. In the second case we will be seeing this message. It is tempting to bring up the relation of power of 2 to this code, but actually it does not exist so it is better not to talk about power of 2 here. This got me confused too in the beginning. 
Please note the comment elsewhere - the message is the message the GNU assembler produces for the same case.


================
Comment at: llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp:242
+          ".localentry expression is not a valid power of 2.");
+    case 0:
+      return 0;
----------------
anil9 wrote:
> nemanjai wrote:
> > I believe the cases can be rewritten more concisely as:
> > ```
> > case 0:
> > case 1:
> > case 4:
> > case 8:
> > case 16:
> > case 32:
> > case 64:
> >   return Log2(Offset) << ELF::STO_PPC64_LOCAL_BIT;
> > ```
> > That way we still only allow the expected values and we have a nice simple expression for what we return.
> Lo2 wont work here, Log2 of 0 will be negative infinity and of 1 will be zero. 
> 
Ah, of course. Good point. It would have to be:
```
case 0: return 0;
case 1:
case 4:
case 8:
case 16:
case 32:
case 64:
  return Log2(Offset) << ELF::STO_PPC64_LOCAL_BIT;
```


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

https://reviews.llvm.org/D73664





More information about the llvm-commits mailing list