[llvm] 5df22e5 - [IRBuilder] Move insertvalue/extractvalue to fold infrastructure
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue May 17 07:05:03 PDT 2022
Author: Nikita Popov
Date: 2022-05-17T16:04:55+02:00
New Revision: 5df22e507b1bd267457d815050b94e81692c33dd
URL: https://github.com/llvm/llvm-project/commit/5df22e507b1bd267457d815050b94e81692c33dd
DIFF: https://github.com/llvm/llvm-project/commit/5df22e507b1bd267457d815050b94e81692c33dd.diff
LOG: [IRBuilder] Move insertvalue/extractvalue to fold infrastructure
Move from the old CreateXYZ() to the new FoldXYZ() mechanism.
This change is likely NFC in practice, because I don't think that
the places using InstSimplifyFolder use insertvalue/extractvalue.
Added:
Modified:
llvm/include/llvm/Analysis/InstSimplifyFolder.h
llvm/include/llvm/Analysis/TargetFolder.h
llvm/include/llvm/IR/ConstantFolder.h
llvm/include/llvm/IR/IRBuilder.h
llvm/include/llvm/IR/IRBuilderFolder.h
llvm/include/llvm/IR/NoFolder.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/InstSimplifyFolder.h b/llvm/include/llvm/Analysis/InstSimplifyFolder.h
index 86c8c164a76a1..818fdc14cc7d3 100644
--- a/llvm/include/llvm/Analysis/InstSimplifyFolder.h
+++ b/llvm/include/llvm/Analysis/InstSimplifyFolder.h
@@ -72,6 +72,16 @@ class InstSimplifyFolder final : public IRBuilderFolder {
return SimplifySelectInst(C, True, False, SQ);
}
+ Value *FoldExtractValue(Value *Agg,
+ ArrayRef<unsigned> IdxList) const override {
+ return SimplifyExtractValueInst(Agg, IdxList, SQ);
+ };
+
+ Value *FoldInsertValue(Value *Agg, Value *Val,
+ ArrayRef<unsigned> IdxList) const override {
+ return SimplifyInsertValueInst(Agg, Val, IdxList, SQ);
+ }
+
//===--------------------------------------------------------------------===//
// Binary Operators
//===--------------------------------------------------------------------===//
@@ -237,16 +247,6 @@ class InstSimplifyFolder final : public IRBuilderFolder {
ArrayRef<int> Mask) const override {
return ConstFolder.CreateShuffleVector(V1, V2, Mask);
}
-
- Value *CreateExtractValue(Constant *Agg,
- ArrayRef<unsigned> IdxList) const override {
- return ConstFolder.CreateExtractValue(Agg, IdxList);
- }
-
- Value *CreateInsertValue(Constant *Agg, Constant *Val,
- ArrayRef<unsigned> IdxList) const override {
- return ConstFolder.CreateInsertValue(Agg, Val, IdxList);
- }
};
} // end namespace llvm
diff --git a/llvm/include/llvm/Analysis/TargetFolder.h b/llvm/include/llvm/Analysis/TargetFolder.h
index df4267f5fb645..c8d53d37b7703 100644
--- a/llvm/include/llvm/Analysis/TargetFolder.h
+++ b/llvm/include/llvm/Analysis/TargetFolder.h
@@ -106,6 +106,22 @@ class TargetFolder final : public IRBuilderFolder {
return nullptr;
}
+ Value *FoldExtractValue(Value *Agg,
+ ArrayRef<unsigned> IdxList) const override {
+ if (auto *CAgg = dyn_cast<Constant>(Agg))
+ return Fold(ConstantExpr::getExtractValue(CAgg, IdxList));
+ return nullptr;
+ };
+
+ Value *FoldInsertValue(Value *Agg, Value *Val,
+ ArrayRef<unsigned> IdxList) const override {
+ auto *CAgg = dyn_cast<Constant>(Agg);
+ auto *CVal = dyn_cast<Constant>(Val);
+ if (CAgg && CVal)
+ return Fold(ConstantExpr::getInsertValue(CAgg, CVal, IdxList));
+ return nullptr;
+ }
+
//===--------------------------------------------------------------------===//
// Binary Operators
//===--------------------------------------------------------------------===//
@@ -271,16 +287,6 @@ class TargetFolder final : public IRBuilderFolder {
ArrayRef<int> Mask) const override {
return Fold(ConstantExpr::getShuffleVector(V1, V2, Mask));
}
-
- Constant *CreateExtractValue(Constant *Agg,
- ArrayRef<unsigned> IdxList) const override {
- return Fold(ConstantExpr::getExtractValue(Agg, IdxList));
- }
-
- Constant *CreateInsertValue(Constant *Agg, Constant *Val,
- ArrayRef<unsigned> IdxList) const override {
- return Fold(ConstantExpr::getInsertValue(Agg, Val, IdxList));
- }
};
}
diff --git a/llvm/include/llvm/IR/ConstantFolder.h b/llvm/include/llvm/IR/ConstantFolder.h
index 6ec316ea61c4f..b1afd3e583ae9 100644
--- a/llvm/include/llvm/IR/ConstantFolder.h
+++ b/llvm/include/llvm/IR/ConstantFolder.h
@@ -94,6 +94,22 @@ class ConstantFolder final : public IRBuilderFolder {
return nullptr;
}
+ Value *FoldExtractValue(Value *Agg,
+ ArrayRef<unsigned> IdxList) const override {
+ if (auto *CAgg = dyn_cast<Constant>(Agg))
+ return ConstantExpr::getExtractValue(CAgg, IdxList);
+ return nullptr;
+ };
+
+ Value *FoldInsertValue(Value *Agg, Value *Val,
+ ArrayRef<unsigned> IdxList) const override {
+ auto *CAgg = dyn_cast<Constant>(Agg);
+ auto *CVal = dyn_cast<Constant>(Val);
+ if (CAgg && CVal)
+ return ConstantExpr::getInsertValue(CAgg, CVal, IdxList);
+ return nullptr;
+ }
+
//===--------------------------------------------------------------------===//
// Binary Operators
//===--------------------------------------------------------------------===//
@@ -272,16 +288,6 @@ class ConstantFolder final : public IRBuilderFolder {
ArrayRef<int> Mask) const override {
return ConstantExpr::getShuffleVector(V1, V2, Mask);
}
-
- Constant *CreateExtractValue(Constant *Agg,
- ArrayRef<unsigned> IdxList) const override {
- return ConstantExpr::getExtractValue(Agg, IdxList);
- }
-
- Constant *CreateInsertValue(Constant *Agg, Constant *Val,
- ArrayRef<unsigned> IdxList) const override {
- return ConstantExpr::getInsertValue(Agg, Val, IdxList);
- }
};
} // end namespace llvm
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index 58d664e03a75f..659960f2e09ef 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2333,20 +2333,17 @@ class IRBuilderBase {
return CreateShuffleVector(V, PoisonValue::get(V->getType()), Mask, Name);
}
- Value *CreateExtractValue(Value *Agg,
- ArrayRef<unsigned> Idxs,
+ Value *CreateExtractValue(Value *Agg, ArrayRef<unsigned> Idxs,
const Twine &Name = "") {
- if (auto *AggC = dyn_cast<Constant>(Agg))
- return Insert(Folder.CreateExtractValue(AggC, Idxs), Name);
+ if (auto *V = Folder.FoldExtractValue(Agg, Idxs))
+ return V;
return Insert(ExtractValueInst::Create(Agg, Idxs), Name);
}
- Value *CreateInsertValue(Value *Agg, Value *Val,
- ArrayRef<unsigned> Idxs,
+ Value *CreateInsertValue(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs,
const Twine &Name = "") {
- if (auto *AggC = dyn_cast<Constant>(Agg))
- if (auto *ValC = dyn_cast<Constant>(Val))
- return Insert(Folder.CreateInsertValue(AggC, ValC, Idxs), Name);
+ if (auto *V = Folder.FoldInsertValue(Agg, Val, Idxs))
+ return V;
return Insert(InsertValueInst::Create(Agg, Val, Idxs), Name);
}
diff --git a/llvm/include/llvm/IR/IRBuilderFolder.h b/llvm/include/llvm/IR/IRBuilderFolder.h
index 2827ab553adca..c51ba8e0c18ec 100644
--- a/llvm/include/llvm/IR/IRBuilderFolder.h
+++ b/llvm/include/llvm/IR/IRBuilderFolder.h
@@ -46,6 +46,12 @@ class IRBuilderFolder {
virtual Value *FoldSelect(Value *C, Value *True, Value *False) const = 0;
+ virtual Value *FoldExtractValue(Value *Agg,
+ ArrayRef<unsigned> IdxList) const = 0;
+
+ virtual Value *FoldInsertValue(Value *Agg, Value *Val,
+ ArrayRef<unsigned> IdxList) const = 0;
+
//===--------------------------------------------------------------------===//
// Binary Operators
//===--------------------------------------------------------------------===//
@@ -120,10 +126,6 @@ class IRBuilderFolder {
Constant *Idx) const = 0;
virtual Value *CreateShuffleVector(Constant *V1, Constant *V2,
ArrayRef<int> Mask) const = 0;
- virtual Value *CreateExtractValue(Constant *Agg,
- ArrayRef<unsigned> IdxList) const = 0;
- virtual Value *CreateInsertValue(Constant *Agg, Constant *Val,
- ArrayRef<unsigned> IdxList) const = 0;
};
} // end namespace llvm
diff --git a/llvm/include/llvm/IR/NoFolder.h b/llvm/include/llvm/IR/NoFolder.h
index ec149747e3f40..d68dcc8217628 100644
--- a/llvm/include/llvm/IR/NoFolder.h
+++ b/llvm/include/llvm/IR/NoFolder.h
@@ -65,6 +65,16 @@ class NoFolder final : public IRBuilderFolder {
return nullptr;
}
+ Value *FoldExtractValue(Value *Agg,
+ ArrayRef<unsigned> IdxList) const override {
+ return nullptr;
+ }
+
+ Value *FoldInsertValue(Value *Agg, Value *Val,
+ ArrayRef<unsigned> IdxList) const override {
+ return nullptr;
+ }
+
//===--------------------------------------------------------------------===//
// Binary Operators
//===--------------------------------------------------------------------===//
@@ -264,16 +274,6 @@ class NoFolder final : public IRBuilderFolder {
ArrayRef<int> Mask) const override {
return new ShuffleVectorInst(V1, V2, Mask);
}
-
- Instruction *CreateExtractValue(Constant *Agg,
- ArrayRef<unsigned> IdxList) const override {
- return ExtractValueInst::Create(Agg, IdxList);
- }
-
- Instruction *CreateInsertValue(Constant *Agg, Constant *Val,
- ArrayRef<unsigned> IdxList) const override {
- return InsertValueInst::Create(Agg, Val, IdxList);
- }
};
} // end namespace llvm
More information about the llvm-commits
mailing list