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

Side by Side Diff: runtime/vm/intermediate_language.cc

Issue 10875030: Add support for XMM registers in SSA code generation pipeline. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix a bug pointed out by Florian Created 8 years, 3 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 | « runtime/vm/intermediate_language.h ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/intermediate_language.h" 5 #include "vm/intermediate_language.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/dart_entry.h" 8 #include "vm/dart_entry.h"
9 #include "vm/flow_graph_allocator.h" 9 #include "vm/flow_graph_allocator.h"
10 #include "vm/flow_graph_builder.h" 10 #include "vm/flow_graph_builder.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 prev_instr->set_next(next_instr); 181 prev_instr->set_next(next_instr);
182 next_instr->set_previous(prev_instr); 182 next_instr->set_previous(prev_instr);
183 // Reset successor and previous instruction to indicate 183 // Reset successor and previous instruction to indicate
184 // that the instruction is removed from the graph. 184 // that the instruction is removed from the graph.
185 set_previous(NULL); 185 set_previous(NULL);
186 set_next(NULL); 186 set_next(NULL);
187 return return_previous ? prev_instr : next_instr; 187 return return_previous ? prev_instr : next_instr;
188 } 188 }
189 189
190 190
191 void BindInstr::InsertBefore(BindInstr* next) { 191 void BindInstr::InsertBefore(Instruction* next) {
192 ASSERT(previous_ == NULL); 192 ASSERT(previous_ == NULL);
193 ASSERT(next_ == NULL); 193 ASSERT(next_ == NULL);
194 next_ = next; 194 next_ = next;
195 previous_ = next->previous_; 195 previous_ = next->previous_;
196 next->previous_ = this; 196 next->previous_ = this;
197 previous_->next_ = this; 197 previous_->next_ = this;
198 } 198 }
199 199
200 200
201 void BindInstr::InsertAfter(Instruction* prev) {
202 ASSERT(previous_ == NULL);
203 ASSERT(next_ == NULL);
204 previous_ = prev;
205 next_ = prev->next_;
206 next_->previous_ = this;
207 previous_->next_ = this;
208 }
209
210
201 void ForwardInstructionIterator::RemoveCurrentFromGraph() { 211 void ForwardInstructionIterator::RemoveCurrentFromGraph() {
202 current_ = current_->RemoveFromGraph(true); // Set current_ to previous. 212 current_ = current_->RemoveFromGraph(true); // Set current_ to previous.
203 } 213 }
204 214
205 215
206 // Default implementation of visiting basic blocks. Can be overridden. 216 // Default implementation of visiting basic blocks. Can be overridden.
207 void FlowGraphVisitor::VisitBlocks() { 217 void FlowGraphVisitor::VisitBlocks() {
208 ASSERT(current_iterator_ == NULL); 218 ASSERT(current_iterator_ == NULL);
209 for (intptr_t i = 0; i < block_order_.length(); ++i) { 219 for (intptr_t i = 0; i < block_order_.length(); ++i) {
210 BlockEntryInstr* entry = block_order_[i]; 220 BlockEntryInstr* entry = block_order_[i];
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 RawAbstractType* BinaryDoubleOpComp::CompileType() const { 1027 RawAbstractType* BinaryDoubleOpComp::CompileType() const {
1018 return Type::DoubleInterface(); 1028 return Type::DoubleInterface();
1019 } 1029 }
1020 1030
1021 1031
1022 intptr_t BinaryDoubleOpComp::ResultCid() const { 1032 intptr_t BinaryDoubleOpComp::ResultCid() const {
1023 return kDoubleCid; 1033 return kDoubleCid;
1024 } 1034 }
1025 1035
1026 1036
1037 RawAbstractType* UnboxedDoubleBinaryOpComp::CompileType() const {
1038 return Type::DoubleInterface();
1039 }
1040
1041
1042 RawAbstractType* UnboxDoubleComp::CompileType() const {
1043 return Type::null();
1044 }
1045
1046
1047 intptr_t BoxDoubleComp::ResultCid() const {
1048 return kDoubleCid;
1049 }
1050
1051
1052 RawAbstractType* BoxDoubleComp::CompileType() const {
1053 return Type::DoubleInterface();
1054 }
1055
1056
1027 RawAbstractType* UnarySmiOpComp::CompileType() const { 1057 RawAbstractType* UnarySmiOpComp::CompileType() const {
1028 return Type::SmiType(); 1058 return Type::SmiType();
1029 } 1059 }
1030 1060
1031 1061
1032 RawAbstractType* NumberNegateComp::CompileType() const { 1062 RawAbstractType* NumberNegateComp::CompileType() const {
1033 // Implemented only for doubles. 1063 // Implemented only for doubles.
1034 return Type::DoubleInterface(); 1064 return Type::DoubleInterface();
1035 } 1065 }
1036 1066
(...skipping 11 matching lines...) Expand all
1048 RawAbstractType* CheckClassComp::CompileType() const { 1078 RawAbstractType* CheckClassComp::CompileType() const {
1049 return AbstractType::null(); 1079 return AbstractType::null();
1050 } 1080 }
1051 1081
1052 1082
1053 RawAbstractType* CheckSmiComp::CompileType() const { 1083 RawAbstractType* CheckSmiComp::CompileType() const {
1054 return AbstractType::null(); 1084 return AbstractType::null();
1055 } 1085 }
1056 1086
1057 1087
1088 RawAbstractType* CheckEitherNonSmiComp::CompileType() const {
1089 return AbstractType::null();
1090 }
1091
1092
1058 // Optimizations that eliminate or simplify individual computations. 1093 // Optimizations that eliminate or simplify individual computations.
1059 Definition* Computation::TryReplace(BindInstr* instr) const { 1094 Definition* Computation::TryReplace(BindInstr* instr) const {
1060 return instr; 1095 return instr;
1061 } 1096 }
1062 1097
1063 1098
1064 Definition* StrictCompareComp::TryReplace(BindInstr* instr) const { 1099 Definition* StrictCompareComp::TryReplace(BindInstr* instr) const {
1065 UseVal* left_use = left()->AsUse(); 1100 UseVal* left_use = left()->AsUse();
1066 UseVal* right_use = right()->AsUse(); 1101 UseVal* right_use = right()->AsUse();
1067 if ((right_use == NULL) || (left_use == NULL)) return instr; 1102 if ((right_use == NULL) || (left_use == NULL)) return instr;
(...skipping 15 matching lines...) Expand all
1083 } 1118 }
1084 return instr; 1119 return instr;
1085 } 1120 }
1086 1121
1087 1122
1088 Definition* CheckSmiComp::TryReplace(BindInstr* instr) const { 1123 Definition* CheckSmiComp::TryReplace(BindInstr* instr) const {
1089 return (value()->ResultCid() == kSmiCid) ? NULL : instr; 1124 return (value()->ResultCid() == kSmiCid) ? NULL : instr;
1090 } 1125 }
1091 1126
1092 1127
1128 Definition* CheckEitherNonSmiComp::TryReplace(BindInstr* instr) const {
1129 if ((left()->ResultCid() == kDoubleCid) ||
1130 (right()->ResultCid() == kDoubleCid)) {
1131 return NULL; // Remove from the graph.
1132 }
1133 return instr;
1134 }
1135
1136
1093 // Shared code generation methods (EmitNativeCode, MakeLocationSummary, and 1137 // Shared code generation methods (EmitNativeCode, MakeLocationSummary, and
1094 // PrepareEntry). Only assembly code that can be shared across all architectures 1138 // PrepareEntry). Only assembly code that can be shared across all architectures
1095 // can be used. Machine specific register allocation and code generation 1139 // can be used. Machine specific register allocation and code generation
1096 // is located in intermediate_language_<arch>.cc 1140 // is located in intermediate_language_<arch>.cc
1097 1141
1098 #define __ compiler->assembler()-> 1142 #define __ compiler->assembler()->
1099 1143
1100 void GraphEntryInstr::PrepareEntry(FlowGraphCompiler* compiler) { 1144 void GraphEntryInstr::PrepareEntry(FlowGraphCompiler* compiler) {
1101 // Nothing to do. 1145 // Nothing to do.
1102 } 1146 }
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 ? UseDefinition(values()[i]->AsUse()->definition()) 1578 ? UseDefinition(values()[i]->AsUse()->definition())
1535 : val); 1579 : val);
1536 } 1580 }
1537 return copy; 1581 return copy;
1538 } 1582 }
1539 1583
1540 1584
1541 #undef __ 1585 #undef __
1542 1586
1543 } // namespace dart 1587 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698