forked from OSchip/llvm-project
				
			Revert the business end of r164634, and replace it with a different fix. The
reason we were getting two of the same alloca is because of a memmove/memcpy which had the same alloca in both the src and dest. Now we detect that case directly. This has the same testcase as before, but fixes a clang test CodeGenObjC/exceptions.m which runs clang -O2. llvm-svn: 164636
This commit is contained in:
		
							parent
							
								
									9f19349846
								
							
						
					
					
						commit
						a0c16aee0a
					
				| 
						 | 
					@ -2228,6 +2228,9 @@ private:
 | 
				
			||||||
    // alloca that should be re-examined after rewriting this instruction.
 | 
					    // alloca that should be re-examined after rewriting this instruction.
 | 
				
			||||||
    if (AllocaInst *AI
 | 
					    if (AllocaInst *AI
 | 
				
			||||||
          = dyn_cast<AllocaInst>(OtherPtr->stripInBoundsOffsets()))
 | 
					          = dyn_cast<AllocaInst>(OtherPtr->stripInBoundsOffsets()))
 | 
				
			||||||
 | 
					      // Don't revisit the alloca if both sides of the memory transfer are
 | 
				
			||||||
 | 
					      // referring to the same alloca.
 | 
				
			||||||
 | 
					      if (AI != &NewAI)
 | 
				
			||||||
        Pass.Worklist.insert(AI);
 | 
					        Pass.Worklist.insert(AI);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (EmitMemCpy) {
 | 
					    if (EmitMemCpy) {
 | 
				
			||||||
| 
						 | 
					@ -3108,12 +3111,6 @@ bool SROA::promoteAllocas(Function &F) {
 | 
				
			||||||
  if (PromotableAllocas.empty())
 | 
					  if (PromotableAllocas.empty())
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Ensure that the list is unique.
 | 
					 | 
				
			||||||
  std::sort(PromotableAllocas.begin(), PromotableAllocas.end());
 | 
					 | 
				
			||||||
  PromotableAllocas.erase(std::unique(PromotableAllocas.begin(),
 | 
					 | 
				
			||||||
                                      PromotableAllocas.end()),
 | 
					 | 
				
			||||||
                          PromotableAllocas.end());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  NumPromoted += PromotableAllocas.size();
 | 
					  NumPromoted += PromotableAllocas.size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (DT && !ForceSSAUpdater) {
 | 
					  if (DT && !ForceSSAUpdater) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue