OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/base/platform/elapsed-timer.h" | 5 #include "src/base/platform/elapsed-timer.h" |
6 #include "src/signature.h" | 6 #include "src/signature.h" |
7 | 7 |
8 #include "src/bit-vector.h" | 8 #include "src/bit-vector.h" |
9 #include "src/flags.h" | 9 #include "src/flags.h" |
10 #include "src/handles.h" | 10 #include "src/handles.h" |
(...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 // False expr done. | 957 // False expr done. |
958 IfEnv* env = &ifs_.back(); | 958 IfEnv* env = &ifs_.back(); |
959 MergeIntoProduction(p, env->merge_env, p->last()); | 959 MergeIntoProduction(p, env->merge_env, p->last()); |
960 SetEnv("if_else:merge", env->merge_env); | 960 SetEnv("if_else:merge", env->merge_env); |
961 ifs_.pop_back(); | 961 ifs_.pop_back(); |
962 } | 962 } |
963 break; | 963 break; |
964 } | 964 } |
965 case kExprSelect: { | 965 case kExprSelect: { |
966 if (p->index == 1) { | 966 if (p->index == 1) { |
967 // Condition done. | |
968 TypeCheckLast(p, kAstI32); | |
969 } else if (p->index == 2) { | |
970 // True expression done. | 967 // True expression done. |
971 p->tree->type = p->last()->type; | 968 p->tree->type = p->last()->type; |
972 if (p->tree->type == kAstStmt) { | 969 if (p->tree->type == kAstStmt) { |
973 error(p->pc(), p->tree->children[1]->pc, | 970 error(p->pc(), p->tree->children[1]->pc, |
974 "select operand should be expression"); | 971 "select operand should be expression"); |
975 } | 972 } |
| 973 } else if (p->index == 2) { |
| 974 // False expression done. |
| 975 TypeCheckLast(p, p->tree->type); |
976 } else { | 976 } else { |
977 // False expression done. | 977 // Condition done. |
978 DCHECK(p->done()); | 978 DCHECK(p->done()); |
979 TypeCheckLast(p, p->tree->type); | 979 TypeCheckLast(p, kAstI32); |
980 if (build()) { | 980 if (build()) { |
981 TFNode* controls[2]; | 981 TFNode* controls[2]; |
982 builder_->Branch(p->tree->children[0]->node, &controls[0], | 982 builder_->Branch(p->tree->children[2]->node, &controls[0], |
983 &controls[1]); | 983 &controls[1]); |
984 TFNode* merge = builder_->Merge(2, controls); | 984 TFNode* merge = builder_->Merge(2, controls); |
985 TFNode* vals[2] = {p->tree->children[1]->node, | 985 TFNode* vals[2] = {p->tree->children[0]->node, |
986 p->tree->children[2]->node}; | 986 p->tree->children[1]->node}; |
987 TFNode* phi = builder_->Phi(p->tree->type, 2, vals, merge); | 987 TFNode* phi = builder_->Phi(p->tree->type, 2, vals, merge); |
988 p->tree->node = phi; | 988 p->tree->node = phi; |
989 ssa_env_->control = merge; | 989 ssa_env_->control = merge; |
990 } | 990 } |
991 } | 991 } |
992 break; | 992 break; |
993 } | 993 } |
994 case kExprBr: { | 994 case kExprBr: { |
995 BreakDepthOperand operand(this, p->pc()); | 995 BreakDepthOperand operand(this, p->pc()); |
996 CHECK(Validate(p->pc(), operand, blocks_)); | 996 CHECK(Validate(p->pc(), operand, blocks_)); |
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 | 1654 |
1655 BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, FunctionEnv* env, | 1655 BitVector* AnalyzeLoopAssignmentForTesting(Zone* zone, FunctionEnv* env, |
1656 const byte* start, const byte* end) { | 1656 const byte* start, const byte* end) { |
1657 LoopAssignmentAnalyzer analyzer(zone, env); | 1657 LoopAssignmentAnalyzer analyzer(zone, env); |
1658 return analyzer.Analyze(start, end); | 1658 return analyzer.Analyze(start, end); |
1659 } | 1659 } |
1660 | 1660 |
1661 } // namespace wasm | 1661 } // namespace wasm |
1662 } // namespace internal | 1662 } // namespace internal |
1663 } // namespace v8 | 1663 } // namespace v8 |
OLD | NEW |