[llvm] r216125 - Fix undefined behavior (left shift of negative value) in Hexagon backend.

Alexey Samsonov vonosmas at gmail.com
Wed Aug 20 14:22:03 PDT 2014


Author: samsonov
Date: Wed Aug 20 16:22:03 2014
New Revision: 216125

URL: http://llvm.org/viewvc/llvm-project?rev=216125&view=rev
Log:
Fix undefined behavior (left shift of negative value) in Hexagon backend.

This bug is reported by UBSan.

Modified:
    llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInst.cpp

Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp?rev=216125&r1=216124&r2=216125&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp Wed Aug 20 16:22:03 2014
@@ -1766,7 +1766,7 @@ int HexagonInstrInfo::getMinValue(const
                     & HexagonII::ExtentBitsMask;
 
   if (isSigned) // if value is signed
-    return -1 << (bits - 1);
+    return -1U << (bits - 1);
   else
     return 0;
 }
@@ -1780,9 +1780,9 @@ int HexagonInstrInfo::getMaxValue(const
                     & HexagonII::ExtentBitsMask;
 
   if (isSigned) // if value is signed
-    return ~(-1 << (bits - 1));
+    return ~(-1U << (bits - 1));
   else
-    return ~(-1 << bits);
+    return ~(-1U << bits);
 }
 
 // Returns true if an instruction can be converted into a non-extended

Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInst.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInst.cpp?rev=216125&r1=216124&r2=216125&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInst.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCInst.cpp Wed Aug 20 16:22:03 2014
@@ -155,7 +155,7 @@ int HexagonMCInst::getMinValue(void) con
                     & HexagonII::ExtentBitsMask;
 
   if (isSigned) // if value is signed
-    return -1 << (bits - 1);
+    return -1U << (bits - 1);
   else
     return 0;
 }
@@ -170,7 +170,7 @@ int HexagonMCInst::getMaxValue(void) con
                     & HexagonII::ExtentBitsMask;
 
   if (isSigned) // if value is signed
-    return ~(-1 << (bits - 1));
+    return ~(-1U << (bits - 1));
   else
-    return ~(-1 << bits);
+    return ~(-1U << bits);
 }





More information about the llvm-commits mailing list