@@ -1104,10 +1104,13 @@ static int getV_CMPOpcode(CmpInst::Predicate P, unsigned Size,
11041104 if (Size == 16 && !ST.has16BitInsts ())
11051105 return -1 ;
11061106
1107- const auto Select = [&](unsigned S16Opc, unsigned TrueS16Opc, unsigned S32Opc,
1107+ const auto Select = [&](unsigned S16Opc, unsigned TrueS16Opc,
1108+ unsigned FakeS16Opc, unsigned S32Opc,
11081109 unsigned S64Opc) {
11091110 if (Size == 16 )
1110- return ST.hasTrue16BitInsts () ? TrueS16Opc : S16Opc;
1111+ return ST.hasTrue16BitInsts ()
1112+ ? ST.useRealTrue16Insts () ? TrueS16Opc : FakeS16Opc
1113+ : S16Opc;
11111114 if (Size == 32 )
11121115 return S32Opc;
11131116 return S64Opc;
@@ -1118,83 +1121,109 @@ static int getV_CMPOpcode(CmpInst::Predicate P, unsigned Size,
11181121 llvm_unreachable (" Unknown condition code!" );
11191122 case CmpInst::ICMP_NE:
11201123 return Select (AMDGPU::V_CMP_NE_U16_e64, AMDGPU::V_CMP_NE_U16_t16_e64,
1121- AMDGPU::V_CMP_NE_U32_e64, AMDGPU::V_CMP_NE_U64_e64);
1124+ AMDGPU::V_CMP_NE_U16_fake16_e64, AMDGPU::V_CMP_NE_U32_e64,
1125+ AMDGPU::V_CMP_NE_U64_e64);
11221126 case CmpInst::ICMP_EQ:
11231127 return Select (AMDGPU::V_CMP_EQ_U16_e64, AMDGPU::V_CMP_EQ_U16_t16_e64,
1124- AMDGPU::V_CMP_EQ_U32_e64, AMDGPU::V_CMP_EQ_U64_e64);
1128+ AMDGPU::V_CMP_EQ_U16_fake16_e64, AMDGPU::V_CMP_EQ_U32_e64,
1129+ AMDGPU::V_CMP_EQ_U64_e64);
11251130 case CmpInst::ICMP_SGT:
11261131 return Select (AMDGPU::V_CMP_GT_I16_e64, AMDGPU::V_CMP_GT_I16_t16_e64,
1127- AMDGPU::V_CMP_GT_I32_e64, AMDGPU::V_CMP_GT_I64_e64);
1132+ AMDGPU::V_CMP_GT_I16_fake16_e64, AMDGPU::V_CMP_GT_I32_e64,
1133+ AMDGPU::V_CMP_GT_I64_e64);
11281134 case CmpInst::ICMP_SGE:
11291135 return Select (AMDGPU::V_CMP_GE_I16_e64, AMDGPU::V_CMP_GE_I16_t16_e64,
1130- AMDGPU::V_CMP_GE_I32_e64, AMDGPU::V_CMP_GE_I64_e64);
1136+ AMDGPU::V_CMP_GE_I16_fake16_e64, AMDGPU::V_CMP_GE_I32_e64,
1137+ AMDGPU::V_CMP_GE_I64_e64);
11311138 case CmpInst::ICMP_SLT:
11321139 return Select (AMDGPU::V_CMP_LT_I16_e64, AMDGPU::V_CMP_LT_I16_t16_e64,
1133- AMDGPU::V_CMP_LT_I32_e64, AMDGPU::V_CMP_LT_I64_e64);
1140+ AMDGPU::V_CMP_LT_I16_fake16_e64, AMDGPU::V_CMP_LT_I32_e64,
1141+ AMDGPU::V_CMP_LT_I64_e64);
11341142 case CmpInst::ICMP_SLE:
11351143 return Select (AMDGPU::V_CMP_LE_I16_e64, AMDGPU::V_CMP_LE_I16_t16_e64,
1136- AMDGPU::V_CMP_LE_I32_e64, AMDGPU::V_CMP_LE_I64_e64);
1144+ AMDGPU::V_CMP_LE_I16_fake16_e64, AMDGPU::V_CMP_LE_I32_e64,
1145+ AMDGPU::V_CMP_LE_I64_e64);
11371146 case CmpInst::ICMP_UGT:
11381147 return Select (AMDGPU::V_CMP_GT_U16_e64, AMDGPU::V_CMP_GT_U16_t16_e64,
1139- AMDGPU::V_CMP_GT_U32_e64, AMDGPU::V_CMP_GT_U64_e64);
1148+ AMDGPU::V_CMP_GT_U16_fake16_e64, AMDGPU::V_CMP_GT_U32_e64,
1149+ AMDGPU::V_CMP_GT_U64_e64);
11401150 case CmpInst::ICMP_UGE:
11411151 return Select (AMDGPU::V_CMP_GE_U16_e64, AMDGPU::V_CMP_GE_U16_t16_e64,
1142- AMDGPU::V_CMP_GE_U32_e64, AMDGPU::V_CMP_GE_U64_e64);
1152+ AMDGPU::V_CMP_GE_U16_fake16_e64, AMDGPU::V_CMP_GE_U32_e64,
1153+ AMDGPU::V_CMP_GE_U64_e64);
11431154 case CmpInst::ICMP_ULT:
11441155 return Select (AMDGPU::V_CMP_LT_U16_e64, AMDGPU::V_CMP_LT_U16_t16_e64,
1145- AMDGPU::V_CMP_LT_U32_e64, AMDGPU::V_CMP_LT_U64_e64);
1156+ AMDGPU::V_CMP_LT_U16_fake16_e64, AMDGPU::V_CMP_LT_U32_e64,
1157+ AMDGPU::V_CMP_LT_U64_e64);
11461158 case CmpInst::ICMP_ULE:
11471159 return Select (AMDGPU::V_CMP_LE_U16_e64, AMDGPU::V_CMP_LE_U16_t16_e64,
1148- AMDGPU::V_CMP_LE_U32_e64, AMDGPU::V_CMP_LE_U64_e64);
1160+ AMDGPU::V_CMP_LE_U16_fake16_e64, AMDGPU::V_CMP_LE_U32_e64,
1161+ AMDGPU::V_CMP_LE_U64_e64);
11491162
11501163 case CmpInst::FCMP_OEQ:
11511164 return Select (AMDGPU::V_CMP_EQ_F16_e64, AMDGPU::V_CMP_EQ_F16_t16_e64,
1152- AMDGPU::V_CMP_EQ_F32_e64, AMDGPU::V_CMP_EQ_F64_e64);
1165+ AMDGPU::V_CMP_EQ_F16_fake16_e64, AMDGPU::V_CMP_EQ_F32_e64,
1166+ AMDGPU::V_CMP_EQ_F64_e64);
11531167 case CmpInst::FCMP_OGT:
11541168 return Select (AMDGPU::V_CMP_GT_F16_e64, AMDGPU::V_CMP_GT_F16_t16_e64,
1155- AMDGPU::V_CMP_GT_F32_e64, AMDGPU::V_CMP_GT_F64_e64);
1169+ AMDGPU::V_CMP_GT_F16_fake16_e64, AMDGPU::V_CMP_GT_F32_e64,
1170+ AMDGPU::V_CMP_GT_F64_e64);
11561171 case CmpInst::FCMP_OGE:
11571172 return Select (AMDGPU::V_CMP_GE_F16_e64, AMDGPU::V_CMP_GE_F16_t16_e64,
1158- AMDGPU::V_CMP_GE_F32_e64, AMDGPU::V_CMP_GE_F64_e64);
1173+ AMDGPU::V_CMP_GE_F16_fake16_e64, AMDGPU::V_CMP_GE_F32_e64,
1174+ AMDGPU::V_CMP_GE_F64_e64);
11591175 case CmpInst::FCMP_OLT:
11601176 return Select (AMDGPU::V_CMP_LT_F16_e64, AMDGPU::V_CMP_LT_F16_t16_e64,
1161- AMDGPU::V_CMP_LT_F32_e64, AMDGPU::V_CMP_LT_F64_e64);
1177+ AMDGPU::V_CMP_LT_F16_fake16_e64, AMDGPU::V_CMP_LT_F32_e64,
1178+ AMDGPU::V_CMP_LT_F64_e64);
11621179 case CmpInst::FCMP_OLE:
11631180 return Select (AMDGPU::V_CMP_LE_F16_e64, AMDGPU::V_CMP_LE_F16_t16_e64,
1164- AMDGPU::V_CMP_LE_F32_e64, AMDGPU::V_CMP_LE_F64_e64);
1181+ AMDGPU::V_CMP_LE_F16_fake16_e64, AMDGPU::V_CMP_LE_F32_e64,
1182+ AMDGPU::V_CMP_LE_F64_e64);
11651183 case CmpInst::FCMP_ONE:
11661184 return Select (AMDGPU::V_CMP_NEQ_F16_e64, AMDGPU::V_CMP_NEQ_F16_t16_e64,
1167- AMDGPU::V_CMP_NEQ_F32_e64, AMDGPU::V_CMP_NEQ_F64_e64);
1185+ AMDGPU::V_CMP_NEQ_F16_fake16_e64, AMDGPU::V_CMP_NEQ_F32_e64,
1186+ AMDGPU::V_CMP_NEQ_F64_e64);
11681187 case CmpInst::FCMP_ORD:
11691188 return Select (AMDGPU::V_CMP_O_F16_e64, AMDGPU::V_CMP_O_F16_t16_e64,
1170- AMDGPU::V_CMP_O_F32_e64, AMDGPU::V_CMP_O_F64_e64);
1189+ AMDGPU::V_CMP_O_F16_fake16_e64, AMDGPU::V_CMP_O_F32_e64,
1190+ AMDGPU::V_CMP_O_F64_e64);
11711191 case CmpInst::FCMP_UNO:
11721192 return Select (AMDGPU::V_CMP_U_F16_e64, AMDGPU::V_CMP_U_F16_t16_e64,
1173- AMDGPU::V_CMP_U_F32_e64, AMDGPU::V_CMP_U_F64_e64);
1193+ AMDGPU::V_CMP_U_F16_fake16_e64, AMDGPU::V_CMP_U_F32_e64,
1194+ AMDGPU::V_CMP_U_F64_e64);
11741195 case CmpInst::FCMP_UEQ:
11751196 return Select (AMDGPU::V_CMP_NLG_F16_e64, AMDGPU::V_CMP_NLG_F16_t16_e64,
1176- AMDGPU::V_CMP_NLG_F32_e64, AMDGPU::V_CMP_NLG_F64_e64);
1197+ AMDGPU::V_CMP_NLG_F16_fake16_e64, AMDGPU::V_CMP_NLG_F32_e64,
1198+ AMDGPU::V_CMP_NLG_F64_e64);
11771199 case CmpInst::FCMP_UGT:
11781200 return Select (AMDGPU::V_CMP_NLE_F16_e64, AMDGPU::V_CMP_NLE_F16_t16_e64,
1179- AMDGPU::V_CMP_NLE_F32_e64, AMDGPU::V_CMP_NLE_F64_e64);
1201+ AMDGPU::V_CMP_NLE_F16_fake16_e64, AMDGPU::V_CMP_NLE_F32_e64,
1202+ AMDGPU::V_CMP_NLE_F64_e64);
11801203 case CmpInst::FCMP_UGE:
11811204 return Select (AMDGPU::V_CMP_NLT_F16_e64, AMDGPU::V_CMP_NLT_F16_t16_e64,
1182- AMDGPU::V_CMP_NLT_F32_e64, AMDGPU::V_CMP_NLT_F64_e64);
1205+ AMDGPU::V_CMP_NLT_F16_fake16_e64, AMDGPU::V_CMP_NLT_F32_e64,
1206+ AMDGPU::V_CMP_NLT_F64_e64);
11831207 case CmpInst::FCMP_ULT:
11841208 return Select (AMDGPU::V_CMP_NGE_F16_e64, AMDGPU::V_CMP_NGE_F16_t16_e64,
1185- AMDGPU::V_CMP_NGE_F32_e64, AMDGPU::V_CMP_NGE_F64_e64);
1209+ AMDGPU::V_CMP_NGE_F16_fake16_e64, AMDGPU::V_CMP_NGE_F32_e64,
1210+ AMDGPU::V_CMP_NGE_F64_e64);
11861211 case CmpInst::FCMP_ULE:
11871212 return Select (AMDGPU::V_CMP_NGT_F16_e64, AMDGPU::V_CMP_NGT_F16_t16_e64,
1188- AMDGPU::V_CMP_NGT_F32_e64, AMDGPU::V_CMP_NGT_F64_e64);
1213+ AMDGPU::V_CMP_NGT_F16_fake16_e64, AMDGPU::V_CMP_NGT_F32_e64,
1214+ AMDGPU::V_CMP_NGT_F64_e64);
11891215 case CmpInst::FCMP_UNE:
11901216 return Select (AMDGPU::V_CMP_NEQ_F16_e64, AMDGPU::V_CMP_NEQ_F16_t16_e64,
1191- AMDGPU::V_CMP_NEQ_F32_e64, AMDGPU::V_CMP_NEQ_F64_e64);
1217+ AMDGPU::V_CMP_NEQ_F16_fake16_e64, AMDGPU::V_CMP_NEQ_F32_e64,
1218+ AMDGPU::V_CMP_NEQ_F64_e64);
11921219 case CmpInst::FCMP_TRUE:
11931220 return Select (AMDGPU::V_CMP_TRU_F16_e64, AMDGPU::V_CMP_TRU_F16_t16_e64,
1194- AMDGPU::V_CMP_TRU_F32_e64, AMDGPU::V_CMP_TRU_F64_e64);
1221+ AMDGPU::V_CMP_TRU_F16_fake16_e64, AMDGPU::V_CMP_TRU_F32_e64,
1222+ AMDGPU::V_CMP_TRU_F64_e64);
11951223 case CmpInst::FCMP_FALSE:
11961224 return Select (AMDGPU::V_CMP_F_F16_e64, AMDGPU::V_CMP_F_F16_t16_e64,
1197- AMDGPU::V_CMP_F_F32_e64, AMDGPU::V_CMP_F_F64_e64);
1225+ AMDGPU::V_CMP_F_F16_fake16_e64, AMDGPU::V_CMP_F_F32_e64,
1226+ AMDGPU::V_CMP_F_F64_e64);
11981227 }
11991228}
12001229
0 commit comments