mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-02 10:32:56 +00:00
Fix a major pessimization in the instcombiner. If an allocation instruction
is only used by a cast, and the casted type is the same size as the original allocation, it would eliminate the cast by folding it into the allocation. Unfortunately, it was placing the new allocation instruction right before the cast, which could pull (for example) alloca instructions into the body of a function. This turns statically allocatable allocas into expensive dynamically allocated allocas, which is bad bad bad. This fixes the problem by placing the new allocation instruction at the same place the old one was, duh. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13289 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8c53472d0c
commit
c1526a9da1
@ -2035,7 +2035,7 @@ Instruction *InstCombiner::visitCastInst(CastInst &CI) {
|
||||
New = new MallocInst(CastElTy, Amt, Name);
|
||||
else
|
||||
New = new AllocaInst(CastElTy, Amt, Name);
|
||||
InsertNewInstBefore(New, CI);
|
||||
InsertNewInstBefore(New, *AI);
|
||||
return ReplaceInstUsesWith(CI, New);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user