Translate LLVMIR llvm.noundef attribute to its equivalent in LLVM IR.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D136324
static StringRef getByRefAttrName() { return "llvm.byref"; }
static StringRef getStructRetAttrName() { return "llvm.sret"; }
static StringRef getInAllocaAttrName() { return "llvm.inalloca"; }
+ static StringRef getNoUndefAttrName() { return "llvm.noundef"; }
/// Verifies if the attribute is a well-formed value for "llvm.struct_attrs"
static LogicalResult verifyStructAttr(
.addAttribute(llvm::Attribute::Nest));
}
+ if (auto attr = func.getArgAttrOfType<UnitAttr>(
+ argIdx, LLVMDialect::getNoUndefAttrName())) {
+ // llvm.noundef can be added to any argument type.
+ llvmArg.addAttrs(llvm::AttrBuilder(llvmArg.getContext())
+ .addAttribute(llvm::Attribute::NoUndef));
+ }
+
mapValue(mlirArg, &llvmArg);
argIdx++;
}
llvm.return
}
+// CHECK-LABEL: define void @noundefattr(i32 noundef %
+llvm.func @noundefattr(%arg0: i32 {llvm.noundef}) {
+ llvm.return
+}
+
// CHECK-LABEL: define void @llvm_align(ptr align 4 {{%*.}})
llvm.func @llvm_align(%arg0: !llvm.ptr<f32> {llvm.align = 4}) {
llvm.return