1//===-- VOPCInstructions.td - Vector 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 10//===----------------------------------------------------------------------===// 11// Encodings 12//===----------------------------------------------------------------------===// 13 14class VOPCe <bits<8> op> : Enc32 { 15 bits<9> src0; 16 bits<8> src1; 17 18 let Inst{8-0} = src0; 19 let Inst{16-9} = src1; 20 let Inst{24-17} = op; 21 let Inst{31-25} = 0x3e; 22} 23 24class VOPC_SDWAe <bits<8> op, VOPProfile P> : VOP_SDWAe <P> { 25 bits<8> src1; 26 27 let Inst{8-0} = 0xf9; // sdwa 28 let Inst{16-9} = !if(P.HasSrc1, src1{7-0}, 0); 29 let Inst{24-17} = op; 30 let Inst{31-25} = 0x3e; // encoding 31 32 // VOPC disallows dst_sel and dst_unused as they have no effect on destination 33 let Inst{42-40} = 0; 34 let Inst{44-43} = 0; 35} 36 37class VOPC_SDWA9e <bits<8> op, VOPProfile P> : VOP_SDWA9Be <P> { 38 bits<9> src1; 39 40 let Inst{8-0} = 0xf9; // sdwa 41 let Inst{16-9} = !if(P.HasSrc1, src1{7-0}, 0); 42 let Inst{24-17} = op; 43 let Inst{31-25} = 0x3e; // encoding 44 let Inst{63} = !if(P.HasSrc1, src1{8}, 0); // src1_sgpr 45} 46 47 48//===----------------------------------------------------------------------===// 49// VOPC classes 50//===----------------------------------------------------------------------===// 51 52// VOPC instructions are a special case because for the 32-bit 53// encoding, we want to display the implicit vcc write as if it were 54// an explicit $dst. 55class VOPC_Profile<list<SchedReadWrite> sched, ValueType vt0, ValueType vt1 = vt0> : 56 VOPProfile <[i1, vt0, vt1, untyped]> { 57 let Asm32 = "vcc, $src0, $src1"; 58 // The destination for 32-bit encoding is implicit. 59 let HasDst32 = 0; 60 let Outs64 = (outs VOPDstS64:$sdst); 61 list<SchedReadWrite> Schedule = sched; 62} 63 64class VOPC_Pseudo <string opName, VOPC_Profile P, list<dag> pattern=[]> : 65 InstSI<(outs), P.Ins32, "", pattern>, 66 VOP <opName>, 67 SIMCInstr<opName#"_e32", SIEncodingFamily.NONE> { 68 69 let isPseudo = 1; 70 let isCodeGenOnly = 1; 71 let UseNamedOperandTable = 1; 72 73 string Mnemonic = opName; 74 string AsmOperands = P.Asm32; 75 76 let Size = 4; 77 let mayLoad = 0; 78 let mayStore = 0; 79 let hasSideEffects = 0; 80 81 let VALU = 1; 82 let VOPC = 1; 83 let Uses = [EXEC]; 84 let Defs = [VCC]; 85 86 let SubtargetPredicate = isGCN; 87 88 VOPProfile Pfl = P; 89} 90 91class VOPC_Real <VOPC_Pseudo ps, int EncodingFamily> : 92 InstSI <ps.OutOperandList, ps.InOperandList, ps.PseudoInstr # " " # ps.AsmOperands, []>, 93 SIMCInstr <ps.PseudoInstr, EncodingFamily> { 94 95 let isPseudo = 0; 96 let isCodeGenOnly = 0; 97 98 let Constraints = ps.Constraints; 99 let DisableEncoding = ps.DisableEncoding; 100 101 // copy relevant pseudo op flags 102 let SubtargetPredicate = ps.SubtargetPredicate; 103 let AsmMatchConverter = ps.AsmMatchConverter; 104 let Constraints = ps.Constraints; 105 let DisableEncoding = ps.DisableEncoding; 106 let TSFlags = ps.TSFlags; 107 let UseNamedOperandTable = ps.UseNamedOperandTable; 108 let Uses = ps.Uses; 109 let Defs = ps.Defs; 110} 111 112class VOPC_SDWA_Pseudo <string OpName, VOPProfile P, list<dag> pattern=[]> : 113 VOP_SDWA_Pseudo <OpName, P, pattern> { 114 let AsmMatchConverter = "cvtSdwaVOPC"; 115} 116 117// This class is used only with VOPC instructions. Use $sdst for out operand 118class VOPCInstAlias <VOP3_Pseudo ps, Instruction inst, VOPProfile p = ps.Pfl> : 119 InstAlias <ps.OpName#" "#p.Asm32, (inst)>, PredicateControl { 120 121 field bit isCompare; 122 field bit isCommutable; 123 124 let ResultInst = 125 !if (p.HasDst32, 126 !if (!eq(p.NumSrcArgs, 0), 127 // 1 dst, 0 src 128 (inst p.DstRC:$sdst), 129 !if (!eq(p.NumSrcArgs, 1), 130 // 1 dst, 1 src 131 (inst p.DstRC:$sdst, p.Src0RC32:$src0), 132 !if (!eq(p.NumSrcArgs, 2), 133 // 1 dst, 2 src 134 (inst p.DstRC:$sdst, p.Src0RC32:$src0, p.Src1RC32:$src1), 135 // else - unreachable 136 (inst)))), 137 // else 138 !if (!eq(p.NumSrcArgs, 2), 139 // 0 dst, 2 src 140 (inst p.Src0RC32:$src0, p.Src1RC32:$src1), 141 !if (!eq(p.NumSrcArgs, 1), 142 // 0 dst, 1 src 143 (inst p.Src0RC32:$src1), 144 // else 145 // 0 dst, 0 src 146 (inst)))); 147 148 let AsmVariantName = AMDGPUAsmVariants.Default; 149 let SubtargetPredicate = AssemblerPredicate; 150} 151 152class getVOPCPat64 <PatLeaf cond, VOPProfile P> : LetDummies { 153 list<dag> ret = !if(P.HasModifiers, 154 [(set i1:$sdst, 155 (setcc (P.Src0VT 156 !if(P.HasOMod, 157 (VOP3Mods0 P.Src0VT:$src0, i32:$src0_modifiers, i1:$clamp, i32:$omod), 158 (VOP3Mods0 P.Src0VT:$src0, i32:$src0_modifiers, i1:$clamp))), 159 (P.Src1VT (VOP3Mods P.Src1VT:$src1, i32:$src1_modifiers)), 160 cond))], 161 [(set i1:$sdst, (setcc P.Src0VT:$src0, P.Src1VT:$src1, cond))]); 162} 163 164 165multiclass VOPC_Pseudos <string opName, 166 VOPC_Profile P, 167 PatLeaf cond = COND_NULL, 168 string revOp = opName, 169 bit DefExec = 0> { 170 171 def _e32 : VOPC_Pseudo <opName, P>, 172 Commutable_REV<revOp#"_e32", !eq(revOp, opName)> { 173 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 174 let SchedRW = P.Schedule; 175 let isConvergent = DefExec; 176 let isCompare = 1; 177 let isCommutable = 1; 178 } 179 180 def _e64 : VOP3_Pseudo<opName, P, getVOPCPat64<cond, P>.ret>, 181 Commutable_REV<revOp#"_e64", !eq(revOp, opName)> { 182 let Defs = !if(DefExec, [EXEC], []); 183 let SchedRW = P.Schedule; 184 let isCompare = 1; 185 let isCommutable = 1; 186 } 187 188 def _sdwa : VOPC_SDWA_Pseudo <opName, P> { 189 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 190 let SchedRW = P.Schedule; 191 let isConvergent = DefExec; 192 let isCompare = 1; 193 } 194} 195 196def VOPC_I1_F16_F16 : VOPC_Profile<[Write32Bit], f16>; 197def VOPC_I1_F32_F32 : VOPC_Profile<[Write32Bit], f32>; 198def VOPC_I1_F64_F64 : VOPC_Profile<[WriteDoubleAdd], f64>; 199def VOPC_I1_I16_I16 : VOPC_Profile<[Write32Bit], i16>; 200def VOPC_I1_I32_I32 : VOPC_Profile<[Write32Bit], i32>; 201def VOPC_I1_I64_I64 : VOPC_Profile<[Write64Bit], i64>; 202 203multiclass VOPC_F16 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 204 VOPC_Pseudos <opName, VOPC_I1_F16_F16, cond, revOp, 0>; 205 206multiclass VOPC_F32 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 207 VOPC_Pseudos <opName, VOPC_I1_F32_F32, cond, revOp, 0>; 208 209multiclass VOPC_F64 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 210 VOPC_Pseudos <opName, VOPC_I1_F64_F64, cond, revOp, 0>; 211 212multiclass VOPC_I16 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 213 VOPC_Pseudos <opName, VOPC_I1_I16_I16, cond, revOp, 0>; 214 215multiclass VOPC_I32 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 216 VOPC_Pseudos <opName, VOPC_I1_I32_I32, cond, revOp, 0>; 217 218multiclass VOPC_I64 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 219 VOPC_Pseudos <opName, VOPC_I1_I64_I64, cond, revOp, 0>; 220 221multiclass VOPCX_F16 <string opName, string revOp = opName> : 222 VOPC_Pseudos <opName, VOPC_I1_F16_F16, COND_NULL, revOp, 1>; 223 224multiclass VOPCX_F32 <string opName, string revOp = opName> : 225 VOPC_Pseudos <opName, VOPC_I1_F32_F32, COND_NULL, revOp, 1>; 226 227multiclass VOPCX_F64 <string opName, string revOp = opName> : 228 VOPC_Pseudos <opName, VOPC_I1_F64_F64, COND_NULL, revOp, 1>; 229 230multiclass VOPCX_I16 <string opName, string revOp = opName> : 231 VOPC_Pseudos <opName, VOPC_I1_I16_I16, COND_NULL, revOp, 1>; 232 233multiclass VOPCX_I32 <string opName, string revOp = opName> : 234 VOPC_Pseudos <opName, VOPC_I1_I32_I32, COND_NULL, revOp, 1>; 235 236multiclass VOPCX_I64 <string opName, string revOp = opName> : 237 VOPC_Pseudos <opName, VOPC_I1_I64_I64, COND_NULL, revOp, 1>; 238 239 240//===----------------------------------------------------------------------===// 241// Compare instructions 242//===----------------------------------------------------------------------===// 243 244defm V_CMP_F_F32 : VOPC_F32 <"v_cmp_f_f32">; 245defm V_CMP_LT_F32 : VOPC_F32 <"v_cmp_lt_f32", COND_OLT, "v_cmp_gt_f32">; 246defm V_CMP_EQ_F32 : VOPC_F32 <"v_cmp_eq_f32", COND_OEQ>; 247defm V_CMP_LE_F32 : VOPC_F32 <"v_cmp_le_f32", COND_OLE, "v_cmp_ge_f32">; 248defm V_CMP_GT_F32 : VOPC_F32 <"v_cmp_gt_f32", COND_OGT>; 249defm V_CMP_LG_F32 : VOPC_F32 <"v_cmp_lg_f32", COND_ONE>; 250defm V_CMP_GE_F32 : VOPC_F32 <"v_cmp_ge_f32", COND_OGE>; 251defm V_CMP_O_F32 : VOPC_F32 <"v_cmp_o_f32", COND_O>; 252defm V_CMP_U_F32 : VOPC_F32 <"v_cmp_u_f32", COND_UO>; 253defm V_CMP_NGE_F32 : VOPC_F32 <"v_cmp_nge_f32", COND_ULT, "v_cmp_nle_f32">; 254defm V_CMP_NLG_F32 : VOPC_F32 <"v_cmp_nlg_f32", COND_UEQ>; 255defm V_CMP_NGT_F32 : VOPC_F32 <"v_cmp_ngt_f32", COND_ULE, "v_cmp_nlt_f32">; 256defm V_CMP_NLE_F32 : VOPC_F32 <"v_cmp_nle_f32", COND_UGT>; 257defm V_CMP_NEQ_F32 : VOPC_F32 <"v_cmp_neq_f32", COND_UNE>; 258defm V_CMP_NLT_F32 : VOPC_F32 <"v_cmp_nlt_f32", COND_UGE>; 259defm V_CMP_TRU_F32 : VOPC_F32 <"v_cmp_tru_f32">; 260 261defm V_CMPX_F_F32 : VOPCX_F32 <"v_cmpx_f_f32">; 262defm V_CMPX_LT_F32 : VOPCX_F32 <"v_cmpx_lt_f32", "v_cmpx_gt_f32">; 263defm V_CMPX_EQ_F32 : VOPCX_F32 <"v_cmpx_eq_f32">; 264defm V_CMPX_LE_F32 : VOPCX_F32 <"v_cmpx_le_f32", "v_cmpx_ge_f32">; 265defm V_CMPX_GT_F32 : VOPCX_F32 <"v_cmpx_gt_f32">; 266defm V_CMPX_LG_F32 : VOPCX_F32 <"v_cmpx_lg_f32">; 267defm V_CMPX_GE_F32 : VOPCX_F32 <"v_cmpx_ge_f32">; 268defm V_CMPX_O_F32 : VOPCX_F32 <"v_cmpx_o_f32">; 269defm V_CMPX_U_F32 : VOPCX_F32 <"v_cmpx_u_f32">; 270defm V_CMPX_NGE_F32 : VOPCX_F32 <"v_cmpx_nge_f32", "v_cmpx_nle_f32">; 271defm V_CMPX_NLG_F32 : VOPCX_F32 <"v_cmpx_nlg_f32">; 272defm V_CMPX_NGT_F32 : VOPCX_F32 <"v_cmpx_ngt_f32", "v_cmpx_nlt_f32">; 273defm V_CMPX_NLE_F32 : VOPCX_F32 <"v_cmpx_nle_f32">; 274defm V_CMPX_NEQ_F32 : VOPCX_F32 <"v_cmpx_neq_f32">; 275defm V_CMPX_NLT_F32 : VOPCX_F32 <"v_cmpx_nlt_f32">; 276defm V_CMPX_TRU_F32 : VOPCX_F32 <"v_cmpx_tru_f32">; 277 278defm V_CMP_F_F64 : VOPC_F64 <"v_cmp_f_f64">; 279defm V_CMP_LT_F64 : VOPC_F64 <"v_cmp_lt_f64", COND_OLT, "v_cmp_gt_f64">; 280defm V_CMP_EQ_F64 : VOPC_F64 <"v_cmp_eq_f64", COND_OEQ>; 281defm V_CMP_LE_F64 : VOPC_F64 <"v_cmp_le_f64", COND_OLE, "v_cmp_ge_f64">; 282defm V_CMP_GT_F64 : VOPC_F64 <"v_cmp_gt_f64", COND_OGT>; 283defm V_CMP_LG_F64 : VOPC_F64 <"v_cmp_lg_f64", COND_ONE>; 284defm V_CMP_GE_F64 : VOPC_F64 <"v_cmp_ge_f64", COND_OGE>; 285defm V_CMP_O_F64 : VOPC_F64 <"v_cmp_o_f64", COND_O>; 286defm V_CMP_U_F64 : VOPC_F64 <"v_cmp_u_f64", COND_UO>; 287defm V_CMP_NGE_F64 : VOPC_F64 <"v_cmp_nge_f64", COND_ULT, "v_cmp_nle_f64">; 288defm V_CMP_NLG_F64 : VOPC_F64 <"v_cmp_nlg_f64", COND_UEQ>; 289defm V_CMP_NGT_F64 : VOPC_F64 <"v_cmp_ngt_f64", COND_ULE, "v_cmp_nlt_f64">; 290defm V_CMP_NLE_F64 : VOPC_F64 <"v_cmp_nle_f64", COND_UGT>; 291defm V_CMP_NEQ_F64 : VOPC_F64 <"v_cmp_neq_f64", COND_UNE>; 292defm V_CMP_NLT_F64 : VOPC_F64 <"v_cmp_nlt_f64", COND_UGE>; 293defm V_CMP_TRU_F64 : VOPC_F64 <"v_cmp_tru_f64">; 294 295defm V_CMPX_F_F64 : VOPCX_F64 <"v_cmpx_f_f64">; 296defm V_CMPX_LT_F64 : VOPCX_F64 <"v_cmpx_lt_f64", "v_cmpx_gt_f64">; 297defm V_CMPX_EQ_F64 : VOPCX_F64 <"v_cmpx_eq_f64">; 298defm V_CMPX_LE_F64 : VOPCX_F64 <"v_cmpx_le_f64", "v_cmpx_ge_f64">; 299defm V_CMPX_GT_F64 : VOPCX_F64 <"v_cmpx_gt_f64">; 300defm V_CMPX_LG_F64 : VOPCX_F64 <"v_cmpx_lg_f64">; 301defm V_CMPX_GE_F64 : VOPCX_F64 <"v_cmpx_ge_f64">; 302defm V_CMPX_O_F64 : VOPCX_F64 <"v_cmpx_o_f64">; 303defm V_CMPX_U_F64 : VOPCX_F64 <"v_cmpx_u_f64">; 304defm V_CMPX_NGE_F64 : VOPCX_F64 <"v_cmpx_nge_f64", "v_cmpx_nle_f64">; 305defm V_CMPX_NLG_F64 : VOPCX_F64 <"v_cmpx_nlg_f64">; 306defm V_CMPX_NGT_F64 : VOPCX_F64 <"v_cmpx_ngt_f64", "v_cmpx_nlt_f64">; 307defm V_CMPX_NLE_F64 : VOPCX_F64 <"v_cmpx_nle_f64">; 308defm V_CMPX_NEQ_F64 : VOPCX_F64 <"v_cmpx_neq_f64">; 309defm V_CMPX_NLT_F64 : VOPCX_F64 <"v_cmpx_nlt_f64">; 310defm V_CMPX_TRU_F64 : VOPCX_F64 <"v_cmpx_tru_f64">; 311 312let SubtargetPredicate = isSICI in { 313 314defm V_CMPS_F_F32 : VOPC_F32 <"v_cmps_f_f32">; 315defm V_CMPS_LT_F32 : VOPC_F32 <"v_cmps_lt_f32", COND_NULL, "v_cmps_gt_f32">; 316defm V_CMPS_EQ_F32 : VOPC_F32 <"v_cmps_eq_f32">; 317defm V_CMPS_LE_F32 : VOPC_F32 <"v_cmps_le_f32", COND_NULL, "v_cmps_ge_f32">; 318defm V_CMPS_GT_F32 : VOPC_F32 <"v_cmps_gt_f32">; 319defm V_CMPS_LG_F32 : VOPC_F32 <"v_cmps_lg_f32">; 320defm V_CMPS_GE_F32 : VOPC_F32 <"v_cmps_ge_f32">; 321defm V_CMPS_O_F32 : VOPC_F32 <"v_cmps_o_f32">; 322defm V_CMPS_U_F32 : VOPC_F32 <"v_cmps_u_f32">; 323defm V_CMPS_NGE_F32 : VOPC_F32 <"v_cmps_nge_f32", COND_NULL, "v_cmps_nle_f32">; 324defm V_CMPS_NLG_F32 : VOPC_F32 <"v_cmps_nlg_f32">; 325defm V_CMPS_NGT_F32 : VOPC_F32 <"v_cmps_ngt_f32", COND_NULL, "v_cmps_nlt_f32">; 326defm V_CMPS_NLE_F32 : VOPC_F32 <"v_cmps_nle_f32">; 327defm V_CMPS_NEQ_F32 : VOPC_F32 <"v_cmps_neq_f32">; 328defm V_CMPS_NLT_F32 : VOPC_F32 <"v_cmps_nlt_f32">; 329defm V_CMPS_TRU_F32 : VOPC_F32 <"v_cmps_tru_f32">; 330 331defm V_CMPSX_F_F32 : VOPCX_F32 <"v_cmpsx_f_f32">; 332defm V_CMPSX_LT_F32 : VOPCX_F32 <"v_cmpsx_lt_f32", "v_cmpsx_gt_f32">; 333defm V_CMPSX_EQ_F32 : VOPCX_F32 <"v_cmpsx_eq_f32">; 334defm V_CMPSX_LE_F32 : VOPCX_F32 <"v_cmpsx_le_f32", "v_cmpsx_ge_f32">; 335defm V_CMPSX_GT_F32 : VOPCX_F32 <"v_cmpsx_gt_f32">; 336defm V_CMPSX_LG_F32 : VOPCX_F32 <"v_cmpsx_lg_f32">; 337defm V_CMPSX_GE_F32 : VOPCX_F32 <"v_cmpsx_ge_f32">; 338defm V_CMPSX_O_F32 : VOPCX_F32 <"v_cmpsx_o_f32">; 339defm V_CMPSX_U_F32 : VOPCX_F32 <"v_cmpsx_u_f32">; 340defm V_CMPSX_NGE_F32 : VOPCX_F32 <"v_cmpsx_nge_f32", "v_cmpsx_nle_f32">; 341defm V_CMPSX_NLG_F32 : VOPCX_F32 <"v_cmpsx_nlg_f32">; 342defm V_CMPSX_NGT_F32 : VOPCX_F32 <"v_cmpsx_ngt_f32", "v_cmpsx_nlt_f32">; 343defm V_CMPSX_NLE_F32 : VOPCX_F32 <"v_cmpsx_nle_f32">; 344defm V_CMPSX_NEQ_F32 : VOPCX_F32 <"v_cmpsx_neq_f32">; 345defm V_CMPSX_NLT_F32 : VOPCX_F32 <"v_cmpsx_nlt_f32">; 346defm V_CMPSX_TRU_F32 : VOPCX_F32 <"v_cmpsx_tru_f32">; 347 348defm V_CMPS_F_F64 : VOPC_F64 <"v_cmps_f_f64">; 349defm V_CMPS_LT_F64 : VOPC_F64 <"v_cmps_lt_f64", COND_NULL, "v_cmps_gt_f64">; 350defm V_CMPS_EQ_F64 : VOPC_F64 <"v_cmps_eq_f64">; 351defm V_CMPS_LE_F64 : VOPC_F64 <"v_cmps_le_f64", COND_NULL, "v_cmps_ge_f64">; 352defm V_CMPS_GT_F64 : VOPC_F64 <"v_cmps_gt_f64">; 353defm V_CMPS_LG_F64 : VOPC_F64 <"v_cmps_lg_f64">; 354defm V_CMPS_GE_F64 : VOPC_F64 <"v_cmps_ge_f64">; 355defm V_CMPS_O_F64 : VOPC_F64 <"v_cmps_o_f64">; 356defm V_CMPS_U_F64 : VOPC_F64 <"v_cmps_u_f64">; 357defm V_CMPS_NGE_F64 : VOPC_F64 <"v_cmps_nge_f64", COND_NULL, "v_cmps_nle_f64">; 358defm V_CMPS_NLG_F64 : VOPC_F64 <"v_cmps_nlg_f64">; 359defm V_CMPS_NGT_F64 : VOPC_F64 <"v_cmps_ngt_f64", COND_NULL, "v_cmps_nlt_f64">; 360defm V_CMPS_NLE_F64 : VOPC_F64 <"v_cmps_nle_f64">; 361defm V_CMPS_NEQ_F64 : VOPC_F64 <"v_cmps_neq_f64">; 362defm V_CMPS_NLT_F64 : VOPC_F64 <"v_cmps_nlt_f64">; 363defm V_CMPS_TRU_F64 : VOPC_F64 <"v_cmps_tru_f64">; 364 365defm V_CMPSX_F_F64 : VOPCX_F64 <"v_cmpsx_f_f64">; 366defm V_CMPSX_LT_F64 : VOPCX_F64 <"v_cmpsx_lt_f64", "v_cmpsx_gt_f64">; 367defm V_CMPSX_EQ_F64 : VOPCX_F64 <"v_cmpsx_eq_f64">; 368defm V_CMPSX_LE_F64 : VOPCX_F64 <"v_cmpsx_le_f64", "v_cmpsx_ge_f64">; 369defm V_CMPSX_GT_F64 : VOPCX_F64 <"v_cmpsx_gt_f64">; 370defm V_CMPSX_LG_F64 : VOPCX_F64 <"v_cmpsx_lg_f64">; 371defm V_CMPSX_GE_F64 : VOPCX_F64 <"v_cmpsx_ge_f64">; 372defm V_CMPSX_O_F64 : VOPCX_F64 <"v_cmpsx_o_f64">; 373defm V_CMPSX_U_F64 : VOPCX_F64 <"v_cmpsx_u_f64">; 374defm V_CMPSX_NGE_F64 : VOPCX_F64 <"v_cmpsx_nge_f64", "v_cmpsx_nle_f64">; 375defm V_CMPSX_NLG_F64 : VOPCX_F64 <"v_cmpsx_nlg_f64">; 376defm V_CMPSX_NGT_F64 : VOPCX_F64 <"v_cmpsx_ngt_f64", "v_cmpsx_nlt_f64">; 377defm V_CMPSX_NLE_F64 : VOPCX_F64 <"v_cmpsx_nle_f64">; 378defm V_CMPSX_NEQ_F64 : VOPCX_F64 <"v_cmpsx_neq_f64">; 379defm V_CMPSX_NLT_F64 : VOPCX_F64 <"v_cmpsx_nlt_f64">; 380defm V_CMPSX_TRU_F64 : VOPCX_F64 <"v_cmpsx_tru_f64">; 381 382} // End SubtargetPredicate = isSICI 383 384let SubtargetPredicate = Has16BitInsts in { 385 386defm V_CMP_F_F16 : VOPC_F16 <"v_cmp_f_f16">; 387defm V_CMP_LT_F16 : VOPC_F16 <"v_cmp_lt_f16", COND_OLT, "v_cmp_gt_f16">; 388defm V_CMP_EQ_F16 : VOPC_F16 <"v_cmp_eq_f16", COND_OEQ>; 389defm V_CMP_LE_F16 : VOPC_F16 <"v_cmp_le_f16", COND_OLE, "v_cmp_ge_f16">; 390defm V_CMP_GT_F16 : VOPC_F16 <"v_cmp_gt_f16", COND_OGT>; 391defm V_CMP_LG_F16 : VOPC_F16 <"v_cmp_lg_f16", COND_ONE>; 392defm V_CMP_GE_F16 : VOPC_F16 <"v_cmp_ge_f16", COND_OGE>; 393defm V_CMP_O_F16 : VOPC_F16 <"v_cmp_o_f16", COND_O>; 394defm V_CMP_U_F16 : VOPC_F16 <"v_cmp_u_f16", COND_UO>; 395defm V_CMP_NGE_F16 : VOPC_F16 <"v_cmp_nge_f16", COND_ULT, "v_cmp_nle_f16">; 396defm V_CMP_NLG_F16 : VOPC_F16 <"v_cmp_nlg_f16", COND_UEQ>; 397defm V_CMP_NGT_F16 : VOPC_F16 <"v_cmp_ngt_f16", COND_ULE, "v_cmp_nlt_f16">; 398defm V_CMP_NLE_F16 : VOPC_F16 <"v_cmp_nle_f16", COND_UGT>; 399defm V_CMP_NEQ_F16 : VOPC_F16 <"v_cmp_neq_f16", COND_UNE>; 400defm V_CMP_NLT_F16 : VOPC_F16 <"v_cmp_nlt_f16", COND_UGE>; 401defm V_CMP_TRU_F16 : VOPC_F16 <"v_cmp_tru_f16">; 402 403defm V_CMPX_F_F16 : VOPCX_F16 <"v_cmpx_f_f16">; 404defm V_CMPX_LT_F16 : VOPCX_F16 <"v_cmpx_lt_f16", "v_cmpx_gt_f16">; 405defm V_CMPX_EQ_F16 : VOPCX_F16 <"v_cmpx_eq_f16">; 406defm V_CMPX_LE_F16 : VOPCX_F16 <"v_cmpx_le_f16", "v_cmpx_ge_f16">; 407defm V_CMPX_GT_F16 : VOPCX_F16 <"v_cmpx_gt_f16">; 408defm V_CMPX_LG_F16 : VOPCX_F16 <"v_cmpx_lg_f16">; 409defm V_CMPX_GE_F16 : VOPCX_F16 <"v_cmpx_ge_f16">; 410defm V_CMPX_O_F16 : VOPCX_F16 <"v_cmpx_o_f16">; 411defm V_CMPX_U_F16 : VOPCX_F16 <"v_cmpx_u_f16">; 412defm V_CMPX_NGE_F16 : VOPCX_F16 <"v_cmpx_nge_f16", "v_cmpx_nle_f16">; 413defm V_CMPX_NLG_F16 : VOPCX_F16 <"v_cmpx_nlg_f16">; 414defm V_CMPX_NGT_F16 : VOPCX_F16 <"v_cmpx_ngt_f16", "v_cmpx_nlt_f16">; 415defm V_CMPX_NLE_F16 : VOPCX_F16 <"v_cmpx_nle_f16">; 416defm V_CMPX_NEQ_F16 : VOPCX_F16 <"v_cmpx_neq_f16">; 417defm V_CMPX_NLT_F16 : VOPCX_F16 <"v_cmpx_nlt_f16">; 418defm V_CMPX_TRU_F16 : VOPCX_F16 <"v_cmpx_tru_f16">; 419 420defm V_CMP_F_I16 : VOPC_I16 <"v_cmp_f_i16">; 421defm V_CMP_LT_I16 : VOPC_I16 <"v_cmp_lt_i16", COND_SLT, "v_cmp_gt_i16">; 422defm V_CMP_EQ_I16 : VOPC_I16 <"v_cmp_eq_i16">; 423defm V_CMP_LE_I16 : VOPC_I16 <"v_cmp_le_i16", COND_SLE, "v_cmp_ge_i16">; 424defm V_CMP_GT_I16 : VOPC_I16 <"v_cmp_gt_i16", COND_SGT>; 425defm V_CMP_NE_I16 : VOPC_I16 <"v_cmp_ne_i16">; 426defm V_CMP_GE_I16 : VOPC_I16 <"v_cmp_ge_i16", COND_SGE>; 427defm V_CMP_T_I16 : VOPC_I16 <"v_cmp_t_i16">; 428 429defm V_CMP_F_U16 : VOPC_I16 <"v_cmp_f_u16">; 430defm V_CMP_LT_U16 : VOPC_I16 <"v_cmp_lt_u16", COND_ULT, "v_cmp_gt_u16">; 431defm V_CMP_EQ_U16 : VOPC_I16 <"v_cmp_eq_u16", COND_EQ>; 432defm V_CMP_LE_U16 : VOPC_I16 <"v_cmp_le_u16", COND_ULE, "v_cmp_ge_u16">; 433defm V_CMP_GT_U16 : VOPC_I16 <"v_cmp_gt_u16", COND_UGT>; 434defm V_CMP_NE_U16 : VOPC_I16 <"v_cmp_ne_u16", COND_NE>; 435defm V_CMP_GE_U16 : VOPC_I16 <"v_cmp_ge_u16", COND_UGE>; 436defm V_CMP_T_U16 : VOPC_I16 <"v_cmp_t_u16">; 437 438defm V_CMPX_F_I16 : VOPCX_I16 <"v_cmpx_f_i16">; 439defm V_CMPX_LT_I16 : VOPCX_I16 <"v_cmpx_lt_i16", "v_cmpx_gt_i16">; 440defm V_CMPX_EQ_I16 : VOPCX_I16 <"v_cmpx_eq_i16">; 441defm V_CMPX_LE_I16 : VOPCX_I16 <"v_cmpx_le_i16", "v_cmpx_ge_i16">; 442defm V_CMPX_GT_I16 : VOPCX_I16 <"v_cmpx_gt_i16">; 443defm V_CMPX_NE_I16 : VOPCX_I16 <"v_cmpx_ne_i16">; 444defm V_CMPX_GE_I16 : VOPCX_I16 <"v_cmpx_ge_i16">; 445defm V_CMPX_T_I16 : VOPCX_I16 <"v_cmpx_t_i16">; 446defm V_CMPX_F_U16 : VOPCX_I16 <"v_cmpx_f_u16">; 447 448defm V_CMPX_LT_U16 : VOPCX_I16 <"v_cmpx_lt_u16", "v_cmpx_gt_u16">; 449defm V_CMPX_EQ_U16 : VOPCX_I16 <"v_cmpx_eq_u16">; 450defm V_CMPX_LE_U16 : VOPCX_I16 <"v_cmpx_le_u16", "v_cmpx_ge_u16">; 451defm V_CMPX_GT_U16 : VOPCX_I16 <"v_cmpx_gt_u16">; 452defm V_CMPX_NE_U16 : VOPCX_I16 <"v_cmpx_ne_u16">; 453defm V_CMPX_GE_U16 : VOPCX_I16 <"v_cmpx_ge_u16">; 454defm V_CMPX_T_U16 : VOPCX_I16 <"v_cmpx_t_u16">; 455 456} // End SubtargetPredicate = Has16BitInsts 457 458defm V_CMP_F_I32 : VOPC_I32 <"v_cmp_f_i32">; 459defm V_CMP_LT_I32 : VOPC_I32 <"v_cmp_lt_i32", COND_SLT, "v_cmp_gt_i32">; 460defm V_CMP_EQ_I32 : VOPC_I32 <"v_cmp_eq_i32">; 461defm V_CMP_LE_I32 : VOPC_I32 <"v_cmp_le_i32", COND_SLE, "v_cmp_ge_i32">; 462defm V_CMP_GT_I32 : VOPC_I32 <"v_cmp_gt_i32", COND_SGT>; 463defm V_CMP_NE_I32 : VOPC_I32 <"v_cmp_ne_i32">; 464defm V_CMP_GE_I32 : VOPC_I32 <"v_cmp_ge_i32", COND_SGE>; 465defm V_CMP_T_I32 : VOPC_I32 <"v_cmp_t_i32">; 466 467defm V_CMPX_F_I32 : VOPCX_I32 <"v_cmpx_f_i32">; 468defm V_CMPX_LT_I32 : VOPCX_I32 <"v_cmpx_lt_i32", "v_cmpx_gt_i32">; 469defm V_CMPX_EQ_I32 : VOPCX_I32 <"v_cmpx_eq_i32">; 470defm V_CMPX_LE_I32 : VOPCX_I32 <"v_cmpx_le_i32", "v_cmpx_ge_i32">; 471defm V_CMPX_GT_I32 : VOPCX_I32 <"v_cmpx_gt_i32">; 472defm V_CMPX_NE_I32 : VOPCX_I32 <"v_cmpx_ne_i32">; 473defm V_CMPX_GE_I32 : VOPCX_I32 <"v_cmpx_ge_i32">; 474defm V_CMPX_T_I32 : VOPCX_I32 <"v_cmpx_t_i32">; 475 476defm V_CMP_F_I64 : VOPC_I64 <"v_cmp_f_i64">; 477defm V_CMP_LT_I64 : VOPC_I64 <"v_cmp_lt_i64", COND_SLT, "v_cmp_gt_i64">; 478defm V_CMP_EQ_I64 : VOPC_I64 <"v_cmp_eq_i64">; 479defm V_CMP_LE_I64 : VOPC_I64 <"v_cmp_le_i64", COND_SLE, "v_cmp_ge_i64">; 480defm V_CMP_GT_I64 : VOPC_I64 <"v_cmp_gt_i64", COND_SGT>; 481defm V_CMP_NE_I64 : VOPC_I64 <"v_cmp_ne_i64">; 482defm V_CMP_GE_I64 : VOPC_I64 <"v_cmp_ge_i64", COND_SGE>; 483defm V_CMP_T_I64 : VOPC_I64 <"v_cmp_t_i64">; 484 485defm V_CMPX_F_I64 : VOPCX_I64 <"v_cmpx_f_i64">; 486defm V_CMPX_LT_I64 : VOPCX_I64 <"v_cmpx_lt_i64", "v_cmpx_gt_i64">; 487defm V_CMPX_EQ_I64 : VOPCX_I64 <"v_cmpx_eq_i64">; 488defm V_CMPX_LE_I64 : VOPCX_I64 <"v_cmpx_le_i64", "v_cmpx_ge_i64">; 489defm V_CMPX_GT_I64 : VOPCX_I64 <"v_cmpx_gt_i64">; 490defm V_CMPX_NE_I64 : VOPCX_I64 <"v_cmpx_ne_i64">; 491defm V_CMPX_GE_I64 : VOPCX_I64 <"v_cmpx_ge_i64">; 492defm V_CMPX_T_I64 : VOPCX_I64 <"v_cmpx_t_i64">; 493 494defm V_CMP_F_U32 : VOPC_I32 <"v_cmp_f_u32">; 495defm V_CMP_LT_U32 : VOPC_I32 <"v_cmp_lt_u32", COND_ULT, "v_cmp_gt_u32">; 496defm V_CMP_EQ_U32 : VOPC_I32 <"v_cmp_eq_u32", COND_EQ>; 497defm V_CMP_LE_U32 : VOPC_I32 <"v_cmp_le_u32", COND_ULE, "v_cmp_ge_u32">; 498defm V_CMP_GT_U32 : VOPC_I32 <"v_cmp_gt_u32", COND_UGT>; 499defm V_CMP_NE_U32 : VOPC_I32 <"v_cmp_ne_u32", COND_NE>; 500defm V_CMP_GE_U32 : VOPC_I32 <"v_cmp_ge_u32", COND_UGE>; 501defm V_CMP_T_U32 : VOPC_I32 <"v_cmp_t_u32">; 502 503defm V_CMPX_F_U32 : VOPCX_I32 <"v_cmpx_f_u32">; 504defm V_CMPX_LT_U32 : VOPCX_I32 <"v_cmpx_lt_u32", "v_cmpx_gt_u32">; 505defm V_CMPX_EQ_U32 : VOPCX_I32 <"v_cmpx_eq_u32">; 506defm V_CMPX_LE_U32 : VOPCX_I32 <"v_cmpx_le_u32", "v_cmpx_le_u32">; 507defm V_CMPX_GT_U32 : VOPCX_I32 <"v_cmpx_gt_u32">; 508defm V_CMPX_NE_U32 : VOPCX_I32 <"v_cmpx_ne_u32">; 509defm V_CMPX_GE_U32 : VOPCX_I32 <"v_cmpx_ge_u32">; 510defm V_CMPX_T_U32 : VOPCX_I32 <"v_cmpx_t_u32">; 511 512defm V_CMP_F_U64 : VOPC_I64 <"v_cmp_f_u64">; 513defm V_CMP_LT_U64 : VOPC_I64 <"v_cmp_lt_u64", COND_ULT, "v_cmp_gt_u64">; 514defm V_CMP_EQ_U64 : VOPC_I64 <"v_cmp_eq_u64", COND_EQ>; 515defm V_CMP_LE_U64 : VOPC_I64 <"v_cmp_le_u64", COND_ULE, "v_cmp_ge_u64">; 516defm V_CMP_GT_U64 : VOPC_I64 <"v_cmp_gt_u64", COND_UGT>; 517defm V_CMP_NE_U64 : VOPC_I64 <"v_cmp_ne_u64", COND_NE>; 518defm V_CMP_GE_U64 : VOPC_I64 <"v_cmp_ge_u64", COND_UGE>; 519defm V_CMP_T_U64 : VOPC_I64 <"v_cmp_t_u64">; 520 521defm V_CMPX_F_U64 : VOPCX_I64 <"v_cmpx_f_u64">; 522defm V_CMPX_LT_U64 : VOPCX_I64 <"v_cmpx_lt_u64", "v_cmpx_gt_u64">; 523defm V_CMPX_EQ_U64 : VOPCX_I64 <"v_cmpx_eq_u64">; 524defm V_CMPX_LE_U64 : VOPCX_I64 <"v_cmpx_le_u64", "v_cmpx_ge_u64">; 525defm V_CMPX_GT_U64 : VOPCX_I64 <"v_cmpx_gt_u64">; 526defm V_CMPX_NE_U64 : VOPCX_I64 <"v_cmpx_ne_u64">; 527defm V_CMPX_GE_U64 : VOPCX_I64 <"v_cmpx_ge_u64">; 528defm V_CMPX_T_U64 : VOPCX_I64 <"v_cmpx_t_u64">; 529 530//===----------------------------------------------------------------------===// 531// Class instructions 532//===----------------------------------------------------------------------===// 533 534class VOPC_Class_Profile<list<SchedReadWrite> sched, ValueType vt> : 535 VOPC_Profile<sched, vt, i32> { 536 let Ins64 = (ins Src0Mod:$src0_modifiers, Src0RC64:$src0, Src1RC64:$src1); 537 let Asm64 = "$sdst, $src0_modifiers, $src1"; 538 539 let InsSDWA = (ins Src0ModSDWA:$src0_modifiers, Src0SDWA:$src0, 540 Src1ModSDWA:$src1_modifiers, Src1SDWA:$src1, 541 clampmod:$clamp, src0_sel:$src0_sel, src1_sel:$src1_sel); 542 543 let AsmSDWA = " vcc, $src0_modifiers, $src1_modifiers$clamp $src0_sel $src1_sel"; 544 let HasSrc1Mods = 0; 545 let HasClamp = 0; 546 let HasOMod = 0; 547} 548 549class getVOPCClassPat64 <VOPProfile P> { 550 list<dag> ret = 551 [(set i1:$sdst, 552 (AMDGPUfp_class 553 (P.Src0VT (VOP3Mods0Clamp0OMod P.Src0VT:$src0, i32:$src0_modifiers)), 554 P.Src1VT:$src1))]; 555} 556 557// Special case for class instructions which only have modifiers on 558// the 1st source operand. 559multiclass VOPC_Class_Pseudos <string opName, VOPC_Profile p, bit DefExec> { 560 def _e32 : VOPC_Pseudo <opName, p> { 561 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 562 let SchedRW = p.Schedule; 563 let isConvergent = DefExec; 564 } 565 566 def _e64 : VOP3_Pseudo<opName, p, getVOPCClassPat64<p>.ret> { 567 let Defs = !if(DefExec, [EXEC], []); 568 let SchedRW = p.Schedule; 569 } 570 571 def _sdwa : VOPC_SDWA_Pseudo <opName, p> { 572 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 573 let SchedRW = p.Schedule; 574 let isConvergent = DefExec; 575 } 576} 577 578def VOPC_I1_F16_I32 : VOPC_Class_Profile<[Write32Bit], f16>; 579def VOPC_I1_F32_I32 : VOPC_Class_Profile<[Write32Bit], f32>; 580def VOPC_I1_F64_I32 : VOPC_Class_Profile<[WriteDoubleAdd], f64>; 581 582multiclass VOPC_CLASS_F16 <string opName> : 583 VOPC_Class_Pseudos <opName, VOPC_I1_F16_I32, 0>; 584 585multiclass VOPCX_CLASS_F16 <string opName> : 586 VOPC_Class_Pseudos <opName, VOPC_I1_F16_I32, 1>; 587 588multiclass VOPC_CLASS_F32 <string opName> : 589 VOPC_Class_Pseudos <opName, VOPC_I1_F32_I32, 0>; 590 591multiclass VOPCX_CLASS_F32 <string opName> : 592 VOPC_Class_Pseudos <opName, VOPC_I1_F32_I32, 1>; 593 594multiclass VOPC_CLASS_F64 <string opName> : 595 VOPC_Class_Pseudos <opName, VOPC_I1_F64_I32, 0>; 596 597multiclass VOPCX_CLASS_F64 <string opName> : 598 VOPC_Class_Pseudos <opName, VOPC_I1_F64_I32, 1>; 599 600defm V_CMP_CLASS_F32 : VOPC_CLASS_F32 <"v_cmp_class_f32">; 601defm V_CMPX_CLASS_F32 : VOPCX_CLASS_F32 <"v_cmpx_class_f32">; 602defm V_CMP_CLASS_F64 : VOPC_CLASS_F64 <"v_cmp_class_f64">; 603defm V_CMPX_CLASS_F64 : VOPCX_CLASS_F64 <"v_cmpx_class_f64">; 604defm V_CMP_CLASS_F16 : VOPC_CLASS_F16 <"v_cmp_class_f16">; 605defm V_CMPX_CLASS_F16 : VOPCX_CLASS_F16 <"v_cmpx_class_f16">; 606 607//===----------------------------------------------------------------------===// 608// V_ICMPIntrinsic Pattern. 609//===----------------------------------------------------------------------===// 610 611class ICMP_Pattern <PatLeaf cond, Instruction inst, ValueType vt> : GCNPat < 612 (AMDGPUsetcc vt:$src0, vt:$src1, cond), 613 (inst $src0, $src1) 614>; 615 616def : ICMP_Pattern <COND_EQ, V_CMP_EQ_U32_e64, i32>; 617def : ICMP_Pattern <COND_NE, V_CMP_NE_U32_e64, i32>; 618def : ICMP_Pattern <COND_UGT, V_CMP_GT_U32_e64, i32>; 619def : ICMP_Pattern <COND_UGE, V_CMP_GE_U32_e64, i32>; 620def : ICMP_Pattern <COND_ULT, V_CMP_LT_U32_e64, i32>; 621def : ICMP_Pattern <COND_ULE, V_CMP_LE_U32_e64, i32>; 622def : ICMP_Pattern <COND_SGT, V_CMP_GT_I32_e64, i32>; 623def : ICMP_Pattern <COND_SGE, V_CMP_GE_I32_e64, i32>; 624def : ICMP_Pattern <COND_SLT, V_CMP_LT_I32_e64, i32>; 625def : ICMP_Pattern <COND_SLE, V_CMP_LE_I32_e64, i32>; 626 627def : ICMP_Pattern <COND_EQ, V_CMP_EQ_U64_e64, i64>; 628def : ICMP_Pattern <COND_NE, V_CMP_NE_U64_e64, i64>; 629def : ICMP_Pattern <COND_UGT, V_CMP_GT_U64_e64, i64>; 630def : ICMP_Pattern <COND_UGE, V_CMP_GE_U64_e64, i64>; 631def : ICMP_Pattern <COND_ULT, V_CMP_LT_U64_e64, i64>; 632def : ICMP_Pattern <COND_ULE, V_CMP_LE_U64_e64, i64>; 633def : ICMP_Pattern <COND_SGT, V_CMP_GT_I64_e64, i64>; 634def : ICMP_Pattern <COND_SGE, V_CMP_GE_I64_e64, i64>; 635def : ICMP_Pattern <COND_SLT, V_CMP_LT_I64_e64, i64>; 636def : ICMP_Pattern <COND_SLE, V_CMP_LE_I64_e64, i64>; 637 638def : ICMP_Pattern <COND_EQ, V_CMP_EQ_U16_e64, i16>; 639def : ICMP_Pattern <COND_NE, V_CMP_NE_U16_e64, i16>; 640def : ICMP_Pattern <COND_UGT, V_CMP_GT_U16_e64, i16>; 641def : ICMP_Pattern <COND_UGE, V_CMP_GE_U16_e64, i16>; 642def : ICMP_Pattern <COND_ULT, V_CMP_LT_U16_e64, i16>; 643def : ICMP_Pattern <COND_ULE, V_CMP_LE_U16_e64, i16>; 644def : ICMP_Pattern <COND_SGT, V_CMP_GT_I16_e64, i16>; 645def : ICMP_Pattern <COND_SGE, V_CMP_GE_I16_e64, i16>; 646def : ICMP_Pattern <COND_SLT, V_CMP_LT_I16_e64, i16>; 647def : ICMP_Pattern <COND_SLE, V_CMP_LE_I16_e64, i16>; 648 649class FCMP_Pattern <PatLeaf cond, Instruction inst, ValueType vt> : GCNPat < 650 (i64 (AMDGPUsetcc (vt (VOP3Mods vt:$src0, i32:$src0_modifiers)), 651 (vt (VOP3Mods vt:$src1, i32:$src1_modifiers)), cond)), 652 (inst $src0_modifiers, $src0, $src1_modifiers, $src1, 653 DSTCLAMP.NONE) 654>; 655 656def : FCMP_Pattern <COND_OEQ, V_CMP_EQ_F32_e64, f32>; 657def : FCMP_Pattern <COND_ONE, V_CMP_NEQ_F32_e64, f32>; 658def : FCMP_Pattern <COND_OGT, V_CMP_GT_F32_e64, f32>; 659def : FCMP_Pattern <COND_OGE, V_CMP_GE_F32_e64, f32>; 660def : FCMP_Pattern <COND_OLT, V_CMP_LT_F32_e64, f32>; 661def : FCMP_Pattern <COND_OLE, V_CMP_LE_F32_e64, f32>; 662 663def : FCMP_Pattern <COND_OEQ, V_CMP_EQ_F64_e64, f64>; 664def : FCMP_Pattern <COND_ONE, V_CMP_NEQ_F64_e64, f64>; 665def : FCMP_Pattern <COND_OGT, V_CMP_GT_F64_e64, f64>; 666def : FCMP_Pattern <COND_OGE, V_CMP_GE_F64_e64, f64>; 667def : FCMP_Pattern <COND_OLT, V_CMP_LT_F64_e64, f64>; 668def : FCMP_Pattern <COND_OLE, V_CMP_LE_F64_e64, f64>; 669 670def : FCMP_Pattern <COND_OEQ, V_CMP_EQ_F16_e64, f16>; 671def : FCMP_Pattern <COND_ONE, V_CMP_NEQ_F16_e64, f16>; 672def : FCMP_Pattern <COND_OGT, V_CMP_GT_F16_e64, f16>; 673def : FCMP_Pattern <COND_OGE, V_CMP_GE_F16_e64, f16>; 674def : FCMP_Pattern <COND_OLT, V_CMP_LT_F16_e64, f16>; 675def : FCMP_Pattern <COND_OLE, V_CMP_LE_F16_e64, f16>; 676 677 678def : FCMP_Pattern <COND_UEQ, V_CMP_NLG_F32_e64, f32>; 679def : FCMP_Pattern <COND_UNE, V_CMP_NEQ_F32_e64, f32>; 680def : FCMP_Pattern <COND_UGT, V_CMP_NLE_F32_e64, f32>; 681def : FCMP_Pattern <COND_UGE, V_CMP_NLT_F32_e64, f32>; 682def : FCMP_Pattern <COND_ULT, V_CMP_NGE_F32_e64, f32>; 683def : FCMP_Pattern <COND_ULE, V_CMP_NGT_F32_e64, f32>; 684 685def : FCMP_Pattern <COND_UEQ, V_CMP_NLG_F64_e64, f64>; 686def : FCMP_Pattern <COND_UNE, V_CMP_NEQ_F64_e64, f64>; 687def : FCMP_Pattern <COND_UGT, V_CMP_NLE_F64_e64, f64>; 688def : FCMP_Pattern <COND_UGE, V_CMP_NLT_F64_e64, f64>; 689def : FCMP_Pattern <COND_ULT, V_CMP_NGE_F64_e64, f64>; 690def : FCMP_Pattern <COND_ULE, V_CMP_NGT_F64_e64, f64>; 691 692def : FCMP_Pattern <COND_UEQ, V_CMP_NLG_F16_e64, f16>; 693def : FCMP_Pattern <COND_UNE, V_CMP_NEQ_F16_e64, f16>; 694def : FCMP_Pattern <COND_UGT, V_CMP_NLE_F16_e64, f16>; 695def : FCMP_Pattern <COND_UGE, V_CMP_NLT_F16_e64, f16>; 696def : FCMP_Pattern <COND_ULT, V_CMP_NGE_F16_e64, f16>; 697def : FCMP_Pattern <COND_ULE, V_CMP_NGT_F16_e64, f16>; 698 699//===----------------------------------------------------------------------===// 700// Target 701//===----------------------------------------------------------------------===// 702 703//===----------------------------------------------------------------------===// 704// SI 705//===----------------------------------------------------------------------===// 706 707multiclass VOPC_Real_si <bits<9> op> { 708 let AssemblerPredicates = [isSICI], DecoderNamespace = "SICI" in { 709 def _e32_si : 710 VOPC_Real<!cast<VOPC_Pseudo>(NAME#"_e32"), SIEncodingFamily.SI>, 711 VOPCe<op{7-0}>; 712 713 def _e64_si : 714 VOP3_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.SI>, 715 VOP3a_si <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl> { 716 // Encoding used for VOPC instructions encoded as VOP3 717 // Differs from VOP3e by destination name (sdst) as VOPC doesn't have vector dst 718 bits<8> sdst; 719 let Inst{7-0} = sdst; 720 } 721 } 722 def : VOPCInstAlias <!cast<VOP3_Pseudo>(NAME#"_e64"), 723 !cast<Instruction>(NAME#"_e32_si")> { 724 let AssemblerPredicate = isSICI; 725 } 726} 727 728defm V_CMP_F_F32 : VOPC_Real_si <0x0>; 729defm V_CMP_LT_F32 : VOPC_Real_si <0x1>; 730defm V_CMP_EQ_F32 : VOPC_Real_si <0x2>; 731defm V_CMP_LE_F32 : VOPC_Real_si <0x3>; 732defm V_CMP_GT_F32 : VOPC_Real_si <0x4>; 733defm V_CMP_LG_F32 : VOPC_Real_si <0x5>; 734defm V_CMP_GE_F32 : VOPC_Real_si <0x6>; 735defm V_CMP_O_F32 : VOPC_Real_si <0x7>; 736defm V_CMP_U_F32 : VOPC_Real_si <0x8>; 737defm V_CMP_NGE_F32 : VOPC_Real_si <0x9>; 738defm V_CMP_NLG_F32 : VOPC_Real_si <0xa>; 739defm V_CMP_NGT_F32 : VOPC_Real_si <0xb>; 740defm V_CMP_NLE_F32 : VOPC_Real_si <0xc>; 741defm V_CMP_NEQ_F32 : VOPC_Real_si <0xd>; 742defm V_CMP_NLT_F32 : VOPC_Real_si <0xe>; 743defm V_CMP_TRU_F32 : VOPC_Real_si <0xf>; 744 745defm V_CMPX_F_F32 : VOPC_Real_si <0x10>; 746defm V_CMPX_LT_F32 : VOPC_Real_si <0x11>; 747defm V_CMPX_EQ_F32 : VOPC_Real_si <0x12>; 748defm V_CMPX_LE_F32 : VOPC_Real_si <0x13>; 749defm V_CMPX_GT_F32 : VOPC_Real_si <0x14>; 750defm V_CMPX_LG_F32 : VOPC_Real_si <0x15>; 751defm V_CMPX_GE_F32 : VOPC_Real_si <0x16>; 752defm V_CMPX_O_F32 : VOPC_Real_si <0x17>; 753defm V_CMPX_U_F32 : VOPC_Real_si <0x18>; 754defm V_CMPX_NGE_F32 : VOPC_Real_si <0x19>; 755defm V_CMPX_NLG_F32 : VOPC_Real_si <0x1a>; 756defm V_CMPX_NGT_F32 : VOPC_Real_si <0x1b>; 757defm V_CMPX_NLE_F32 : VOPC_Real_si <0x1c>; 758defm V_CMPX_NEQ_F32 : VOPC_Real_si <0x1d>; 759defm V_CMPX_NLT_F32 : VOPC_Real_si <0x1e>; 760defm V_CMPX_TRU_F32 : VOPC_Real_si <0x1f>; 761 762defm V_CMP_F_F64 : VOPC_Real_si <0x20>; 763defm V_CMP_LT_F64 : VOPC_Real_si <0x21>; 764defm V_CMP_EQ_F64 : VOPC_Real_si <0x22>; 765defm V_CMP_LE_F64 : VOPC_Real_si <0x23>; 766defm V_CMP_GT_F64 : VOPC_Real_si <0x24>; 767defm V_CMP_LG_F64 : VOPC_Real_si <0x25>; 768defm V_CMP_GE_F64 : VOPC_Real_si <0x26>; 769defm V_CMP_O_F64 : VOPC_Real_si <0x27>; 770defm V_CMP_U_F64 : VOPC_Real_si <0x28>; 771defm V_CMP_NGE_F64 : VOPC_Real_si <0x29>; 772defm V_CMP_NLG_F64 : VOPC_Real_si <0x2a>; 773defm V_CMP_NGT_F64 : VOPC_Real_si <0x2b>; 774defm V_CMP_NLE_F64 : VOPC_Real_si <0x2c>; 775defm V_CMP_NEQ_F64 : VOPC_Real_si <0x2d>; 776defm V_CMP_NLT_F64 : VOPC_Real_si <0x2e>; 777defm V_CMP_TRU_F64 : VOPC_Real_si <0x2f>; 778 779defm V_CMPX_F_F64 : VOPC_Real_si <0x30>; 780defm V_CMPX_LT_F64 : VOPC_Real_si <0x31>; 781defm V_CMPX_EQ_F64 : VOPC_Real_si <0x32>; 782defm V_CMPX_LE_F64 : VOPC_Real_si <0x33>; 783defm V_CMPX_GT_F64 : VOPC_Real_si <0x34>; 784defm V_CMPX_LG_F64 : VOPC_Real_si <0x35>; 785defm V_CMPX_GE_F64 : VOPC_Real_si <0x36>; 786defm V_CMPX_O_F64 : VOPC_Real_si <0x37>; 787defm V_CMPX_U_F64 : VOPC_Real_si <0x38>; 788defm V_CMPX_NGE_F64 : VOPC_Real_si <0x39>; 789defm V_CMPX_NLG_F64 : VOPC_Real_si <0x3a>; 790defm V_CMPX_NGT_F64 : VOPC_Real_si <0x3b>; 791defm V_CMPX_NLE_F64 : VOPC_Real_si <0x3c>; 792defm V_CMPX_NEQ_F64 : VOPC_Real_si <0x3d>; 793defm V_CMPX_NLT_F64 : VOPC_Real_si <0x3e>; 794defm V_CMPX_TRU_F64 : VOPC_Real_si <0x3f>; 795 796defm V_CMPS_F_F32 : VOPC_Real_si <0x40>; 797defm V_CMPS_LT_F32 : VOPC_Real_si <0x41>; 798defm V_CMPS_EQ_F32 : VOPC_Real_si <0x42>; 799defm V_CMPS_LE_F32 : VOPC_Real_si <0x43>; 800defm V_CMPS_GT_F32 : VOPC_Real_si <0x44>; 801defm V_CMPS_LG_F32 : VOPC_Real_si <0x45>; 802defm V_CMPS_GE_F32 : VOPC_Real_si <0x46>; 803defm V_CMPS_O_F32 : VOPC_Real_si <0x47>; 804defm V_CMPS_U_F32 : VOPC_Real_si <0x48>; 805defm V_CMPS_NGE_F32 : VOPC_Real_si <0x49>; 806defm V_CMPS_NLG_F32 : VOPC_Real_si <0x4a>; 807defm V_CMPS_NGT_F32 : VOPC_Real_si <0x4b>; 808defm V_CMPS_NLE_F32 : VOPC_Real_si <0x4c>; 809defm V_CMPS_NEQ_F32 : VOPC_Real_si <0x4d>; 810defm V_CMPS_NLT_F32 : VOPC_Real_si <0x4e>; 811defm V_CMPS_TRU_F32 : VOPC_Real_si <0x4f>; 812 813defm V_CMPSX_F_F32 : VOPC_Real_si <0x50>; 814defm V_CMPSX_LT_F32 : VOPC_Real_si <0x51>; 815defm V_CMPSX_EQ_F32 : VOPC_Real_si <0x52>; 816defm V_CMPSX_LE_F32 : VOPC_Real_si <0x53>; 817defm V_CMPSX_GT_F32 : VOPC_Real_si <0x54>; 818defm V_CMPSX_LG_F32 : VOPC_Real_si <0x55>; 819defm V_CMPSX_GE_F32 : VOPC_Real_si <0x56>; 820defm V_CMPSX_O_F32 : VOPC_Real_si <0x57>; 821defm V_CMPSX_U_F32 : VOPC_Real_si <0x58>; 822defm V_CMPSX_NGE_F32 : VOPC_Real_si <0x59>; 823defm V_CMPSX_NLG_F32 : VOPC_Real_si <0x5a>; 824defm V_CMPSX_NGT_F32 : VOPC_Real_si <0x5b>; 825defm V_CMPSX_NLE_F32 : VOPC_Real_si <0x5c>; 826defm V_CMPSX_NEQ_F32 : VOPC_Real_si <0x5d>; 827defm V_CMPSX_NLT_F32 : VOPC_Real_si <0x5e>; 828defm V_CMPSX_TRU_F32 : VOPC_Real_si <0x5f>; 829 830defm V_CMPS_F_F64 : VOPC_Real_si <0x60>; 831defm V_CMPS_LT_F64 : VOPC_Real_si <0x61>; 832defm V_CMPS_EQ_F64 : VOPC_Real_si <0x62>; 833defm V_CMPS_LE_F64 : VOPC_Real_si <0x63>; 834defm V_CMPS_GT_F64 : VOPC_Real_si <0x64>; 835defm V_CMPS_LG_F64 : VOPC_Real_si <0x65>; 836defm V_CMPS_GE_F64 : VOPC_Real_si <0x66>; 837defm V_CMPS_O_F64 : VOPC_Real_si <0x67>; 838defm V_CMPS_U_F64 : VOPC_Real_si <0x68>; 839defm V_CMPS_NGE_F64 : VOPC_Real_si <0x69>; 840defm V_CMPS_NLG_F64 : VOPC_Real_si <0x6a>; 841defm V_CMPS_NGT_F64 : VOPC_Real_si <0x6b>; 842defm V_CMPS_NLE_F64 : VOPC_Real_si <0x6c>; 843defm V_CMPS_NEQ_F64 : VOPC_Real_si <0x6d>; 844defm V_CMPS_NLT_F64 : VOPC_Real_si <0x6e>; 845defm V_CMPS_TRU_F64 : VOPC_Real_si <0x6f>; 846 847defm V_CMPSX_F_F64 : VOPC_Real_si <0x70>; 848defm V_CMPSX_LT_F64 : VOPC_Real_si <0x71>; 849defm V_CMPSX_EQ_F64 : VOPC_Real_si <0x72>; 850defm V_CMPSX_LE_F64 : VOPC_Real_si <0x73>; 851defm V_CMPSX_GT_F64 : VOPC_Real_si <0x74>; 852defm V_CMPSX_LG_F64 : VOPC_Real_si <0x75>; 853defm V_CMPSX_GE_F64 : VOPC_Real_si <0x76>; 854defm V_CMPSX_O_F64 : VOPC_Real_si <0x77>; 855defm V_CMPSX_U_F64 : VOPC_Real_si <0x78>; 856defm V_CMPSX_NGE_F64 : VOPC_Real_si <0x79>; 857defm V_CMPSX_NLG_F64 : VOPC_Real_si <0x7a>; 858defm V_CMPSX_NGT_F64 : VOPC_Real_si <0x7b>; 859defm V_CMPSX_NLE_F64 : VOPC_Real_si <0x7c>; 860defm V_CMPSX_NEQ_F64 : VOPC_Real_si <0x7d>; 861defm V_CMPSX_NLT_F64 : VOPC_Real_si <0x7e>; 862defm V_CMPSX_TRU_F64 : VOPC_Real_si <0x7f>; 863 864defm V_CMP_F_I32 : VOPC_Real_si <0x80>; 865defm V_CMP_LT_I32 : VOPC_Real_si <0x81>; 866defm V_CMP_EQ_I32 : VOPC_Real_si <0x82>; 867defm V_CMP_LE_I32 : VOPC_Real_si <0x83>; 868defm V_CMP_GT_I32 : VOPC_Real_si <0x84>; 869defm V_CMP_NE_I32 : VOPC_Real_si <0x85>; 870defm V_CMP_GE_I32 : VOPC_Real_si <0x86>; 871defm V_CMP_T_I32 : VOPC_Real_si <0x87>; 872 873defm V_CMPX_F_I32 : VOPC_Real_si <0x90>; 874defm V_CMPX_LT_I32 : VOPC_Real_si <0x91>; 875defm V_CMPX_EQ_I32 : VOPC_Real_si <0x92>; 876defm V_CMPX_LE_I32 : VOPC_Real_si <0x93>; 877defm V_CMPX_GT_I32 : VOPC_Real_si <0x94>; 878defm V_CMPX_NE_I32 : VOPC_Real_si <0x95>; 879defm V_CMPX_GE_I32 : VOPC_Real_si <0x96>; 880defm V_CMPX_T_I32 : VOPC_Real_si <0x97>; 881 882defm V_CMP_F_I64 : VOPC_Real_si <0xa0>; 883defm V_CMP_LT_I64 : VOPC_Real_si <0xa1>; 884defm V_CMP_EQ_I64 : VOPC_Real_si <0xa2>; 885defm V_CMP_LE_I64 : VOPC_Real_si <0xa3>; 886defm V_CMP_GT_I64 : VOPC_Real_si <0xa4>; 887defm V_CMP_NE_I64 : VOPC_Real_si <0xa5>; 888defm V_CMP_GE_I64 : VOPC_Real_si <0xa6>; 889defm V_CMP_T_I64 : VOPC_Real_si <0xa7>; 890 891defm V_CMPX_F_I64 : VOPC_Real_si <0xb0>; 892defm V_CMPX_LT_I64 : VOPC_Real_si <0xb1>; 893defm V_CMPX_EQ_I64 : VOPC_Real_si <0xb2>; 894defm V_CMPX_LE_I64 : VOPC_Real_si <0xb3>; 895defm V_CMPX_GT_I64 : VOPC_Real_si <0xb4>; 896defm V_CMPX_NE_I64 : VOPC_Real_si <0xb5>; 897defm V_CMPX_GE_I64 : VOPC_Real_si <0xb6>; 898defm V_CMPX_T_I64 : VOPC_Real_si <0xb7>; 899 900defm V_CMP_F_U32 : VOPC_Real_si <0xc0>; 901defm V_CMP_LT_U32 : VOPC_Real_si <0xc1>; 902defm V_CMP_EQ_U32 : VOPC_Real_si <0xc2>; 903defm V_CMP_LE_U32 : VOPC_Real_si <0xc3>; 904defm V_CMP_GT_U32 : VOPC_Real_si <0xc4>; 905defm V_CMP_NE_U32 : VOPC_Real_si <0xc5>; 906defm V_CMP_GE_U32 : VOPC_Real_si <0xc6>; 907defm V_CMP_T_U32 : VOPC_Real_si <0xc7>; 908 909defm V_CMPX_F_U32 : VOPC_Real_si <0xd0>; 910defm V_CMPX_LT_U32 : VOPC_Real_si <0xd1>; 911defm V_CMPX_EQ_U32 : VOPC_Real_si <0xd2>; 912defm V_CMPX_LE_U32 : VOPC_Real_si <0xd3>; 913defm V_CMPX_GT_U32 : VOPC_Real_si <0xd4>; 914defm V_CMPX_NE_U32 : VOPC_Real_si <0xd5>; 915defm V_CMPX_GE_U32 : VOPC_Real_si <0xd6>; 916defm V_CMPX_T_U32 : VOPC_Real_si <0xd7>; 917 918defm V_CMP_F_U64 : VOPC_Real_si <0xe0>; 919defm V_CMP_LT_U64 : VOPC_Real_si <0xe1>; 920defm V_CMP_EQ_U64 : VOPC_Real_si <0xe2>; 921defm V_CMP_LE_U64 : VOPC_Real_si <0xe3>; 922defm V_CMP_GT_U64 : VOPC_Real_si <0xe4>; 923defm V_CMP_NE_U64 : VOPC_Real_si <0xe5>; 924defm V_CMP_GE_U64 : VOPC_Real_si <0xe6>; 925defm V_CMP_T_U64 : VOPC_Real_si <0xe7>; 926 927defm V_CMPX_F_U64 : VOPC_Real_si <0xf0>; 928defm V_CMPX_LT_U64 : VOPC_Real_si <0xf1>; 929defm V_CMPX_EQ_U64 : VOPC_Real_si <0xf2>; 930defm V_CMPX_LE_U64 : VOPC_Real_si <0xf3>; 931defm V_CMPX_GT_U64 : VOPC_Real_si <0xf4>; 932defm V_CMPX_NE_U64 : VOPC_Real_si <0xf5>; 933defm V_CMPX_GE_U64 : VOPC_Real_si <0xf6>; 934defm V_CMPX_T_U64 : VOPC_Real_si <0xf7>; 935 936defm V_CMP_CLASS_F32 : VOPC_Real_si <0x88>; 937defm V_CMPX_CLASS_F32 : VOPC_Real_si <0x98>; 938defm V_CMP_CLASS_F64 : VOPC_Real_si <0xa8>; 939defm V_CMPX_CLASS_F64 : VOPC_Real_si <0xb8>; 940 941//===----------------------------------------------------------------------===// 942// VI 943//===----------------------------------------------------------------------===// 944 945multiclass VOPC_Real_vi <bits<10> op> { 946 let AssemblerPredicates = [isVI], DecoderNamespace = "VI" in { 947 def _e32_vi : 948 VOPC_Real<!cast<VOPC_Pseudo>(NAME#"_e32"), SIEncodingFamily.VI>, 949 VOPCe<op{7-0}>; 950 951 def _e64_vi : 952 VOP3_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>, 953 VOP3a_vi <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl> { 954 // Encoding used for VOPC instructions encoded as VOP3 955 // Differs from VOP3e by destination name (sdst) as VOPC doesn't have vector dst 956 bits<8> sdst; 957 let Inst{7-0} = sdst; 958 } 959 } 960 961 def _sdwa_vi : 962 VOP_SDWA_Real <!cast<VOPC_SDWA_Pseudo>(NAME#"_sdwa")>, 963 VOPC_SDWAe <op{7-0}, !cast<VOPC_SDWA_Pseudo>(NAME#"_sdwa").Pfl>; 964 965 def _sdwa_gfx9 : 966 VOP_SDWA9_Real <!cast<VOPC_SDWA_Pseudo>(NAME#"_sdwa")>, 967 VOPC_SDWA9e <op{7-0}, !cast<VOPC_SDWA_Pseudo>(NAME#"_sdwa").Pfl>; 968 969 def : VOPCInstAlias <!cast<VOP3_Pseudo>(NAME#"_e64"), 970 !cast<Instruction>(NAME#"_e32_vi")> { 971 let AssemblerPredicate = isVI; 972 } 973} 974 975defm V_CMP_CLASS_F32 : VOPC_Real_vi <0x10>; 976defm V_CMPX_CLASS_F32 : VOPC_Real_vi <0x11>; 977defm V_CMP_CLASS_F64 : VOPC_Real_vi <0x12>; 978defm V_CMPX_CLASS_F64 : VOPC_Real_vi <0x13>; 979defm V_CMP_CLASS_F16 : VOPC_Real_vi <0x14>; 980defm V_CMPX_CLASS_F16 : VOPC_Real_vi <0x15>; 981 982defm V_CMP_F_F16 : VOPC_Real_vi <0x20>; 983defm V_CMP_LT_F16 : VOPC_Real_vi <0x21>; 984defm V_CMP_EQ_F16 : VOPC_Real_vi <0x22>; 985defm V_CMP_LE_F16 : VOPC_Real_vi <0x23>; 986defm V_CMP_GT_F16 : VOPC_Real_vi <0x24>; 987defm V_CMP_LG_F16 : VOPC_Real_vi <0x25>; 988defm V_CMP_GE_F16 : VOPC_Real_vi <0x26>; 989defm V_CMP_O_F16 : VOPC_Real_vi <0x27>; 990defm V_CMP_U_F16 : VOPC_Real_vi <0x28>; 991defm V_CMP_NGE_F16 : VOPC_Real_vi <0x29>; 992defm V_CMP_NLG_F16 : VOPC_Real_vi <0x2a>; 993defm V_CMP_NGT_F16 : VOPC_Real_vi <0x2b>; 994defm V_CMP_NLE_F16 : VOPC_Real_vi <0x2c>; 995defm V_CMP_NEQ_F16 : VOPC_Real_vi <0x2d>; 996defm V_CMP_NLT_F16 : VOPC_Real_vi <0x2e>; 997defm V_CMP_TRU_F16 : VOPC_Real_vi <0x2f>; 998 999defm V_CMPX_F_F16 : VOPC_Real_vi <0x30>; 1000defm V_CMPX_LT_F16 : VOPC_Real_vi <0x31>; 1001defm V_CMPX_EQ_F16 : VOPC_Real_vi <0x32>; 1002defm V_CMPX_LE_F16 : VOPC_Real_vi <0x33>; 1003defm V_CMPX_GT_F16 : VOPC_Real_vi <0x34>; 1004defm V_CMPX_LG_F16 : VOPC_Real_vi <0x35>; 1005defm V_CMPX_GE_F16 : VOPC_Real_vi <0x36>; 1006defm V_CMPX_O_F16 : VOPC_Real_vi <0x37>; 1007defm V_CMPX_U_F16 : VOPC_Real_vi <0x38>; 1008defm V_CMPX_NGE_F16 : VOPC_Real_vi <0x39>; 1009defm V_CMPX_NLG_F16 : VOPC_Real_vi <0x3a>; 1010defm V_CMPX_NGT_F16 : VOPC_Real_vi <0x3b>; 1011defm V_CMPX_NLE_F16 : VOPC_Real_vi <0x3c>; 1012defm V_CMPX_NEQ_F16 : VOPC_Real_vi <0x3d>; 1013defm V_CMPX_NLT_F16 : VOPC_Real_vi <0x3e>; 1014defm V_CMPX_TRU_F16 : VOPC_Real_vi <0x3f>; 1015 1016defm V_CMP_F_F32 : VOPC_Real_vi <0x40>; 1017defm V_CMP_LT_F32 : VOPC_Real_vi <0x41>; 1018defm V_CMP_EQ_F32 : VOPC_Real_vi <0x42>; 1019defm V_CMP_LE_F32 : VOPC_Real_vi <0x43>; 1020defm V_CMP_GT_F32 : VOPC_Real_vi <0x44>; 1021defm V_CMP_LG_F32 : VOPC_Real_vi <0x45>; 1022defm V_CMP_GE_F32 : VOPC_Real_vi <0x46>; 1023defm V_CMP_O_F32 : VOPC_Real_vi <0x47>; 1024defm V_CMP_U_F32 : VOPC_Real_vi <0x48>; 1025defm V_CMP_NGE_F32 : VOPC_Real_vi <0x49>; 1026defm V_CMP_NLG_F32 : VOPC_Real_vi <0x4a>; 1027defm V_CMP_NGT_F32 : VOPC_Real_vi <0x4b>; 1028defm V_CMP_NLE_F32 : VOPC_Real_vi <0x4c>; 1029defm V_CMP_NEQ_F32 : VOPC_Real_vi <0x4d>; 1030defm V_CMP_NLT_F32 : VOPC_Real_vi <0x4e>; 1031defm V_CMP_TRU_F32 : VOPC_Real_vi <0x4f>; 1032 1033defm V_CMPX_F_F32 : VOPC_Real_vi <0x50>; 1034defm V_CMPX_LT_F32 : VOPC_Real_vi <0x51>; 1035defm V_CMPX_EQ_F32 : VOPC_Real_vi <0x52>; 1036defm V_CMPX_LE_F32 : VOPC_Real_vi <0x53>; 1037defm V_CMPX_GT_F32 : VOPC_Real_vi <0x54>; 1038defm V_CMPX_LG_F32 : VOPC_Real_vi <0x55>; 1039defm V_CMPX_GE_F32 : VOPC_Real_vi <0x56>; 1040defm V_CMPX_O_F32 : VOPC_Real_vi <0x57>; 1041defm V_CMPX_U_F32 : VOPC_Real_vi <0x58>; 1042defm V_CMPX_NGE_F32 : VOPC_Real_vi <0x59>; 1043defm V_CMPX_NLG_F32 : VOPC_Real_vi <0x5a>; 1044defm V_CMPX_NGT_F32 : VOPC_Real_vi <0x5b>; 1045defm V_CMPX_NLE_F32 : VOPC_Real_vi <0x5c>; 1046defm V_CMPX_NEQ_F32 : VOPC_Real_vi <0x5d>; 1047defm V_CMPX_NLT_F32 : VOPC_Real_vi <0x5e>; 1048defm V_CMPX_TRU_F32 : VOPC_Real_vi <0x5f>; 1049 1050defm V_CMP_F_F64 : VOPC_Real_vi <0x60>; 1051defm V_CMP_LT_F64 : VOPC_Real_vi <0x61>; 1052defm V_CMP_EQ_F64 : VOPC_Real_vi <0x62>; 1053defm V_CMP_LE_F64 : VOPC_Real_vi <0x63>; 1054defm V_CMP_GT_F64 : VOPC_Real_vi <0x64>; 1055defm V_CMP_LG_F64 : VOPC_Real_vi <0x65>; 1056defm V_CMP_GE_F64 : VOPC_Real_vi <0x66>; 1057defm V_CMP_O_F64 : VOPC_Real_vi <0x67>; 1058defm V_CMP_U_F64 : VOPC_Real_vi <0x68>; 1059defm V_CMP_NGE_F64 : VOPC_Real_vi <0x69>; 1060defm V_CMP_NLG_F64 : VOPC_Real_vi <0x6a>; 1061defm V_CMP_NGT_F64 : VOPC_Real_vi <0x6b>; 1062defm V_CMP_NLE_F64 : VOPC_Real_vi <0x6c>; 1063defm V_CMP_NEQ_F64 : VOPC_Real_vi <0x6d>; 1064defm V_CMP_NLT_F64 : VOPC_Real_vi <0x6e>; 1065defm V_CMP_TRU_F64 : VOPC_Real_vi <0x6f>; 1066 1067defm V_CMPX_F_F64 : VOPC_Real_vi <0x70>; 1068defm V_CMPX_LT_F64 : VOPC_Real_vi <0x71>; 1069defm V_CMPX_EQ_F64 : VOPC_Real_vi <0x72>; 1070defm V_CMPX_LE_F64 : VOPC_Real_vi <0x73>; 1071defm V_CMPX_GT_F64 : VOPC_Real_vi <0x74>; 1072defm V_CMPX_LG_F64 : VOPC_Real_vi <0x75>; 1073defm V_CMPX_GE_F64 : VOPC_Real_vi <0x76>; 1074defm V_CMPX_O_F64 : VOPC_Real_vi <0x77>; 1075defm V_CMPX_U_F64 : VOPC_Real_vi <0x78>; 1076defm V_CMPX_NGE_F64 : VOPC_Real_vi <0x79>; 1077defm V_CMPX_NLG_F64 : VOPC_Real_vi <0x7a>; 1078defm V_CMPX_NGT_F64 : VOPC_Real_vi <0x7b>; 1079defm V_CMPX_NLE_F64 : VOPC_Real_vi <0x7c>; 1080defm V_CMPX_NEQ_F64 : VOPC_Real_vi <0x7d>; 1081defm V_CMPX_NLT_F64 : VOPC_Real_vi <0x7e>; 1082defm V_CMPX_TRU_F64 : VOPC_Real_vi <0x7f>; 1083 1084defm V_CMP_F_I16 : VOPC_Real_vi <0xa0>; 1085defm V_CMP_LT_I16 : VOPC_Real_vi <0xa1>; 1086defm V_CMP_EQ_I16 : VOPC_Real_vi <0xa2>; 1087defm V_CMP_LE_I16 : VOPC_Real_vi <0xa3>; 1088defm V_CMP_GT_I16 : VOPC_Real_vi <0xa4>; 1089defm V_CMP_NE_I16 : VOPC_Real_vi <0xa5>; 1090defm V_CMP_GE_I16 : VOPC_Real_vi <0xa6>; 1091defm V_CMP_T_I16 : VOPC_Real_vi <0xa7>; 1092 1093defm V_CMP_F_U16 : VOPC_Real_vi <0xa8>; 1094defm V_CMP_LT_U16 : VOPC_Real_vi <0xa9>; 1095defm V_CMP_EQ_U16 : VOPC_Real_vi <0xaa>; 1096defm V_CMP_LE_U16 : VOPC_Real_vi <0xab>; 1097defm V_CMP_GT_U16 : VOPC_Real_vi <0xac>; 1098defm V_CMP_NE_U16 : VOPC_Real_vi <0xad>; 1099defm V_CMP_GE_U16 : VOPC_Real_vi <0xae>; 1100defm V_CMP_T_U16 : VOPC_Real_vi <0xaf>; 1101 1102defm V_CMPX_F_I16 : VOPC_Real_vi <0xb0>; 1103defm V_CMPX_LT_I16 : VOPC_Real_vi <0xb1>; 1104defm V_CMPX_EQ_I16 : VOPC_Real_vi <0xb2>; 1105defm V_CMPX_LE_I16 : VOPC_Real_vi <0xb3>; 1106defm V_CMPX_GT_I16 : VOPC_Real_vi <0xb4>; 1107defm V_CMPX_NE_I16 : VOPC_Real_vi <0xb5>; 1108defm V_CMPX_GE_I16 : VOPC_Real_vi <0xb6>; 1109defm V_CMPX_T_I16 : VOPC_Real_vi <0xb7>; 1110 1111defm V_CMPX_F_U16 : VOPC_Real_vi <0xb8>; 1112defm V_CMPX_LT_U16 : VOPC_Real_vi <0xb9>; 1113defm V_CMPX_EQ_U16 : VOPC_Real_vi <0xba>; 1114defm V_CMPX_LE_U16 : VOPC_Real_vi <0xbb>; 1115defm V_CMPX_GT_U16 : VOPC_Real_vi <0xbc>; 1116defm V_CMPX_NE_U16 : VOPC_Real_vi <0xbd>; 1117defm V_CMPX_GE_U16 : VOPC_Real_vi <0xbe>; 1118defm V_CMPX_T_U16 : VOPC_Real_vi <0xbf>; 1119 1120defm V_CMP_F_I32 : VOPC_Real_vi <0xc0>; 1121defm V_CMP_LT_I32 : VOPC_Real_vi <0xc1>; 1122defm V_CMP_EQ_I32 : VOPC_Real_vi <0xc2>; 1123defm V_CMP_LE_I32 : VOPC_Real_vi <0xc3>; 1124defm V_CMP_GT_I32 : VOPC_Real_vi <0xc4>; 1125defm V_CMP_NE_I32 : VOPC_Real_vi <0xc5>; 1126defm V_CMP_GE_I32 : VOPC_Real_vi <0xc6>; 1127defm V_CMP_T_I32 : VOPC_Real_vi <0xc7>; 1128 1129defm V_CMPX_F_I32 : VOPC_Real_vi <0xd0>; 1130defm V_CMPX_LT_I32 : VOPC_Real_vi <0xd1>; 1131defm V_CMPX_EQ_I32 : VOPC_Real_vi <0xd2>; 1132defm V_CMPX_LE_I32 : VOPC_Real_vi <0xd3>; 1133defm V_CMPX_GT_I32 : VOPC_Real_vi <0xd4>; 1134defm V_CMPX_NE_I32 : VOPC_Real_vi <0xd5>; 1135defm V_CMPX_GE_I32 : VOPC_Real_vi <0xd6>; 1136defm V_CMPX_T_I32 : VOPC_Real_vi <0xd7>; 1137 1138defm V_CMP_F_I64 : VOPC_Real_vi <0xe0>; 1139defm V_CMP_LT_I64 : VOPC_Real_vi <0xe1>; 1140defm V_CMP_EQ_I64 : VOPC_Real_vi <0xe2>; 1141defm V_CMP_LE_I64 : VOPC_Real_vi <0xe3>; 1142defm V_CMP_GT_I64 : VOPC_Real_vi <0xe4>; 1143defm V_CMP_NE_I64 : VOPC_Real_vi <0xe5>; 1144defm V_CMP_GE_I64 : VOPC_Real_vi <0xe6>; 1145defm V_CMP_T_I64 : VOPC_Real_vi <0xe7>; 1146 1147defm V_CMPX_F_I64 : VOPC_Real_vi <0xf0>; 1148defm V_CMPX_LT_I64 : VOPC_Real_vi <0xf1>; 1149defm V_CMPX_EQ_I64 : VOPC_Real_vi <0xf2>; 1150defm V_CMPX_LE_I64 : VOPC_Real_vi <0xf3>; 1151defm V_CMPX_GT_I64 : VOPC_Real_vi <0xf4>; 1152defm V_CMPX_NE_I64 : VOPC_Real_vi <0xf5>; 1153defm V_CMPX_GE_I64 : VOPC_Real_vi <0xf6>; 1154defm V_CMPX_T_I64 : VOPC_Real_vi <0xf7>; 1155 1156defm V_CMP_F_U32 : VOPC_Real_vi <0xc8>; 1157defm V_CMP_LT_U32 : VOPC_Real_vi <0xc9>; 1158defm V_CMP_EQ_U32 : VOPC_Real_vi <0xca>; 1159defm V_CMP_LE_U32 : VOPC_Real_vi <0xcb>; 1160defm V_CMP_GT_U32 : VOPC_Real_vi <0xcc>; 1161defm V_CMP_NE_U32 : VOPC_Real_vi <0xcd>; 1162defm V_CMP_GE_U32 : VOPC_Real_vi <0xce>; 1163defm V_CMP_T_U32 : VOPC_Real_vi <0xcf>; 1164 1165defm V_CMPX_F_U32 : VOPC_Real_vi <0xd8>; 1166defm V_CMPX_LT_U32 : VOPC_Real_vi <0xd9>; 1167defm V_CMPX_EQ_U32 : VOPC_Real_vi <0xda>; 1168defm V_CMPX_LE_U32 : VOPC_Real_vi <0xdb>; 1169defm V_CMPX_GT_U32 : VOPC_Real_vi <0xdc>; 1170defm V_CMPX_NE_U32 : VOPC_Real_vi <0xdd>; 1171defm V_CMPX_GE_U32 : VOPC_Real_vi <0xde>; 1172defm V_CMPX_T_U32 : VOPC_Real_vi <0xdf>; 1173 1174defm V_CMP_F_U64 : VOPC_Real_vi <0xe8>; 1175defm V_CMP_LT_U64 : VOPC_Real_vi <0xe9>; 1176defm V_CMP_EQ_U64 : VOPC_Real_vi <0xea>; 1177defm V_CMP_LE_U64 : VOPC_Real_vi <0xeb>; 1178defm V_CMP_GT_U64 : VOPC_Real_vi <0xec>; 1179defm V_CMP_NE_U64 : VOPC_Real_vi <0xed>; 1180defm V_CMP_GE_U64 : VOPC_Real_vi <0xee>; 1181defm V_CMP_T_U64 : VOPC_Real_vi <0xef>; 1182 1183defm V_CMPX_F_U64 : VOPC_Real_vi <0xf8>; 1184defm V_CMPX_LT_U64 : VOPC_Real_vi <0xf9>; 1185defm V_CMPX_EQ_U64 : VOPC_Real_vi <0xfa>; 1186defm V_CMPX_LE_U64 : VOPC_Real_vi <0xfb>; 1187defm V_CMPX_GT_U64 : VOPC_Real_vi <0xfc>; 1188defm V_CMPX_NE_U64 : VOPC_Real_vi <0xfd>; 1189defm V_CMPX_GE_U64 : VOPC_Real_vi <0xfe>; 1190defm V_CMPX_T_U64 : VOPC_Real_vi <0xff>; 1191