|
reference, declaration → definition
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,