412 lines · plain
1// RUN: not llvm-mc -triple=amdgcn -show-encoding %s | FileCheck --check-prefixes=GCN,SI %s2// RUN: not llvm-mc -triple=amdgcn %s 2>&1 | FileCheck %s --check-prefix=NOSICI --implicit-check-not=error:3// RUN: llvm-mc -triple=amdgcn -mcpu=fiji -show-encoding %s | FileCheck --check-prefixes=GCN,VI %s4 5//===----------------------------------------------------------------------===//6// Edge Cases7//===----------------------------------------------------------------------===//8 9s_nop 010// GCN: s_nop 0 ; encoding: [0x00,0x00,0x80,0xbf]11 12s_nop 0xffff13// GCN: s_nop 0xffff ; encoding: [0xff,0xff,0x80,0xbf]14 15//===----------------------------------------------------------------------===//16// Instructions17//===----------------------------------------------------------------------===//18 19s_nop 120// GCN: s_nop 1 ; encoding: [0x01,0x00,0x80,0xbf]21 22s_endpgm23// GCN: s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]24 25s_endpgm 126// GCN: s_endpgm 1 ; encoding: [0x01,0x00,0x81,0xbf]27 28s_endpgm 6553529// GCN: s_endpgm 65535 ; encoding: [0xff,0xff,0x81,0xbf]30 31s_branch 232// GCN: s_branch 2 ; encoding: [0x02,0x00,0x82,0xbf]33 34s_cbranch_scc0 335// GCN: s_cbranch_scc0 3 ; encoding: [0x03,0x00,0x84,0xbf]36 37s_cbranch_scc1 438// GCN: s_cbranch_scc1 4 ; encoding: [0x04,0x00,0x85,0xbf]39 40s_cbranch_vccz 541// GCN: s_cbranch_vccz 5 ; encoding: [0x05,0x00,0x86,0xbf]42 43s_cbranch_vccnz 644// GCN: s_cbranch_vccnz 6 ; encoding: [0x06,0x00,0x87,0xbf]45 46s_cbranch_execz 747// GCN: s_cbranch_execz 7 ; encoding: [0x07,0x00,0x88,0xbf]48 49s_cbranch_execnz 850// GCN: s_cbranch_execnz 8 ; encoding: [0x08,0x00,0x89,0xbf]51 52s_cbranch_cdbgsys 953// GCN: s_cbranch_cdbgsys 9 ; encoding: [0x09,0x00,0x97,0xbf]54 55s_cbranch_cdbgsys_and_user 1056// GCN: s_cbranch_cdbgsys_and_user 10 ; encoding: [0x0a,0x00,0x9a,0xbf]57 58s_cbranch_cdbgsys_or_user 1159// GCN: s_cbranch_cdbgsys_or_user 11 ; encoding: [0x0b,0x00,0x99,0xbf]60 61s_cbranch_cdbguser 1262// GCN: s_cbranch_cdbguser 12 ; encoding: [0x0c,0x00,0x98,0xbf]63 64s_barrier65// GCN: s_barrier ; encoding: [0x00,0x00,0x8a,0xbf]66 67//===----------------------------------------------------------------------===//68// s_waitcnt69//===----------------------------------------------------------------------===//70 71s_waitcnt 072// GCN: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf]73 74s_waitcnt vmcnt(0) & expcnt(0) & lgkmcnt(0)75// GCN: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf]76 77s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78// GCN: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf]79 80s_waitcnt vmcnt(0), expcnt(0), lgkmcnt(0)81// GCN: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) ; encoding: [0x00,0x00,0x8c,0xbf]82 83s_waitcnt vmcnt(1)84// GCN: s_waitcnt vmcnt(1) ; encoding: [0x71,0x0f,0x8c,0xbf]85 86s_waitcnt vmcnt(9)87// GCN: s_waitcnt vmcnt(9) ; encoding: [0x79,0x0f,0x8c,0xbf]88 89s_waitcnt vmcnt(15)90// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]91 92s_waitcnt vmcnt_sat(9)93// GCN: s_waitcnt vmcnt(9) ; encoding: [0x79,0x0f,0x8c,0xbf]94 95s_waitcnt vmcnt_sat(15)96// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]97 98s_waitcnt vmcnt_sat(16)99// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]100 101s_waitcnt expcnt(2)102// GCN: s_waitcnt expcnt(2) ; encoding: [0x2f,0x0f,0x8c,0xbf]103 104s_waitcnt expcnt(7)105// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]106 107s_waitcnt expcnt_sat(2)108// GCN: s_waitcnt expcnt(2) ; encoding: [0x2f,0x0f,0x8c,0xbf]109 110s_waitcnt expcnt_sat(7)111// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]112 113s_waitcnt expcnt_sat(0xFFFF0000)114// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]115 116s_waitcnt lgkmcnt(3)117// GCN: s_waitcnt lgkmcnt(3) ; encoding: [0x7f,0x03,0x8c,0xbf]118 119s_waitcnt lgkmcnt(9)120// GCN: s_waitcnt lgkmcnt(9) ; encoding: [0x7f,0x09,0x8c,0xbf]121 122s_waitcnt lgkmcnt(15)123// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]124 125s_waitcnt vmcnt(0), expcnt(0)126// GCN: s_waitcnt vmcnt(0) expcnt(0) ; encoding: [0x00,0x0f,0x8c,0xbf]127 128s_waitcnt lgkmcnt_sat(3)129// GCN: s_waitcnt lgkmcnt(3) ; encoding: [0x7f,0x03,0x8c,0xbf]130 131s_waitcnt lgkmcnt_sat(9)132// GCN: s_waitcnt lgkmcnt(9) ; encoding: [0x7f,0x09,0x8c,0xbf]133 134s_waitcnt lgkmcnt_sat(15)135// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]136 137s_waitcnt lgkmcnt_sat(16)138// GCN: s_waitcnt vmcnt(15) expcnt(7) lgkmcnt(15) ; encoding: [0x7f,0x0f,0x8c,0xbf]139 140x=1141s_waitcnt lgkmcnt_sat(x+1)142// GCN: s_waitcnt lgkmcnt(2) ; encoding: [0x7f,0x02,0x8c,0xbf]143 144s_waitcnt lgkmcnt_sat(1+x)145// GCN: s_waitcnt lgkmcnt(2) ; encoding: [0x7f,0x02,0x8c,0xbf]146 147s_waitcnt x+1148// GCN: s_waitcnt vmcnt(2) expcnt(0) lgkmcnt(0) ; encoding: [0x02,0x00,0x8c,0xbf]149 150s_waitcnt 1+x151// GCN: s_waitcnt vmcnt(2) expcnt(0) lgkmcnt(0) ; encoding: [0x02,0x00,0x8c,0xbf]152 153lgkmcnt_sat=1154s_waitcnt lgkmcnt_sat155// GCN: s_waitcnt vmcnt(1) expcnt(0) lgkmcnt(0) ; encoding: [0x01,0x00,0x8c,0xbf]156 157s_waitcnt lgkmcnt_sat+1158// GCN: s_waitcnt vmcnt(2) expcnt(0) lgkmcnt(0) ; encoding: [0x02,0x00,0x8c,0xbf]159 160//===----------------------------------------------------------------------===//161// misc sopp instructions162//===----------------------------------------------------------------------===//163 164s_sethalt 9165// GCN: s_sethalt 9 ; encoding: [0x09,0x00,0x8d,0xbf]166 167s_setkill 7168// GCN: s_setkill 7 ; encoding: [0x07,0x00,0x8b,0xbf]169 170s_sleep 10171// GCN: s_sleep 10 ; encoding: [0x0a,0x00,0x8e,0xbf]172 173s_setprio 1174// GCN: s_setprio 1 ; encoding: [0x01,0x00,0x8f,0xbf]175 176//===----------------------------------------------------------------------===//177// s_sendmsg178//===----------------------------------------------------------------------===//179 180s_sendmsg 0x1181// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]182 183s_sendmsg sendmsg(1)184// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]185 186s_sendmsg sendmsg(MSG_INTERRUPT)187// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]188 189s_sendmsg 0x12190// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]191 192s_sendmsg sendmsg(2, 1)193// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]194 195s_sendmsg sendmsg(2, GS_OP_CUT)196// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]197 198s_sendmsg sendmsg(MSG_GS, GS_OP_CUT)199// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]200 201s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0)202// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]203 204s_sendmsg sendmsg(MSG_GS, 1)205// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]206 207s_sendmsg sendmsg(MSG_GS, 1, 1)208// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 1) ; encoding: [0x12,0x01,0x90,0xbf]209 210s_sendmsg 0x122211// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 1) ; encoding: [0x22,0x01,0x90,0xbf]212 213s_sendmsg sendmsg(2, 2, 1)214// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 1) ; encoding: [0x22,0x01,0x90,0xbf]215 216s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 1)217// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT, 1) ; encoding: [0x22,0x01,0x90,0xbf]218 219s_sendmsg 0x232220// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) ; encoding: [0x32,0x02,0x90,0xbf]221 222s_sendmsg sendmsg(2, 3, 2)223// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) ; encoding: [0x32,0x02,0x90,0xbf]224 225s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2)226// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) ; encoding: [0x32,0x02,0x90,0xbf]227 228s_sendmsg 0x3229// GCN: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) ; encoding: [0x03,0x00,0x90,0xbf]230 231s_sendmsg sendmsg(3, 0)232// GCN: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) ; encoding: [0x03,0x00,0x90,0xbf]233 234s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP)235// GCN: s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP) ; encoding: [0x03,0x00,0x90,0xbf]236 237s_sendmsg 0x4238// SI: s_sendmsg sendmsg(4, 0, 0) ; encoding: [0x04,0x00,0x90,0xbf]239// VI: s_sendmsg sendmsg(MSG_SAVEWAVE) ; encoding: [0x04,0x00,0x90,0xbf]240 241s_sendmsg sendmsg(4)242// SI: s_sendmsg sendmsg(4, 0, 0) ; encoding: [0x04,0x00,0x90,0xbf]243// VI: s_sendmsg sendmsg(MSG_SAVEWAVE) ; encoding: [0x04,0x00,0x90,0xbf]244 245s_sendmsg sendmsg(MSG_SAVEWAVE)246// NOSICI: :[[@LINE-1]]:{{[0-9]+}}: error: specified message id is not supported on this GPU247// VI: s_sendmsg sendmsg(MSG_SAVEWAVE) ; encoding: [0x04,0x00,0x90,0xbf]248 249s_sendmsg 0x1f250// GCN: s_sendmsg sendmsg(MSG_SYSMSG, SYSMSG_OP_ECC_ERR_INTERRUPT) ; encoding: [0x1f,0x00,0x90,0xbf]251 252s_sendmsg sendmsg(15, 1)253// GCN: s_sendmsg sendmsg(MSG_SYSMSG, SYSMSG_OP_ECC_ERR_INTERRUPT) ; encoding: [0x1f,0x00,0x90,0xbf]254 255s_sendmsg sendmsg(MSG_SYSMSG, SYSMSG_OP_ECC_ERR_INTERRUPT)256// GCN: s_sendmsg sendmsg(MSG_SYSMSG, SYSMSG_OP_ECC_ERR_INTERRUPT) ; encoding: [0x1f,0x00,0x90,0xbf]257 258s_sendmsghalt 3259// GCN: s_sendmsghalt sendmsg(MSG_GS_DONE, GS_OP_NOP) ; encoding: [0x03,0x00,0x91,0xbf]260 261s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 1)262// GCN: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 1) ; encoding: [0x22,0x01,0x91,0xbf]263 264//===----------------------------------------------------------------------===//265// s_sendmsg with a numeric message id (no validation)266//===----------------------------------------------------------------------===//267 268s_sendmsg 2269// GCN: s_sendmsg sendmsg(2, 0, 0) ; encoding: [0x02,0x00,0x90,0xbf]270 271s_sendmsg 9272// GCN: s_sendmsg sendmsg(9, 0, 0) ; encoding: [0x09,0x00,0x90,0xbf]273 274s_sendmsg 11275// GCN: s_sendmsg sendmsg(11, 0, 0) ; encoding: [0x0b,0x00,0x90,0xbf]276 277s_sendmsg 0x6f278// GCN: s_sendmsg sendmsg(15, 6, 0) ; encoding: [0x6f,0x00,0x90,0xbf]279 280s_sendmsg sendmsg(1, 3)281// GCN: s_sendmsg sendmsg(1, 3, 0) ; encoding: [0x31,0x00,0x90,0xbf]282 283s_sendmsg sendmsg(1, 3, 2)284// GCN: s_sendmsg sendmsg(1, 3, 2) ; encoding: [0x31,0x02,0x90,0xbf]285 286s_sendmsg sendmsg(2, 0, 1)287// GCN: s_sendmsg sendmsg(2, 0, 1) ; encoding: [0x02,0x01,0x90,0xbf]288 289s_sendmsg sendmsg(15, 7, 3)290// GCN: s_sendmsg sendmsg(15, 7, 3) ; encoding: [0x7f,0x03,0x90,0xbf]291 292s_sendmsg 4567293// GCN: s_sendmsg 4567 ; encoding: [0xd7,0x11,0x90,0xbf]294 295//===----------------------------------------------------------------------===//296// s_sendmsg with expressions297//===----------------------------------------------------------------------===//298 299sendmsg=2300s_sendmsg sendmsg301// GCN: s_sendmsg sendmsg(2, 0, 0) ; encoding: [0x02,0x00,0x90,0xbf]302 303sendmsg=1304s_sendmsg sendmsg+1305// GCN: s_sendmsg sendmsg(2, 0, 0) ; encoding: [0x02,0x00,0x90,0xbf]306 307s_sendmsg 1+sendmsg308// GCN: s_sendmsg sendmsg(2, 0, 0) ; encoding: [0x02,0x00,0x90,0xbf]309 310msg=1311s_sendmsg sendmsg(msg)312// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]313 314msg=0315s_sendmsg sendmsg(msg+1)316// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]317 318msg=0319s_sendmsg sendmsg(1+msg)320// GCN: s_sendmsg sendmsg(MSG_INTERRUPT) ; encoding: [0x01,0x00,0x90,0xbf]321 322msg=2323op=1324s_sendmsg sendmsg(msg, op)325// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]326 327msg=1328op=0329s_sendmsg sendmsg(msg+1, op+1)330// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]331 332msg=1333op=0334s_sendmsg sendmsg(1+msg, 1+op)335// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 0) ; encoding: [0x12,0x00,0x90,0xbf]336 337msg=1338op=2339stream=1340s_sendmsg sendmsg(msg+1, op+1, stream+1)341// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) ; encoding: [0x32,0x02,0x90,0xbf]342 343msg=1344op=2345stream=1346s_sendmsg sendmsg(1+msg, 1+op, 1+stream)347// GCN: s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT_CUT, 2) ; encoding: [0x32,0x02,0x90,0xbf]348 349MSG_GS=-1350GS_OP_EMIT=-1351s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 1)352// GCN: s_sendmsghalt sendmsg(MSG_GS, GS_OP_EMIT, 1) ; encoding: [0x22,0x01,0x91,0xbf]353 354//===----------------------------------------------------------------------===//355// misc sopp instructions356//===----------------------------------------------------------------------===//357 358s_trap 4359// GCN: s_trap 4 ; encoding: [0x04,0x00,0x92,0xbf]360 361s_icache_inv362// GCN: s_icache_inv ; encoding: [0x00,0x00,0x93,0xbf]363 364s_incperflevel 5365// GCN: s_incperflevel 5 ; encoding: [0x05,0x00,0x94,0xbf]366 367s_decperflevel 6368// GCN: s_decperflevel 6 ; encoding: [0x06,0x00,0x95,0xbf]369 370s_ttracedata371// GCN: s_ttracedata ; encoding: [0x00,0x00,0x96,0xbf]372 373s_set_gpr_idx_off374// VI: s_set_gpr_idx_off ; encoding: [0x00,0x00,0x9c,0xbf]375// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU376 377s_set_gpr_idx_mode 0378// VI: s_set_gpr_idx_mode gpr_idx() ; encoding: [0x00,0x00,0x9d,0xbf]379// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU380 381s_set_gpr_idx_mode gpr_idx()382// VI: s_set_gpr_idx_mode gpr_idx() ; encoding: [0x00,0x00,0x9d,0xbf]383// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU384 385s_set_gpr_idx_mode 15386// VI: s_set_gpr_idx_mode gpr_idx(SRC0,SRC1,SRC2,DST) ; encoding: [0x0f,0x00,0x9d,0xbf]387// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU388 389s_set_gpr_idx_mode gpr_idx(SRC2,SRC1,SRC0,DST)390// VI: s_set_gpr_idx_mode gpr_idx(SRC0,SRC1,SRC2,DST) ; encoding: [0x0f,0x00,0x9d,0xbf]391// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU392 393s_endpgm_saved394// VI: s_endpgm_saved ; encoding: [0x00,0x00,0x9b,0xbf]395// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU396 397s_wakeup398// VI: s_wakeup ; encoding: [0x00,0x00,0x83,0xbf]399// NOSICI: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU400 401//===----------------------------------------------------------------------===//402// absolute expressions as branch offsets403//===----------------------------------------------------------------------===//404 405offset = 3406s_branch 1+offset407// GCN: s_branch 4 ; encoding: [0x04,0x00,0x82,0xbf]408 409offset = 3410s_branch offset+1411// GCN: s_branch 4 ; encoding: [0x04,0x00,0x82,0xbf]412