[PATCH] D60456: [RISCV][WIP/RFC] Hard float ABI support

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu May 16 10:32:45 PDT 2019


rjmccall added inline comments.


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:9232
+    if (IsFloat && Size > FLen)
+      return false;
+    // Can't be eligible if an integer type was already found (only fp+int or
----------------
Is this the only consideration for floating-point types?  Clang does have increasing support for `half` / various `float16` types.


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:9236
+    if (IsInt && Field1Ty && Field1Ty->isIntegerTy())
+      return false;
+    if (!Field1Ty) {
----------------
The comment here is wrong because fp+fp is allowed, right?

Is this not already caught by the post-processing checks you do in `detectFPCCEligibleStruct`?  Would it make more sense to just do all those checks there?


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:9258
+    assert(CurOff.isZero() && "Unexpected offset for first field");
+    Field2Ty = CGT.ConvertType(EltTy);
+    Field2Off = getContext().getTypeSizeInChars(EltTy);
----------------
`Field2Ty = Field1Ty`, please.


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:9288
+      return false;
+    for (const FieldDecl *FD : RD->fields()) {
+      const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
----------------
I really expect there to be something in this block about whether the field is a bit-field.  What exactly does your ABI specify if there's a bit-field?


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

https://reviews.llvm.org/D60456





More information about the cfe-commits mailing list