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

Unified Diff: src/compiler/s390/instruction-selector-s390.cc

Issue 2662963002: s390: TF Optimize 32-bit Mul/Div/Mod/Popcnt (Closed)
Patch Set: fix dcheck Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/s390/instruction-scheduler-s390.cc ('k') | src/s390/disasm-s390.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/s390/instruction-selector-s390.cc
diff --git a/src/compiler/s390/instruction-selector-s390.cc b/src/compiler/s390/instruction-selector-s390.cc
index d5d5e079fa09546219ff74bbaa4a8cbfffc2c4f4..95f5307727802c883e9ee2b390316bb99e651486 100644
--- a/src/compiler/s390/instruction-selector-s390.cc
+++ b/src/compiler/s390/instruction-selector-s390.cc
@@ -246,8 +246,11 @@ bool AutoZeroExtendsWord32ToWord64(Node* node) {
case IrOpcode::kInt32Div:
case IrOpcode::kUint32Div:
case IrOpcode::kInt32MulHigh:
+ case IrOpcode::kUint32MulHigh:
case IrOpcode::kInt32Mod:
case IrOpcode::kUint32Mod:
+ case IrOpcode::kWord32Clz:
+ case IrOpcode::kWord32Popcnt:
return true;
default:
return false;
@@ -276,6 +279,7 @@ bool ZeroExtendsWord32ToWord64(Node* node) {
case IrOpcode::kInt32MulHigh:
case IrOpcode::kInt32Mod:
case IrOpcode::kUint32Mod:
+ case IrOpcode::kWord32Popcnt:
return true;
// TODO(john.yan): consider the following case to be valid
// case IrOpcode::kWord32Equal:
@@ -1148,9 +1152,7 @@ void InstructionSelector::VisitWord64Ror(Node* node) {
#endif
void InstructionSelector::VisitWord32Clz(Node* node) {
- S390OperandGenerator g(this);
- Emit(kS390_Cntlz32, g.DefineAsRegister(node),
- g.UseRegister(node->InputAt(0)));
+ VisitRR(this, kS390_Cntlz32, node);
}
#if V8_TARGET_ARCH_S390X
@@ -1163,8 +1165,8 @@ void InstructionSelector::VisitWord64Clz(Node* node) {
void InstructionSelector::VisitWord32Popcnt(Node* node) {
S390OperandGenerator g(this);
- Emit(kS390_Popcnt32, g.DefineAsRegister(node),
- g.UseRegister(node->InputAt(0)));
+ Node* value = node->InputAt(0);
+ Emit(kS390_Popcnt32, g.DefineAsRegister(node), g.UseRegister(value));
}
#if V8_TARGET_ARCH_S390X
@@ -1331,15 +1333,8 @@ void InstructionSelector::VisitInt32MulHigh(Node* node) {
}
void InstructionSelector::VisitUint32MulHigh(Node* node) {
- S390OperandGenerator g(this);
- Int32BinopMatcher m(node);
- Node* left = m.left().node();
- Node* right = m.right().node();
- if (g.CanBeBetterLeftOperand(right)) {
- std::swap(left, right);
- }
- Emit(kS390_MulHighU32, g.DefineAsRegister(node), g.UseRegister(left),
- g.Use(right));
+ VisitBin32op(this, node, kS390_MulHighU32,
+ OperandMode::kAllowRRM | OperandMode::kAllowRRR);
}
void InstructionSelector::VisitInt32Div(Node* node) {
@@ -1365,7 +1360,8 @@ void InstructionSelector::VisitUint64Div(Node* node) {
#endif
void InstructionSelector::VisitInt32Mod(Node* node) {
- VisitRRR(this, kS390_Mod32, node);
+ VisitBin32op(this, node, kS390_Mod32,
+ OperandMode::kAllowRRM | OperandMode::kAllowRRR);
}
#if V8_TARGET_ARCH_S390X
@@ -1375,7 +1371,8 @@ void InstructionSelector::VisitInt64Mod(Node* node) {
#endif
void InstructionSelector::VisitUint32Mod(Node* node) {
- VisitRRR(this, kS390_ModU32, node);
+ VisitBin32op(this, node, kS390_ModU32,
+ OperandMode::kAllowRRM | OperandMode::kAllowRRR);
}
#if V8_TARGET_ARCH_S390X
« no previous file with comments | « src/compiler/s390/instruction-scheduler-s390.cc ('k') | src/s390/disasm-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698