blob: 6adc01372f411f661a1226e1ecf392f1b0882b7e [file] [log] [blame]
Marek Olsak5df00d62014-12-07 12:18:57 +00001//===-- CIInstructions.td - CI 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 CI and newer.
10//===----------------------------------------------------------------------===//
Matt Arsenault6adf07a2015-08-22 00:16:34 +000011// Remaining instructions:
Matt Arsenault6adf07a2015-08-22 00:16:34 +000012// S_CBRANCH_CDBGUSER
13// S_CBRANCH_CDBGSYS
14// S_CBRANCH_CDBGSYS_OR_USER
15// S_CBRANCH_CDBGSYS_AND_USER
Matt Arsenault6adf07a2015-08-22 00:16:34 +000016// DS_NOP
17// DS_GWS_SEMA_RELEASE_ALL
18// DS_WRAP_RTN_B32
19// DS_CNDXCHG32_RTN_B64
20// DS_WRITE_B96
21// DS_WRITE_B128
22// DS_CONDXCHG32_RTN_B128
23// DS_READ_B96
24// DS_READ_B128
25// BUFFER_LOAD_DWORDX3
26// BUFFER_STORE_DWORDX3
Marek Olsak5df00d62014-12-07 12:18:57 +000027
Marek Olsak5df00d62014-12-07 12:18:57 +000028//===----------------------------------------------------------------------===//
29// VOP1 Instructions
30//===----------------------------------------------------------------------===//
31
32let SubtargetPredicate = isCIVI in {
33
Matt Arsenaulte8df8792015-08-22 00:50:41 +000034let SchedRW = [WriteDoubleAdd] in {
Marek Olsak5df00d62014-12-07 12:18:57 +000035defm V_TRUNC_F64 : VOP1Inst <vop1<0x17>, "v_trunc_f64",
36 VOP_F64_F64, ftrunc
37>;
38defm V_CEIL_F64 : VOP1Inst <vop1<0x18>, "v_ceil_f64",
39 VOP_F64_F64, fceil
40>;
41defm V_FLOOR_F64 : VOP1Inst <vop1<0x1A>, "v_floor_f64",
42 VOP_F64_F64, ffloor
43>;
44defm V_RNDNE_F64 : VOP1Inst <vop1<0x19>, "v_rndne_f64",
45 VOP_F64_F64, frint
46>;
Matt Arsenaulte8df8792015-08-22 00:50:41 +000047} // End SchedRW = [WriteDoubleAdd]
48
49let SchedRW = [WriteQuarterRate32] in {
Marek Olsak5df00d62014-12-07 12:18:57 +000050defm V_LOG_LEGACY_F32 : VOP1Inst <vop1<0x45, 0x4c>, "v_log_legacy_f32",
51 VOP_F32_F32
52>;
53defm V_EXP_LEGACY_F32 : VOP1Inst <vop1<0x46, 0x4b>, "v_exp_legacy_f32",
54 VOP_F32_F32
55>;
Matt Arsenaulte8df8792015-08-22 00:50:41 +000056} // End SchedRW = [WriteQuarterRate32]
Tom Stellard731c9272015-06-11 14:51:49 +000057
58//===----------------------------------------------------------------------===//
Matt Arsenault6adf07a2015-08-22 00:16:34 +000059// VOP3 Instructions
60//===----------------------------------------------------------------------===//
61
62defm V_QSAD_PK_U16_U8 : VOP3Inst <vop3<0x173>, "v_qsad_pk_u16_u8",
63 VOP_I32_I32_I32
64>;
65defm V_MQSAD_U16_U8 : VOP3Inst <vop3<0x172>, "v_mqsad_u16_u8",
66 VOP_I32_I32_I32
67>;
68defm V_MQSAD_U32_U8 : VOP3Inst <vop3<0x175>, "v_mqsad_u32_u8",
69 VOP_I32_I32_I32
70>;
71
72let isCommutable = 1 in {
73defm V_MAD_U64_U32 : VOP3Inst <vop3<0x176>, "v_mad_u64_u32",
74 VOP_I64_I32_I32_I64
75>;
76
77// XXX - Does this set VCC?
78defm V_MAD_I64_I32 : VOP3Inst <vop3<0x177>, "v_mad_i64_i32",
79 VOP_I64_I32_I32_I64
80>;
81} // End isCommutable = 1
82
83
84//===----------------------------------------------------------------------===//
85// DS Instructions
86//===----------------------------------------------------------------------===//
87defm DS_WRAP_RTN_F32 : DS_1A1D_RET <0x34, "ds_wrap_rtn_f32", VGPR_32, "ds_wrap_f32">;
88
89// DS_CONDXCHG32_RTN_B64
90// DS_CONDXCHG32_RTN_B128
91
92//===----------------------------------------------------------------------===//
Matt Arsenaulte66621b2015-09-24 19:52:27 +000093// SMRD Instructions
94//===----------------------------------------------------------------------===//
95
96defm S_DCACHE_INV_VOL : SMRD_Inval <smrd<0x1d, 0x22>,
97 "s_dcache_inv_vol", int_amdgcn_s_dcache_inv_vol>;
98
99//===----------------------------------------------------------------------===//
Matt Arsenaultd6adfb42015-09-24 19:52:21 +0000100// MUBUF Instructions
101//===----------------------------------------------------------------------===//
102
Tom Stellarde1818af2016-02-18 03:42:32 +0000103let DisableSIDecoder = 1 in {
Matt Arsenaultd6adfb42015-09-24 19:52:21 +0000104defm BUFFER_WBINVL1_VOL : MUBUF_Invalidate <mubuf<0x70, 0x3f>,
105 "buffer_wbinvl1_vol", int_amdgcn_buffer_wbinvl1_vol
106>;
Tom Stellarde1818af2016-02-18 03:42:32 +0000107}
Matt Arsenaultd6adfb42015-09-24 19:52:21 +0000108
109//===----------------------------------------------------------------------===//
Tom Stellard731c9272015-06-11 14:51:49 +0000110// Flat Instructions
111//===----------------------------------------------------------------------===//
112
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000113defm FLAT_LOAD_UBYTE : FLAT_Load_Helper <
114 flat<0x8, 0x10>, "flat_load_ubyte", VGPR_32
Tom Stellard731c9272015-06-11 14:51:49 +0000115>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000116defm FLAT_LOAD_SBYTE : FLAT_Load_Helper <
117 flat<0x9, 0x11>, "flat_load_sbyte", VGPR_32
Tom Stellard731c9272015-06-11 14:51:49 +0000118>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000119defm FLAT_LOAD_USHORT : FLAT_Load_Helper <
120 flat<0xa, 0x12>, "flat_load_ushort", VGPR_32
Tom Stellard731c9272015-06-11 14:51:49 +0000121>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000122defm FLAT_LOAD_SSHORT : FLAT_Load_Helper <
123 flat<0xb, 0x13>, "flat_load_sshort", VGPR_32>
124;
125defm FLAT_LOAD_DWORD : FLAT_Load_Helper <
126 flat<0xc, 0x14>, "flat_load_dword", VGPR_32
127>;
128defm FLAT_LOAD_DWORDX2 : FLAT_Load_Helper <
129 flat<0xd, 0x15>, "flat_load_dwordx2", VReg_64
130>;
131defm FLAT_LOAD_DWORDX4 : FLAT_Load_Helper <
132 flat<0xe, 0x17>, "flat_load_dwordx4", VReg_128
133>;
134defm FLAT_LOAD_DWORDX3 : FLAT_Load_Helper <
135 flat<0xf, 0x16>, "flat_load_dwordx3", VReg_96
136>;
137defm FLAT_STORE_BYTE : FLAT_Store_Helper <
138 flat<0x18>, "flat_store_byte", VGPR_32
139>;
140defm FLAT_STORE_SHORT : FLAT_Store_Helper <
141 flat <0x1a>, "flat_store_short", VGPR_32
142>;
143defm FLAT_STORE_DWORD : FLAT_Store_Helper <
144 flat<0x1c>, "flat_store_dword", VGPR_32
145>;
146defm FLAT_STORE_DWORDX2 : FLAT_Store_Helper <
147 flat<0x1d>, "flat_store_dwordx2", VReg_64
148>;
149defm FLAT_STORE_DWORDX4 : FLAT_Store_Helper <
150 flat<0x1e, 0x1f>, "flat_store_dwordx4", VReg_128
151>;
152defm FLAT_STORE_DWORDX3 : FLAT_Store_Helper <
153 flat<0x1f, 0x1e>, "flat_store_dwordx3", VReg_96
154>;
155defm FLAT_ATOMIC_SWAP : FLAT_ATOMIC <
156 flat<0x30, 0x40>, "flat_atomic_swap", VGPR_32
157>;
Tom Stellard12a19102015-06-12 20:47:06 +0000158defm FLAT_ATOMIC_CMPSWAP : FLAT_ATOMIC <
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000159 flat<0x31, 0x41>, "flat_atomic_cmpswap", VGPR_32, VReg_64
Tom Stellard12a19102015-06-12 20:47:06 +0000160>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000161defm FLAT_ATOMIC_ADD : FLAT_ATOMIC <
162 flat<0x32, 0x42>, "flat_atomic_add", VGPR_32
Tom Stellard12a19102015-06-12 20:47:06 +0000163>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000164defm FLAT_ATOMIC_SUB : FLAT_ATOMIC <
165 flat<0x33, 0x43>, "flat_atomic_sub", VGPR_32
166>;
167defm FLAT_ATOMIC_SMIN : FLAT_ATOMIC <
168 flat<0x35, 0x44>, "flat_atomic_smin", VGPR_32
169>;
170defm FLAT_ATOMIC_UMIN : FLAT_ATOMIC <
171 flat<0x36, 0x45>, "flat_atomic_umin", VGPR_32
172>;
173defm FLAT_ATOMIC_SMAX : FLAT_ATOMIC <
174 flat<0x37, 0x46>, "flat_atomic_smax", VGPR_32
175>;
176defm FLAT_ATOMIC_UMAX : FLAT_ATOMIC <
177 flat<0x38, 0x47>, "flat_atomic_umax", VGPR_32
178>;
179defm FLAT_ATOMIC_AND : FLAT_ATOMIC <
180 flat<0x39, 0x48>, "flat_atomic_and", VGPR_32
181>;
182defm FLAT_ATOMIC_OR : FLAT_ATOMIC <
183 flat<0x3a, 0x49>, "flat_atomic_or", VGPR_32
184>;
185defm FLAT_ATOMIC_XOR : FLAT_ATOMIC <
186 flat<0x3b, 0x4a>, "flat_atomic_xor", VGPR_32
187>;
188defm FLAT_ATOMIC_INC : FLAT_ATOMIC <
189 flat<0x3c, 0x4b>, "flat_atomic_inc", VGPR_32
190>;
191defm FLAT_ATOMIC_DEC : FLAT_ATOMIC <
192 flat<0x3d, 0x4c>, "flat_atomic_dec", VGPR_32
193>;
194defm FLAT_ATOMIC_SWAP_X2 : FLAT_ATOMIC <
195 flat<0x50, 0x60>, "flat_atomic_swap_x2", VReg_64
196>;
Tom Stellard12a19102015-06-12 20:47:06 +0000197defm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_ATOMIC <
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000198 flat<0x51, 0x61>, "flat_atomic_cmpswap_x2", VReg_64, VReg_128
Tom Stellard12a19102015-06-12 20:47:06 +0000199>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000200defm FLAT_ATOMIC_ADD_X2 : FLAT_ATOMIC <
201 flat<0x52, 0x62>, "flat_atomic_add_x2", VReg_64
Tom Stellard12a19102015-06-12 20:47:06 +0000202>;
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000203defm FLAT_ATOMIC_SUB_X2 : FLAT_ATOMIC <
204 flat<0x53, 0x63>, "flat_atomic_sub_x2", VReg_64
205>;
206defm FLAT_ATOMIC_SMIN_X2 : FLAT_ATOMIC <
207 flat<0x55, 0x64>, "flat_atomic_smin_x2", VReg_64
208>;
209defm FLAT_ATOMIC_UMIN_X2 : FLAT_ATOMIC <
210 flat<0x56, 0x65>, "flat_atomic_umin_x2", VReg_64
211>;
212defm FLAT_ATOMIC_SMAX_X2 : FLAT_ATOMIC <
213 flat<0x57, 0x66>, "flat_atomic_smax_x2", VReg_64
214>;
215defm FLAT_ATOMIC_UMAX_X2 : FLAT_ATOMIC <
216 flat<0x58, 0x67>, "flat_atomic_umax_x2", VReg_64
217>;
218defm FLAT_ATOMIC_AND_X2 : FLAT_ATOMIC <
219 flat<0x59, 0x68>, "flat_atomic_and_x2", VReg_64
220>;
221defm FLAT_ATOMIC_OR_X2 : FLAT_ATOMIC <
222 flat<0x5a, 0x69>, "flat_atomic_or_x2", VReg_64
223>;
224defm FLAT_ATOMIC_XOR_X2 : FLAT_ATOMIC <
225 flat<0x5b, 0x6a>, "flat_atomic_xor_x2", VReg_64
226>;
227defm FLAT_ATOMIC_INC_X2 : FLAT_ATOMIC <
228 flat<0x5c, 0x6b>, "flat_atomic_inc_x2", VReg_64
229>;
230defm FLAT_ATOMIC_DEC_X2 : FLAT_ATOMIC <
231 flat<0x5d, 0x6c>, "flat_atomic_dec_x2", VReg_64
232>;
Tom Stellard731c9272015-06-11 14:51:49 +0000233
Tom Stellard12a19102015-06-12 20:47:06 +0000234} // End SubtargetPredicate = isCIVI
Tom Stellard731c9272015-06-11 14:51:49 +0000235
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000236// CI Only flat instructions
237
Tom Stellarde1818af2016-02-18 03:42:32 +0000238let SubtargetPredicate = isCI, VIAssemblerPredicate = DisableInst, DisableVIDecoder = 1 in {
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000239
240defm FLAT_ATOMIC_FCMPSWAP : FLAT_ATOMIC <
241 flat<0x3e>, "flat_atomic_fcmpswap", VGPR_32, VReg_64
242>;
243defm FLAT_ATOMIC_FMIN : FLAT_ATOMIC <
244 flat<0x3f>, "flat_atomic_fmin", VGPR_32
245>;
246defm FLAT_ATOMIC_FMAX : FLAT_ATOMIC <
247 flat<0x40>, "flat_atomic_fmax", VGPR_32
248>;
249defm FLAT_ATOMIC_FCMPSWAP_X2 : FLAT_ATOMIC <
250 flat<0x5e>, "flat_atomic_fcmpswap_x2", VReg_64, VReg_128
251>;
252defm FLAT_ATOMIC_FMIN_X2 : FLAT_ATOMIC <
253 flat<0x5f>, "flat_atomic_fmin_x2", VReg_64
254>;
255defm FLAT_ATOMIC_FMAX_X2 : FLAT_ATOMIC <
256 flat<0x60>, "flat_atomic_fmax_x2", VReg_64
257>;
258
Tom Stellarde1818af2016-02-18 03:42:32 +0000259} // End SubtargetPredicate = isCI, VIAssemblerPredicate = DisableInst, DisableVIDecoder = 1
Tom Stellard5ebdfbe2015-12-24 03:18:18 +0000260
Matt Arsenault6adf07a2015-08-22 00:16:34 +0000261let Predicates = [isCI] in {
262
263// Convert (x - floor(x)) to fract(x)
264def : Pat <
265 (f32 (fsub (f32 (VOP3Mods f32:$x, i32:$mods)),
266 (f32 (ffloor (f32 (VOP3Mods f32:$x, i32:$mods)))))),
267 (V_FRACT_F32_e64 $mods, $x, DSTCLAMP.NONE, DSTOMOD.NONE)
268>;
269
270// Convert (x + (-floor(x))) to fract(x)
271def : Pat <
272 (f64 (fadd (f64 (VOP3Mods f64:$x, i32:$mods)),
273 (f64 (fneg (f64 (ffloor (f64 (VOP3Mods f64:$x, i32:$mods)))))))),
274 (V_FRACT_F64_e64 $mods, $x, DSTCLAMP.NONE, DSTOMOD.NONE)
275>;
276
277} // End Predicates = [isCI]
Changpeng Fangb41574a2015-12-22 20:55:23 +0000278
279
280//===----------------------------------------------------------------------===//
Tom Stellard2c82ee62016-01-05 02:26:37 +0000281// Flat Patterns
Changpeng Fangb41574a2015-12-22 20:55:23 +0000282//===----------------------------------------------------------------------===//
283
Tom Stellard2c82ee62016-01-05 02:26:37 +0000284let Predicates = [isCIVI] in {
Changpeng Fangb41574a2015-12-22 20:55:23 +0000285
Matt Arsenault382d9452016-01-26 04:49:22 +0000286// Patterns for global loads with no offset.
Changpeng Fangb41574a2015-12-22 20:55:23 +0000287class FlatLoadPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat <
288 (vt (node i64:$addr)),
289 (inst $addr, 0, 0, 0)
290>;
291
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000292class FlatLoadAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat <
293 (vt (node i64:$addr)),
294 (inst $addr, 1, 0, 0)
295>;
296
Tom Stellard2c82ee62016-01-05 02:26:37 +0000297def : FlatLoadPat <FLAT_LOAD_UBYTE, flat_az_extloadi8, i32>;
298def : FlatLoadPat <FLAT_LOAD_SBYTE, flat_sextloadi8, i32>;
299def : FlatLoadPat <FLAT_LOAD_USHORT, flat_az_extloadi16, i32>;
300def : FlatLoadPat <FLAT_LOAD_SSHORT, flat_sextloadi16, i32>;
301def : FlatLoadPat <FLAT_LOAD_DWORD, flat_load, i32>;
302def : FlatLoadPat <FLAT_LOAD_DWORDX2, flat_load, v2i32>;
303def : FlatLoadPat <FLAT_LOAD_DWORDX4, flat_load, v4i32>;
Changpeng Fangb41574a2015-12-22 20:55:23 +0000304
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000305def : FlatLoadAtomicPat <FLAT_LOAD_DWORD, atomic_flat_load, i32>;
306def : FlatLoadAtomicPat <FLAT_LOAD_DWORDX2, atomic_flat_load, i64>;
307
308
Changpeng Fangb41574a2015-12-22 20:55:23 +0000309class FlatStorePat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat <
310 (node vt:$data, i64:$addr),
Tom Stellard46937ca2016-02-12 17:57:54 +0000311 (inst $addr, $data, 0, 0, 0)
Changpeng Fangb41574a2015-12-22 20:55:23 +0000312>;
313
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000314class FlatStoreAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt> : Pat <
315 // atomic store follows aotmic binop convenction so the address comes first
316 (node i64:$addr, vt:$data),
317 (inst $addr, $data, 1, 0, 0)
318>;
319
Tom Stellard2c82ee62016-01-05 02:26:37 +0000320def : FlatStorePat <FLAT_STORE_BYTE, flat_truncstorei8, i32>;
321def : FlatStorePat <FLAT_STORE_SHORT, flat_truncstorei16, i32>;
322def : FlatStorePat <FLAT_STORE_DWORD, flat_store, i32>;
323def : FlatStorePat <FLAT_STORE_DWORDX2, flat_store, v2i32>;
324def : FlatStorePat <FLAT_STORE_DWORDX4, flat_store, v4i32>;
Changpeng Fangb41574a2015-12-22 20:55:23 +0000325
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000326def : FlatStoreAtomicPat <FLAT_STORE_DWORD, atomic_flat_store, i32>;
327def : FlatStoreAtomicPat <FLAT_STORE_DWORDX2, atomic_flat_store, i64>;
328
Tom Stellard354a43c2016-04-01 18:27:37 +0000329class FlatAtomicPat <FLAT inst, SDPatternOperator node, ValueType vt,
330 ValueType data_vt = vt> : Pat <
331 (vt (node i64:$addr, data_vt:$data)),
Changpeng Fangb41574a2015-12-22 20:55:23 +0000332 (inst $addr, $data, 0, 0)
333>;
334
335def : FlatAtomicPat <FLAT_ATOMIC_ADD_RTN, atomic_add_global, i32>;
Changpeng Fangb41574a2015-12-22 20:55:23 +0000336def : FlatAtomicPat <FLAT_ATOMIC_SUB_RTN, atomic_sub_global, i32>;
Matt Arsenaulta9dbdca2016-04-12 14:05:04 +0000337def : FlatAtomicPat <FLAT_ATOMIC_INC_RTN, atomic_inc_global, i32>;
338def : FlatAtomicPat <FLAT_ATOMIC_DEC_RTN, atomic_dec_global, i32>;
339def : FlatAtomicPat <FLAT_ATOMIC_AND_RTN, atomic_and_global, i32>;
Changpeng Fangb41574a2015-12-22 20:55:23 +0000340def : FlatAtomicPat <FLAT_ATOMIC_SMAX_RTN, atomic_max_global, i32>;
341def : FlatAtomicPat <FLAT_ATOMIC_UMAX_RTN, atomic_umax_global, i32>;
342def : FlatAtomicPat <FLAT_ATOMIC_SMIN_RTN, atomic_min_global, i32>;
343def : FlatAtomicPat <FLAT_ATOMIC_UMIN_RTN, atomic_umin_global, i32>;
344def : FlatAtomicPat <FLAT_ATOMIC_OR_RTN, atomic_or_global, i32>;
345def : FlatAtomicPat <FLAT_ATOMIC_SWAP_RTN, atomic_swap_global, i32>;
Tom Stellard354a43c2016-04-01 18:27:37 +0000346def : FlatAtomicPat <FLAT_ATOMIC_CMPSWAP_RTN, atomic_cmp_swap_global, i32, v2i32>;
Changpeng Fangb41574a2015-12-22 20:55:23 +0000347def : FlatAtomicPat <FLAT_ATOMIC_XOR_RTN, atomic_xor_global, i32>;
348
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000349def : FlatAtomicPat <FLAT_ATOMIC_ADD_X2_RTN, atomic_add_global, i64>;
350def : FlatAtomicPat <FLAT_ATOMIC_SUB_X2_RTN, atomic_sub_global, i64>;
Matt Arsenaulta9dbdca2016-04-12 14:05:04 +0000351def : FlatAtomicPat <FLAT_ATOMIC_INC_X2_RTN, atomic_inc_global, i64>;
352def : FlatAtomicPat <FLAT_ATOMIC_DEC_X2_RTN, atomic_dec_global, i64>;
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000353def : FlatAtomicPat <FLAT_ATOMIC_AND_X2_RTN, atomic_and_global, i64>;
354def : FlatAtomicPat <FLAT_ATOMIC_SMAX_X2_RTN, atomic_max_global, i64>;
355def : FlatAtomicPat <FLAT_ATOMIC_UMAX_X2_RTN, atomic_umax_global, i64>;
356def : FlatAtomicPat <FLAT_ATOMIC_SMIN_X2_RTN, atomic_min_global, i64>;
357def : FlatAtomicPat <FLAT_ATOMIC_UMIN_X2_RTN, atomic_umin_global, i64>;
358def : FlatAtomicPat <FLAT_ATOMIC_OR_X2_RTN, atomic_or_global, i64>;
359def : FlatAtomicPat <FLAT_ATOMIC_SWAP_X2_RTN, atomic_swap_global, i64>;
Tom Stellard354a43c2016-04-01 18:27:37 +0000360def : FlatAtomicPat <FLAT_ATOMIC_CMPSWAP_X2_RTN, atomic_cmp_swap_global, i64, v2i64>;
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000361def : FlatAtomicPat <FLAT_ATOMIC_XOR_X2_RTN, atomic_xor_global, i64>;
Tom Stellard354a43c2016-04-01 18:27:37 +0000362
Tom Stellard2c82ee62016-01-05 02:26:37 +0000363} // End Predicates = [isCIVI]