blob: 9fc46fbf13600024ad3c206269f76e2e19b3db65 [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
12def isVI : Predicate <
13 "Subtarget.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS"
14>;
15
16let SubtargetPredicate = isVI in {
17
18def V_LDEXP_F32 : VOP3InstVI <0x288, "v_ldexp_f32", VOP_F32_F32_I32,
19 AMDGPUldexp
20>;
21def V_BFM_B32 : VOP3InstVI <0x293, "v_bfm_b32", VOP_I32_I32_I32, AMDGPUbfm>;
22def V_BCNT_U32_B32 : VOP3InstVI <0x28b, "v_bcnt_u32_b32", VOP_I32_I32_I32>;
23def V_MBCNT_LO_U32_B32 : VOP3InstVI <0x28c, "v_mbcnt_lo_u32_b32",
24 VOP_I32_I32_I32
25>;
26def V_MBCNT_HI_U32_B32 : VOP3InstVI <0x28d, "v_mbcnt_hi_u32_b32",
27 VOP_I32_I32_I32
28>;
29
30def V_CVT_PKRTZ_F16_F32 : VOP3InstVI <0x296, "v_cvt_pkrtz_f16_f32",
31 VOP_I32_F32_F32, int_SI_packf16
32>;
33
34defm BUFFER_LOAD_DWORD_VI : MUBUF_Load_Helper_vi <
35 0x14, "buffer_load_dword", VReg_32, i32, global_load
36>;
37
38defm BUFFER_LOAD_FORMAT_XYZW_VI : MUBUF_Load_Helper_vi <
39 0x03, "buffer_load_format_xyzw", VReg_128
40>;
41
42} // End SubtargetPredicate = isVI
43
44//===----------------------------------------------------------------------===//
45// VOP2 Patterns
46//===----------------------------------------------------------------------===//
47
48let Predicates = [isVI] in {
49
50def : Pat <
51 (int_SI_tid),
52 (V_MBCNT_HI_U32_B32 0xffffffff,
53 (V_MBCNT_LO_U32_B32 0xffffffff, 0))
54>;
55
56//===----------------------------------------------------------------------===//
57// MUBUF Patterns
58//===----------------------------------------------------------------------===//
59
60// Offset in an 32Bit VGPR
61def : Pat <
62 (SIload_constant v4i32:$sbase, i32:$voff),
63 (BUFFER_LOAD_DWORD_VI_OFFEN $sbase, $voff, 0, 0, 0, 0, 0)
64>;
65
66// Offset in an 32Bit VGPR
67def : Pat <
68 (SIload_constant v4i32:$sbase, i32:$voff),
69 (BUFFER_LOAD_DWORD_VI_OFFEN $sbase, $voff, 0, 0, 0, 0, 0)
70>;
71
72/* int_SI_vs_load_input */
73def : Pat<
74 (SIload_input v4i32:$tlst, imm:$attr_offset, i32:$buf_idx_vgpr),
75 (BUFFER_LOAD_FORMAT_XYZW_VI_IDXEN $tlst, $buf_idx_vgpr, imm:$attr_offset, 0, 0, 0, 0)
76>;
77
78defm : MUBUF_Load_Dword <i32, BUFFER_LOAD_DWORD_VI_OFFSET,
79 BUFFER_LOAD_DWORD_VI_OFFEN,
80 BUFFER_LOAD_DWORD_VI_IDXEN,
81 BUFFER_LOAD_DWORD_VI_BOTHEN>;
82
83} // End Predicates = [isVI]