Instead, pattern match extends of extract_subvectors to generate widening operations. Since extract_subvector is not a legal node, this is implemented via a custom combine that recognizes extract_subvector nodes before they are legalized. The combine produces custom ISD nodes that are later pattern matched directly, just like the intrinsic was. Also removes the clang builtins for these operations since the instructions can now be generated from portable code sequences. Differential Revision: https://reviews.llvm.org/D84556
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
//- WebAssemblyISD.def - WebAssembly ISD ---------------------------*- C++ -*-//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// This file describes the various WebAssembly ISD node types.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// NOTE: NO INCLUDE GUARD DESIRED!
|
|
|
|
HANDLE_NODETYPE(CALL)
|
|
HANDLE_NODETYPE(RET_CALL)
|
|
HANDLE_NODETYPE(RETURN)
|
|
HANDLE_NODETYPE(ARGUMENT)
|
|
// A wrapper node for TargetExternalSymbol, TargetGlobalAddress, and MCSymbol
|
|
HANDLE_NODETYPE(Wrapper)
|
|
// A special wapper used in PIC code for __memory_base/__table_base relcative
|
|
// access.
|
|
HANDLE_NODETYPE(WrapperPIC)
|
|
HANDLE_NODETYPE(BR_IF)
|
|
HANDLE_NODETYPE(BR_TABLE)
|
|
HANDLE_NODETYPE(SHUFFLE)
|
|
HANDLE_NODETYPE(SWIZZLE)
|
|
HANDLE_NODETYPE(VEC_SHL)
|
|
HANDLE_NODETYPE(VEC_SHR_S)
|
|
HANDLE_NODETYPE(VEC_SHR_U)
|
|
HANDLE_NODETYPE(WIDEN_LOW_S)
|
|
HANDLE_NODETYPE(WIDEN_LOW_U)
|
|
HANDLE_NODETYPE(WIDEN_HIGH_S)
|
|
HANDLE_NODETYPE(WIDEN_HIGH_U)
|
|
HANDLE_NODETYPE(THROW)
|
|
HANDLE_NODETYPE(MEMORY_COPY)
|
|
HANDLE_NODETYPE(MEMORY_FILL)
|
|
|
|
// Memory intrinsics
|
|
HANDLE_MEM_NODETYPE(LOAD_SPLAT)
|