From afce4306ec9d9ce5def7c3697654f3bcbbeb5cb9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 12 Jan 2005 02:19:06 +0000 Subject: [PATCH] Fold TRUNCATE (LOAD P) into a smaller load from P. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19494 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelPattern.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/Target/X86/X86ISelPattern.cpp b/lib/Target/X86/X86ISelPattern.cpp index dacd5133c1d..34d13564707 100644 --- a/lib/Target/X86/X86ISelPattern.cpp +++ b/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()) {