1 //===-- AMDGPUInstructions.td - Common instruction defs ---*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains instruction defs that are common to all hw codegen
13 //===----------------------------------------------------------------------===//
15 class AMDGPUInst <dag outs, dag ins, string asm, list<dag> pattern> : Instruction {
16 field bits<16> AMDILOp = 0;
17 field bits<3> Gen = 0;
19 let Namespace = "AMDIL";
20 let OutOperandList = outs;
21 let InOperandList = ins;
23 let Pattern = pattern;
24 let TSFlags{42-40} = Gen;
25 let TSFlags{63-48} = AMDILOp;
28 class AMDGPUShaderInst <dag outs, dag ins, string asm, list<dag> pattern>
29 : AMDGPUInst<outs, ins, asm, pattern> {
31 field bits<32> Inst = 0xffffffff;
36 int TWO_PI = 0x40c90fdb;
38 int TWO_PI_INV = 0x3e22f983;
40 def CONST : Constants;
42 let isCodeGenOnly = 1 in {
44 def MASK_WRITE : AMDGPUShaderInst <
51 let isPseudo = 1, usesCustomInserter = 1 in {
53 class FABS <RegisterClass rc> : AMDGPUShaderInst <
57 [(set rc:$dst, (fabs rc:$src0))]
60 } // End isPseudo = 1, hasCustomInserter = 1
62 } // End isCodeGenOnly = 1
64 /* Generic helper patterns for intrinsics */
65 /* -------------------------------------- */
67 class POW_Common <AMDGPUInst log_ieee, AMDGPUInst exp_ieee, AMDGPUInst mul,
68 RegisterClass rc> : Pat <
69 (int_AMDGPU_pow rc:$src0, rc:$src1),
70 (exp_ieee (mul rc:$src1, (log_ieee rc:$src0)))
73 /* Other helper patterns */
74 /* --------------------- */
76 /* Extract element pattern */
77 class Extract_Element <ValueType sub_type, ValueType vec_type,
78 RegisterClass vec_class, int sub_idx,
79 SubRegIndex sub_reg>: Pat<
80 (sub_type (vector_extract (vec_type vec_class:$src), sub_idx)),
81 (EXTRACT_SUBREG vec_class:$src, sub_reg)
84 /* Insert element pattern */
85 class Insert_Element <ValueType elem_type, ValueType vec_type,
86 RegisterClass elem_class, RegisterClass vec_class,
87 int sub_idx, SubRegIndex sub_reg> : Pat <
89 (vec_type (vector_insert (vec_type vec_class:$vec),
90 (elem_type elem_class:$elem), sub_idx)),
91 (INSERT_SUBREG vec_class:$vec, elem_class:$elem, sub_reg)
94 include "R600Instructions.td"
96 include "SIInstrInfo.td"