Bug fix: sign-extension was not happening for C = -MININT since C == -C!
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 25 May 2003 21:58:11 +0000 (21:58 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 25 May 2003 21:58:11 +0000 (21:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6332 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9InstrInfo.cpp

index 977360bf006dd226616407dec33fdc1935454ebc..aa48278fbff6441fde3140d91eb81d06c873be67 100644 (file)
@@ -142,8 +142,9 @@ CreateSETSWConst(const TargetMachine& target, int32_t C,
   // Set the low 32 bits of dest
   CreateSETUWConst(target, (uint32_t) C,  dest, mvec, /*isSigned*/true);
 
-  // Sign-extend to the high 32 bits if needed
-  if (C < 0 && (-C) > (int32_t) MAXSIMM)
+  // Sign-extend to the high 32 bits if needed.
+  // NOTE: The value C = 0x80000000 is bad: -C == C and so -C is < MAXSIMM
+  if (C < 0 && (C == -C || -C > (int32_t) MAXSIMM))
     mvec.push_back(BuildMI(V9::SRA, 3).addReg(dest).addZImm(0).addRegDef(dest));
 }