//=- SPIRVCombine.td - Define SPIRV Combine Rules -------------*-tablegen -*-=//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//

include "llvm/Target/GlobalISel/Combine.td"


def vector_length_sub_to_distance_lowering : GICombineRule <
  (defs root:$root),
  (match (wip_match_opcode G_INTRINSIC):$root,
          [{ return Helper.matchLengthToDistance(*${root}); }]),
  (apply [{ Helper.applySPIRVDistance(*${root}); }])
>;

def vector_select_to_faceforward_lowering : GICombineRule <
  (defs root:$root),
  (match (wip_match_opcode G_SELECT):$root,
          [{ return Helper.matchSelectToFaceForward(*${root}); }]),
  (apply [{ Helper.applySPIRVFaceForward(*${root}); }])
>;

def SPIRVPreLegalizerCombiner
    : GICombiner<"SPIRVPreLegalizerCombinerImpl",
                       [vector_length_sub_to_distance_lowering, vector_select_to_faceforward_lowering]> {
    let CombineAllMethodName = "tryCombineAllImpl";
}
