| Nicolai Haehnle | 5d0d303 | 2018-04-01 17:09:07 +0000 | [diff] [blame] | 1 | //===-- AMDGPUSearchableTables.td - ------------------------*- 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 | include "llvm/TableGen/SearchableTable.td" |
| 11 | |
| 12 | //===----------------------------------------------------------------------===// |
| 13 | // Resource intrinsics table. |
| 14 | //===----------------------------------------------------------------------===// |
| 15 | |
| 16 | class RsrcIntrinsic<AMDGPURsrcIntrinsic intr> : SearchableTable { |
| 17 | let SearchableFields = ["Intr"]; |
| 18 | let EnumNameField = ?; |
| 19 | |
| 20 | Intrinsic Intr = !cast<Intrinsic>(intr); |
| 21 | bits<8> RsrcArg = intr.RsrcArg; |
| 22 | bit IsImage = intr.IsImage; |
| 23 | } |
| 24 | |
| 25 | foreach intr = !listconcat(AMDGPUBufferIntrinsics, |
| Nicolai Haehnle | 2f5a738 | 2018-04-04 10:58:54 +0000 | [diff] [blame] | 26 | AMDGPUImageIntrinsics, |
| 27 | AMDGPUImageDimIntrinsics, |
| 28 | AMDGPUImageDimGatherIntrinsics, |
| 29 | AMDGPUImageDimGetResInfoIntrinsics, |
| 30 | AMDGPUImageDimAtomicIntrinsics) in { |
| Nicolai Haehnle | 5d0d303 | 2018-04-01 17:09:07 +0000 | [diff] [blame] | 31 | def : RsrcIntrinsic<!cast<AMDGPURsrcIntrinsic>(intr)>; |
| 32 | } |
| Nicolai Haehnle | 4254d45 | 2018-04-01 17:09:14 +0000 | [diff] [blame] | 33 | |
| 34 | class SourceOfDivergence<Intrinsic intr> : SearchableTable { |
| 35 | let SearchableFields = ["Intr"]; |
| 36 | let EnumNameField = ?; |
| 37 | |
| 38 | Intrinsic Intr = intr; |
| 39 | } |
| 40 | |
| 41 | def : SourceOfDivergence<int_amdgcn_workitem_id_x>; |
| 42 | def : SourceOfDivergence<int_amdgcn_workitem_id_y>; |
| 43 | def : SourceOfDivergence<int_amdgcn_workitem_id_z>; |
| 44 | def : SourceOfDivergence<int_amdgcn_interp_mov>; |
| 45 | def : SourceOfDivergence<int_amdgcn_interp_p1>; |
| 46 | def : SourceOfDivergence<int_amdgcn_interp_p2>; |
| 47 | def : SourceOfDivergence<int_amdgcn_mbcnt_hi>; |
| 48 | def : SourceOfDivergence<int_amdgcn_mbcnt_lo>; |
| 49 | def : SourceOfDivergence<int_r600_read_tidig_x>; |
| 50 | def : SourceOfDivergence<int_r600_read_tidig_y>; |
| 51 | def : SourceOfDivergence<int_r600_read_tidig_z>; |
| 52 | def : SourceOfDivergence<int_amdgcn_atomic_inc>; |
| 53 | def : SourceOfDivergence<int_amdgcn_atomic_dec>; |
| 54 | def : SourceOfDivergence<int_amdgcn_ds_fadd>; |
| 55 | def : SourceOfDivergence<int_amdgcn_ds_fmin>; |
| 56 | def : SourceOfDivergence<int_amdgcn_ds_fmax>; |
| 57 | def : SourceOfDivergence<int_amdgcn_image_atomic_swap>; |
| 58 | def : SourceOfDivergence<int_amdgcn_image_atomic_add>; |
| 59 | def : SourceOfDivergence<int_amdgcn_image_atomic_sub>; |
| 60 | def : SourceOfDivergence<int_amdgcn_image_atomic_smin>; |
| 61 | def : SourceOfDivergence<int_amdgcn_image_atomic_umin>; |
| 62 | def : SourceOfDivergence<int_amdgcn_image_atomic_smax>; |
| 63 | def : SourceOfDivergence<int_amdgcn_image_atomic_umax>; |
| 64 | def : SourceOfDivergence<int_amdgcn_image_atomic_and>; |
| 65 | def : SourceOfDivergence<int_amdgcn_image_atomic_or>; |
| 66 | def : SourceOfDivergence<int_amdgcn_image_atomic_xor>; |
| 67 | def : SourceOfDivergence<int_amdgcn_image_atomic_inc>; |
| 68 | def : SourceOfDivergence<int_amdgcn_image_atomic_dec>; |
| 69 | def : SourceOfDivergence<int_amdgcn_image_atomic_cmpswap>; |
| 70 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_swap>; |
| 71 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_add>; |
| 72 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_sub>; |
| 73 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_smin>; |
| 74 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_umin>; |
| 75 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_smax>; |
| 76 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_umax>; |
| 77 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_and>; |
| 78 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_or>; |
| 79 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_xor>; |
| 80 | def : SourceOfDivergence<int_amdgcn_buffer_atomic_cmpswap>; |
| 81 | def : SourceOfDivergence<int_amdgcn_ps_live>; |
| 82 | def : SourceOfDivergence<int_amdgcn_ds_swizzle>; |
| Nicolai Haehnle | 2f5a738 | 2018-04-04 10:58:54 +0000 | [diff] [blame] | 83 | |
| 84 | foreach intr = AMDGPUImageDimAtomicIntrinsics in |
| 85 | def : SourceOfDivergence<intr>; |
| 86 | |
| 87 | class D16ImageDimIntrinsic<AMDGPUImageDimIntrinsic intr> : SearchableTable { |
| 88 | let SearchableFields = ["Intr"]; |
| 89 | let EnumNameField = ?; |
| 90 | |
| 91 | Intrinsic Intr = intr; |
| 92 | code D16HelperIntr = |
| 93 | !cast<code>("AMDGPUIntrinsic::SI_image_d16helper_" # intr.P.OpMod # intr.P.Dim.Name); |
| 94 | } |
| 95 | |
| 96 | foreach intr = !listconcat(AMDGPUImageDimIntrinsics, |
| 97 | AMDGPUImageDimGatherIntrinsics) in { |
| 98 | def : D16ImageDimIntrinsic<intr>; |
| 99 | } |