[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp
Chris Lattner
lattner at cs.uiuc.edu
Tue Jan 11 18:19:21 PST 2005
Changes in directory llvm/lib/Target/X86:
X86ISelPattern.cpp updated: 1.39 -> 1.40
---
Log message:
Fold TRUNCATE (LOAD P) into a smaller load from P.
---
Diffs of the changes: (+15 -0)
Index: llvm/lib/Target/X86/X86ISelPattern.cpp
diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.39 llvm/lib/Target/X86/X86ISelPattern.cpp:1.40
--- llvm/lib/Target/X86/X86ISelPattern.cpp:1.39 Tue Jan 11 20:02:48 2005
+++ llvm/lib/Target/X86/X86ISelPattern.cpp Tue Jan 11 20:19:06 2005
@@ -410,6 +410,7 @@
Result = MaxRegUse+NumExtraMaxRegUsers;
}
+
//std::cerr << " WEIGHT: " << Result << " "; N->dump(); std::cerr << "\n";
return Result;
}
@@ -1106,6 +1107,20 @@
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()) {
More information about the llvm-commits
mailing list