diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-01-12 02:19:06 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-01-12 02:19:06 +0000 |
| commit | b7fe57a0f1efe8d8f61e0ab496dfd142d5679c01 (patch) | |
| tree | 8f0f814368c2a57b9b8a974ff9e274138623315d /llvm | |
| parent | 2cfce6853b3824aa5b8b555b917dac3dee2ec504 (diff) | |
| download | bcm5719-llvm-b7fe57a0f1efe8d8f61e0ab496dfd142d5679c01.tar.gz bcm5719-llvm-b7fe57a0f1efe8d8f61e0ab496dfd142d5679c01.zip | |
Fold TRUNCATE (LOAD P) into a smaller load from P.
llvm-svn: 19494
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelPattern.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelPattern.cpp b/llvm/lib/Target/X86/X86ISelPattern.cpp index dacd5133c1d..34d13564707 100644 --- a/llvm/lib/Target/X86/X86ISelPattern.cpp +++ b/llvm/lib/Target/X86/X86ISelPattern.cpp @@ -410,6 +410,7 @@ unsigned ISel::ComputeRegPressure(SDOperand O) { Result = MaxRegUse+NumExtraMaxRegUsers; } + //std::cerr << " WEIGHT: " << Result << " "; N->dump(); std::cerr << "\n"; return Result; } @@ -1106,6 +1107,20 @@ unsigned ISel::SelectExpr(SDOperand N) { return Result; } case ISD::TRUNCATE: + // Fold TRUNCATE (LOAD P) into a smaller load from P. + if (isFoldableLoad(N.getOperand(0))) { + switch (N.getValueType()) { + default: assert(0 && "Unknown truncate!"); + case MVT::i1: + case MVT::i8: Opc = X86::MOV8rm; break; + case MVT::i16: Opc = X86::MOV16rm; break; + } + X86AddressMode AM; + EmitFoldedLoad(N.getOperand(0), AM); + addFullAddress(BuildMI(BB, Opc, 4, Result), AM); + return Result; + } + // Handle cast of LARGER int to SMALLER int using a move to EAX followed by // a move out of AX or AL. switch (N.getOperand(0).getValueType()) { |

