Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: src/hydrogen.cc

Issue 6471020: Fix a representation change bug in the Hydrogen graph construction. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge/build/ia32
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1795 matching lines...) Expand 10 before | Expand all | Expand 10 after
1806 } 1806 }
1807 } 1807 }
1808 1808
1809 1809
1810 void HGraph::InsertRepresentationChangeForUse(HValue* value, 1810 void HGraph::InsertRepresentationChangeForUse(HValue* value,
1811 HValue* use, 1811 HValue* use,
1812 Representation to, 1812 Representation to,
1813 bool is_truncating) { 1813 bool is_truncating) {
1814 // Insert the representation change right before its use. For phi-uses we 1814 // Insert the representation change right before its use. For phi-uses we
1815 // insert at the end of the corresponding predecessor. 1815 // insert at the end of the corresponding predecessor.
1816 HBasicBlock* insert_block = use->block(); 1816 HInstruction* next = NULL;
1817 if (use->IsPhi()) { 1817 if (use->IsPhi()) {
1818 int index = 0; 1818 int index = 0;
1819 while (use->OperandAt(index) != value) ++index; 1819 while (use->OperandAt(index) != value) ++index;
1820 insert_block = insert_block->predecessors()->at(index); 1820 next = use->block()->predecessors()->at(index)->end();
1821 } else {
1822 next = HInstruction::cast(use);
1821 } 1823 }
1822 1824
1823 HInstruction* next = (insert_block == use->block())
1824 ? HInstruction::cast(use)
1825 : insert_block->end();
1826
1827 // For constants we try to make the representation change at compile 1825 // For constants we try to make the representation change at compile
1828 // time. When a representation change is not possible without loss of 1826 // time. When a representation change is not possible without loss of
1829 // information we treat constants like normal instructions and insert the 1827 // information we treat constants like normal instructions and insert the
1830 // change instructions for them. 1828 // change instructions for them.
1831 HInstruction* new_value = NULL; 1829 HInstruction* new_value = NULL;
1832 if (value->IsConstant()) { 1830 if (value->IsConstant()) {
1833 HConstant* constant = HConstant::cast(value); 1831 HConstant* constant = HConstant::cast(value);
1834 // Try to create a new copy of the constant with the new representation. 1832 // Try to create a new copy of the constant with the new representation.
1835 new_value = is_truncating 1833 new_value = is_truncating
1836 ? constant->CopyToTruncatedInt32() 1834 ? constant->CopyToTruncatedInt32()
(...skipping 4141 matching lines...) Expand 10 before | Expand all | Expand 10 after
5978 } 5976 }
5979 } 5977 }
5980 5978
5981 #ifdef DEBUG 5979 #ifdef DEBUG
5982 if (graph_ != NULL) graph_->Verify(); 5980 if (graph_ != NULL) graph_->Verify();
5983 if (allocator_ != NULL) allocator_->Verify(); 5981 if (allocator_ != NULL) allocator_->Verify();
5984 #endif 5982 #endif
5985 } 5983 }
5986 5984
5987 } } // namespace v8::internal 5985 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698