]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/R600/VIInstructions.td
Merge llvm 3.6.0rc2 from ^/vendor/llvm/dist, merge clang 3.6.0rc2 from
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / R600 / VIInstructions.td
1 //===-- VIInstructions.td - VI Instruction Defintions ---------------------===//
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 // Instruction definitions for VI and newer.
10 //===----------------------------------------------------------------------===//
11
12 let SubtargetPredicate = isVI in {
13
14 defm BUFFER_LOAD_DWORD_VI : MUBUF_Load_Helper_vi <
15   0x14, "buffer_load_dword", VGPR_32, i32, global_load
16 >;
17
18 defm BUFFER_LOAD_FORMAT_XYZW_VI : MUBUF_Load_Helper_vi <
19   0x03, "buffer_load_format_xyzw", VReg_128
20 >;
21
22 } // End SubtargetPredicate = isVI
23
24
25 //===----------------------------------------------------------------------===//
26 // SMEM Patterns
27 //===----------------------------------------------------------------------===//
28
29 let Predicates = [isVI] in {
30
31 // 1. Offset as 8bit DWORD immediate
32 def : Pat <
33   (SIload_constant v4i32:$sbase, IMM20bit:$offset),
34   (S_BUFFER_LOAD_DWORD_IMM $sbase, (as_i32imm $offset))
35 >;
36
37 //===----------------------------------------------------------------------===//
38 // MUBUF Patterns
39 //===----------------------------------------------------------------------===//
40
41 // Offset in an 32Bit VGPR
42 def : Pat <
43   (SIload_constant v4i32:$sbase, i32:$voff),
44   (BUFFER_LOAD_DWORD_VI_OFFEN $sbase, $voff, 0, 0, 0, 0, 0)
45 >;
46
47 // Offset in an 32Bit VGPR
48 def : Pat <
49   (SIload_constant v4i32:$sbase, i32:$voff),
50   (BUFFER_LOAD_DWORD_VI_OFFEN $sbase, $voff, 0, 0, 0, 0, 0)
51 >;
52
53 /* int_SI_vs_load_input */
54 def : Pat<
55   (SIload_input v4i32:$tlst, imm:$attr_offset, i32:$buf_idx_vgpr),
56   (BUFFER_LOAD_FORMAT_XYZW_VI_IDXEN $tlst, $buf_idx_vgpr, imm:$attr_offset, 0, 0, 0, 0)
57 >;
58
59 defm : MUBUF_Load_Dword <i32, BUFFER_LOAD_DWORD_VI_OFFSET,
60                          BUFFER_LOAD_DWORD_VI_OFFEN,
61                          BUFFER_LOAD_DWORD_VI_IDXEN,
62                          BUFFER_LOAD_DWORD_VI_BOTHEN>;
63
64 } // End Predicates = [isVI]