SystemZ: Rephrase this allOnes calculation to avoid UB
authorJustin Bogner <mail@justinbogner.com>
Wed, 24 Jun 2015 05:59:19 +0000 (05:59 +0000)
committerJustin Bogner <mail@justinbogner.com>
Wed, 24 Jun 2015 05:59:19 +0000 (05:59 +0000)
commitcac03419a614ad60205d8d55daa3f9e7cc3cc7f1
treedebe26bc0a5c4f5be6f739c100b326fcebd5ce61
parent9073b8fb67ab9edbb54181811ddb05c243345935
SystemZ: Rephrase this allOnes calculation to avoid UB

This allOnes function hits undefined behaviour if Count is greater
than 64, but we can avoid that and simplify the calculation by just
saturating if such a value is passed in.

This comes up under ubsan becauseRxSBGOperands is sometimes created
with values that are 128 bits wide. Somebody more familiar with this
code should probably look into whether that's expected, as a 64 bit
mask may or may not be appropriate for such types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240520 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/SystemZ/SystemZISelDAGToDAG.cpp