Make tblgen a little smarter about constants smaller than i32. Currently,
authorScott Michel <scottm@aero.org>
Fri, 15 Feb 2008 23:05:48 +0000 (23:05 +0000)
committerScott Michel <scottm@aero.org>
Fri, 15 Feb 2008 23:05:48 +0000 (23:05 +0000)
commit0123b7dcfa9be97588926407163deb8d603487ce
tree16f995f13d3b186a0d2c18e0893cfed8258413b9
parent9f8ec25805595011bf33af3cae5d25795cb32976
Make tblgen a little smarter about constants smaller than i32. Currently,
tblgen will complain if a sign-extended constant does not fit into a
data type smaller than i32, e.g., i16. This causes a problem when certain
hex constants are used, such as 0xff for byte masks or immediate xor
values.

tblgen will try the sign-extended value first and, if the sign extended
value would overflow, it tries to see if the unsigned value will fit.
Consequently, a software developer can now safely incant:

(XORHIr16 R16C:$rA, 0xffff)

which is somewhat clearer and more informative than incanting:

(XORHIr16 R16C:$rA, (i16 -1))

even if the two are bitwise equivalent.

Tblgen also outputs the 64-bit unsigned constant in the generated ISel code
when getTargetConstant() is invoked.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47188 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/ADT/StringExtras.h
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
utils/TableGen/CodeGenDAGPatterns.cpp
utils/TableGen/DAGISelEmitter.cpp