AMDGPU: Report extractelement as free in cost model
[oota-llvm.git] / lib / Target / AMDGPU / R600Intrinsics.td
1 //===-- R600Intrinsics.td - R600 Instrinsic defs -------*- tablegen -*-----===//
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 // R600 Intrinsic Definitions
11 //
12 //===----------------------------------------------------------------------===//
13
14 let TargetPrefix = "R600", isTarget = 1 in {
15   class TextureIntrinsicFloatInput :
16     Intrinsic<[llvm_v4f32_ty], [
17       llvm_v4f32_ty, // Coord
18       llvm_i32_ty, // offset_x
19       llvm_i32_ty, // offset_y,
20       llvm_i32_ty, // offset_z,
21       llvm_i32_ty, // resource_id
22       llvm_i32_ty, // samplerid
23       llvm_i32_ty, // coord_type_x
24       llvm_i32_ty, // coord_type_y
25       llvm_i32_ty, // coord_type_z
26       llvm_i32_ty // coord_type_w
27     ], [IntrNoMem]>;
28   class TextureIntrinsicInt32Input :
29     Intrinsic<[llvm_v4i32_ty], [
30       llvm_v4i32_ty, // Coord
31       llvm_i32_ty, // offset_x
32       llvm_i32_ty, // offset_y,
33       llvm_i32_ty, // offset_z,
34       llvm_i32_ty, // resource_id
35       llvm_i32_ty, // samplerid
36       llvm_i32_ty, // coord_type_x
37       llvm_i32_ty, // coord_type_y
38       llvm_i32_ty, // coord_type_z
39       llvm_i32_ty // coord_type_w
40     ], [IntrNoMem]>;
41
42   def int_R600_load_input :
43     Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
44   def int_R600_interp_input :
45     Intrinsic<[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
46   def int_R600_interp_const :
47     Intrinsic<[llvm_v4f32_ty], [llvm_i32_ty], [IntrNoMem]>;
48 def int_R600_interp_xy :
49     Intrinsic<[llvm_v2f32_ty], [llvm_i32_ty, llvm_float_ty, llvm_float_ty], [IntrNoMem]>;
50 def int_R600_interp_zw :
51     Intrinsic<[llvm_v2f32_ty], [llvm_i32_ty, llvm_float_ty, llvm_float_ty], [IntrNoMem]>;
52   def int_R600_load_texbuf :
53     Intrinsic<[llvm_v4f32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
54   def int_R600_tex : TextureIntrinsicFloatInput;
55   def int_R600_texc : TextureIntrinsicFloatInput;
56   def int_R600_txl : TextureIntrinsicFloatInput;
57   def int_R600_txlc : TextureIntrinsicFloatInput;
58   def int_R600_txb : TextureIntrinsicFloatInput;
59   def int_R600_txbc : TextureIntrinsicFloatInput;
60   def int_R600_txf : TextureIntrinsicInt32Input;
61   def int_R600_ldptr : TextureIntrinsicInt32Input;
62   def int_R600_txq : TextureIntrinsicInt32Input;
63   def int_R600_ddx : TextureIntrinsicFloatInput;
64   def int_R600_ddy : TextureIntrinsicFloatInput;
65   def int_R600_store_swizzle :
66     Intrinsic<[], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
67   def int_R600_store_stream_output :
68     Intrinsic<[], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
69   def int_R600_store_pixel_depth :
70       Intrinsic<[], [llvm_float_ty], []>;
71   def int_R600_store_pixel_stencil :
72       Intrinsic<[], [llvm_float_ty], []>;
73   def int_R600_store_dummy :
74       Intrinsic<[], [llvm_i32_ty], []>;
75 }