================
@@ -1020,28 +1020,57 @@ class IRBuilderBase {
/// Create a call to intrinsic \p ID with \p Args, mangled using
/// \p OverloadTypes. If \p FMFSource is provided, copy fast-math-flags from
- /// that instruction to the intrinsic.
- LLVM_ABI CallInst *CreateIntrinsic(Intrinsic::ID ID,
- ArrayRef<Type *> OverloadTypes,
- ArrayRef<Value *> Args,
- FMFSource FMFSource = {},
- const Twine &Name = "",
- ArrayRef<OperandBundleDef> OpBundles =
{});
+ /// that instruction to the intrinsic. It is guaranteed not to fold.
+ LLVM_ABI CallInst *CreateIntrinsicWithoutFolding(
+ Intrinsic::ID ID, ArrayRef<Type *> OverloadTypes, ArrayRef<Value *> Args,
+ FMFSource FMFSource = {}, const Twine &Name = "",
+ ArrayRef<OperandBundleDef> OpBundles = {});
/// Create a call to intrinsic \p ID with \p RetTy and \p Args. If
/// \p FMFSource is provided, copy fast-math-flags from that instruction to
- /// the intrinsic.
- LLVM_ABI CallInst *CreateIntrinsic(Type *RetTy, Intrinsic::ID ID,
- ArrayRef<Value *> Args,
- FMFSource FMFSource = {},
- const Twine &Name = "");
+ /// the intrinsic. It is guaranteed not to fold.
+ LLVM_ABI CallInst *CreateIntrinsicWithoutFolding(Type *RetTy,
+ Intrinsic::ID ID,
+ ArrayRef<Value *> Args,
+ FMFSource FMFSource = {},
+ const Twine &Name = "");
/// Create a call to non-overloaded intrinsic \p ID with \p Args. If
/// \p FMFSource is provided, copy fast-math-flags from that instruction to
- /// the intrinsic.
- CallInst *CreateIntrinsic(Intrinsic::ID ID, ArrayRef<Value *> Args,
- FMFSource FMFSource = {}, const Twine &Name = "") {
- return CreateIntrinsic(ID, /*Types=*/{}, Args, FMFSource, Name);
+ /// the intrinsic. It is guranteed not to fold.
+ LLVM_ABI CallInst *CreateIntrinsicWithoutFolding(Intrinsic::ID ID,
+ ArrayRef<Value *> Args,
+ FMFSource FMFSource = {},
+ const Twine &Name = "") {
+ return CreateIntrinsicWithoutFolding(ID, /*Types=*/{}, Args, FMFSource,
+ Name);
+ }
+
+ /// Variant to create a possibly constant-folded intrinsic. An optional \p
+ /// SetFn is called if the intrinsic doesn't fold, and can be used to set
+ /// things like attributes and debug-loc.
+ LLVM_ABI Value *CreateIntrinsic(
+ Intrinsic::ID ID, ArrayRef<Type *> OverloadTypes, ArrayRef<Value *> Args,
+ FMFSource FMFSource = {}, const Twine &Name = "",
+ ArrayRef<OperandBundleDef> OpBundles = {},
+ std::function<void(CallInst *)> SetFn = [](CallInst *) {});
----------------
artagnon wrote:
Ah, but function_ref cannot do lambda captures?
https://github.com/llvm/llvm-project/pull/202738
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits