Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===-- X86FastISel.cpp - X86 FastISel implementation ---------------------===// | 1 //===-- X86FastISel.cpp - X86 FastISel implementation ---------------------===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 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 // This file defines the X86-specific support for the FastISel class. Much | 10 // This file defines the X86-specific support for the FastISel class. Much |
| (...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 571 // Now construct the final address. Note that the Disp, Scale, | 571 // Now construct the final address. Note that the Disp, Scale, |
| 572 // and Index values may already be set here. | 572 // and Index values may already be set here. |
| 573 AM.Base.Reg = LoadReg; | 573 AM.Base.Reg = LoadReg; |
| 574 AM.GV = 0; | 574 AM.GV = 0; |
| 575 return true; | 575 return true; |
| 576 } | 576 } |
| 577 } | 577 } |
| 578 | 578 |
| 579 // If all else fails, try to materialize the value in a register. | 579 // If all else fails, try to materialize the value in a register. |
| 580 if (!AM.GV || !Subtarget->isPICStyleRIPRel()) { | 580 if (!AM.GV || !Subtarget->isPICStyleRIPRel()) { |
| 581 if (AM.Base.Reg == 0) { | 581 // @LOCALMOD-START |
| 582 AM.Base.Reg = getRegForValue(V); | 582 // We can materialize into a memory address only if |
| 583 return AM.Base.Reg != 0; | 583 // no registers have been defined (and hence, we |
| 584 } | 584 // aren't modifying an existing memory reference). |
| 585 if (AM.IndexReg == 0) { | 585 if ((AM.Base.Reg == 0) && (AM.IndexReg == 0)) { |
|
jvoung - send to chromium...
2012/07/24 21:08:35
You can avoid changing the original behavior for n
Karl
2012/07/24 22:05:30
Done.
| |
| 586 assert(AM.Scale == 1 && "Scale with no index!"); | 586 // Put into index register so that the NaCl rewrite pass will |
| 587 // convert this to a 64-bit address. | |
| 587 AM.IndexReg = getRegForValue(V); | 588 AM.IndexReg = getRegForValue(V); |
| 588 return AM.IndexReg != 0; | 589 return AM.IndexReg != 0; |
| 589 } | 590 } |
| 591 // @LOCALMOD-END | |
| 590 } | 592 } |
| 591 | 593 |
| 592 return false; | 594 return false; |
| 593 } | 595 } |
| 594 | 596 |
| 595 /// X86SelectCallAddress - Attempt to fill in an address from the given value. | 597 /// X86SelectCallAddress - Attempt to fill in an address from the given value. |
| 596 /// | 598 /// |
| 597 bool X86FastISel::X86SelectCallAddress(const Value *V, X86AddressMode &AM) { | 599 bool X86FastISel::X86SelectCallAddress(const Value *V, X86AddressMode &AM) { |
| 598 const User *U = NULL; | 600 const User *U = NULL; |
| 599 unsigned Opcode = Instruction::UserOp1; | 601 unsigned Opcode = Instruction::UserOp1; |
| (...skipping 1600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2200 MI->eraseFromParent(); | 2202 MI->eraseFromParent(); |
| 2201 return true; | 2203 return true; |
| 2202 } | 2204 } |
| 2203 | 2205 |
| 2204 | 2206 |
| 2205 namespace llvm { | 2207 namespace llvm { |
| 2206 FastISel *X86::createFastISel(FunctionLoweringInfo &funcInfo) { | 2208 FastISel *X86::createFastISel(FunctionLoweringInfo &funcInfo) { |
| 2207 return new X86FastISel(funcInfo); | 2209 return new X86FastISel(funcInfo); |
| 2208 } | 2210 } |
| 2209 } | 2211 } |
| OLD | NEW |