comparison src/share/vm/opto/matcher.cpp @ 1061:09572fede9d1

6896370: CTW fails share/vm/opto/matcher.cpp:1475 "duplicating node that's already been matched" Summary: Move DecodeN code outside the memory nodes only code. Reviewed-by: never
author kvn
date Wed, 04 Nov 2009 14:16:20 -0800
parents 62001a362ce9
children 97125851f396
comparison
equal deleted inserted replaced
1060:323bd24c6520 1061:09572fede9d1
1830 break; 1830 break;
1831 } 1831 }
1832 case Op_Binary: // These are introduced in the Post_Visit state. 1832 case Op_Binary: // These are introduced in the Post_Visit state.
1833 ShouldNotReachHere(); 1833 ShouldNotReachHere();
1834 break; 1834 break;
1835 case Op_StoreB: // Do match these, despite no ideal reg
1836 case Op_StoreC:
1837 case Op_StoreCM:
1838 case Op_StoreD:
1839 case Op_StoreF:
1840 case Op_StoreI:
1841 case Op_StoreL:
1842 case Op_StoreP:
1843 case Op_StoreN:
1844 case Op_Store16B:
1845 case Op_Store8B:
1846 case Op_Store4B:
1847 case Op_Store8C:
1848 case Op_Store4C:
1849 case Op_Store2C:
1850 case Op_Store4I:
1851 case Op_Store2I:
1852 case Op_Store2L:
1853 case Op_Store4F:
1854 case Op_Store2F:
1855 case Op_Store2D:
1856 case Op_ClearArray: 1835 case Op_ClearArray:
1857 case Op_SafePoint: 1836 case Op_SafePoint:
1858 mem_op = true; 1837 mem_op = true;
1859 break; 1838 break;
1860 case Op_LoadB: 1839 default:
1861 case Op_LoadUS: 1840 if( n->is_Store() ) {
1862 case Op_LoadD: 1841 // Do match stores, despite no ideal reg
1863 case Op_LoadF: 1842 mem_op = true;
1864 case Op_LoadI: 1843 break;
1865 case Op_LoadKlass: 1844 }
1866 case Op_LoadNKlass: 1845 if( n->is_Mem() ) { // Loads and LoadStores
1867 case Op_LoadL: 1846 mem_op = true;
1868 case Op_LoadS: 1847 // Loads must be root of match tree due to prior load conflict
1869 case Op_LoadP: 1848 if( C->subsume_loads() == false )
1870 case Op_LoadN: 1849 set_shared(n);
1871 case Op_LoadRange:
1872 case Op_LoadD_unaligned:
1873 case Op_LoadL_unaligned:
1874 case Op_Load16B:
1875 case Op_Load8B:
1876 case Op_Load4B:
1877 case Op_Load4C:
1878 case Op_Load2C:
1879 case Op_Load8C:
1880 case Op_Load8S:
1881 case Op_Load4S:
1882 case Op_Load2S:
1883 case Op_Load4I:
1884 case Op_Load2I:
1885 case Op_Load2L:
1886 case Op_Load4F:
1887 case Op_Load2F:
1888 case Op_Load2D:
1889 mem_op = true;
1890 // Must be root of match tree due to prior load conflict
1891 if( C->subsume_loads() == false ) {
1892 set_shared(n);
1893 } 1850 }
1894 // Fall into default case 1851 // Fall into default case
1895 default:
1896 if( !n->ideal_reg() ) 1852 if( !n->ideal_reg() )
1897 set_dontcare(n); // Unmatchable Nodes 1853 set_dontcare(n); // Unmatchable Nodes
1898 } // end_switch 1854 } // end_switch
1899 1855
1900 for(int i = n->req() - 1; i >= 0; --i) { // For my children 1856 for(int i = n->req() - 1; i >= 0; --i) { // For my children
1911 if( _must_clone[mop] ) { 1867 if( _must_clone[mop] ) {
1912 mstack.push(m, Visit); 1868 mstack.push(m, Visit);
1913 continue; // for(int i = ...) 1869 continue; // for(int i = ...)
1914 } 1870 }
1915 1871
1916 // Clone addressing expressions as they are "free" in most instructions 1872 if( mop == Op_AddP && m->in(AddPNode::Base)->Opcode() == Op_DecodeN ) {
1873 // Bases used in addresses must be shared but since
1874 // they are shared through a DecodeN they may appear
1875 // to have a single use so force sharing here.
1876 set_shared(m->in(AddPNode::Base)->in(1));
1877 }
1878
1879 // Clone addressing expressions as they are "free" in memory access instructions
1917 if( mem_op && i == MemNode::Address && mop == Op_AddP ) { 1880 if( mem_op && i == MemNode::Address && mop == Op_AddP ) {
1918 if (m->in(AddPNode::Base)->Opcode() == Op_DecodeN) {
1919 // Bases used in addresses must be shared but since
1920 // they are shared through a DecodeN they may appear
1921 // to have a single use so force sharing here.
1922 set_shared(m->in(AddPNode::Base)->in(1));
1923 }
1924
1925 // Some inputs for address expression are not put on stack 1881 // Some inputs for address expression are not put on stack
1926 // to avoid marking them as shared and forcing them into register 1882 // to avoid marking them as shared and forcing them into register
1927 // if they are used only in address expressions. 1883 // if they are used only in address expressions.
1928 // But they should be marked as shared if there are other uses 1884 // But they should be marked as shared if there are other uses
1929 // besides address expressions. 1885 // besides address expressions.