[PATCH] D23245: [Coroutines] Part 6: Elide dynamic allocation of a coroutine frame when possible
    David Majnemer via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Aug 10 08:40:34 PDT 2016
    
    
  
majnemer accepted this revision.
majnemer added a comment.
This revision is now accepted and ready to land.
LGTM with nits addressed.
================
Comment at: lib/Transforms/Coroutines/CoroInstr.h:106-112
@@ -69,1 +105,9 @@
 public:
+  CoroAllocInst *getAlloc() const {
+    auto *V = getArgOperand(ElideArg);
+    if (isa<ConstantPointerNull>(V))
+      return nullptr;
+
+    return cast<CoroAllocInst>(V);
+  }
+  Value *getMem() const { return getArgOperand(MemArg); }
----------------
I'd phrase this another way to make it more conservative:
  CoroAllocInst *getAlloc() const {
    if (auto *CAI = dyn_cast<CoroAllocInst>getArgOperand(ElideArg->stripPointerCasts()))
      return CAI;
    return nullptr;
  }
This way, we won't crash if `undef` or a `bitcast` or `null` or some other weird operation is sitting in the elide arg.
https://reviews.llvm.org/D23245
    
    
More information about the llvm-commits
mailing list