Add FPToSI/FPExt/FPTrunc cast ops to the LLVM dialect.
authorEric Schweitz <eric.schweitz@pgroup.com>
Mon, 26 Aug 2019 21:18:47 +0000 (14:18 -0700)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Mon, 26 Aug 2019 21:19:19 +0000 (14:19 -0700)
Closes tensorflow/mlir#99

PiperOrigin-RevId: 265538731

mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/test/Target/llvmir.mlir

index fcba2b7..f4f6f20 100644 (file)
@@ -300,6 +300,9 @@ def LLVM_SExtOp : LLVM_CastOp<"sext", "CreateSExt">;
 def LLVM_ZExtOp : LLVM_CastOp<"zext", "CreateZExt">;
 def LLVM_TruncOp : LLVM_CastOp<"trunc", "CreateTrunc">;
 def LLVM_SIToFPOp : LLVM_CastOp<"sitofp", "CreateSIToFP">;
+def LLVM_FPToSIOp : LLVM_CastOp<"fptosi", "CreateFPToSI">;
+def LLVM_FPExtOp : LLVM_CastOp<"fpext", "CreateFPExt">;
+def LLVM_FPTruncOp : LLVM_CastOp<"fptrunc", "CreateFPTrunc">;
 
 // Call-related operations.
 def LLVM_CallOp : LLVM_Op<"call">,
index 90b10cb..51a5e70 100644 (file)
@@ -919,3 +919,13 @@ func @constants() -> !llvm<"<4 x float>"> {
   %0 = llvm.constant(sparse<[[0]], [4.2e+01]> : vector<4xf32>) : !llvm<"<4 x float>">
   llvm.return %0 : !llvm<"<4 x float>">
 }
+
+func @fp_casts(%fp1 : !llvm<"float">, %fp2 : !llvm<"double">) -> !llvm.i16 {
+// CHECK:    fptrunc double {{.*}} to float
+  %a = llvm.fptrunc %fp2 : !llvm<"double"> to !llvm<"float">
+// CHECK:    fpext float {{.*}} to double
+  %b = llvm.fpext %fp1 : !llvm<"float"> to !llvm<"double">
+// CHECK:    fptosi double {{.*}} to i16
+  %c = llvm.fptosi %b : !llvm<"double"> to !llvm.i16
+  llvm.return %c : !llvm.i16
+}