]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/Hexagon/HexagonOperands.td
Merge llvm, clang, lld, lldb, compiler-rt and libc++ r302069, and update
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / Hexagon / HexagonOperands.td
1 //===--- HexagonOperands.td -----------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 def f32ImmOperand : AsmOperandClass { let Name = "f32Imm"; }
11 def f32Imm : Operand<f32> { let ParserMatchClass = f32ImmOperand; }
12 def f64ImmOperand : AsmOperandClass { let Name = "f64Imm"; }
13 def f64Imm : Operand<f64> { let ParserMatchClass = f64ImmOperand; }
14 def s8_0Imm64Pred  : PatLeaf<(i64 imm), [{ return isInt<8>(N->getSExtValue()); }]>;
15 def s9_0ImmOperand : AsmOperandClass { let Name = "s9_0Imm"; }
16 def s9_0Imm : Operand<i32> { let ParserMatchClass = s9_0ImmOperand; }
17 def s27_2ImmOperand : AsmOperandClass { let Name = "s27_2Imm"; let RenderMethod = "addSignedImmOperands"; }
18 def s27_2Imm : Operand<i32> { let ParserMatchClass = s27_2ImmOperand; }
19 def r32_0ImmPred  : PatLeaf<(i32 imm), [{
20   int64_t v = (int64_t)N->getSExtValue();
21   return isInt<32>(v);
22 }]>;
23 def u9_0ImmPred  : PatLeaf<(i32 imm), [{
24   int64_t v = (int64_t)N->getSExtValue();
25   return isUInt<9>(v);
26 }]>;
27 def u64_0ImmOperand : AsmOperandClass { let Name = "u64_0Imm"; let RenderMethod = "addImmOperands"; }
28 def u64_0Imm : Operand<i64> { let ParserMatchClass = u64_0ImmOperand; }
29 def n1ConstOperand : AsmOperandClass { let Name = "n1Const"; }
30 def n1Const : Operand<i32> { let ParserMatchClass = n1ConstOperand; }
31
32 // This complex pattern exists only to create a machine instruction operand
33 // of type "frame index". There doesn't seem to be a way to do that directly
34 // in the patterns.
35 def AddrFI : ComplexPattern<i32, 1, "SelectAddrFI", [frameindex], []>;
36
37 // These complex patterns are not strictly necessary, since global address
38 // folding will happen during DAG combining. For distinguishing between GA
39 // and GP, pat frags with HexagonCONST32 and HexagonCONST32_GP can be used.
40 def AddrGA : ComplexPattern<i32, 1, "SelectAddrGA", [], []>;
41 def AddrGP : ComplexPattern<i32, 1, "SelectAddrGP", [], []>;
42
43
44 def bblabel : Operand<i32>;
45 def bbl     : SDNode<"ISD::BasicBlock", SDTPtrLeaf, [], "BasicBlockSDNode">;