Home | History | Annotate | Download | only in X86

Lines Matching refs:ISD

187   int ISD = TLI->InstructionOpcodeToISD(Opcode);
188 assert(ISD && "Invalid opcode");
192 { ISD::SDIV, MVT::v16i16, 6 }, // vpmulhw sequence
193 { ISD::UDIV, MVT::v16i16, 6 }, // vpmulhuw sequence
194 { ISD::SDIV, MVT::v8i32, 15 }, // vpmuldq sequence
195 { ISD::UDIV, MVT::v8i32, 15 }, // vpmuludq sequence
200 int Idx = CostTableLookup(AVX2UniformConstCostTable, ISD, LT.second);
208 { ISD::SHL, MVT::v4i32, 1 },
209 { ISD::SRL, MVT::v4i32, 1 },
210 { ISD::SRA, MVT::v4i32, 1 },
211 { ISD::SHL, MVT::v8i32, 1 },
212 { ISD::SRL, MVT::v8i32, 1 },
213 { ISD::SRA, MVT::v8i32, 1 },
214 { ISD::SHL, MVT::v2i64, 1 },
215 { ISD::SRL, MVT::v2i64, 1 },
216 { ISD::SHL, MVT::v4i64, 1 },
217 { ISD::SRL, MVT::v4i64, 1 },
219 { ISD::SHL, MVT::v32i8, 42 }, // cmpeqb sequence.
220 { ISD::SHL, MVT::v16i16, 16*10 }, // Scalarized.
222 { ISD::SRL, MVT::v32i8, 32*10 }, // Scalarized.
223 { ISD::SRL, MVT::v16i16, 8*10 }, // Scalarized.
225 { ISD::SRA, MVT::v32i8, 32*10 }, // Scalarized.
226 { ISD::SRA, MVT::v16i16, 16*10 }, // Scalarized.
227 { ISD::SRA, MVT::v4i64, 4*10 }, // Scalarized.
230 { ISD::SDIV, MVT::v32i8, 32*20 },
231 { ISD::SDIV, MVT::v16i16, 16*20 },
232 { ISD::SDIV, MVT::v8i32, 8*20 },
233 { ISD::SDIV, MVT::v4i64, 4*20 },
234 { ISD::UDIV, MVT::v32i8, 32*20 },
235 { ISD::UDIV, MVT::v16i16, 16*20 },
236 { ISD::UDIV, MVT::v8i32, 8*20 },
237 { ISD::UDIV, MVT::v4i64, 4*20 },
242 if (ISD == ISD::SHL && LT.second == MVT::v16i16 &&
249 int Idx = CostTableLookup(AVX2CostTable, ISD, LT.second);
259 { ISD::SHL, MVT::v16i8, 1 }, // psllw.
260 { ISD::SHL, MVT::v8i16, 1 }, // psllw.
261 { ISD::SHL, MVT::v4i32, 1 }, // pslld
262 { ISD::SHL, MVT::v2i64, 1 }, // psllq.
264 { ISD::SRL, MVT::v16i8, 1 }, // psrlw.
265 { ISD::SRL, MVT::v8i16, 1 }, // psrlw.
266 { ISD::SRL, MVT::v4i32, 1 }, // psrld.
267 { ISD::SRL, MVT::v2i64, 1 }, // psrlq.
269 { ISD::SRA, MVT::v16i8, 4 }, // psrlw, pand, pxor, psubb.
270 { ISD::SRA, MVT::v8i16, 1 }, // psraw.
271 { ISD::SRA, MVT::v4i32, 1 }, // psrad.
273 { ISD::SDIV, MVT::v8i16, 6 }, // pmulhw sequence
274 { ISD::UDIV, MVT::v8i16, 6 }, // pmulhuw sequence
275 { ISD::SDIV, MVT::v4i32, 19 }, // pmuludq sequence
276 { ISD::UDIV, MVT::v4i32, 15 }, // pmuludq sequence
282 if (ISD == ISD::SDIV && LT.second == MVT::v4i32 && ST->hasSSE41())
285 int Idx = CostTableLookup(SSE2UniformConstCostTable, ISD, LT.second);
290 if (ISD == ISD::SHL &&
302 ISD = ISD::MUL;
314 { ISD::SHL, MVT::v16i8, 30 }, // cmpeqb sequence.
315 { ISD::SHL, MVT::v8i16, 8*10 }, // Scalarized.
316 { ISD::SHL, MVT::v4i32, 2*5 }, // We optimized this using mul.
317 { ISD::SHL, MVT::v2i64, 2*10 }, // Scalarized.
318 { ISD::SHL, MVT::v4i64, 4*10 }, // Scalarized.
320 { ISD::SRL, MVT::v16i8, 16*10 }, // Scalarized.
321 { ISD::SRL, MVT::v8i16, 8*10 }, // Scalarized.
322 { ISD::SRL, MVT::v4i32, 4*10 }, // Scalarized.
323 { ISD::SRL, MVT::v2i64, 2*10 }, // Scalarized.
325 { ISD::SRA, MVT::v16i8, 16*10 }, // Scalarized.
326 { ISD::SRA, MVT::v8i16, 8*10 }, // Scalarized.
327 { ISD::SRA, MVT::v4i32, 4*10 }, // Scalarized.
328 { ISD::SRA, MVT::v2i64, 2*10 }, // Scalarized.
336 { ISD::SDIV, MVT::v16i8, 16*20 },
337 { ISD::SDIV, MVT::v8i16, 8*20 },
338 { ISD::SDIV, MVT::v4i32, 4*20 },
339 { ISD::SDIV, MVT::v2i64, 2*20 },
340 { ISD::UDIV, MVT::v16i8, 16*20 },
341 { ISD::UDIV, MVT::v8i16, 8*20 },
342 { ISD::UDIV, MVT::v4i32, 4*20 },
343 { ISD::UDIV, MVT::v2i64, 2*20 },
347 int Idx = CostTableLookup(SSE2CostTable, ISD, LT.second);
356 { ISD::MUL, MVT::v16i16, 4 },
357 { ISD::MUL, MVT::v8i32, 4 },
358 { ISD::SUB, MVT::v8i32, 4 },
359 { ISD::ADD, MVT::v8i32, 4 },
360 { ISD::SUB, MVT::v4i64, 4 },
361 { ISD::ADD, MVT::v4i64, 4 },
367 { ISD::MUL, MVT::v4i64, 18 },
376 if (ISD == ISD::SHL && (VT == MVT::v8i32 || VT == MVT::v16i16) &&
378 ISD = ISD::MUL;
380 int Idx = CostTableLookup(AVX1CostTable, ISD, VT);
389 { ISD::MUL, MVT::v2i64, 9 },
390 { ISD::MUL, MVT::v4i64, 9 },
392 int Idx = CostTableLookup(CustomLowered, ISD, LT.second);
398 if (ISD == ISD::MUL && LT.second == MVT::v4i32 && ST->hasSSE2() &&
434 {ISD::VECTOR_SHUFFLE, MVT::v4i64, 1}, // vblendpd
435 {ISD::VECTOR_SHUFFLE, MVT::v4f64, 1}, // vblendpd
437 {ISD::VECTOR_SHUFFLE, MVT::v8i32, 1}, // vblendps
438 {ISD::VECTOR_SHUFFLE, MVT::v8f32, 1}, // vblendps
442 {ISD::VECTOR_SHUFFLE, MVT::v16i16, 5},
446 {ISD::VECTOR_SHUFFLE, MVT::v32i8, 9}
450 int Idx = CostTableLookup(AVXAltShuffleTbl, ISD::VECTOR_SHUFFLE, LT.second);
457 {ISD::VECTOR_SHUFFLE, MVT::v2i64, 1},
458 {ISD::VECTOR_SHUFFLE, MVT::v2f64, 1},
462 {ISD::VECTOR_SHUFFLE, MVT::v4i32, 1},
463 {ISD::VECTOR_SHUFFLE, MVT::v4f32, 1},
466 {ISD::VECTOR_SHUFFLE, MVT::v8i16, 1},
470 {ISD::VECTOR_SHUFFLE, MVT::v16i8, 3}
474 int Idx = CostTableLookup(SSE41AltShuffleTbl, ISD::VECTOR_SHUFFLE, LT.second);
480 {ISD::VECTOR_SHUFFLE, MVT::v2i64, 1}, // movsd
481 {ISD::VECTOR_SHUFFLE, MVT::v2f64, 1}, // movsd
485 {ISD::VECTOR_SHUFFLE, MVT::v4i32, 2},
486 {ISD::VECTOR_SHUFFLE, MVT::v4f32, 2},
488 {ISD::VECTOR_SHUFFLE, MVT::v8i16, 3}, // pshufb + pshufb + or
489 {ISD::VECTOR_SHUFFLE, MVT::v16i8, 3} // pshufb + pshufb + or
493 int Idx = CostTableLookup(SSSE3AltShuffleTbl, ISD::VECTOR_SHUFFLE, LT.second);
499 {ISD::VECTOR_SHUFFLE, MVT::v2i64, 1}, // movsd
500 {ISD::VECTOR_SHUFFLE, MVT::v2f64, 1}, // movsd
502 {ISD::VECTOR_SHUFFLE, MVT::v4i32, 2}, // shufps + pshufd
503 {ISD::VECTOR_SHUFFLE, MVT::v4f32, 2}, // shufps + pshufd
506 {ISD::VECTOR_SHUFFLE, MVT::v8i16, 8}, // 4 x pextrw + 4 pinsrw.
509 {ISD::VECTOR_SHUFFLE, MVT::v16i8, 48}
513 int Idx = CostTableLookup(SSEAltShuffleTbl, ISD::VECTOR_SHUFFLE, LT.second);
523 int ISD = TLI->InstructionOpcodeToISD(Opcode);
524 assert(ISD && "Invalid opcode");
534 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 2*10 },
535 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v4i32, 4*10 },
536 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v8i16, 8*10 },
537 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v16i8, 16*10 },
538 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i64, 2*10 },
539 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v4i32, 4*10 },
540 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v8i16, 8*10 },
541 { ISD::SINT_TO_FP, MVT::v2f64, MVT::v16i8, 16*10 },
543 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v2i64, 15 },
544 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 15 },
545 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v8i16, 15 },
546 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v16i8, 8 },
547 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v2i64, 15 },
548 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i32, 15 },
549 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v8i16, 15 },
550 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v16i8, 8 },
555 ConvertCostTableLookup(SSE2ConvTbl, ISD, LTDest.second, LTSrc.second);
569 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i8, 1 },
570 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i8, 1 },
571 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 3 },
572 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 3 },
573 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i8, 3 },
574 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i8, 3 },
575 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
576 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
577 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 3 },
578 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 3 },
579 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i8, 3 },
580 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i8, 3 },
581 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i16, 3 },
582 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i16, 3 },
583 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i32, 1 },
584 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i32, 1 },
586 { ISD::TRUNCATE, MVT::v4i8, MVT::v4i64, 2 },
587 { ISD::TRUNCATE, MVT::v4i16, MVT::v4i64, 2 },
588 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 2 },
589 { ISD::TRUNCATE, MVT::v8i8, MVT::v8i32, 2 },
590 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i32, 2 },
591 { ISD::TRUNCATE, MVT::v8i32, MVT::v8i64, 4 },
596 { ISD::SIGN_EXTEND, MVT::v16i16, MVT::v16i8, 4 },
597 { ISD::ZERO_EXTEND, MVT::v16i16, MVT::v16i8, 4 },
598 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i1, 7 },
599 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i1, 4 },
600 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i8, 7 },
601 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i8, 4 },
602 { ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 4 },
603 { ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 4 },
604 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i1, 6 },
605 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i1, 4 },
606 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i8, 6 },
607 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i8, 4 },
608 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i16, 6 },
609 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i16, 3 },
610 { ISD::SIGN_EXTEND, MVT::v4i64, MVT::v4i32, 4 },
611 { ISD::ZERO_EXTEND, MVT::v4i64, MVT::v4i32, 4 },
613 { ISD::TRUNCATE, MVT::v4i8, MVT::v4i64, 4 },
614 { ISD::TRUNCATE, MVT::v4i16, MVT::v4i64, 4 },
615 { ISD::TRUNCATE, MVT::v4i32, MVT::v4i64, 4 },
616 { ISD::TRUNCATE, MVT::v8i8, MVT::v8i32, 4 },
617 { ISD::TRUNCATE, MVT::v8i16, MVT::v8i32, 5 },
618 { ISD::TRUNCATE, MVT::v16i8, MVT::v16i16, 4 },
619 { ISD::TRUNCATE, MVT::v8i32, MVT::v8i64, 9 },
621 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i1, 8 },
622 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i8, 8 },
623 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i16, 5 },
624 { ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i32, 1 },
625 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i1, 3 },
626 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i8, 3 },
627 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i16, 3 },
628 { ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 },
629 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i1, 3 },
630 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i8, 3 },
631 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i16, 3 },
632 { ISD::SINT_TO_FP, MVT::v4f64, MVT::v4i32, 1 },
634 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i1, 6 },
635 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i8, 5 },
636 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 5 },
637 { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 9 },
638 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i1, 7 },
639 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i8, 2 },
640 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i16, 2 },
641 { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 6 },
642 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i1, 7 },
643 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i8, 2 },
644 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i16, 2 },
645 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i32, 6 },
651 { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 2*10 },
652 { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 4*10 },
654 { ISD::FP_TO_SINT, MVT::v8i8, MVT::v8f32, 7 },
655 { ISD::FP_TO_SINT, MVT::v4i8, MVT::v4f32, 1 },
661 { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f32, 8*4 },
662 { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f64, 4*4 },
666 int Idx = ConvertCostTableLookup(AVX2ConversionTbl, ISD,
673 int Idx = ConvertCostTableLookup(AVXConversionTbl, ISD, DstTy.getSimpleVT(),
689 int ISD = TLI->InstructionOpcodeToISD(Opcode);
690 assert(ISD && "Invalid opcode");
693 { ISD::SETCC, MVT::v2f64, 1 },
694 { ISD::SETCC, MVT::v4f32, 1 },
695 { ISD::SETCC, MVT::v2i64, 1 },
696 { ISD::SETCC, MVT::v4i32, 1 },
697 { ISD::SETCC, MVT::v8i16, 1 },
698 { ISD::SETCC, MVT::v16i8, 1 },
702 { ISD::SETCC, MVT::v4f64, 1 },
703 { ISD::SETCC, MVT::v8f32, 1 },
705 { ISD::SETCC, MVT::v4i64, 4 },
706 { ISD::SETCC, MVT::v8i32, 4 },
707 { ISD::SETCC, MVT::v16i16, 4 },
708 { ISD::SETCC, MVT::v32i8, 4 },
712 { ISD::SETCC, MVT::v4i64, 1 },
713 { ISD::SETCC, MVT::v8i32, 1 },
714 { ISD::SETCC, MVT::v16i16, 1 },
715 { ISD::SETCC, MVT::v32i8, 1 },
719 int Idx = CostTableLookup(AVX2CostTbl, ISD, MTy);
725 int Idx = CostTableLookup(AVX1CostTbl, ISD, MTy);
731 int Idx = CostTableLookup(SSE42CostTbl, ISD, MTy);
844 int ISD = TLI->InstructionOpcodeToISD(Opcode);
845 assert(ISD && "Invalid opcode");
851 { ISD::FADD, MVT::v2f64, 2 },
852 { ISD::FADD, MVT::v4f32, 4 },
853 { ISD::ADD, MVT::v2i64, 2 }, // The data reported by the IACA tool is "1.6".
854 { ISD::ADD, MVT::v4i32, 3 }, // The data reported by the IACA tool is "3.5".
855 { ISD::ADD, MVT::v8i16, 5 },
859 { ISD::FADD, MVT::v4f32, 4 },
860 { ISD::FADD, MVT::v4f64, 5 },
861 { ISD::FADD, MVT::v8f32, 7 },
862 { ISD::ADD, MVT::v2i64, 1 }, // The data reported by the IACA tool is "1.5".
863 { ISD::ADD, MVT::v4i32, 3 }, // The data reported by the IACA tool is "3.5".
864 { ISD::ADD, MVT::v4i64, 5 }, // The data reported by the IACA tool is "4.8".
865 { ISD::ADD, MVT::v8i16, 5 },
866 { ISD::ADD, MVT::v8i32, 5 },
870 { ISD::FADD, MVT::v2f64, 2 },
871 { ISD::FADD, MVT::v4f32, 4 },
872 { ISD::ADD, MVT::v2i64, 2 }, // The data reported by the IACA tool is "1.6".
873 { ISD::ADD, MVT::v4i32, 3 }, // The data reported by the IACA tool is "3.3".
874 { ISD::ADD, MVT::v8i16, 4 }, // The data reported by the IACA tool is "4.3".
878 { ISD::FADD, MVT::v4f32, 3 },
879 { ISD::FADD, MVT::v4f64, 3 },
880 { ISD::FADD, MVT::v8f32, 4 },
881 { ISD::ADD, MVT::v2i64, 1 }, // The data reported by the IACA tool is "1.5".
882 { ISD::ADD, MVT::v4i32, 3 }, // The data reported by the IACA tool is "2.8".
883 { ISD::ADD, MVT::v4i64, 3 },
884 { ISD::ADD, MVT::v8i16, 4 },
885 { ISD::ADD, MVT::v8i32, 5 },
890 int Idx = CostTableLookup(AVX1CostTblPairWise, ISD, MTy);
896 int Idx = CostTableLookup(SSE42CostTblPairWise, ISD, MTy);
902 int Idx = CostTableLookup(AVX1CostTblNoPairWise, ISD, MTy);
908 int Idx = CostTableLookup(SSE42CostTblNoPairWise, ISD, MTy);