diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-06-01 15:39:10 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-06-01 15:39:10 +0000 |
| commit | bc68385dad322f80a5b064db2f4e0fd3f9c21781 (patch) | |
| tree | 19f5ff6d17f2e83ca079fe81fdf73625d056b0e8 /llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp | |
| parent | 2896c773ebcc1707dfae3e98fe3f9ccd97f08ef7 (diff) | |
| download | bcm5719-llvm-bc68385dad322f80a5b064db2f4e0fd3f9c21781.tar.gz bcm5719-llvm-bc68385dad322f80a5b064db2f4e0fd3f9c21781.zip | |
[Hexagon] Avoid UB when shifting unsigned integer left by 32
llvm-svn: 333771
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp')
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp index 9d53a58d913..55b116fbd34 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp @@ -1169,16 +1169,17 @@ HexagonTargetLowering::LowerHvxCttz(SDValue Op, SelectionDAG &DAG) const { // Calculate the vectors of 1 and bitwidth(x). MVT ElemTy = ty(InpV).getVectorElementType(); unsigned ElemWidth = ElemTy.getSizeInBits(); - uint32_t Splat1 = 0, SplatW = 0; + // Using uint64_t because a shift by 32 can happen. + uint64_t Splat1 = 0, SplatW = 0; assert(isPowerOf2_32(ElemWidth) && ElemWidth <= 32); for (unsigned i = 0; i != 32/ElemWidth; ++i) { Splat1 = (Splat1 << ElemWidth) | 1; SplatW = (SplatW << ElemWidth) | ElemWidth; } SDValue Vec1 = DAG.getNode(HexagonISD::VSPLATW, dl, ResTy, - DAG.getConstant(Splat1, dl, MVT::i32)); + DAG.getConstant(uint32_t(Splat1), dl, MVT::i32)); SDValue VecW = DAG.getNode(HexagonISD::VSPLATW, dl, ResTy, - DAG.getConstant(SplatW, dl, MVT::i32)); + DAG.getConstant(uint32_t(SplatW), dl, MVT::i32)); SDValue VecN1 = DAG.getNode(HexagonISD::VSPLATW, dl, ResTy, DAG.getConstant(-1, dl, MVT::i32)); // Do not use DAG.getNOT, because that would create BUILD_VECTOR with |

