mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
IRBuilder: Add RAII objects to reset insertion points or fast math flags.
Inspired by the object from the SLPVectorizer. This found a minor bug in the debug loc restoration in the vectorizer where the location of a following instruction was attached instead of the location from the original instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191673 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -65,26 +65,6 @@ static const unsigned MinVecRegSize = 128;
|
||||
|
||||
static const unsigned RecursionMaxDepth = 12;
|
||||
|
||||
/// RAII pattern to save the insertion point of the IR builder.
|
||||
class BuilderLocGuard {
|
||||
public:
|
||||
BuilderLocGuard(IRBuilder<> &B) : Builder(B), Loc(B.GetInsertPoint()),
|
||||
DbgLoc(B.getCurrentDebugLocation()) {}
|
||||
~BuilderLocGuard() {
|
||||
Builder.SetCurrentDebugLocation(DbgLoc);
|
||||
if (Loc)
|
||||
Builder.SetInsertPoint(Loc);
|
||||
}
|
||||
|
||||
private:
|
||||
// Prevent copying.
|
||||
BuilderLocGuard(const BuilderLocGuard &);
|
||||
BuilderLocGuard &operator=(const BuilderLocGuard &);
|
||||
IRBuilder<> &Builder;
|
||||
AssertingVH<Instruction> Loc;
|
||||
DebugLoc DbgLoc;
|
||||
};
|
||||
|
||||
/// A helper class for numbering instructions in multiple blocks.
|
||||
/// Numbers start at zero for each basic block.
|
||||
struct BlockNumbering {
|
||||
@ -1177,7 +1157,7 @@ Value *BoUpSLP::vectorizeTree(ArrayRef<Value *> VL) {
|
||||
}
|
||||
|
||||
Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
|
||||
BuilderLocGuard Guard(Builder);
|
||||
IRBuilder<>::InsertPointGuard Guard(Builder);
|
||||
|
||||
if (E->VectorizedValue) {
|
||||
DEBUG(dbgs() << "SLP: Diamond merged for " << *E->Scalars[0] << ".\n");
|
||||
|
Reference in New Issue
Block a user