blob: 24e66cea62779c5777a4a8c376bef3072b05a5e3 [file] [log] [blame]
Marek Olsak5df00d62014-12-07 12:18:57 +00001//===-- 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
Marek Olsak5df00d62014-12-07 12:18:57 +000012let SubtargetPredicate = isVI in {
13
Marek Olsak5df00d62014-12-07 12:18:57 +000014defm BUFFER_LOAD_DWORD_VI : MUBUF_Load_Helper_vi <
Tom Stellard45c0b3a2015-01-07 20:59:25 +000015 0x14, "buffer_load_dword", VGPR_32, i32, global_load
Marek Olsak5df00d62014-12-07 12:18:57 +000016>;
17
18defm BUFFER_LOAD_FORMAT_XYZW_VI : MUBUF_Load_Helper_vi <
19 0x03, "buffer_load_format_xyzw", VReg_128
20>;
21
22} // End SubtargetPredicate = isVI
23
Marek Olsak5df00d62014-12-07 12:18:57 +000024
25//===----------------------------------------------------------------------===//
Marek Olsak58f61a82014-12-07 17:17:38 +000026// SMEM Patterns
27//===----------------------------------------------------------------------===//
28
Marek Olsakf0b130a2015-01-15 18:43:06 +000029let Predicates = [isVI] in {
30
Marek Olsak58f61a82014-12-07 17:17:38 +000031// 1. Offset as 8bit DWORD immediate
32def : Pat <
33 (SIload_constant v4i32:$sbase, IMM20bit:$offset),
34 (S_BUFFER_LOAD_DWORD_IMM $sbase, (as_i32imm $offset))
35>;
36
37//===----------------------------------------------------------------------===//
Marek Olsak5df00d62014-12-07 12:18:57 +000038// MUBUF Patterns
39//===----------------------------------------------------------------------===//
40
41// Offset in an 32Bit VGPR
42def : 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
48def : 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 */
54def : 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
59defm : 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]