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

Side by Side Diff: src/compiler/effect-control-linearizer.cc

Issue 2144603002: [turbofan] Remove some dead code from the EffectControlLinearizer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 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
« 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 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/compiler/effect-control-linearizer.h" 5 #include "src/compiler/effect-control-linearizer.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/compiler/access-builder.h" 8 #include "src/compiler/access-builder.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/linkage.h" 10 #include "src/compiler/linkage.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 // the effect uses to the effect input. 333 // the effect uses to the effect input.
334 return RemoveRegionNode(node); 334 return RemoveRegionNode(node);
335 } 335 }
336 336
337 // Special treatment for checkpoint nodes. 337 // Special treatment for checkpoint nodes.
338 if (node->opcode() == IrOpcode::kCheckpoint) { 338 if (node->opcode() == IrOpcode::kCheckpoint) {
339 // Unlink the check point; effect uses will be updated to the incoming 339 // Unlink the check point; effect uses will be updated to the incoming
340 // effect that is passed. The frame state is preserved for lowering. 340 // effect that is passed. The frame state is preserved for lowering.
341 DCHECK_EQ(RegionObservability::kObservable, region_observability_); 341 DCHECK_EQ(RegionObservability::kObservable, region_observability_);
342 *frame_state = NodeProperties::GetFrameStateInput(node, 0); 342 *frame_state = NodeProperties::GetFrameStateInput(node, 0);
343 node->TrimInputCount(0);
344 return; 343 return;
345 } 344 }
346 345
347 if (node->opcode() == IrOpcode::kIfSuccess) { 346 if (node->opcode() == IrOpcode::kIfSuccess) {
348 // We always schedule IfSuccess with its call, so skip it here. 347 // We always schedule IfSuccess with its call, so skip it here.
349 DCHECK_EQ(IrOpcode::kCall, node->InputAt(0)->opcode()); 348 DCHECK_EQ(IrOpcode::kCall, node->InputAt(0)->opcode());
350 // The IfSuccess node should not belong to an exceptional call node 349 // The IfSuccess node should not belong to an exceptional call node
351 // because such IfSuccess nodes should only start a basic block (and 350 // because such IfSuccess nodes should only start a basic block (and
352 // basic block start nodes are not handled in the ProcessNode method). 351 // basic block start nodes are not handled in the ProcessNode method).
353 DCHECK(!NodeProperties::IsExceptionalCall(node->InputAt(0))); 352 DCHECK(!NodeProperties::IsExceptionalCall(node->InputAt(0)));
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 EffectControlLinearizer::ValueEffectControl 797 EffectControlLinearizer::ValueEffectControl
799 EffectControlLinearizer::LowerCheckBounds(Node* node, Node* frame_state, 798 EffectControlLinearizer::LowerCheckBounds(Node* node, Node* frame_state,
800 Node* effect, Node* control) { 799 Node* effect, Node* control) {
801 Node* index = node->InputAt(0); 800 Node* index = node->InputAt(0);
802 Node* limit = node->InputAt(1); 801 Node* limit = node->InputAt(1);
803 802
804 Node* check = graph()->NewNode(machine()->Uint32LessThan(), index, limit); 803 Node* check = graph()->NewNode(machine()->Uint32LessThan(), index, limit);
805 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check, 804 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check,
806 frame_state, effect, control); 805 frame_state, effect, control);
807 806
808 // Make sure the lowered node does not appear in any use lists.
809 node->TrimInputCount(0);
810
811 return ValueEffectControl(index, effect, control); 807 return ValueEffectControl(index, effect, control);
812 } 808 }
813 809
814 EffectControlLinearizer::ValueEffectControl 810 EffectControlLinearizer::ValueEffectControl
815 EffectControlLinearizer::LowerCheckNumber(Node* node, Node* frame_state, 811 EffectControlLinearizer::LowerCheckNumber(Node* node, Node* frame_state,
816 Node* effect, Node* control) { 812 Node* effect, Node* control) {
817 Node* value = node->InputAt(0); 813 Node* value = node->InputAt(0);
818 814
819 Node* check0 = ObjectIsSmi(value); 815 Node* check0 = ObjectIsSmi(value);
820 Node* branch0 = 816 Node* branch0 =
(...skipping 10 matching lines...) Expand all
831 value, efalse0, if_false0); 827 value, efalse0, if_false0);
832 Node* check1 = graph()->NewNode(machine()->WordEqual(), value_map, 828 Node* check1 = graph()->NewNode(machine()->WordEqual(), value_map,
833 jsgraph()->HeapNumberMapConstant()); 829 jsgraph()->HeapNumberMapConstant());
834 if_false0 = efalse0 = graph()->NewNode(common()->DeoptimizeUnless(), check1, 830 if_false0 = efalse0 = graph()->NewNode(common()->DeoptimizeUnless(), check1,
835 frame_state, efalse0, if_false0); 831 frame_state, efalse0, if_false0);
836 } 832 }
837 833
838 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0); 834 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0);
839 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control); 835 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control);
840 836
841 // Make sure the lowered node does not appear in any use lists.
842 node->TrimInputCount(0);
843
844 return ValueEffectControl(value, effect, control); 837 return ValueEffectControl(value, effect, control);
845 } 838 }
846 839
847 EffectControlLinearizer::ValueEffectControl 840 EffectControlLinearizer::ValueEffectControl
848 EffectControlLinearizer::LowerCheckIf(Node* node, Node* frame_state, 841 EffectControlLinearizer::LowerCheckIf(Node* node, Node* frame_state,
849 Node* effect, Node* control) { 842 Node* effect, Node* control) {
850 Node* value = node->InputAt(0); 843 Node* value = node->InputAt(0);
851 844
852 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), value, 845 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), value,
853 frame_state, effect, control); 846 frame_state, effect, control);
854 847
855 // Make sure the lowered node does not appear in any use lists.
856 node->TrimInputCount(0);
857
858 return ValueEffectControl(value, effect, control); 848 return ValueEffectControl(value, effect, control);
859 } 849 }
860 850
861 EffectControlLinearizer::ValueEffectControl 851 EffectControlLinearizer::ValueEffectControl
862 EffectControlLinearizer::LowerCheckTaggedPointer(Node* node, Node* frame_state, 852 EffectControlLinearizer::LowerCheckTaggedPointer(Node* node, Node* frame_state,
863 Node* effect, Node* control) { 853 Node* effect, Node* control) {
864 Node* value = node->InputAt(0); 854 Node* value = node->InputAt(0);
865 855
866 Node* check = ObjectIsSmi(value); 856 Node* check = ObjectIsSmi(value);
867 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check, 857 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check,
868 frame_state, effect, control); 858 frame_state, effect, control);
869 859
870 // Make sure the lowered node does not appear in any use lists.
871 node->TrimInputCount(0);
872
873 return ValueEffectControl(value, effect, control); 860 return ValueEffectControl(value, effect, control);
874 } 861 }
875 862
876 EffectControlLinearizer::ValueEffectControl 863 EffectControlLinearizer::ValueEffectControl
877 EffectControlLinearizer::LowerCheckTaggedSigned(Node* node, Node* frame_state, 864 EffectControlLinearizer::LowerCheckTaggedSigned(Node* node, Node* frame_state,
878 Node* effect, Node* control) { 865 Node* effect, Node* control) {
879 Node* value = node->InputAt(0); 866 Node* value = node->InputAt(0);
880 867
881 Node* check = ObjectIsSmi(value); 868 Node* check = ObjectIsSmi(value);
882 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check, 869 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check,
883 frame_state, effect, control); 870 frame_state, effect, control);
884 871
885 // Make sure the lowered node does not appear in any use lists.
886 node->TrimInputCount(0);
887
888 return ValueEffectControl(value, effect, control); 872 return ValueEffectControl(value, effect, control);
889 } 873 }
890 874
891 EffectControlLinearizer::ValueEffectControl 875 EffectControlLinearizer::ValueEffectControl
892 EffectControlLinearizer::LowerCheckedInt32Add(Node* node, Node* frame_state, 876 EffectControlLinearizer::LowerCheckedInt32Add(Node* node, Node* frame_state,
893 Node* effect, Node* control) { 877 Node* effect, Node* control) {
894 Node* lhs = node->InputAt(0); 878 Node* lhs = node->InputAt(0);
895 Node* rhs = node->InputAt(1); 879 Node* rhs = node->InputAt(1);
896 880
897 Node* value = 881 Node* value =
898 graph()->NewNode(machine()->Int32AddWithOverflow(), lhs, rhs, control); 882 graph()->NewNode(machine()->Int32AddWithOverflow(), lhs, rhs, control);
899 883
900 Node* check = graph()->NewNode(common()->Projection(1), value, control); 884 Node* check = graph()->NewNode(common()->Projection(1), value, control);
901 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check, 885 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check,
902 frame_state, effect, control); 886 frame_state, effect, control);
903 887
904 value = graph()->NewNode(common()->Projection(0), value, control); 888 value = graph()->NewNode(common()->Projection(0), value, control);
905 889
906 // Make sure the lowered node does not appear in any use lists.
907 node->TrimInputCount(0);
908
909 return ValueEffectControl(value, effect, control); 890 return ValueEffectControl(value, effect, control);
910 } 891 }
911 892
912 EffectControlLinearizer::ValueEffectControl 893 EffectControlLinearizer::ValueEffectControl
913 EffectControlLinearizer::LowerCheckedInt32Sub(Node* node, Node* frame_state, 894 EffectControlLinearizer::LowerCheckedInt32Sub(Node* node, Node* frame_state,
914 Node* effect, Node* control) { 895 Node* effect, Node* control) {
915 Node* lhs = node->InputAt(0); 896 Node* lhs = node->InputAt(0);
916 Node* rhs = node->InputAt(1); 897 Node* rhs = node->InputAt(1);
917 898
918 Node* value = 899 Node* value =
919 graph()->NewNode(machine()->Int32SubWithOverflow(), lhs, rhs, control); 900 graph()->NewNode(machine()->Int32SubWithOverflow(), lhs, rhs, control);
920 901
921 Node* check = graph()->NewNode(common()->Projection(1), value, control); 902 Node* check = graph()->NewNode(common()->Projection(1), value, control);
922 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check, 903 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check,
923 frame_state, effect, control); 904 frame_state, effect, control);
924 905
925 value = graph()->NewNode(common()->Projection(0), value, control); 906 value = graph()->NewNode(common()->Projection(0), value, control);
926 907
927 // Make sure the lowered node does not appear in any use lists.
928 node->TrimInputCount(0);
929
930 return ValueEffectControl(value, effect, control); 908 return ValueEffectControl(value, effect, control);
931 } 909 }
932 910
933 EffectControlLinearizer::ValueEffectControl 911 EffectControlLinearizer::ValueEffectControl
934 EffectControlLinearizer::LowerCheckedInt32Div(Node* node, Node* frame_state, 912 EffectControlLinearizer::LowerCheckedInt32Div(Node* node, Node* frame_state,
935 Node* effect, Node* control) { 913 Node* effect, Node* control) {
936 Node* zero = jsgraph()->Int32Constant(0); 914 Node* zero = jsgraph()->Int32Constant(0);
937 Node* minusone = jsgraph()->Int32Constant(-1); 915 Node* minusone = jsgraph()->Int32Constant(-1);
938 Node* minint = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::min()); 916 Node* minint = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::min());
939 917
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), vtrue0, 977 graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), vtrue0,
1000 vfalse0, control); 978 vfalse0, control);
1001 979
1002 // Check if the remainder is non-zero. 980 // Check if the remainder is non-zero.
1003 Node* check = 981 Node* check =
1004 graph()->NewNode(machine()->Word32Equal(), lhs, 982 graph()->NewNode(machine()->Word32Equal(), lhs,
1005 graph()->NewNode(machine()->Int32Mul(), rhs, value)); 983 graph()->NewNode(machine()->Int32Mul(), rhs, value));
1006 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check, 984 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), check,
1007 frame_state, effect, control); 985 frame_state, effect, control);
1008 986
1009 // Make sure the lowered node does not appear in any use lists.
1010 node->TrimInputCount(0);
1011
1012 return ValueEffectControl(value, effect, control); 987 return ValueEffectControl(value, effect, control);
1013 } 988 }
1014 989
1015 EffectControlLinearizer::ValueEffectControl 990 EffectControlLinearizer::ValueEffectControl
1016 EffectControlLinearizer::LowerCheckedInt32Mod(Node* node, Node* frame_state, 991 EffectControlLinearizer::LowerCheckedInt32Mod(Node* node, Node* frame_state,
1017 Node* effect, Node* control) { 992 Node* effect, Node* control) {
1018 Node* zero = jsgraph()->Int32Constant(0); 993 Node* zero = jsgraph()->Int32Constant(0);
1019 Node* minusone = jsgraph()->Int32Constant(-1); 994 Node* minusone = jsgraph()->Int32Constant(-1);
1020 Node* minint = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::min()); 995 Node* minint = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::min());
1021 996
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 if_false0 = efalse0 = graph()->NewNode(common()->DeoptimizeIf(), check, 1050 if_false0 = efalse0 = graph()->NewNode(common()->DeoptimizeIf(), check,
1076 frame_state, efalse0, if_false0); 1051 frame_state, efalse0, if_false0);
1077 } 1052 }
1078 1053
1079 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0); 1054 control = graph()->NewNode(common()->Merge(2), if_true0, if_false0);
1080 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control); 1055 effect = graph()->NewNode(common()->EffectPhi(2), etrue0, efalse0, control);
1081 Node* value = 1056 Node* value =
1082 graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), vtrue0, 1057 graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), vtrue0,
1083 vfalse0, control); 1058 vfalse0, control);
1084 1059
1085 // Make sure the lowered node does not appear in any use lists.
1086 node->TrimInputCount(0);
1087
1088 return ValueEffectControl(value, effect, control); 1060 return ValueEffectControl(value, effect, control);
1089 } 1061 }
1090 1062
1091 EffectControlLinearizer::ValueEffectControl 1063 EffectControlLinearizer::ValueEffectControl
1092 EffectControlLinearizer::LowerCheckedUint32ToInt32(Node* node, 1064 EffectControlLinearizer::LowerCheckedUint32ToInt32(Node* node,
1093 Node* frame_state, 1065 Node* frame_state,
1094 Node* effect, 1066 Node* effect,
1095 Node* control) { 1067 Node* control) {
1096 Node* value = node->InputAt(0); 1068 Node* value = node->InputAt(0);
1097 Node* max_int = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::max()); 1069 Node* max_int = jsgraph()->Int32Constant(std::numeric_limits<int32_t>::max());
1098 Node* is_safe = 1070 Node* is_safe =
1099 graph()->NewNode(machine()->Uint32LessThanOrEqual(), value, max_int); 1071 graph()->NewNode(machine()->Uint32LessThanOrEqual(), value, max_int);
1100 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), is_safe, 1072 control = effect = graph()->NewNode(common()->DeoptimizeUnless(), is_safe,
1101 frame_state, effect, control); 1073 frame_state, effect, control);
1102 1074
1103 // Make sure the lowered node does not appear in any use lists.
1104 node->TrimInputCount(0);
1105
1106 return ValueEffectControl(value, effect, control); 1075 return ValueEffectControl(value, effect, control);
1107 } 1076 }
1108 1077
1109 EffectControlLinearizer::ValueEffectControl 1078 EffectControlLinearizer::ValueEffectControl
1110 EffectControlLinearizer::BuildCheckedFloat64ToInt32(Node* value, 1079 EffectControlLinearizer::BuildCheckedFloat64ToInt32(Node* value,
1111 Node* frame_state, 1080 Node* frame_state,
1112 Node* effect, 1081 Node* effect,
1113 Node* control) { 1082 Node* control) {
1114 Node* value32 = graph()->NewNode(machine()->RoundFloat64ToInt32(), value); 1083 Node* value32 = graph()->NewNode(machine()->RoundFloat64ToInt32(), value);
1115 Node* check_same = graph()->NewNode( 1084 Node* check_same = graph()->NewNode(
(...skipping 29 matching lines...) Expand all
1145 return ValueEffectControl(value32, effect, merge); 1114 return ValueEffectControl(value32, effect, merge);
1146 } 1115 }
1147 1116
1148 EffectControlLinearizer::ValueEffectControl 1117 EffectControlLinearizer::ValueEffectControl
1149 EffectControlLinearizer::LowerCheckedFloat64ToInt32(Node* node, 1118 EffectControlLinearizer::LowerCheckedFloat64ToInt32(Node* node,
1150 Node* frame_state, 1119 Node* frame_state,
1151 Node* effect, 1120 Node* effect,
1152 Node* control) { 1121 Node* control) {
1153 Node* value = node->InputAt(0); 1122 Node* value = node->InputAt(0);
1154 1123
1155 // Make sure the lowered node does not appear in any use lists.
1156 node->TrimInputCount(0);
1157
1158 return BuildCheckedFloat64ToInt32(value, frame_state, effect, control); 1124 return BuildCheckedFloat64ToInt32(value, frame_state, effect, control);
1159 } 1125 }
1160 1126
1161 EffectControlLinearizer::ValueEffectControl 1127 EffectControlLinearizer::ValueEffectControl
1162 EffectControlLinearizer::LowerCheckedTaggedToInt32(Node* node, 1128 EffectControlLinearizer::LowerCheckedTaggedToInt32(Node* node,
1163 Node* frame_state, 1129 Node* frame_state,
1164 Node* effect, 1130 Node* effect,
1165 Node* control) { 1131 Node* control) {
1166 Node* value = node->InputAt(0); 1132 Node* value = node->InputAt(0);
1167 1133
(...skipping 27 matching lines...) Expand all
1195 if_false = state.control; 1161 if_false = state.control;
1196 efalse = state.effect; 1162 efalse = state.effect;
1197 vfalse = state.value; 1163 vfalse = state.value;
1198 } 1164 }
1199 1165
1200 control = graph()->NewNode(common()->Merge(2), if_true, if_false); 1166 control = graph()->NewNode(common()->Merge(2), if_true, if_false);
1201 effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control); 1167 effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control);
1202 value = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), 1168 value = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 2),
1203 vtrue, vfalse, control); 1169 vtrue, vfalse, control);
1204 1170
1205 // Make sure the lowered node does not appear in any use lists.
1206 node->TrimInputCount(0);
1207
1208 return ValueEffectControl(value, effect, control); 1171 return ValueEffectControl(value, effect, control);
1209 } 1172 }
1210 1173
1211 EffectControlLinearizer::ValueEffectControl 1174 EffectControlLinearizer::ValueEffectControl
1212 EffectControlLinearizer::BuildCheckedHeapNumberOrOddballToFloat64( 1175 EffectControlLinearizer::BuildCheckedHeapNumberOrOddballToFloat64(
1213 Node* value, Node* frame_state, Node* effect, Node* control) { 1176 Node* value, Node* frame_state, Node* effect, Node* control) {
1214 Node* value_map = effect = graph()->NewNode( 1177 Node* value_map = effect = graph()->NewNode(
1215 simplified()->LoadField(AccessBuilder::ForMap()), value, effect, control); 1178 simplified()->LoadField(AccessBuilder::ForMap()), value, effect, control);
1216 Node* check_number = graph()->NewNode(machine()->WordEqual(), value_map, 1179 Node* check_number = graph()->NewNode(machine()->WordEqual(), value_map,
1217 jsgraph()->HeapNumberMapConstant()); 1180 jsgraph()->HeapNumberMapConstant());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 value, frame_state, effect, if_false); 1232 value, frame_state, effect, if_false);
1270 1233
1271 Node* merge = 1234 Node* merge =
1272 graph()->NewNode(common()->Merge(2), if_true, number_state.control); 1235 graph()->NewNode(common()->Merge(2), if_true, number_state.control);
1273 Node* effect_phi = graph()->NewNode(common()->EffectPhi(2), etrue, 1236 Node* effect_phi = graph()->NewNode(common()->EffectPhi(2), etrue,
1274 number_state.effect, merge); 1237 number_state.effect, merge);
1275 Node* result = 1238 Node* result =
1276 graph()->NewNode(common()->Phi(MachineRepresentation::kFloat64, 2), vtrue, 1239 graph()->NewNode(common()->Phi(MachineRepresentation::kFloat64, 2), vtrue,
1277 number_state.value, merge); 1240 number_state.value, merge);
1278 1241
1279 // Make sure the lowered node does not appear in any use lists.
1280 node->TrimInputCount(0);
1281
1282 return ValueEffectControl(result, effect_phi, merge); 1242 return ValueEffectControl(result, effect_phi, merge);
1283 } 1243 }
1284 1244
1285 EffectControlLinearizer::ValueEffectControl 1245 EffectControlLinearizer::ValueEffectControl
1286 EffectControlLinearizer::LowerTruncateTaggedToWord32(Node* node, Node* effect, 1246 EffectControlLinearizer::LowerTruncateTaggedToWord32(Node* node, Node* effect,
1287 Node* control) { 1247 Node* control) {
1288 Node* value = node->InputAt(0); 1248 Node* value = node->InputAt(0);
1289 1249
1290 Node* check = ObjectIsSmi(value); 1250 Node* check = ObjectIsSmi(value);
1291 Node* branch = 1251 Node* branch =
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 // with allow-return-hole, we cannot do anything, so just deoptimize 1592 // with allow-return-hole, we cannot do anything, so just deoptimize
1633 // in case of the hole NaN (similar to Crankshaft). 1593 // in case of the hole NaN (similar to Crankshaft).
1634 Node* value = node->InputAt(0); 1594 Node* value = node->InputAt(0);
1635 Node* check = graph()->NewNode( 1595 Node* check = graph()->NewNode(
1636 machine()->Word32Equal(), 1596 machine()->Word32Equal(),
1637 graph()->NewNode(machine()->Float64ExtractHighWord32(), value), 1597 graph()->NewNode(machine()->Float64ExtractHighWord32(), value),
1638 jsgraph()->Int32Constant(kHoleNanUpper32)); 1598 jsgraph()->Int32Constant(kHoleNanUpper32));
1639 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check, 1599 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check,
1640 frame_state, effect, control); 1600 frame_state, effect, control);
1641 1601
1642 // Make sure the lowered node does not appear in any use lists.
1643 node->TrimInputCount(0);
1644
1645 return ValueEffectControl(value, effect, control); 1602 return ValueEffectControl(value, effect, control);
1646 } 1603 }
1647 1604
1648 EffectControlLinearizer::ValueEffectControl 1605 EffectControlLinearizer::ValueEffectControl
1649 EffectControlLinearizer::LowerCheckTaggedHole(Node* node, Node* frame_state, 1606 EffectControlLinearizer::LowerCheckTaggedHole(Node* node, Node* frame_state,
1650 Node* effect, Node* control) { 1607 Node* effect, Node* control) {
1651 CheckTaggedHoleMode mode = CheckTaggedHoleModeOf(node->op()); 1608 CheckTaggedHoleMode mode = CheckTaggedHoleModeOf(node->op());
1652 Node* value = node->InputAt(0); 1609 Node* value = node->InputAt(0);
1653 Node* check = graph()->NewNode(machine()->WordEqual(), value, 1610 Node* check = graph()->NewNode(machine()->WordEqual(), value,
1654 jsgraph()->TheHoleConstant()); 1611 jsgraph()->TheHoleConstant());
1655 switch (mode) { 1612 switch (mode) {
1656 case CheckTaggedHoleMode::kConvertHoleToUndefined: 1613 case CheckTaggedHoleMode::kConvertHoleToUndefined:
1657 value = graph()->NewNode( 1614 value = graph()->NewNode(
1658 common()->Select(MachineRepresentation::kTagged, BranchHint::kFalse), 1615 common()->Select(MachineRepresentation::kTagged, BranchHint::kFalse),
1659 check, jsgraph()->UndefinedConstant(), value); 1616 check, jsgraph()->UndefinedConstant(), value);
1660 break; 1617 break;
1661 case CheckTaggedHoleMode::kNeverReturnHole: 1618 case CheckTaggedHoleMode::kNeverReturnHole:
1662 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check, 1619 control = effect = graph()->NewNode(common()->DeoptimizeIf(), check,
1663 frame_state, effect, control); 1620 frame_state, effect, control);
1664 break; 1621 break;
1665 } 1622 }
1666 1623
1667 // Make sure the lowered node does not appear in any use lists.
1668 node->TrimInputCount(0);
1669
1670 return ValueEffectControl(value, effect, control); 1624 return ValueEffectControl(value, effect, control);
1671 } 1625 }
1672 1626
1673 EffectControlLinearizer::ValueEffectControl 1627 EffectControlLinearizer::ValueEffectControl
1674 EffectControlLinearizer::AllocateHeapNumberWithValue(Node* value, Node* effect, 1628 EffectControlLinearizer::AllocateHeapNumberWithValue(Node* value, Node* effect,
1675 Node* control) { 1629 Node* control) {
1676 Node* result = effect = graph()->NewNode( 1630 Node* result = effect = graph()->NewNode(
1677 simplified()->Allocate(NOT_TENURED), 1631 simplified()->Allocate(NOT_TENURED),
1678 jsgraph()->Int32Constant(HeapNumber::kSize), effect, control); 1632 jsgraph()->Int32Constant(HeapNumber::kSize), effect, control);
1679 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), 1633 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()),
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1868 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 1822 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
1869 Operator::kNoThrow); 1823 Operator::kNoThrow);
1870 to_number_operator_.set(common()->Call(desc)); 1824 to_number_operator_.set(common()->Call(desc));
1871 } 1825 }
1872 return to_number_operator_.get(); 1826 return to_number_operator_.get();
1873 } 1827 }
1874 1828
1875 } // namespace compiler 1829 } // namespace compiler
1876 } // namespace internal 1830 } // namespace internal
1877 } // namespace v8 1831 } // namespace v8
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