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

Side by Side Diff: src/IceTargetLoweringX86BaseImpl.h

Issue 1371703003: Generate better two address code by using commutativity (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 2 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 | « src/IceInst.def ('k') | 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 //===- subzero/src/IceTargetLoweringX86BaseImpl.h - x86 lowering -*- C++ -*-==// 1 //===- subzero/src/IceTargetLoweringX86BaseImpl.h - x86 lowering -*- C++ -*-==//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 template <class Machine> 1276 template <class Machine>
1277 void TargetX86Base<Machine>::lowerArithmetic(const InstArithmetic *Inst) { 1277 void TargetX86Base<Machine>::lowerArithmetic(const InstArithmetic *Inst) {
1278 Variable *Dest = Inst->getDest(); 1278 Variable *Dest = Inst->getDest();
1279 Operand *Src0 = legalize(Inst->getSrc(0)); 1279 Operand *Src0 = legalize(Inst->getSrc(0));
1280 Operand *Src1 = legalize(Inst->getSrc(1)); 1280 Operand *Src1 = legalize(Inst->getSrc(1));
1281 if (Inst->isCommutative()) { 1281 if (Inst->isCommutative()) {
1282 if (!llvm::isa<Variable>(Src0) && llvm::isa<Variable>(Src1)) 1282 if (!llvm::isa<Variable>(Src0) && llvm::isa<Variable>(Src1))
1283 std::swap(Src0, Src1); 1283 std::swap(Src0, Src1);
1284 if (llvm::isa<Constant>(Src0) && !llvm::isa<Constant>(Src1)) 1284 if (llvm::isa<Constant>(Src0) && !llvm::isa<Constant>(Src1))
1285 std::swap(Src0, Src1); 1285 std::swap(Src0, Src1);
1286 // Improve two-address code patterns by avoiding a copy to the dest
1287 // register when one of the source operands ends its lifetime here.
1288 if (!Inst->isLastUse(Src0) && Inst->isLastUse(Src1))
1289 std::swap(Src0, Src1);
Jim Stichnoth 2015/09/25 21:12:09 I'm starting to get nervous about "swap wars". Co
sehr 2015/10/06 18:42:00 I added the counter.
1290
1286 } 1291 }
1287 if (!Traits::Is64Bit && Dest->getType() == IceType_i64) { 1292 if (!Traits::Is64Bit && Dest->getType() == IceType_i64) {
1288 // These x86-32 helper-call-involved instructions are lowered in this 1293 // These x86-32 helper-call-involved instructions are lowered in this
1289 // separate switch. This is because loOperand() and hiOperand() may insert 1294 // separate switch. This is because loOperand() and hiOperand() may insert
1290 // redundant instructions for constant blinding and pooling. Such redundant 1295 // redundant instructions for constant blinding and pooling. Such redundant
1291 // instructions will fail liveness analysis under -Om1 setting. And, 1296 // instructions will fail liveness analysis under -Om1 setting. And,
1292 // actually these arguments do not need to be processed with loOperand() 1297 // actually these arguments do not need to be processed with loOperand()
1293 // and hiOperand() to be used. 1298 // and hiOperand() to be used.
1294 switch (Inst->getOp()) { 1299 switch (Inst->getOp()) {
1295 case InstArithmetic::Udiv: { 1300 case InstArithmetic::Udiv: {
(...skipping 4175 matching lines...) Expand 10 before | Expand all | Expand 10 after
5471 } 5476 }
5472 // the offset is not eligible for blinding or pooling, return the original 5477 // the offset is not eligible for blinding or pooling, return the original
5473 // mem operand 5478 // mem operand
5474 return MemOperand; 5479 return MemOperand;
5475 } 5480 }
5476 5481
5477 } // end of namespace X86Internal 5482 } // end of namespace X86Internal
5478 } // end of namespace Ice 5483 } // end of namespace Ice
5479 5484
5480 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASEIMPL_H 5485 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASEIMPL_H
OLDNEW
« no previous file with comments | « src/IceInst.def ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698