reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/Target/X86/X86TargetTransformInfo.cpp
   65   return ST->hasPOPCNT() ? TTI::PSK_FastHardware : TTI::PSK_Software;
   65   return ST->hasPOPCNT() ? TTI::PSK_FastHardware : TTI::PSK_Software;
  174     TTI::OperandValueKind Op1Info, TTI::OperandValueKind Op2Info,
  174     TTI::OperandValueKind Op1Info, TTI::OperandValueKind Op2Info,
  175     TTI::OperandValueProperties Opd1PropInfo,
  176     TTI::OperandValueProperties Opd2PropInfo,
  888 int X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index,
  895   if (Kind == TTI::SK_Transpose)
  896     Kind = TTI::SK_PermuteTwoSrc;
  901   if (Kind == TTI::SK_Broadcast)
  906   if (Kind == TTI::SK_ExtractSubvector && LT.second.isVector()) {
  935         int ExtractCost = getShuffleCost(TTI::SK_ExtractSubvector, VecTy,
  954   if (Kind == TTI::SK_PermuteSingleSrc && LT.first != 1) {
  973              getShuffleCost(TTI::SK_PermuteTwoSrc, SingleOpTy, 0, nullptr);
  980   if (Kind == TTI::SK_PermuteTwoSrc && LT.first != 1) {
  988       {TTI::SK_Reverse, MVT::v64i8, 1}, // vpermb
  989       {TTI::SK_Reverse, MVT::v32i8, 1}, // vpermb
  991       {TTI::SK_PermuteSingleSrc, MVT::v64i8, 1}, // vpermb
  992       {TTI::SK_PermuteSingleSrc, MVT::v32i8, 1}, // vpermb
  994       {TTI::SK_PermuteTwoSrc, MVT::v64i8, 1}, // vpermt2b
  995       {TTI::SK_PermuteTwoSrc, MVT::v32i8, 1}, // vpermt2b
  996       {TTI::SK_PermuteTwoSrc, MVT::v16i8, 1}  // vpermt2b
 1005       {TTI::SK_Broadcast, MVT::v32i16, 1}, // vpbroadcastw
 1006       {TTI::SK_Broadcast, MVT::v64i8, 1},  // vpbroadcastb
 1008       {TTI::SK_Reverse, MVT::v32i16, 1}, // vpermw
 1009       {TTI::SK_Reverse, MVT::v16i16, 1}, // vpermw
 1010       {TTI::SK_Reverse, MVT::v64i8, 2},  // pshufb + vshufi64x2
 1012       {TTI::SK_PermuteSingleSrc, MVT::v32i16, 1}, // vpermw
 1013       {TTI::SK_PermuteSingleSrc, MVT::v16i16, 1}, // vpermw
 1014       {TTI::SK_PermuteSingleSrc, MVT::v8i16, 1},  // vpermw
 1015       {TTI::SK_PermuteSingleSrc, MVT::v64i8, 8},  // extend to v32i16
 1016       {TTI::SK_PermuteSingleSrc, MVT::v32i8, 3},  // vpermw + zext/trunc
 1018       {TTI::SK_PermuteTwoSrc, MVT::v32i16, 1}, // vpermt2w
 1019       {TTI::SK_PermuteTwoSrc, MVT::v16i16, 1}, // vpermt2w
 1020       {TTI::SK_PermuteTwoSrc, MVT::v8i16, 1},  // vpermt2w
 1021       {TTI::SK_PermuteTwoSrc, MVT::v32i8, 3},  // zext + vpermt2w + trunc
 1022       {TTI::SK_PermuteTwoSrc, MVT::v64i8, 19}, // 6 * v32i8 + 1
 1023       {TTI::SK_PermuteTwoSrc, MVT::v16i8, 3}   // zext + vpermt2w + trunc
 1032       {TTI::SK_Broadcast, MVT::v8f64, 1},  // vbroadcastpd
 1033       {TTI::SK_Broadcast, MVT::v16f32, 1}, // vbroadcastps
 1034       {TTI::SK_Broadcast, MVT::v8i64, 1},  // vpbroadcastq
 1035       {TTI::SK_Broadcast, MVT::v16i32, 1}, // vpbroadcastd
 1037       {TTI::SK_Reverse, MVT::v8f64, 1},  // vpermpd
 1038       {TTI::SK_Reverse, MVT::v16f32, 1}, // vpermps
 1039       {TTI::SK_Reverse, MVT::v8i64, 1},  // vpermq
 1040       {TTI::SK_Reverse, MVT::v16i32, 1}, // vpermd
 1042       {TTI::SK_PermuteSingleSrc, MVT::v8f64, 1},  // vpermpd
 1043       {TTI::SK_PermuteSingleSrc, MVT::v4f64, 1},  // vpermpd
 1044       {TTI::SK_PermuteSingleSrc, MVT::v2f64, 1},  // vpermpd
 1045       {TTI::SK_PermuteSingleSrc, MVT::v16f32, 1}, // vpermps
 1046       {TTI::SK_PermuteSingleSrc, MVT::v8f32, 1},  // vpermps
 1047       {TTI::SK_PermuteSingleSrc, MVT::v4f32, 1},  // vpermps
 1048       {TTI::SK_PermuteSingleSrc, MVT::v8i64, 1},  // vpermq
 1049       {TTI::SK_PermuteSingleSrc, MVT::v4i64, 1},  // vpermq
 1050       {TTI::SK_PermuteSingleSrc, MVT::v2i64, 1},  // vpermq
 1051       {TTI::SK_PermuteSingleSrc, MVT::v16i32, 1}, // vpermd
 1052       {TTI::SK_PermuteSingleSrc, MVT::v8i32, 1},  // vpermd
 1053       {TTI::SK_PermuteSingleSrc, MVT::v4i32, 1},  // vpermd
 1054       {TTI::SK_PermuteSingleSrc, MVT::v16i8, 1},  // pshufb
 1056       {TTI::SK_PermuteTwoSrc, MVT::v8f64, 1},  // vpermt2pd
 1057       {TTI::SK_PermuteTwoSrc, MVT::v16f32, 1}, // vpermt2ps
 1058       {TTI::SK_PermuteTwoSrc, MVT::v8i64, 1},  // vpermt2q
 1059       {TTI::SK_PermuteTwoSrc, MVT::v16i32, 1}, // vpermt2d
 1060       {TTI::SK_PermuteTwoSrc, MVT::v4f64, 1},  // vpermt2pd
 1061       {TTI::SK_PermuteTwoSrc, MVT::v8f32, 1},  // vpermt2ps
 1062       {TTI::SK_PermuteTwoSrc, MVT::v4i64, 1},  // vpermt2q
 1063       {TTI::SK_PermuteTwoSrc, MVT::v8i32, 1},  // vpermt2d
 1064       {TTI::SK_PermuteTwoSrc, MVT::v2f64, 1},  // vpermt2pd
 1065       {TTI::SK_PermuteTwoSrc, MVT::v4f32, 1},  // vpermt2ps
 1066       {TTI::SK_PermuteTwoSrc, MVT::v2i64, 1},  // vpermt2q
 1067       {TTI::SK_PermuteTwoSrc, MVT::v4i32, 1}   // vpermt2d
 1075       {TTI::SK_Broadcast, MVT::v4f64, 1},  // vbroadcastpd
 1076       {TTI::SK_Broadcast, MVT::v8f32, 1},  // vbroadcastps
 1077       {TTI::SK_Broadcast, MVT::v4i64, 1},  // vpbroadcastq
 1078       {TTI::SK_Broadcast, MVT::v8i32, 1},  // vpbroadcastd
 1079       {TTI::SK_Broadcast, MVT::v16i16, 1}, // vpbroadcastw
 1080       {TTI::SK_Broadcast, MVT::v32i8, 1},  // vpbroadcastb
 1082       {TTI::SK_Reverse, MVT::v4f64, 1},  // vpermpd
 1083       {TTI::SK_Reverse, MVT::v8f32, 1},  // vpermps
 1084       {TTI::SK_Reverse, MVT::v4i64, 1},  // vpermq
 1085       {TTI::SK_Reverse, MVT::v8i32, 1},  // vpermd
 1086       {TTI::SK_Reverse, MVT::v16i16, 2}, // vperm2i128 + pshufb
 1087       {TTI::SK_Reverse, MVT::v32i8, 2},  // vperm2i128 + pshufb
 1089       {TTI::SK_Select, MVT::v16i16, 1}, // vpblendvb
 1090       {TTI::SK_Select, MVT::v32i8, 1},  // vpblendvb
 1092       {TTI::SK_PermuteSingleSrc, MVT::v4f64, 1},  // vpermpd
 1093       {TTI::SK_PermuteSingleSrc, MVT::v8f32, 1},  // vpermps
 1094       {TTI::SK_PermuteSingleSrc, MVT::v4i64, 1},  // vpermq
 1095       {TTI::SK_PermuteSingleSrc, MVT::v8i32, 1},  // vpermd
 1096       {TTI::SK_PermuteSingleSrc, MVT::v16i16, 4}, // vperm2i128 + 2*vpshufb
 1098       {TTI::SK_PermuteSingleSrc, MVT::v32i8, 4},  // vperm2i128 + 2*vpshufb
 1101       {TTI::SK_PermuteTwoSrc, MVT::v4f64, 3},  // 2*vpermpd + vblendpd
 1102       {TTI::SK_PermuteTwoSrc, MVT::v8f32, 3},  // 2*vpermps + vblendps
 1103       {TTI::SK_PermuteTwoSrc, MVT::v4i64, 3},  // 2*vpermq + vpblendd
 1104       {TTI::SK_PermuteTwoSrc, MVT::v8i32, 3},  // 2*vpermd + vpblendd
 1105       {TTI::SK_PermuteTwoSrc, MVT::v16i16, 7}, // 2*vperm2i128 + 4*vpshufb
 1107       {TTI::SK_PermuteTwoSrc, MVT::v32i8, 7},  // 2*vperm2i128 + 4*vpshufb
 1116       {TTI::SK_PermuteSingleSrc, MVT::v4f64, 2},  // vperm2f128 + vpermil2pd
 1117       {TTI::SK_PermuteSingleSrc, MVT::v8f32, 2},  // vperm2f128 + vpermil2ps
 1118       {TTI::SK_PermuteSingleSrc, MVT::v4i64, 2},  // vperm2f128 + vpermil2pd
 1119       {TTI::SK_PermuteSingleSrc, MVT::v8i32, 2},  // vperm2f128 + vpermil2ps
 1120       {TTI::SK_PermuteSingleSrc, MVT::v16i16, 4}, // vextractf128 + 2*vpperm
 1122       {TTI::SK_PermuteSingleSrc, MVT::v32i8, 4},  // vextractf128 + 2*vpperm
 1125       {TTI::SK_PermuteTwoSrc, MVT::v16i16, 9}, // 2*vextractf128 + 6*vpperm
 1127       {TTI::SK_PermuteTwoSrc, MVT::v8i16, 1},  // vpperm
 1128       {TTI::SK_PermuteTwoSrc, MVT::v32i8, 9},  // 2*vextractf128 + 6*vpperm
 1130       {TTI::SK_PermuteTwoSrc, MVT::v16i8, 1},  // vpperm
 1138       {TTI::SK_Broadcast, MVT::v4f64, 2},  // vperm2f128 + vpermilpd
 1139       {TTI::SK_Broadcast, MVT::v8f32, 2},  // vperm2f128 + vpermilps
 1140       {TTI::SK_Broadcast, MVT::v4i64, 2},  // vperm2f128 + vpermilpd
 1141       {TTI::SK_Broadcast, MVT::v8i32, 2},  // vperm2f128 + vpermilps
 1142       {TTI::SK_Broadcast, MVT::v16i16, 3}, // vpshuflw + vpshufd + vinsertf128
 1143       {TTI::SK_Broadcast, MVT::v32i8, 2},  // vpshufb + vinsertf128
 1145       {TTI::SK_Reverse, MVT::v4f64, 2},  // vperm2f128 + vpermilpd
 1146       {TTI::SK_Reverse, MVT::v8f32, 2},  // vperm2f128 + vpermilps
 1147       {TTI::SK_Reverse, MVT::v4i64, 2},  // vperm2f128 + vpermilpd
 1148       {TTI::SK_Reverse, MVT::v8i32, 2},  // vperm2f128 + vpermilps
 1149       {TTI::SK_Reverse, MVT::v16i16, 4}, // vextractf128 + 2*pshufb
 1151       {TTI::SK_Reverse, MVT::v32i8, 4},  // vextractf128 + 2*pshufb
 1154       {TTI::SK_Select, MVT::v4i64, 1},  // vblendpd
 1155       {TTI::SK_Select, MVT::v4f64, 1},  // vblendpd
 1156       {TTI::SK_Select, MVT::v8i32, 1},  // vblendps
 1157       {TTI::SK_Select, MVT::v8f32, 1},  // vblendps
 1158       {TTI::SK_Select, MVT::v16i16, 3}, // vpand + vpandn + vpor
 1159       {TTI::SK_Select, MVT::v32i8, 3},  // vpand + vpandn + vpor
 1161       {TTI::SK_PermuteSingleSrc, MVT::v4f64, 2},  // vperm2f128 + vshufpd
 1162       {TTI::SK_PermuteSingleSrc, MVT::v4i64, 2},  // vperm2f128 + vshufpd
 1163       {TTI::SK_PermuteSingleSrc, MVT::v8f32, 4},  // 2*vperm2f128 + 2*vshufps
 1164       {TTI::SK_PermuteSingleSrc, MVT::v8i32, 4},  // 2*vperm2f128 + 2*vshufps
 1165       {TTI::SK_PermuteSingleSrc, MVT::v16i16, 8}, // vextractf128 + 4*pshufb
 1167       {TTI::SK_PermuteSingleSrc, MVT::v32i8, 8},  // vextractf128 + 4*pshufb
 1170       {TTI::SK_PermuteTwoSrc, MVT::v4f64, 3},   // 2*vperm2f128 + vshufpd
 1171       {TTI::SK_PermuteTwoSrc, MVT::v4i64, 3},   // 2*vperm2f128 + vshufpd
 1172       {TTI::SK_PermuteTwoSrc, MVT::v8f32, 4},   // 2*vperm2f128 + 2*vshufps
 1173       {TTI::SK_PermuteTwoSrc, MVT::v8i32, 4},   // 2*vperm2f128 + 2*vshufps
 1174       {TTI::SK_PermuteTwoSrc, MVT::v16i16, 15}, // 2*vextractf128 + 8*pshufb
 1176       {TTI::SK_PermuteTwoSrc, MVT::v32i8, 15},  // 2*vextractf128 + 8*pshufb
 1185       {TTI::SK_Select, MVT::v2i64, 1}, // pblendw
 1186       {TTI::SK_Select, MVT::v2f64, 1}, // movsd
 1187       {TTI::SK_Select, MVT::v4i32, 1}, // pblendw
 1188       {TTI::SK_Select, MVT::v4f32, 1}, // blendps
 1189       {TTI::SK_Select, MVT::v8i16, 1}, // pblendw
 1190       {TTI::SK_Select, MVT::v16i8, 1}  // pblendvb
 1198       {TTI::SK_Broadcast, MVT::v8i16, 1}, // pshufb
 1199       {TTI::SK_Broadcast, MVT::v16i8, 1}, // pshufb
 1201       {TTI::SK_Reverse, MVT::v8i16, 1}, // pshufb
 1202       {TTI::SK_Reverse, MVT::v16i8, 1}, // pshufb
 1204       {TTI::SK_Select, MVT::v8i16, 3}, // 2*pshufb + por
 1205       {TTI::SK_Select, MVT::v16i8, 3}, // 2*pshufb + por
 1207       {TTI::SK_PermuteSingleSrc, MVT::v8i16, 1}, // pshufb
 1208       {TTI::SK_PermuteSingleSrc, MVT::v16i8, 1}, // pshufb
 1210       {TTI::SK_PermuteTwoSrc, MVT::v8i16, 3}, // 2*pshufb + por
 1211       {TTI::SK_PermuteTwoSrc, MVT::v16i8, 3}, // 2*pshufb + por
 1219       {TTI::SK_Broadcast, MVT::v2f64, 1}, // shufpd
 1220       {TTI::SK_Broadcast, MVT::v2i64, 1}, // pshufd
 1221       {TTI::SK_Broadcast, MVT::v4i32, 1}, // pshufd
 1222       {TTI::SK_Broadcast, MVT::v8i16, 2}, // pshuflw + pshufd
 1223       {TTI::SK_Broadcast, MVT::v16i8, 3}, // unpck + pshuflw + pshufd
 1225       {TTI::SK_Reverse, MVT::v2f64, 1}, // shufpd
 1226       {TTI::SK_Reverse, MVT::v2i64, 1}, // pshufd
 1227       {TTI::SK_Reverse, MVT::v4i32, 1}, // pshufd
 1228       {TTI::SK_Reverse, MVT::v8i16, 3}, // pshuflw + pshufhw + pshufd
 1229       {TTI::SK_Reverse, MVT::v16i8, 9}, // 2*pshuflw + 2*pshufhw
 1232       {TTI::SK_Select, MVT::v2i64, 1}, // movsd
 1233       {TTI::SK_Select, MVT::v2f64, 1}, // movsd
 1234       {TTI::SK_Select, MVT::v4i32, 2}, // 2*shufps
 1235       {TTI::SK_Select, MVT::v8i16, 3}, // pand + pandn + por
 1236       {TTI::SK_Select, MVT::v16i8, 3}, // pand + pandn + por
 1238       {TTI::SK_PermuteSingleSrc, MVT::v2f64, 1}, // shufpd
 1239       {TTI::SK_PermuteSingleSrc, MVT::v2i64, 1}, // pshufd
 1240       {TTI::SK_PermuteSingleSrc, MVT::v4i32, 1}, // pshufd
 1241       {TTI::SK_PermuteSingleSrc, MVT::v8i16, 5}, // 2*pshuflw + 2*pshufhw
 1243     { TTI::SK_PermuteSingleSrc, MVT::v16i8, 10 }, // 2*pshuflw + 2*pshufhw
 1246     { TTI::SK_PermuteTwoSrc,    MVT::v2f64,  1 }, // shufpd
 1247     { TTI::SK_PermuteTwoSrc,    MVT::v2i64,  1 }, // shufpd
 1248     { TTI::SK_PermuteTwoSrc,    MVT::v4i32,  2 }, // 2*{unpck,movsd,pshufd}
 1249     { TTI::SK_PermuteTwoSrc,    MVT::v8i16,  8 }, // blend+permute
 1250     { TTI::SK_PermuteTwoSrc,    MVT::v16i8, 13 }, // blend+permute
 1258     { TTI::SK_Broadcast,        MVT::v4f32, 1 }, // shufps
 1259     { TTI::SK_Reverse,          MVT::v4f32, 1 }, // shufps
 1260     { TTI::SK_Select,           MVT::v4f32, 2 }, // 2*shufps
 1261     { TTI::SK_PermuteSingleSrc, MVT::v4f32, 1 }, // shufps
 1262     { TTI::SK_PermuteTwoSrc,    MVT::v4f32, 2 }, // 2*shufps
 2489     Cost += getShuffleCost(TTI::SK_PermuteTwoSrc, SrcVTy, 0, nullptr) +
 2490             getShuffleCost(TTI::SK_PermuteTwoSrc, MaskTy, 0, nullptr);
 2496     Cost += getShuffleCost(TTI::SK_InsertSubvector, NewMaskTy, 0, MaskTy);
 2918     return TTI::TCC_Free;
 2921     return TTI::TCC_Basic;
 2923   return 2 * TTI::TCC_Basic;
 2938     return TTI::TCC_Free;
 2941     return TTI::TCC_Free;
 2968     return TTI::TCC_Free;
 2973     return TTI::TCC_Free;
 2979       return 2 * TTI::TCC_Basic;
 2980     return TTI::TCC_Free;
 2993         return TTI::TCC_Free;
 3002       return TTI::TCC_Free;
 3009       return TTI::TCC_Free;
 3019     return TTI::TCC_Free;
 3030       return TTI::TCC_Free;
 3049     return (Cost <= NumConstants * TTI::TCC_Basic)
 3050                ? static_cast<int>(TTI::TCC_Free)
 3065     return TTI::TCC_Free;
 3069     return TTI::TCC_Free;
 3077       return TTI::TCC_Free;
 3081       return TTI::TCC_Free;
 3086       return TTI::TCC_Free;
 3100         return TTI::TCC_Basic * 2;
 3102     return TTI::TCC_Basic;
 3437 X86TTIImpl::TTI::MemCmpExpansionOptions
 3439   TTI::MemCmpExpansionOptions Options;
 3651     TTI::ShuffleKind ShuffleKind =
 3652         (NumOfMemOps > 1) ? TTI::SK_PermuteTwoSrc : TTI::SK_PermuteSingleSrc;
 3652         (NumOfMemOps > 1) ? TTI::SK_PermuteTwoSrc : TTI::SK_PermuteSingleSrc;
 3678     if (NumOfResults > 1 && ShuffleKind == TTI::SK_PermuteTwoSrc)
 3711       getShuffleCost(TTI::SK_PermuteTwoSrc, SingleMemOpTy, 0, nullptr);
lib/Target/X86/X86TargetTransformInfo.h
  105   TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth);
  126       TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
  126       TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
  127       TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
  127       TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
  128       TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
  128       TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
  129       TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
  129       TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
  131   int getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index, Type *SubTp);
  204   TTI::MemCmpExpansionOptions enableMemCmpExpansion(bool OptSize,