|
reference, declaration → definition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
|
Declarations
lib/Target/Hexagon/BitTracker.h 40 struct RegisterCell;
References
lib/Target/Hexagon/BitTracker.cpp 115 raw_ostream &operator<<(raw_ostream &OS, const BT::RegisterCell &RC) {
183 for (const std::pair<unsigned, RegisterCell> P : Map)
201 bool BT::RegisterCell::meet(const RegisterCell &RC, unsigned SelfR) {
214 BT::RegisterCell &BT::RegisterCell::insert(const BT::RegisterCell &RC,
214 BT::RegisterCell &BT::RegisterCell::insert(const BT::RegisterCell &RC,
235 BT::RegisterCell BT::RegisterCell::extract(const BitMask &M) const {
239 RegisterCell RC(E-B+1);
245 RegisterCell RC(E+(W-B)+1);
253 BT::RegisterCell &BT::RegisterCell::rol(uint16_t Sh) {
261 RegisterCell Tmp(W-Sh);
274 BT::RegisterCell &BT::RegisterCell::fill(uint16_t B, uint16_t E,
282 BT::RegisterCell &BT::RegisterCell::cat(const RegisterCell &RC) {
282 BT::RegisterCell &BT::RegisterCell::cat(const RegisterCell &RC) {
310 bool BT::RegisterCell::operator== (const RegisterCell &RC) const {
320 BT::RegisterCell &BT::RegisterCell::regify(unsigned R) {
348 BT::RegisterCell BT::MachineEvaluator::getCell(const RegisterRef &RR,
355 return RegisterCell::self(0, BW);
362 return RegisterCell::self(0, BW);
372 return RegisterCell::top(BW);
375 void BT::MachineEvaluator::putCell(const RegisterRef &RR, RegisterCell RC,
388 bool BT::MachineEvaluator::isInt(const RegisterCell &A) const {
397 uint64_t BT::MachineEvaluator::toInt(const RegisterCell &A) const {
412 BT::RegisterCell BT::MachineEvaluator::eIMM(int64_t V, uint16_t W) const {
413 RegisterCell Res(W);
422 BT::RegisterCell BT::MachineEvaluator::eIMM(const ConstantInt *CI) const {
426 RegisterCell Res(BW);
432 BT::RegisterCell BT::MachineEvaluator::eADD(const RegisterCell &A1,
432 BT::RegisterCell BT::MachineEvaluator::eADD(const RegisterCell &A1,
433 const RegisterCell &A2) const {
436 RegisterCell Res(W);
465 BT::RegisterCell BT::MachineEvaluator::eSUB(const RegisterCell &A1,
465 BT::RegisterCell BT::MachineEvaluator::eSUB(const RegisterCell &A1,
466 const RegisterCell &A2) const {
469 RegisterCell Res(W);
498 BT::RegisterCell BT::MachineEvaluator::eMLS(const RegisterCell &A1,
498 BT::RegisterCell BT::MachineEvaluator::eMLS(const RegisterCell &A1,
499 const RegisterCell &A2) const {
502 RegisterCell Res(W);
508 BT::RegisterCell BT::MachineEvaluator::eMLU(const RegisterCell &A1,
508 BT::RegisterCell BT::MachineEvaluator::eMLU(const RegisterCell &A1,
509 const RegisterCell &A2) const {
512 RegisterCell Res(W);
518 BT::RegisterCell BT::MachineEvaluator::eASL(const RegisterCell &A1,
518 BT::RegisterCell BT::MachineEvaluator::eASL(const RegisterCell &A1,
521 RegisterCell Res = RegisterCell::ref(A1);
521 RegisterCell Res = RegisterCell::ref(A1);
527 BT::RegisterCell BT::MachineEvaluator::eLSR(const RegisterCell &A1,
527 BT::RegisterCell BT::MachineEvaluator::eLSR(const RegisterCell &A1,
531 RegisterCell Res = RegisterCell::ref(A1);
531 RegisterCell Res = RegisterCell::ref(A1);
537 BT::RegisterCell BT::MachineEvaluator::eASR(const RegisterCell &A1,
537 BT::RegisterCell BT::MachineEvaluator::eASR(const RegisterCell &A1,
541 RegisterCell Res = RegisterCell::ref(A1);
541 RegisterCell Res = RegisterCell::ref(A1);
548 BT::RegisterCell BT::MachineEvaluator::eAND(const RegisterCell &A1,
548 BT::RegisterCell BT::MachineEvaluator::eAND(const RegisterCell &A1,
549 const RegisterCell &A2) const {
552 RegisterCell Res(W);
570 BT::RegisterCell BT::MachineEvaluator::eORL(const RegisterCell &A1,
570 BT::RegisterCell BT::MachineEvaluator::eORL(const RegisterCell &A1,
571 const RegisterCell &A2) const {
574 RegisterCell Res(W);
592 BT::RegisterCell BT::MachineEvaluator::eXOR(const RegisterCell &A1,
592 BT::RegisterCell BT::MachineEvaluator::eXOR(const RegisterCell &A1,
593 const RegisterCell &A2) const {
596 RegisterCell Res(W);
612 BT::RegisterCell BT::MachineEvaluator::eNOT(const RegisterCell &A1) const {
612 BT::RegisterCell BT::MachineEvaluator::eNOT(const RegisterCell &A1) const {
614 RegisterCell Res(W);
627 BT::RegisterCell BT::MachineEvaluator::eSET(const RegisterCell &A1,
627 BT::RegisterCell BT::MachineEvaluator::eSET(const RegisterCell &A1,
630 RegisterCell Res = RegisterCell::ref(A1);
630 RegisterCell Res = RegisterCell::ref(A1);
635 BT::RegisterCell BT::MachineEvaluator::eCLR(const RegisterCell &A1,
635 BT::RegisterCell BT::MachineEvaluator::eCLR(const RegisterCell &A1,
638 RegisterCell Res = RegisterCell::ref(A1);
638 RegisterCell Res = RegisterCell::ref(A1);
643 BT::RegisterCell BT::MachineEvaluator::eCLB(const RegisterCell &A1, bool B,
643 BT::RegisterCell BT::MachineEvaluator::eCLB(const RegisterCell &A1, bool B,
650 return RegisterCell::self(0, W);
653 BT::RegisterCell BT::MachineEvaluator::eCTB(const RegisterCell &A1, bool B,
653 BT::RegisterCell BT::MachineEvaluator::eCTB(const RegisterCell &A1, bool B,
660 return RegisterCell::self(0, W);
663 BT::RegisterCell BT::MachineEvaluator::eSXT(const RegisterCell &A1,
663 BT::RegisterCell BT::MachineEvaluator::eSXT(const RegisterCell &A1,
667 RegisterCell Res = RegisterCell::ref(A1);
667 RegisterCell Res = RegisterCell::ref(A1);
674 BT::RegisterCell BT::MachineEvaluator::eZXT(const RegisterCell &A1,
674 BT::RegisterCell BT::MachineEvaluator::eZXT(const RegisterCell &A1,
678 RegisterCell Res = RegisterCell::ref(A1);
678 RegisterCell Res = RegisterCell::ref(A1);
683 BT::RegisterCell BT::MachineEvaluator::eXTR(const RegisterCell &A1,
683 BT::RegisterCell BT::MachineEvaluator::eXTR(const RegisterCell &A1,
690 RegisterCell Res = RegisterCell::ref(A1).extract(BT::BitMask(B, Last));
690 RegisterCell Res = RegisterCell::ref(A1).extract(BT::BitMask(B, Last));
695 BT::RegisterCell BT::MachineEvaluator::eINS(const RegisterCell &A1,
695 BT::RegisterCell BT::MachineEvaluator::eINS(const RegisterCell &A1,
696 const RegisterCell &A2, uint16_t AtN) const {
701 RegisterCell Res = RegisterCell::ref(A1);
701 RegisterCell Res = RegisterCell::ref(A1);
703 Res.insert(RegisterCell::ref(A2), BT::BitMask(AtN, AtN+W2-1));
735 RegisterCell Res(W);
736 Res.insert(RegisterCell::ref(getCell(RS, Inputs)), mask(RD.Reg, SS));
737 Res.insert(RegisterCell::ref(getCell(RT, Inputs)), mask(RD.Reg, ST));
751 RegisterCell Src = getCell(RS, Inputs);
752 RegisterCell Res(WD);
808 RegisterCell DefC = ME.getCell(DefRR, Map);
809 if (DefC == RegisterCell::self(DefRR.Reg, DefBW)) // XXX slow
827 RegisterCell ResC = ME.getCell(RU, Map);
863 for (const std::pair<unsigned, RegisterCell> &P : ResMap) {
885 RegisterCell RefC = RegisterCell::self(RD.Reg, DefBW);
885 RegisterCell RefC = RegisterCell::self(RD.Reg, DefBW);
891 RegisterCell DefC = ME.getCell(RD, Map);
892 RegisterCell ResC = ME.getCell(RD, ResMap);
989 BT::RegisterCell BT::get(RegisterRef RR) const {
993 void BT::put(RegisterRef RR, const RegisterCell &RC) {
1008 for (std::pair<const unsigned, RegisterCell> &P : Map) {
1009 RegisterCell &RC = P.second;
lib/Target/Hexagon/BitTracker.h 44 using CellMapType = std::map<unsigned, RegisterCell>;
52 const RegisterCell &lookup(unsigned Reg) const;
53 RegisterCell get(RegisterRef RR) const;
54 void put(RegisterRef RR, const RegisterCell &RC);
315 bool meet(const RegisterCell &RC, unsigned SelfR);
316 RegisterCell &insert(const RegisterCell &RC, const BitMask &M);
316 RegisterCell &insert(const RegisterCell &RC, const BitMask &M);
317 RegisterCell extract(const BitMask &M) const; // Returns a new cell.
318 RegisterCell &rol(uint16_t Sh); // Rotate left.
319 RegisterCell &fill(uint16_t B, uint16_t E, const BitValue &V);
320 RegisterCell &cat(const RegisterCell &RC); // Concatenate.
320 RegisterCell &cat(const RegisterCell &RC); // Concatenate.
324 bool operator== (const RegisterCell &RC) const;
325 bool operator!= (const RegisterCell &RC) const {
330 RegisterCell ®ify(unsigned R);
335 static RegisterCell self(unsigned Reg, uint16_t Width);
337 static RegisterCell top(uint16_t Width);
339 static RegisterCell ref(const RegisterCell &C);
339 static RegisterCell ref(const RegisterCell &C);
348 friend raw_ostream &operator<<(raw_ostream &OS, const RegisterCell &RC);
355 inline const BitTracker::RegisterCell&
362 inline BitTracker::RegisterCell
364 RegisterCell RC(Width);
370 inline BitTracker::RegisterCell
372 RegisterCell RC(Width);
378 inline BitTracker::RegisterCell
379 BitTracker::RegisterCell::ref(const RegisterCell &C) {
381 RegisterCell RC(W);
398 RegisterCell getCell(const RegisterRef &RR, const CellMapType &M) const;
399 void putCell(const RegisterRef &RR, RegisterCell RC, CellMapType &M) const;
404 RegisterCell getRef(const RegisterRef &RR, const CellMapType &M) const {
405 RegisterCell RC = getCell(RR, M);
406 return RegisterCell::ref(RC);
411 bool isInt(const RegisterCell &A) const;
413 uint64_t toInt(const RegisterCell &A) const;
416 RegisterCell eIMM(int64_t V, uint16_t W) const;
417 RegisterCell eIMM(const ConstantInt *CI) const;
420 RegisterCell eADD(const RegisterCell &A1, const RegisterCell &A2) const;
420 RegisterCell eADD(const RegisterCell &A1, const RegisterCell &A2) const;
420 RegisterCell eADD(const RegisterCell &A1, const RegisterCell &A2) const;
421 RegisterCell eSUB(const RegisterCell &A1, const RegisterCell &A2) const;
421 RegisterCell eSUB(const RegisterCell &A1, const RegisterCell &A2) const;
421 RegisterCell eSUB(const RegisterCell &A1, const RegisterCell &A2) const;
422 RegisterCell eMLS(const RegisterCell &A1, const RegisterCell &A2) const;
422 RegisterCell eMLS(const RegisterCell &A1, const RegisterCell &A2) const;
422 RegisterCell eMLS(const RegisterCell &A1, const RegisterCell &A2) const;
423 RegisterCell eMLU(const RegisterCell &A1, const RegisterCell &A2) const;
423 RegisterCell eMLU(const RegisterCell &A1, const RegisterCell &A2) const;
423 RegisterCell eMLU(const RegisterCell &A1, const RegisterCell &A2) const;
426 RegisterCell eASL(const RegisterCell &A1, uint16_t Sh) const;
426 RegisterCell eASL(const RegisterCell &A1, uint16_t Sh) const;
427 RegisterCell eLSR(const RegisterCell &A1, uint16_t Sh) const;
427 RegisterCell eLSR(const RegisterCell &A1, uint16_t Sh) const;
428 RegisterCell eASR(const RegisterCell &A1, uint16_t Sh) const;
428 RegisterCell eASR(const RegisterCell &A1, uint16_t Sh) const;
431 RegisterCell eAND(const RegisterCell &A1, const RegisterCell &A2) const;
431 RegisterCell eAND(const RegisterCell &A1, const RegisterCell &A2) const;
431 RegisterCell eAND(const RegisterCell &A1, const RegisterCell &A2) const;
432 RegisterCell eORL(const RegisterCell &A1, const RegisterCell &A2) const;
432 RegisterCell eORL(const RegisterCell &A1, const RegisterCell &A2) const;
432 RegisterCell eORL(const RegisterCell &A1, const RegisterCell &A2) const;
433 RegisterCell eXOR(const RegisterCell &A1, const RegisterCell &A2) const;
433 RegisterCell eXOR(const RegisterCell &A1, const RegisterCell &A2) const;
433 RegisterCell eXOR(const RegisterCell &A1, const RegisterCell &A2) const;
434 RegisterCell eNOT(const RegisterCell &A1) const;
434 RegisterCell eNOT(const RegisterCell &A1) const;
437 RegisterCell eSET(const RegisterCell &A1, uint16_t BitN) const;
437 RegisterCell eSET(const RegisterCell &A1, uint16_t BitN) const;
438 RegisterCell eCLR(const RegisterCell &A1, uint16_t BitN) const;
438 RegisterCell eCLR(const RegisterCell &A1, uint16_t BitN) const;
441 RegisterCell eCLB(const RegisterCell &A1, bool B, uint16_t W) const;
441 RegisterCell eCLB(const RegisterCell &A1, bool B, uint16_t W) const;
442 RegisterCell eCTB(const RegisterCell &A1, bool B, uint16_t W) const;
442 RegisterCell eCTB(const RegisterCell &A1, bool B, uint16_t W) const;
445 RegisterCell eSXT(const RegisterCell &A1, uint16_t FromN) const;
445 RegisterCell eSXT(const RegisterCell &A1, uint16_t FromN) const;
446 RegisterCell eZXT(const RegisterCell &A1, uint16_t FromN) const;
446 RegisterCell eZXT(const RegisterCell &A1, uint16_t FromN) const;
451 RegisterCell eXTR(const RegisterCell &A1, uint16_t B, uint16_t E) const;
451 RegisterCell eXTR(const RegisterCell &A1, uint16_t B, uint16_t E) const;
452 RegisterCell eINS(const RegisterCell &A1, const RegisterCell &A2,
452 RegisterCell eINS(const RegisterCell &A1, const RegisterCell &A2,
452 RegisterCell eINS(const RegisterCell &A1, const RegisterCell &A2,
lib/Target/Hexagon/HexagonBitSimplify.cpp 202 static bool isEqual(const BitTracker::RegisterCell &RC1, uint16_t B1,
203 const BitTracker::RegisterCell &RC2, uint16_t B2, uint16_t W);
204 static bool isZero(const BitTracker::RegisterCell &RC, uint16_t B,
206 static bool getConst(const BitTracker::RegisterCell &RC, uint16_t B,
313 bool HexagonBitSimplify::isEqual(const BitTracker::RegisterCell &RC1,
314 uint16_t B1, const BitTracker::RegisterCell &RC2, uint16_t B2,
329 bool HexagonBitSimplify::isZero(const BitTracker::RegisterCell &RC,
338 bool HexagonBitSimplify::getConst(const BitTracker::RegisterCell &RC,
1278 const BitTracker::RegisterCell &DC = BT.lookup(RD.Reg);
1279 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg);
1321 const BitTracker::RegisterCell &DC = BT.lookup(RD.Reg);
1338 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg);
1473 const BitTracker::RegisterCell &DRC = BT.lookup(DR);
1539 const BitTracker::RegisterCell &InpRC = BT.lookup(Inp.Reg);
1548 const BitTracker::RegisterCell &RC = BT.lookup(R);
1752 bool matchHalf(unsigned SelfR, const BitTracker::RegisterCell &RC,
1756 bool matchPackhl(unsigned SelfR, const BitTracker::RegisterCell &RC,
1763 const BitTracker::RegisterCell &RC);
1765 const BitTracker::RegisterCell &RC);
1767 const BitTracker::RegisterCell &RC);
1769 const BitTracker::RegisterCell &RC);
1771 const BitTracker::RegisterCell &RC, const RegisterSet &AVs);
1773 const BitTracker::RegisterCell &RC);
1775 const BitTracker::RegisterCell &RC, const RegisterSet &AVs);
1796 const BitTracker::RegisterCell &RC, unsigned B, RegHalf &RH) {
1824 const BitTracker::RegisterCell &SC = BT.lookup(Reg);
1883 const BitTracker::RegisterCell &RC, BitTracker::RegisterRef &Rs,
1922 const BitTracker::RegisterCell &RC = BT.lookup(RS.Reg);
1967 const BitTracker::RegisterCell &RC = BT.lookup(RS.Reg);
2013 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) {
2040 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) {
2079 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) {
2111 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) {
2145 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg);
2171 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC,
2232 const BitTracker::RegisterCell &SC = BT.lookup(S);
2324 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC) {
2339 const BitTracker::RegisterCell &SC = BT.lookup(RS.Reg);
2384 BitTracker::RegisterRef RD, const BitTracker::RegisterCell &RC,
2471 const BitTracker::RegisterCell &SC = BT.lookup(R);
2599 const BitTracker::RegisterCell &SC = BT.lookup(SR.Reg);
2617 BitTracker::RegisterCell NewRC(W);
2685 BitTracker::RegisterCell NewRC(W);
2729 const BitTracker::RegisterCell &RC = BT.lookup(RD.Reg);
2969 const BitTracker::RegisterCell &RC = BTP->lookup(Reg);
3023 const BitTracker::RegisterCell &OutC = BTP->lookup(OutR);
3038 const BitTracker::RegisterCell &OutC1 = BTP->lookup(OutR1);
3039 const BitTracker::RegisterCell &OutC2 = BTP->lookup(OutR2);
lib/Target/Hexagon/HexagonBitTracker.h 28 using RegisterCell = BitTracker::RegisterCell;
lib/Target/Hexagon/HexagonGenInsert.cpp 269 const BitTracker::RegisterCell &lookup(unsigned VR) {
274 const BitTracker::RegisterCell *CP = CVect[RInd];
283 using CellVectType = std::vector<const BitTracker::RegisterCell *>;
336 const BitTracker::RegisterCell &RC1 = CM.lookup(VR1), &RC2 = CM.lookup(VR2);
353 const BitTracker::RegisterCell &RC1 = CM.lookup(VR1);
354 const BitTracker::RegisterCell &RC2 = CM.lookup(VR2);
645 const BitTracker::RegisterCell &RC = CMS->lookup(VR);
657 const BitTracker::RegisterCell &RC = CMS->lookup(VR);
702 const BitTracker::RegisterCell &RC = CMS->lookup(VR);
712 BitTracker::RegisterCell RC = CMS->lookup(VR);
806 const BitTracker::RegisterCell &RC = CMS->lookup(VR);
878 const BitTracker::RegisterCell &AC = CMS->lookup(SrcR);
usr/include/c++/7.4.0/bits/stl_map.h 103 typedef _Tp mapped_type;
104 typedef std::pair<const _Key, _Tp> value_type;
usr/include/c++/7.4.0/bits/stl_pair.h 101 is_constructible<_T2, const _U2&>>::value;
101 is_constructible<_T2, const _U2&>>::value;
108 is_convertible<const _U2&, _T2>>::value;
108 is_convertible<const _U2&, _T2>>::value;
115 is_constructible<_T2, _U2&&>>::value;
115 is_constructible<_T2, _U2&&>>::value;
122 is_convertible<_U2&&, _T2>>::value;
122 is_convertible<_U2&&, _T2>>::value;
209 : private __pair_base<_T1, _T2>
212 typedef _T2 second_type; /// @c second_type is the second bound type
215 _T2 second; /// @c second is a copy of the second object
252 using _PCCP = _PCC<true, _T1, _T2>;
260 constexpr pair(const _T1& __a, const _T2& __b)
269 explicit constexpr pair(const _T1& __a, const _T2& __b)
283 _T1, _T2>;
291 constexpr pair(const pair<_U1, _U2>& __p)
311 constexpr pair(_U1&& __x, const _T2& __y)
318 explicit constexpr pair(_U1&& __x, const _T2& __y)
360 constexpr pair(pair<_U1, _U2>&& __p)
380 is_copy_assignable<_T2>>::value,
391 is_move_assignable<_T2>>::value,
usr/include/c++/7.4.0/type_traits 215 : public __is_void_helper<typename remove_cv<_Tp>::type>::type
326 : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
354 : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
381 : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
567 : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
581 : public __or_<is_lvalue_reference<_Tp>,
582 is_rvalue_reference<_Tp>>::type
588 : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
588 : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
601 : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
601 : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
602 is_void<_Tp>>>::type
611 : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
611 : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
611 : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
612 is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
612 is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
631 : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
638 : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
638 : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
777 : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
777 : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
798 typedef decltype(__test<_Tp>(0)) type;
811 remove_all_extents<_Tp>::type>::type
825 : public __is_destructible_safe<_Tp>::type
984 typedef decltype(__test<_Tp, _Arg>(0)) type;
989 : public __and_<is_destructible<_Tp>,
990 __is_direct_constructible_impl<_Tp, _Arg>>
1072 __is_direct_constructible_ref_cast<_Tp, _Arg>,
1073 __is_direct_constructible_new_safe<_Tp, _Arg>
1079 : public __is_direct_constructible_new<_Tp, _Arg>::type
1119 : public __is_direct_constructible<_Tp, _Arg>
1130 : public __is_constructible_impl<_Tp, _Args...>::type
1286 : public is_assignable<_Tp&, const _Tp&>
1286 : public is_assignable<_Tp&, const _Tp&>
1292 : public __is_copy_assignable_impl<_Tp>
1304 : public is_assignable<_Tp&, _Tp&&>
1304 : public is_assignable<_Tp&, _Tp&&>
1310 : public __is_move_assignable_impl<_Tp>
1526 static void __test_aux(_To1);
1538 typedef decltype(__test<_From, _To>(0)) type;
1545 : public __is_convertible_helper<_From, _To>::type
1554 { typedef _Tp type; };
1563 { typedef _Tp type; };
1574 remove_const<typename remove_volatile<_Tp>::type>::type type;
1659 { typedef _Tp&& type; };
1955 { typedef _Tp type; };