[mlir] Fix lowering of multi-dimensional vector log1p to LLVM
authorBenjamin Kramer <benny.kra@googlemail.com>
Thu, 29 Apr 2021 13:26:10 +0000 (15:26 +0200)
committerBenjamin Kramer <benny.kra@googlemail.com>
Thu, 29 Apr 2021 19:53:52 +0000 (21:53 +0200)
This was using the untransformed operand, leading to invalid IR.

Differential Revision: https://reviews.llvm.org/D101531

mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir

index ddfb349..32ff6b5 100644 (file)
@@ -2396,7 +2396,7 @@ struct Log1pOpLowering : public ConvertOpToLLVMPattern<math::Log1pOp> {
           auto one =
               rewriter.create<LLVM::ConstantOp>(loc, llvm1DVectorTy, splatAttr);
           auto add = rewriter.create<LLVM::FAddOp>(loc, llvm1DVectorTy, one,
-                                                   transformed.operand());
+                                                   operands[0]);
           return rewriter.create<LLVM::LogOp>(loc, llvm1DVectorTy, add);
         },
         rewriter);
index 1d12eb9..b53de92 100644 (file)
@@ -24,6 +24,19 @@ func @log1p(%arg0 : f32) {
 
 // -----
 
+// CHECK-LABEL: func @log1p_2dvector(
+func @log1p_2dvector(%arg0 : vector<4x3xf32>) {
+  // CHECK: %[[EXTRACT:.*]] = llvm.extractvalue %arg0[0] : !llvm.array<4 x vector<3xf32>>
+  // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<3xf32>) : vector<3xf32>
+  // CHECK: %[[ADD:.*]] = llvm.fadd %[[ONE]], %[[EXTRACT]] : vector<3xf32>
+  // CHECK: %[[LOG:.*]] = "llvm.intr.log"(%[[ADD]]) : (vector<3xf32>) -> vector<3xf32>
+  // CHECK: %[[INSERT:.*]] = llvm.insertvalue %[[LOG]], %0[0] : !llvm.array<4 x vector<3xf32>>
+  %0 = math.log1p %arg0 : vector<4x3xf32>
+  std.return
+}
+
+// -----
+
 // CHECK-LABEL: func @rsqrt(
 // CHECK-SAME: f32
 func @rsqrt(%arg0 : f32) {