// WebAssemblyInstrExceptRef.td-WebAssembly except_ref codegen --*- tablegen -*-
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// WebAssembly except_ref operand code-gen constructs.
///
//===----------------------------------------------------------------------===//

let Defs = [ARGUMENTS] in {

defm SELECT_EXCEPT_REF : I<(outs EXCEPT_REF:$dst),
                           (ins EXCEPT_REF:$lhs, EXCEPT_REF:$rhs, I32:$cond),
                           (outs), (ins),
                           [(set EXCEPT_REF:$dst,
                            (select I32:$cond, EXCEPT_REF:$lhs,
                             EXCEPT_REF:$rhs))],
                           "except_ref.select\t$dst, $lhs, $rhs, $cond",
                           "except_ref.select", 0x1b>;

} // Defs = [ARGUMENTS]

def : Pat<(select (i32 (setne I32:$cond, 0)), EXCEPT_REF:$lhs, EXCEPT_REF:$rhs),
          (SELECT_EXCEPT_REF EXCEPT_REF:$lhs, EXCEPT_REF:$rhs, I32:$cond)>;
def : Pat<(select (i32 (seteq I32:$cond, 0)), EXCEPT_REF:$lhs, EXCEPT_REF:$rhs),
          (SELECT_EXCEPT_REF EXCEPT_REF:$rhs, EXCEPT_REF:$lhs, I32:$cond)>;
