comparison src/share/vm/opto/macro.cpp @ 4778:35acf8f0a2e4

7128352: assert(obj_node == obj) failed Summary: Compare uncasted object nodes. Reviewed-by: never
author kvn
date Tue, 10 Jan 2012 18:05:38 -0800
parents e9a5e0a812c8
children b0ff910edfc9
comparison
equal deleted inserted replaced
4777:e9a5e0a812c8 4778:35acf8f0a2e4
1816 Node* u = oldbox->raw_out(i); 1816 Node* u = oldbox->raw_out(i);
1817 if (u->is_AbstractLock() && !u->as_AbstractLock()->is_non_esc_obj()) { 1817 if (u->is_AbstractLock() && !u->as_AbstractLock()->is_non_esc_obj()) {
1818 AbstractLockNode* alock = u->as_AbstractLock(); 1818 AbstractLockNode* alock = u->as_AbstractLock();
1819 // Check lock's box since box could be referenced by Lock's debug info. 1819 // Check lock's box since box could be referenced by Lock's debug info.
1820 if (alock->box_node() == oldbox) { 1820 if (alock->box_node() == oldbox) {
1821 assert(alock->obj_node() == obj, ""); 1821 assert(alock->obj_node()->eqv_uncast(obj), "");
1822 // Mark eliminated all related locks and unlocks. 1822 // Mark eliminated all related locks and unlocks.
1823 alock->set_non_esc_obj(); 1823 alock->set_non_esc_obj();
1824 } 1824 }
1825 } 1825 }
1826 } 1826 }
1843 bool next_edge = true; 1843 bool next_edge = true;
1844 1844
1845 Node* u = oldbox->raw_out(i); 1845 Node* u = oldbox->raw_out(i);
1846 if (u->is_AbstractLock()) { 1846 if (u->is_AbstractLock()) {
1847 AbstractLockNode* alock = u->as_AbstractLock(); 1847 AbstractLockNode* alock = u->as_AbstractLock();
1848 if (alock->obj_node() == obj && alock->box_node() == oldbox) { 1848 if (alock->box_node() == oldbox && alock->obj_node()->eqv_uncast(obj)) {
1849 // Replace Box and mark eliminated all related locks and unlocks. 1849 // Replace Box and mark eliminated all related locks and unlocks.
1850 alock->set_non_esc_obj(); 1850 alock->set_non_esc_obj();
1851 _igvn.hash_delete(alock); 1851 _igvn.hash_delete(alock);
1852 alock->set_box_node(newbox); 1852 alock->set_box_node(newbox);
1853 _igvn._worklist.push(alock); 1853 _igvn._worklist.push(alock);
1854 next_edge = false; 1854 next_edge = false;
1855 } 1855 }
1856 } 1856 }
1857 if (u->is_FastLock() && u->as_FastLock()->obj_node() == obj) { 1857 if (u->is_FastLock() && u->as_FastLock()->obj_node()->eqv_uncast(obj)) {
1858 FastLockNode* flock = u->as_FastLock(); 1858 FastLockNode* flock = u->as_FastLock();
1859 assert(flock->box_node() == oldbox, "sanity"); 1859 assert(flock->box_node() == oldbox, "sanity");
1860 _igvn.hash_delete(flock); 1860 _igvn.hash_delete(flock);
1861 flock->set_box_node(newbox); 1861 flock->set_box_node(newbox);
1862 _igvn._worklist.push(flock); 1862 _igvn._worklist.push(flock);
1873 int num_mon = jvms->nof_monitors(); 1873 int num_mon = jvms->nof_monitors();
1874 // Loop over monitors 1874 // Loop over monitors
1875 for (int idx = 0; idx < num_mon; idx++) { 1875 for (int idx = 0; idx < num_mon; idx++) {
1876 Node* obj_node = sfn->monitor_obj(jvms, idx); 1876 Node* obj_node = sfn->monitor_obj(jvms, idx);
1877 Node* box_node = sfn->monitor_box(jvms, idx); 1877 Node* box_node = sfn->monitor_box(jvms, idx);
1878 if (box_node == oldbox && obj_node == obj) { 1878 if (box_node == oldbox && obj_node->eqv_uncast(obj)) {
1879 int j = jvms->monitor_box_offset(idx); 1879 int j = jvms->monitor_box_offset(idx);
1880 _igvn.hash_delete(u); 1880 _igvn.hash_delete(u);
1881 u->set_req(j, newbox); 1881 u->set_req(j, newbox);
1882 _igvn._worklist.push(u); 1882 _igvn._worklist.push(u);
1883 next_edge = false; 1883 next_edge = false;
1910 Node* u = box_node->raw_out(i); 1910 Node* u = box_node->raw_out(i);
1911 if (u->is_AbstractLock()) { 1911 if (u->is_AbstractLock()) {
1912 alock = u->as_AbstractLock(); 1912 alock = u->as_AbstractLock();
1913 if (alock->box_node() == box_node) { 1913 if (alock->box_node() == box_node) {
1914 // Verify that this Box is referenced only by related locks. 1914 // Verify that this Box is referenced only by related locks.
1915 assert(alock->obj_node() == obj, ""); 1915 assert(alock->obj_node()->eqv_uncast(obj), "");
1916 // Mark all related locks and unlocks. 1916 // Mark all related locks and unlocks.
1917 alock->set_nested(); 1917 alock->set_nested();
1918 } 1918 }
1919 } 1919 }
1920 } 1920 }
1929 // Look for all locks of this object and mark them and 1929 // Look for all locks of this object and mark them and
1930 // corresponding BoxLock nodes as eliminated. 1930 // corresponding BoxLock nodes as eliminated.
1931 Node* obj = alock->obj_node(); 1931 Node* obj = alock->obj_node();
1932 for (uint j = 0; j < obj->outcnt(); j++) { 1932 for (uint j = 0; j < obj->outcnt(); j++) {
1933 Node* o = obj->raw_out(j); 1933 Node* o = obj->raw_out(j);
1934 if (o->is_AbstractLock() && o->as_AbstractLock()->obj_node() == obj) { 1934 if (o->is_AbstractLock() &&
1935 o->as_AbstractLock()->obj_node()->eqv_uncast(obj)) {
1935 alock = o->as_AbstractLock(); 1936 alock = o->as_AbstractLock();
1936 Node* box = alock->box_node(); 1937 Node* box = alock->box_node();
1937 // Replace old box node with new eliminated box for all users 1938 // Replace old box node with new eliminated box for all users
1938 // of the same object and mark related locks as eliminated. 1939 // of the same object and mark related locks as eliminated.
1939 mark_eliminated_box(box, obj); 1940 mark_eliminated_box(box, obj);