[llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Nov 1 18:51:01 PST 2002
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.12 -> 1.13
---
Log message:
Make switch statements denser, but only because of the follow-on patch
---
Diffs of the changes:
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.12 llvm/lib/Target/X86/InstSelectSimple.cpp:1.13
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.12 Fri Nov 1 18:44:25 2002
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Fri Nov 1 18:49:56 2002
@@ -143,6 +143,20 @@
BuildMI(BB, X86::RET, 0);
}
+/// SimpleLog2 - Compute and return Log2 of the input, valid only for inputs 1,
+/// 2, 4, & 8. Used to convert operand size into dense classes.
+///
+static inline unsigned SimpleLog2(unsigned N) {
+ switch (N) {
+ case 1: return 0;
+ case 2: return 1;
+ case 4: return 2;
+ case 8: return 3;
+ default: assert(0 && "Invalid operand to SimpleLog2!");
+ }
+ return 0; // not reached
+}
+
/// Shift instructions: 'shl', 'sar', 'shr' - Some special cases here
/// for constant immediate shift values, and for constant immediate
/// shift values equal to 1. Even the general case is sort of special,
@@ -153,9 +167,9 @@
{
unsigned Op0r = getReg (I.getOperand (0));
unsigned DestReg = getReg (I);
- unsigned operandSize = I.getType ()->getPrimitiveSize ();
bool isRightShift = (I.getOpcode () == Instruction::Shr);
bool isOperandUnsigned = I.getType ()->isUnsigned ();
+ unsigned OperandClass = SimpleLog2(I.getType()->getPrimitiveSize());
if (ConstantUInt *CUI = dyn_cast <ConstantUInt> (I.getOperand (1)))
{
@@ -169,21 +183,21 @@
if (isOperandUnsigned)
{
// This is a shift right logical (SHR).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SHRir8, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SHRir16, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SHRir32, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
@@ -192,21 +206,21 @@
else
{
// This is a shift right arithmetic (SAR).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SARir8, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SARir16, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SARir32, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
@@ -216,21 +230,21 @@
else
{
// This is a left shift (SHL).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SHLir8, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SHLir16, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SHLir32, 2,
DestReg).addReg (Op0r).addZImm (shAmt);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
@@ -252,24 +266,24 @@
// Emit: <insn> reg, cl (shift-by-CL opcode; "rr" form.)
if (isRightShift)
{
- if (isOperandUnsigned)
+ if (OperandClass)
{
// This is a shift right logical (SHR).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SHRrr8, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SHRrr16, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SHRrr32, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
@@ -278,21 +292,21 @@
else
{
// This is a shift right arithmetic (SAR).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SARrr8, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SARrr16, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SARrr32, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
@@ -302,21 +316,21 @@
else
{
// This is a left shift (SHL).
- switch (operandSize)
+ switch (OperandClass)
{
- case 1:
+ case 0:
BuildMI (BB, X86::SHLrr8, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 2:
+ case 1:
BuildMI (BB, X86::SHLrr16, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 4:
+ case 2:
BuildMI (BB, X86::SHLrr32, 2,
DestReg).addReg (Op0r).addReg (X86::CL);
break;
- case 8:
+ case 3:
default:
visitInstruction (I);
break;
More information about the llvm-commits
mailing list