[PATCH] Reverse order in which base and derived pointers are lowered in the statepoint StackMap section

Philip Reames listmail at philipreames.com
Wed May 6 11:30:22 PDT 2015


I generally approve of the intent of the change.  Comments inline.

p.s. Once we LGTM this, please hold off on submission until at least Monday of next week.  I want interested parties to have a chance to see this.


REPOSITORY
  rL LLVM

================
Comment at: lib/CodeGen/SelectionDAG/StatepointLowering.cpp:482
@@ -481,3 +481,3 @@
   for (unsigned i = 0; i < Bases.size() * 2; ++i) {
-    // Even elements will contain base, odd elements - derived ptr
-    const Value *V = i % 2 ? Bases[i / 2] : Ptrs[i / 2];
+    // Even elements will contain base, odd elements - derived ptr,
+    // but it does not matter in which order we reserve slots for this values
----------------
I would prefer to see this loop structured analogously to the other one you changed.  As this change illustrates, the modulo trick here is unnecessarily complex and subject to mistakes.  

================
Comment at: test/CodeGen/X86/statepoint-stackmap-format.ll:11
@@ -10,2 +10,3 @@
 
-define i1 @test(i32 addrspace(1)* %ptr) gc "statepoint-example" {
+define i1 @test(i32 addrspace(1)* %ptr_base, i32 addrspace(1)* %ptr_derived)
+  gc "statepoint-example" {
----------------
This is an invalid test.  An argument can not be a derived pointer.  This is currently utterly unsupported.  

You should create ptr_derived by bitcasting or gepping from the existing argument.

http://reviews.llvm.org/D9527

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list