[llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp
Chris Lattner
lattner at cs.uiuc.edu
Mon Apr 5 22:37:01 PDT 2004
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.211 -> 1.212
---
Log message:
Bugfixes: inc/dec don't set the carry flag!
---
Diffs of the changes: (+8 -12)
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.211 llvm/lib/Target/X86/InstSelectSimple.cpp:1.212
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.211 Mon Apr 5 22:23:00 2004
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Mon Apr 5 22:36:57 2004
@@ -1742,24 +1742,20 @@
}
// add X, -1 -> dec X
- if (OperatorClass == 0 && Op1C->isAllOnesValue()) {
- static unsigned const DECTab[] = {
- X86::DEC8r, X86::DEC16r, X86::DEC32r, 0, X86::DEC32r
- };
+ if (OperatorClass == 0 && Op1C->isAllOnesValue() && Class != cLong) {
+ // Note that we can't use dec for 64-bit decrements, because it does not
+ // set the carry flag!
+ static unsigned const DECTab[] = { X86::DEC8r, X86::DEC16r, X86::DEC32r };
BuildMI(*MBB, IP, DECTab[Class], 1, DestReg).addReg(Op0r);
- if (Class == cLong) // Dh = sbb Sh, 0
- BuildMI(*MBB, IP, X86::SBB32ri, 2, DestReg+1).addReg(Op0r+1).addImm(0);
return;
}
// add X, 1 -> inc X
- if (OperatorClass == 0 && Op1C->equalsInt(1)) {
- static unsigned const INCTab[] = {
- X86::INC8r, X86::INC16r, X86::INC32r, 0, X86::INC32r
- };
+ if (OperatorClass == 0 && Op1C->equalsInt(1) && Class != cLong) {
+ // Note that we can't use inc for 64-bit increments, because it does not
+ // set the carry flag!
+ static unsigned const INCTab[] = { X86::INC8r, X86::INC16r, X86::INC32r };
BuildMI(*MBB, IP, INCTab[Class], 1, DestReg).addReg(Op0r);
- if (Class == cLong) // Dh = adc Sh, 0
- BuildMI(*MBB, IP, X86::ADC32ri, 2, DestReg+1).addReg(Op0r+1).addImm(0);
return;
}
More information about the llvm-commits
mailing list