summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/WebAssemblyInstrControl.td
blob: 3025e24fb843058dac36bba14878537db641eb99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//===- WebAssemblyInstrControl.td-WebAssembly control-flow ------*- tablegen -*-
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief WebAssembly control-flow code-gen constructs.
///
//===----------------------------------------------------------------------===//

/*
 * TODO(jfb): Add the following.
 *
 * block: a fixed-length sequence of statements
 * if: if statement
 * do_while: do while statement, basically a loop with a conditional branch
 * forever: infinite loop statement (like while (1)), basically an unconditional
 *          branch (back to the top of the loop)
 * continue: continue to start of nested loop
 * break: break to end from nested loop or block
 * switch: switch statement with fallthrough
 */

multiclass RETURN<WebAssemblyRegClass vt> {
  def RETURN_#vt : I<(outs), (ins vt:$val), [(WebAssemblyreturn vt:$val)]>;
}
let hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1,
    isBarrier = 1 in {
  defm : RETURN<Int32>;
  defm : RETURN<Int64>;
  defm : RETURN<Float32>;
  defm : RETURN<Float64>;
  def RETURN_VOID : I<(outs), (ins), [(WebAssemblyreturn)]>;
} // hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1,
  // isBarrier = 1
OpenPOWER on IntegriCloud