Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGLOps.td
Original file line number Diff line number Diff line change
Expand Up @@ -1196,6 +1196,7 @@ def SPIRV_GLLengthOp : SPIRV_GLOp<"Length", 66, [
}];

let hasVerifier = 0;
let hasCanonicalizer = 1;
}

// -----
Expand Down
9 changes: 9 additions & 0 deletions mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1403,3 +1403,12 @@ void spirv::SelectionOp::getCanonicalizationPatterns(RewritePatternSet &results,
MLIRContext *context) {
results.add<ConvertSelectionOpToSelect>(context);
}

//===----------------------------------------------------------------------===//
// spirv.GL.Length
//===----------------------------------------------------------------------===//

void spirv::GLLengthOp::getCanonicalizationPatterns(RewritePatternSet &results,
MLIRContext *context) {
results.add<ConvertGLLengthToGLFAbs>(context);
}
8 changes: 8 additions & 0 deletions mlir/lib/Dialect/SPIRV/IR/SPIRVCanonicalization.td
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,11 @@ def ConvertComparisonIntoClamp2_#CmpClampPair[0] : Pat<
)),
(CmpClampPair[1] $input, $min, $max)>;
}

//===----------------------------------------------------------------------===//
// spirv.GL.Length -> spirv.GL.FAbs
//===----------------------------------------------------------------------===//

def ConvertGLLengthToGLFAbs : Pat<
(SPIRV_GLLengthOp SPIRV_Float:$operand),
(SPIRV_GLFAbsOp $operand)>;
21 changes: 21 additions & 0 deletions mlir/test/Dialect/SPIRV/Transforms/canonicalize.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -2490,3 +2490,24 @@ func.func @cannot_canonicalize_selection_op_4(%cond: i1) -> () {
}
spirv.Return
}

// -----

//===----------------------------------------------------------------------===//
// spirv.GL.Length
//===----------------------------------------------------------------------===//

// CHECK-LABEL: @convert_length_into_fabs_scalar
func.func @convert_length_in_fabs_scalar(%arg0 : f32) -> f32 {

%0 = spirv.GL.Length %arg0 : f32 -> f32
//%11 = spirv.GL.Length %arg1 : vector<3xf32> -> f32
spirv.ReturnValue %0 : f32
}

// CHECK-LABEL: @dont_convert_length_into_fabs_vec
func.func @dont_convert_length_in_fabs_vec(%arg0 : vector<3xf32>) -> f32 {

%0 = spirv.GL.Length %arg0 : vector<3xf32> -> f32
spirv.ReturnValue %0 : f32
}
Loading