Changeset 219898 in webkit for trunk/Source/JavaScriptCore/b3/testb3.cpp
- Timestamp:
- Jul 25, 2017, 6:58:36 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/b3/testb3.cpp
r219633 r219898 14591 14591 } 14592 14592 CHECK(found); 14593 } 14594 14595 template<typename Func> 14596 void generateLoop(Procedure& proc, const Func& func) 14597 { 14598 BasicBlock* root = proc.addBlock(); 14599 BasicBlock* loop = proc.addBlock(); 14600 BasicBlock* end = proc.addBlock(); 14601 14602 UpsilonValue* initialIndex = root->appendNew<UpsilonValue>( 14603 proc, Origin(), root->appendNew<Const32Value>(proc, Origin(), 0)); 14604 root->appendNew<Value>(proc, Jump, Origin()); 14605 root->setSuccessors(loop); 14606 14607 Value* index = loop->appendNew<Value>(proc, Phi, Int32, Origin()); 14608 initialIndex->setPhi(index); 14609 14610 Value* one = func(loop, index); 14611 14612 Value* nextIndex = loop->appendNew<Value>(proc, Add, Origin(), index, one); 14613 UpsilonValue* loopIndex = loop->appendNew<UpsilonValue>(proc, Origin(), nextIndex); 14614 loopIndex->setPhi(index); 14615 loop->appendNew<Value>( 14616 proc, Branch, Origin(), 14617 loop->appendNew<Value>( 14618 proc, LessThan, Origin(), nextIndex, 14619 loop->appendNew<Const32Value>(proc, Origin(), 100))); 14620 loop->setSuccessors(loop, end); 14621 14622 end->appendNew<Value>(proc, Return, Origin()); 14623 } 14624 14625 std::array<int, 100> makeArrayForLoops() 14626 { 14627 std::array<int, 100> result; 14628 for (unsigned i = 0; i < result.size(); ++i) 14629 result[i] = i & 1; 14630 return result; 14631 } 14632 14633 template<typename Func> 14634 void generateLoopNotBackwardsDominant(Procedure& proc, std::array<int, 100>& array, const Func& func) 14635 { 14636 BasicBlock* root = proc.addBlock(); 14637 BasicBlock* loopHeader = proc.addBlock(); 14638 BasicBlock* loopCall = proc.addBlock(); 14639 BasicBlock* loopFooter = proc.addBlock(); 14640 BasicBlock* end = proc.addBlock(); 14641 14642 UpsilonValue* initialIndex = root->appendNew<UpsilonValue>( 14643 proc, Origin(), root->appendNew<Const32Value>(proc, Origin(), 0)); 14644 // If you look carefully, you'll notice that this is an extremely sneaky use of Upsilon that demonstrates 14645 // the extent to which our SSA is different from normal-person SSA. 14646 UpsilonValue* defaultOne = root->appendNew<UpsilonValue>( 14647 proc, Origin(), root->appendNew<Const32Value>(proc, Origin(), 1)); 14648 root->appendNew<Value>(proc, Jump, Origin()); 14649 root->setSuccessors(loopHeader); 14650 14651 Value* index = loopHeader->appendNew<Value>(proc, Phi, Int32, Origin()); 14652 initialIndex->setPhi(index); 14653 14654 // if (array[index]) 14655 loopHeader->appendNew<Value>( 14656 proc, Branch, Origin(), 14657 loopHeader->appendNew<MemoryValue>( 14658 proc, Load, Int32, Origin(), 14659 loopHeader->appendNew<Value>( 14660 proc, Add, Origin(), 14661 loopHeader->appendNew<ConstPtrValue>(proc, Origin(), &array), 14662 loopHeader->appendNew<Value>( 14663 proc, Mul, Origin(), 14664 loopHeader->appendNew<Value>(proc, ZExt32, Origin(), index), 14665 loopHeader->appendNew<ConstPtrValue>(proc, Origin(), sizeof(int)))))); 14666 loopHeader->setSuccessors(loopCall, loopFooter); 14667 14668 Value* functionCall = func(loopCall, index); 14669 UpsilonValue* oneFromFunction = loopCall->appendNew<UpsilonValue>(proc, Origin(), functionCall); 14670 loopCall->appendNew<Value>(proc, Jump, Origin()); 14671 loopCall->setSuccessors(loopFooter); 14672 14673 Value* one = loopFooter->appendNew<Value>(proc, Phi, Int32, Origin()); 14674 defaultOne->setPhi(one); 14675 oneFromFunction->setPhi(one); 14676 Value* nextIndex = loopFooter->appendNew<Value>(proc, Add, Origin(), index, one); 14677 UpsilonValue* loopIndex = loopFooter->appendNew<UpsilonValue>(proc, Origin(), nextIndex); 14678 loopIndex->setPhi(index); 14679 loopFooter->appendNew<Value>( 14680 proc, Branch, Origin(), 14681 loopFooter->appendNew<Value>( 14682 proc, LessThan, Origin(), nextIndex, 14683 loopFooter->appendNew<Const32Value>(proc, Origin(), 100))); 14684 loopFooter->setSuccessors(loopHeader, end); 14685 14686 end->appendNew<Value>(proc, Return, Origin()); 14687 } 14688 14689 static int oneFunction(int* callCount) 14690 { 14691 (*callCount)++; 14692 return 1; 14693 } 14694 14695 static void noOpFunction() 14696 { 14697 } 14698 14699 void testLICMPure() 14700 { 14701 Procedure proc; 14702 generateLoop( 14703 proc, 14704 [&] (BasicBlock* loop, Value*) -> Value* { 14705 return loop->appendNew<CCallValue>( 14706 proc, Int32, Origin(), Effects::none(), 14707 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14708 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14709 }); 14710 14711 unsigned callCount = 0; 14712 compileAndRun<void>(proc, &callCount); 14713 CHECK_EQ(callCount, 1u); 14714 } 14715 14716 void testLICMPureSideExits() 14717 { 14718 Procedure proc; 14719 generateLoop( 14720 proc, 14721 [&] (BasicBlock* loop, Value*) -> Value* { 14722 Effects effects = Effects::none(); 14723 effects.exitsSideways = true; 14724 loop->appendNew<CCallValue>( 14725 proc, Void, Origin(), effects, 14726 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 14727 14728 return loop->appendNew<CCallValue>( 14729 proc, Int32, Origin(), Effects::none(), 14730 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14731 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14732 }); 14733 14734 unsigned callCount = 0; 14735 compileAndRun<void>(proc, &callCount); 14736 CHECK_EQ(callCount, 1u); 14737 } 14738 14739 void testLICMPureWritesPinned() 14740 { 14741 Procedure proc; 14742 generateLoop( 14743 proc, 14744 [&] (BasicBlock* loop, Value*) -> Value* { 14745 Effects effects = Effects::none(); 14746 effects.writesPinned = true; 14747 loop->appendNew<CCallValue>( 14748 proc, Void, Origin(), effects, 14749 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 14750 14751 return loop->appendNew<CCallValue>( 14752 proc, Int32, Origin(), Effects::none(), 14753 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14754 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14755 }); 14756 14757 unsigned callCount = 0; 14758 compileAndRun<void>(proc, &callCount); 14759 CHECK_EQ(callCount, 1u); 14760 } 14761 14762 void testLICMPureWrites() 14763 { 14764 Procedure proc; 14765 generateLoop( 14766 proc, 14767 [&] (BasicBlock* loop, Value*) -> Value* { 14768 Effects effects = Effects::none(); 14769 effects.writes = HeapRange(63479); 14770 loop->appendNew<CCallValue>( 14771 proc, Void, Origin(), effects, 14772 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 14773 14774 return loop->appendNew<CCallValue>( 14775 proc, Int32, Origin(), Effects::none(), 14776 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14777 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14778 }); 14779 14780 unsigned callCount = 0; 14781 compileAndRun<void>(proc, &callCount); 14782 CHECK_EQ(callCount, 1u); 14783 } 14784 14785 void testLICMReadsLocalState() 14786 { 14787 Procedure proc; 14788 generateLoop( 14789 proc, 14790 [&] (BasicBlock* loop, Value*) -> Value* { 14791 Effects effects = Effects::none(); 14792 effects.readsLocalState = true; 14793 return loop->appendNew<CCallValue>( 14794 proc, Int32, Origin(), effects, 14795 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14796 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14797 }); 14798 14799 unsigned callCount = 0; 14800 compileAndRun<void>(proc, &callCount); 14801 CHECK_EQ(callCount, 100u); // We'll fail to hoist because the loop has Upsilons. 14802 } 14803 14804 void testLICMReadsPinned() 14805 { 14806 Procedure proc; 14807 generateLoop( 14808 proc, 14809 [&] (BasicBlock* loop, Value*) -> Value* { 14810 Effects effects = Effects::none(); 14811 effects.readsPinned = true; 14812 return loop->appendNew<CCallValue>( 14813 proc, Int32, Origin(), effects, 14814 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14815 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14816 }); 14817 14818 unsigned callCount = 0; 14819 compileAndRun<void>(proc, &callCount); 14820 CHECK_EQ(callCount, 1u); 14821 } 14822 14823 void testLICMReads() 14824 { 14825 Procedure proc; 14826 generateLoop( 14827 proc, 14828 [&] (BasicBlock* loop, Value*) -> Value* { 14829 Effects effects = Effects::none(); 14830 effects.reads = HeapRange::top(); 14831 return loop->appendNew<CCallValue>( 14832 proc, Int32, Origin(), effects, 14833 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14834 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14835 }); 14836 14837 unsigned callCount = 0; 14838 compileAndRun<void>(proc, &callCount); 14839 CHECK_EQ(callCount, 1u); 14840 } 14841 14842 void testLICMPureNotBackwardsDominant() 14843 { 14844 Procedure proc; 14845 auto array = makeArrayForLoops(); 14846 generateLoopNotBackwardsDominant( 14847 proc, array, 14848 [&] (BasicBlock* loop, Value*) -> Value* { 14849 return loop->appendNew<CCallValue>( 14850 proc, Int32, Origin(), Effects::none(), 14851 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14852 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14853 }); 14854 14855 unsigned callCount = 0; 14856 compileAndRun<void>(proc, &callCount); 14857 CHECK_EQ(callCount, 1u); 14858 } 14859 14860 void testLICMPureFoiledByChild() 14861 { 14862 Procedure proc; 14863 generateLoop( 14864 proc, 14865 [&] (BasicBlock* loop, Value* index) -> Value* { 14866 return loop->appendNew<CCallValue>( 14867 proc, Int32, Origin(), Effects::none(), 14868 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14869 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0), 14870 index); 14871 }); 14872 14873 unsigned callCount = 0; 14874 compileAndRun<void>(proc, &callCount); 14875 CHECK_EQ(callCount, 100u); 14876 } 14877 14878 void testLICMPureNotBackwardsDominantFoiledByChild() 14879 { 14880 Procedure proc; 14881 auto array = makeArrayForLoops(); 14882 generateLoopNotBackwardsDominant( 14883 proc, array, 14884 [&] (BasicBlock* loop, Value* index) -> Value* { 14885 return loop->appendNew<CCallValue>( 14886 proc, Int32, Origin(), Effects::none(), 14887 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14888 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0), 14889 index); 14890 }); 14891 14892 unsigned callCount = 0; 14893 compileAndRun<void>(proc, &callCount); 14894 CHECK_EQ(callCount, 50u); 14895 } 14896 14897 void testLICMExitsSideways() 14898 { 14899 Procedure proc; 14900 generateLoop( 14901 proc, 14902 [&] (BasicBlock* loop, Value*) -> Value* { 14903 Effects effects = Effects::none(); 14904 effects.exitsSideways = true; 14905 return loop->appendNew<CCallValue>( 14906 proc, Int32, Origin(), effects, 14907 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14908 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14909 }); 14910 14911 unsigned callCount = 0; 14912 compileAndRun<void>(proc, &callCount); 14913 CHECK_EQ(callCount, 100u); 14914 } 14915 14916 void testLICMWritesLocalState() 14917 { 14918 Procedure proc; 14919 generateLoop( 14920 proc, 14921 [&] (BasicBlock* loop, Value*) -> Value* { 14922 Effects effects = Effects::none(); 14923 effects.writesLocalState = true; 14924 return loop->appendNew<CCallValue>( 14925 proc, Int32, Origin(), effects, 14926 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14927 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14928 }); 14929 14930 unsigned callCount = 0; 14931 compileAndRun<void>(proc, &callCount); 14932 CHECK_EQ(callCount, 100u); 14933 } 14934 14935 void testLICMWrites() 14936 { 14937 Procedure proc; 14938 generateLoop( 14939 proc, 14940 [&] (BasicBlock* loop, Value*) -> Value* { 14941 Effects effects = Effects::none(); 14942 effects.writes = HeapRange(666); 14943 return loop->appendNew<CCallValue>( 14944 proc, Int32, Origin(), effects, 14945 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14946 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14947 }); 14948 14949 unsigned callCount = 0; 14950 compileAndRun<void>(proc, &callCount); 14951 CHECK_EQ(callCount, 100u); 14952 } 14953 14954 void testLICMFence() 14955 { 14956 Procedure proc; 14957 generateLoop( 14958 proc, 14959 [&] (BasicBlock* loop, Value*) -> Value* { 14960 Effects effects = Effects::none(); 14961 effects.fence = true; 14962 return loop->appendNew<CCallValue>( 14963 proc, Int32, Origin(), effects, 14964 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14965 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14966 }); 14967 14968 unsigned callCount = 0; 14969 compileAndRun<void>(proc, &callCount); 14970 CHECK_EQ(callCount, 100u); 14971 } 14972 14973 void testLICMWritesPinned() 14974 { 14975 Procedure proc; 14976 generateLoop( 14977 proc, 14978 [&] (BasicBlock* loop, Value*) -> Value* { 14979 Effects effects = Effects::none(); 14980 effects.writesPinned = true; 14981 return loop->appendNew<CCallValue>( 14982 proc, Int32, Origin(), effects, 14983 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 14984 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 14985 }); 14986 14987 unsigned callCount = 0; 14988 compileAndRun<void>(proc, &callCount); 14989 CHECK_EQ(callCount, 100u); 14990 } 14991 14992 void testLICMControlDependent() 14993 { 14994 Procedure proc; 14995 generateLoop( 14996 proc, 14997 [&] (BasicBlock* loop, Value*) -> Value* { 14998 Effects effects = Effects::none(); 14999 effects.controlDependent = true; 15000 return loop->appendNew<CCallValue>( 15001 proc, Int32, Origin(), effects, 15002 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15003 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15004 }); 15005 15006 unsigned callCount = 0; 15007 compileAndRun<void>(proc, &callCount); 15008 CHECK_EQ(callCount, 1u); 15009 } 15010 15011 void testLICMControlDependentNotBackwardsDominant() 15012 { 15013 Procedure proc; 15014 auto array = makeArrayForLoops(); 15015 generateLoopNotBackwardsDominant( 15016 proc, array, 15017 [&] (BasicBlock* loop, Value*) -> Value* { 15018 Effects effects = Effects::none(); 15019 effects.controlDependent = true; 15020 return loop->appendNew<CCallValue>( 15021 proc, Int32, Origin(), effects, 15022 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15023 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15024 }); 15025 15026 unsigned callCount = 0; 15027 compileAndRun<void>(proc, &callCount); 15028 CHECK_EQ(callCount, 50u); 15029 } 15030 15031 void testLICMControlDependentSideExits() 15032 { 15033 Procedure proc; 15034 generateLoop( 15035 proc, 15036 [&] (BasicBlock* loop, Value*) -> Value* { 15037 Effects effects = Effects::none(); 15038 effects.exitsSideways = true; 15039 loop->appendNew<CCallValue>( 15040 proc, Void, Origin(), effects, 15041 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 15042 15043 effects = Effects::none(); 15044 effects.controlDependent = true; 15045 return loop->appendNew<CCallValue>( 15046 proc, Int32, Origin(), effects, 15047 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15048 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15049 }); 15050 15051 unsigned callCount = 0; 15052 compileAndRun<void>(proc, &callCount); 15053 CHECK_EQ(callCount, 100u); 15054 } 15055 15056 void testLICMReadsPinnedWritesPinned() 15057 { 15058 Procedure proc; 15059 generateLoop( 15060 proc, 15061 [&] (BasicBlock* loop, Value*) -> Value* { 15062 Effects effects = Effects::none(); 15063 effects.writesPinned = true; 15064 loop->appendNew<CCallValue>( 15065 proc, Void, Origin(), effects, 15066 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 15067 15068 effects = Effects::none(); 15069 effects.readsPinned = true; 15070 return loop->appendNew<CCallValue>( 15071 proc, Int32, Origin(), effects, 15072 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15073 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15074 }); 15075 15076 unsigned callCount = 0; 15077 compileAndRun<void>(proc, &callCount); 15078 CHECK_EQ(callCount, 100u); 15079 } 15080 15081 void testLICMReadsWritesDifferentHeaps() 15082 { 15083 Procedure proc; 15084 generateLoop( 15085 proc, 15086 [&] (BasicBlock* loop, Value*) -> Value* { 15087 Effects effects = Effects::none(); 15088 effects.writes = HeapRange(6436); 15089 loop->appendNew<CCallValue>( 15090 proc, Void, Origin(), effects, 15091 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 15092 15093 effects = Effects::none(); 15094 effects.reads = HeapRange(4886); 15095 return loop->appendNew<CCallValue>( 15096 proc, Int32, Origin(), effects, 15097 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15098 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15099 }); 15100 15101 unsigned callCount = 0; 15102 compileAndRun<void>(proc, &callCount); 15103 CHECK_EQ(callCount, 1u); 15104 } 15105 15106 void testLICMReadsWritesOverlappingHeaps() 15107 { 15108 Procedure proc; 15109 generateLoop( 15110 proc, 15111 [&] (BasicBlock* loop, Value*) -> Value* { 15112 Effects effects = Effects::none(); 15113 effects.writes = HeapRange(6436, 74458); 15114 loop->appendNew<CCallValue>( 15115 proc, Void, Origin(), effects, 15116 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(noOpFunction))); 15117 15118 effects = Effects::none(); 15119 effects.reads = HeapRange(48864, 78239); 15120 return loop->appendNew<CCallValue>( 15121 proc, Int32, Origin(), effects, 15122 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15123 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15124 }); 15125 15126 unsigned callCount = 0; 15127 compileAndRun<void>(proc, &callCount); 15128 CHECK_EQ(callCount, 100u); 15129 } 15130 15131 void testLICMDefaultCall() 15132 { 15133 Procedure proc; 15134 generateLoop( 15135 proc, 15136 [&] (BasicBlock* loop, Value*) -> Value* { 15137 return loop->appendNew<CCallValue>( 15138 proc, Int32, Origin(), 15139 loop->appendNew<ConstPtrValue>(proc, Origin(), bitwise_cast<void*>(oneFunction)), 15140 loop->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0)); 15141 }); 15142 15143 unsigned callCount = 0; 15144 compileAndRun<void>(proc, &callCount); 15145 CHECK_EQ(callCount, 100u); 14593 15146 } 14594 15147 … … 17129 17682 RUN(testLoadBaseIndexShift32()); 17130 17683 RUN(testOptimizeMaterialization()); 17131 17684 RUN(testLICMPure()); 17685 RUN(testLICMPureSideExits()); 17686 RUN(testLICMPureWritesPinned()); 17687 RUN(testLICMPureWrites()); 17688 RUN(testLICMReadsLocalState()); 17689 RUN(testLICMReadsPinned()); 17690 RUN(testLICMReads()); 17691 RUN(testLICMPureNotBackwardsDominant()); 17692 RUN(testLICMPureFoiledByChild()); 17693 RUN(testLICMPureNotBackwardsDominantFoiledByChild()); 17694 RUN(testLICMExitsSideways()); 17695 RUN(testLICMWritesLocalState()); 17696 RUN(testLICMWrites()); 17697 RUN(testLICMWritesPinned()); 17698 RUN(testLICMFence()); 17699 RUN(testLICMControlDependent()); 17700 RUN(testLICMControlDependentNotBackwardsDominant()); 17701 RUN(testLICMControlDependentSideExits()); 17702 RUN(testLICMReadsPinnedWritesPinned()); 17703 RUN(testLICMReadsWritesDifferentHeaps()); 17704 RUN(testLICMReadsWritesOverlappingHeaps()); 17705 RUN(testLICMDefaultCall()); 17706 17132 17707 RUN(testAtomicWeakCAS<int8_t>()); 17133 17708 RUN(testAtomicWeakCAS<int16_t>()); … … 17182 17757 RUN(testFloatEqualOrUnorderedFoldingNaN()); 17183 17758 RUN(testFloatEqualOrUnorderedDontFold()); 17184 17759 17185 17760 RUN(testShuffleDoesntTrashCalleeSaves()); 17186 17761
Note:
See TracChangeset
for help on using the changeset viewer.