diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -1395,6 +1395,12 @@ let arguments = (ins LLVM_Type:$a, LLVM_Type:$b); } +class LLVM_BinaryIntrinsicOp traits = []> : + LLVM_OneResultIntrOp { + let arguments = (ins LLVM_Type:$a, LLVM_Type:$b); +} + class LLVM_TernarySameArgsIntrinsicOp traits = []> : LLVM_OneResultIntrOp { @@ -1426,6 +1432,7 @@ def LLVM_SinOp : LLVM_UnaryIntrinsicOp<"sin">; def LLVM_SqrtOp : LLVM_UnaryIntrinsicOp<"sqrt">; def LLVM_PowOp : LLVM_BinarySameArgsIntrinsicOp<"pow">; +def LLVM_PowIOp : LLVM_BinaryIntrinsicOp<"powi">; def LLVM_BitReverseOp : LLVM_UnaryIntrinsicOp<"bitreverse">; def LLVM_CountLeadingZerosOp : LLVM_CountZerosIntrinsicOp<"ctlz">; def LLVM_CountTrailingZerosOp : LLVM_CountZerosIntrinsicOp<"cttz">; diff --git a/mlir/test/Dialect/LLVMIR/roundtrip.mlir b/mlir/test/Dialect/LLVMIR/roundtrip.mlir --- a/mlir/test/Dialect/LLVMIR/roundtrip.mlir +++ b/mlir/test/Dialect/LLVMIR/roundtrip.mlir @@ -146,6 +146,9 @@ // CHECK: "llvm.intr.pow"(%[[FLOAT]], %[[FLOAT]]) : (f32, f32) -> f32 %31 = "llvm.intr.pow"(%arg1, %arg1) : (f32, f32) -> f32 +// CHECK: "llvm.intr.powi"(%[[FLOAT]], %[[I32]]) : (f32, i32) -> f32 + %a31 = "llvm.intr.powi"(%arg1, %arg0) : (f32, i32) -> f32 + // CHECK: "llvm.intr.bitreverse"(%{{.*}}) : (i32) -> i32 %32 = "llvm.intr.bitreverse"(%arg0) : (i32) -> i32