[PATCH] D52838: [COFF, ARM64] Add __getReg intrinsic

Eli Friedman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 3 14:17:12 PDT 2018


efriedma added a comment.

read_register only allows reading reserved registers because reading an allocatable register is meaningless (the compiler can store arbitrary data in allocatable registers).

The same applies to __getReg; given that, I would assume real code doesn't use anything other than `__getReg(18)` or `__getReg(31)`, so we can just reject any other constant.



================
Comment at: lib/CodeGen/CGBuiltin.cpp:6589
+      CGM.Error(E->getArg(0)->getBeginLoc(),
+                "__getReg expects a constant input parameter");
+
----------------
Semantic checks belong in SemaChecking, not here.  IIRC you can request constant checking in the .def file, although I don't remember the syntax off the top of my head.


================
Comment at: lib/CodeGen/CGBuiltin.cpp:6598
+    Value.toString(StrVal);
+    std::string Reg = "x" + std::string(StrVal.c_str());
+
----------------
There is no register named x31.  Maybe you need a special case here to use "sp" if the input is 31?


Repository:
  rC Clang

https://reviews.llvm.org/D52838





More information about the cfe-commits mailing list