[Mlir-commits] [mlir] 392cc84 - [mlir][LLVMIR target] Fix llvm.freeze builder to prevent crashes

Krzysztof Drewniak llvmlistbot at llvm.org
Mon Dec 12 11:43:36 PST 2022


Author: Krzysztof Drewniak
Date: 2022-12-12T19:43:31Z
New Revision: 392cc842c26bfc301ea622792a456e9d83aa7dca

URL: https://github.com/llvm/llvm-project/commit/392cc842c26bfc301ea622792a456e9d83aa7dca
DIFF: https://github.com/llvm/llvm-project/commit/392cc842c26bfc301ea622792a456e9d83aa7dca.diff

LOG: [mlir][LLVMIR target] Fix llvm.freeze builder to prevent crashes

The freeze builder did not assign the result of creating the freeze
operation to $res, which meant that when subsequent translations (such
as a sext) tried to use that result or query its type, mlir-translate
would crash.

This fixes the issue and adds a test for it.

Reviewed By: ftynse

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

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
index afc07e2a568cc..6e63a512a1bfb 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
@@ -732,7 +732,7 @@ def LLVM_FreezeOp : LLVM_Op<"freeze", [SameOperandsAndResultType]> {
   let builders = [LLVM_OneResultOpBuilder];
   let assemblyFormat = "$val attr-dict `:` type($val)";
   string llvmInstName = "Freeze";
-  string llvmBuilder = "builder.CreateFreeze($val);";
+  string llvmBuilder = "$res = builder.CreateFreeze($val);";
   string mlirBuilder = [{
     $res = $_builder.create<LLVM::FreezeOp>($_location, $val);
   }];

diff  --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir
index 8a41b9dc55550..c767d8ebfcc74 100644
--- a/mlir/test/Target/LLVMIR/llvmir.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir.mlir
@@ -1501,6 +1501,16 @@ llvm.func @callFreezeOp(%x : i32) {
   llvm.return
 }
 
+// CHECK-LABEL: @freezeUsed
+llvm.func @freezeUsed(%x : i32) -> i64 {
+  // CHECK: %[[frozen:.*]] = freeze i32
+  %frozen = llvm.freeze %x : i32
+  // CHECK: %[[ext:.*]] = sext i32 %[[frozen]] to i64
+  %ext = llvm.sext %frozen : i32 to i64
+  // CHECK: ret i64 %[[ext]]
+  llvm.return %ext : i64
+}
+
 // CHECK-LABEL: @boolConstArg
 llvm.func @boolConstArg() -> i1 {
   // CHECK: ret i1 false


        


More information about the Mlir-commits mailing list