Skip to content
This repository was archived by the owner on Apr 23, 2021. It is now read-only.

Commit 199f413

Browse files
schweitzpgitensorflower-gardener
authored andcommitted
Add support for the LLVM FNeg instruction
Closes #216 COPYBARA_INTEGRATE_REVIEW=#216 from schweitzpgi:llvmir-fneg-op f9b5f18 PiperOrigin-RevId: 278795325
1 parent b289b88 commit 199f413

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

include/mlir/Dialect/LLVMIR/LLVMOps.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ class LLVM_ArithmeticOp<string mnemonic, string builderFunc,
132132
let parser = [{ return impl::parseOneResultSameOperandTypeOp(parser, result); }];
133133
let printer = [{ mlir::impl::printOneResultOp(this->getOperation(), p); }];
134134
}
135+
class LLVM_UnaryArithmeticOp<string mnemonic, string builderFunc,
136+
list<OpTrait> traits = []> :
137+
LLVM_OneResultOp<mnemonic,
138+
!listconcat([NoSideEffect, SameOperandsAndResultType], traits)>,
139+
Arguments<(ins LLVM_Type:$operand)>,
140+
LLVM_Builder<"$res = builder." # builderFunc # "($operand);"> {
141+
let parser = [{ return impl::parseOneResultSameOperandTypeOp(parser, result); }];
142+
let printer = [{ mlir::impl::printOneResultOp(this->getOperation(), p); }];
143+
}
135144

136145
// Integer binary operations.
137146
def LLVM_AddOp : LLVM_ArithmeticOp<"add", "CreateAdd", [Commutative]>;
@@ -247,6 +256,7 @@ def LLVM_FSubOp : LLVM_ArithmeticOp<"fsub", "CreateFSub">;
247256
def LLVM_FMulOp : LLVM_ArithmeticOp<"fmul", "CreateFMul">;
248257
def LLVM_FDivOp : LLVM_ArithmeticOp<"fdiv", "CreateFDiv">;
249258
def LLVM_FRemOp : LLVM_ArithmeticOp<"frem", "CreateFRem">;
259+
def LLVM_FNegOp : LLVM_UnaryArithmeticOp<"fneg", "CreateFNeg">;
250260

251261
// Memory-related operations.
252262
def LLVM_AllocaOp :

test/Dialect/LLVMIR/roundtrip.mlir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ func @ops(%arg0 : !llvm.i32, %arg1 : !llvm.float) {
9494
%27 = llvm.fpext %arg1 : !llvm.float to !llvm.x86_fp80
9595
%28 = llvm.fpext %arg1 : !llvm.float to !llvm.fp128
9696

97+
// CHECK: %29 = llvm.fneg %arg1 : !llvm.float
98+
%29 = llvm.fneg %arg1 : !llvm.float
99+
97100
// CHECK: llvm.return
98101
llvm.return
99102
}

test/Target/llvmir.mlir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,9 @@ llvm.func @ops(%arg0: !llvm.float, %arg1: !llvm.float, %arg2: !llvm.i32, %arg3:
811811
// CHECK-NEXT: %22 = ashr i32 %2, %3
812812
%18 = llvm.ashr %arg2, %arg3 : !llvm.i32
813813

814+
// CHECK-NEXT: fneg float %0
815+
%19 = llvm.fneg %arg0 : !llvm.float
816+
814817
llvm.return %10 : !llvm<"{ float, i32 }">
815818
}
816819

0 commit comments

Comments
 (0)