[PATCH] D19756: Expand aggregate arguments more often on 32-bit Windows

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 29 21:22:13 PDT 2016


hans accepted this revision.
hans added a comment.
This revision is now accepted and ready to land.

This is awesome! lgtm

I only have nits and questions.

Want to reference PR27522 in the patch description?

Also in the description:

> I also expanded the workaround handle C++ records with constructors on


is missing a "to".


================
Comment at: lib/CodeGen/TargetInfo.cpp:1134
@@ +1133,3 @@
+
+/// canExpandIndirectArgument - Test whether an argument type which is to be
+/// passed indirectly (on the stack) would have the equivalent layout if it was
----------------
maybe drop the function name from the comment while here

================
Comment at: lib/CodeGen/TargetInfo.cpp:1151
@@ +1150,3 @@
+    } else {
+      // Don't do this for dynamic classes.
+      if (CXXRD->isDynamicClass())
----------------
Why not for dynamic classes or non-empty bases? Is it just that they hold more data than the immediate fields, or is there some other reason?

================
Comment at: lib/CodeGen/TargetInfo.cpp:1177
@@ +1176,3 @@
+
+  // We can do this if there was no alignment padding.
+  return Size == getContext().getTypeSize(Ty);
----------------
Could there be a situation where the struct is packed, but there would be padding when we expand it?

I suppose it won't happen in practice since we only allow 32/64-bit members..

================
Comment at: lib/CodeGen/TargetInfo.cpp:1397
@@ -1397,1 +1396,3 @@
                                              bool &NeedsPadding) const {
+  // On Windows, aggregates other than HFAs are never passed in registers, and
+  // they do not consume register slots. HFAs have already been dealt with at
----------------
Silly question: what's an HFA? (Also for the patch description)

================
Comment at: test/CodeGen/windows-struct-abi.c:13
@@ -12,3 +12,3 @@
 
-// CHECK: define void @receive_f1(%struct.f1* byval align 4 %a0)
+// CHECK: define void @receive_f1(float %a0.0)
 
----------------
we're sure this float won't end up in a register right?


http://reviews.llvm.org/D19756





More information about the cfe-commits mailing list