Include optional subclass flags, such as inbounds, nsw, etc., in the
authorDan Gohman <gohman@apple.com>
Fri, 4 Sep 2009 12:08:11 +0000 (12:08 +0000)
committerDan Gohman <gohman@apple.com>
Fri, 4 Sep 2009 12:08:11 +0000 (12:08 +0000)
commit859fff476dfe8d83abdf4621b1d20062c0daa85c
tree15f6b66f5538046096a0f13f5ff878227987faef
parent70327dabb4cbe7a95b65ea787716170508ac3068
Include optional subclass flags, such as inbounds, nsw, etc., in the
Constant uniquing tables. This allows distinct ConstantExpr objects
with the same operation and different flags.

Even though a ConstantExpr "a + b" is either always overflowing or
never overflowing (due to being a ConstantExpr), it's still necessary
to be able to represent it both with and without overflow flags at
the same time within the IR, because the safety of the flag may
depend on the context of the use. If the constant really does overflow,
it wouldn't ever be safe to use with the flag set, however the use
may be in code that is never actually executed.

This also makes it possible to merge all the flags tests into a single test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80998 91177308-0d34-0410-b5e6-96231b3b80d8
16 files changed:
include/llvm/Constants.h
include/llvm/InstrTypes.h
include/llvm/Instructions.h
include/llvm/Operator.h
include/llvm/Value.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Transforms/Scalar/InstructionCombining.cpp
lib/VMCore/Constants.cpp
lib/VMCore/ConstantsContext.h
lib/VMCore/Instructions.cpp
test/Assembler/flags-plain.ll [deleted file]
test/Assembler/flags-reversed.ll [deleted file]
test/Assembler/flags-signed.ll [deleted file]
test/Assembler/flags-unsigned.ll [deleted file]
test/Assembler/flags.ll