Author: hans Date: Fri Jul 22 09:08:45 2016 New Revision: 276418 URL: http://llvm.org/viewvc/llvm-project?rev=276418&view=rev Log: Merging r276181: ------------------------------------------------------------------------ r276181 | majnemer | 2016-07-20 14:05:01 -0700 (Wed, 20 Jul 2016) | 6 lines
[GVNHoist] Don't hoist PHI nodes We hoisted PHIs without respecting their special insertion point in the block, leading to verfier errors. This fixes PR28626. ------------------------------------------------------------------------ Added: llvm/branches/release_39/test/Transforms/GVN/pr28626.ll - copied unchanged from r276181, llvm/trunk/test/Transforms/GVN/pr28626.ll Modified: llvm/branches/release_39/ (props changed) llvm/branches/release_39/lib/Transforms/Scalar/GVNHoist.cpp Propchange: llvm/branches/release_39/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Jul 22 09:08:45 2016 @@ -1,3 +1,3 @@ /llvm/branches/Apple/Pertwee:110850,110961 /llvm/branches/type-system-rewrite:133420-134817 -/llvm/trunk:155241,275870,275879,275898,275935,275946 +/llvm/trunk:155241,275870,275879,275898,275935,275946,276181 Modified: llvm/branches/release_39/lib/Transforms/Scalar/GVNHoist.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/lib/Transforms/Scalar/GVNHoist.cpp?rev=276418&r1=276417&r2=276418&view=diff ============================================================================== --- llvm/branches/release_39/lib/Transforms/Scalar/GVNHoist.cpp (original) +++ llvm/branches/release_39/lib/Transforms/Scalar/GVNHoist.cpp Fri Jul 22 09:08:45 2016 @@ -589,16 +589,20 @@ public: bool makeOperandsAvailable(Instruction *Repl, BasicBlock *HoistPt) const { // Check whether the GEP of a ld/st can be synthesized at HoistPt. - Instruction *Gep = nullptr; + GetElementPtrInst *Gep = nullptr; Instruction *Val = nullptr; if (auto *Ld = dyn_cast<LoadInst>(Repl)) - Gep = dyn_cast<Instruction>(Ld->getPointerOperand()); + Gep = dyn_cast<GetElementPtrInst>(Ld->getPointerOperand()); if (auto *St = dyn_cast<StoreInst>(Repl)) { - Gep = dyn_cast<Instruction>(St->getPointerOperand()); + Gep = dyn_cast<GetElementPtrInst>(St->getPointerOperand()); Val = dyn_cast<Instruction>(St->getValueOperand()); } - if (!Gep || !isa<GetElementPtrInst>(Gep)) + if (!Gep) + return false; + + // PHIs may only be inserted at the start of a block. + if (Val && isa<PHINode>(Val)) return false; // Check whether we can compute the Gep at HoistPt. _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits