diff --git a/llvm/lib/Transforms/Scalar/InferAlignment.cpp b/llvm/lib/Transforms/Scalar/InferAlignment.cpp index b60b15b6c3a2b..995b80396b8af 100644 --- a/llvm/lib/Transforms/Scalar/InferAlignment.cpp +++ b/llvm/lib/Transforms/Scalar/InferAlignment.cpp @@ -57,7 +57,8 @@ static bool tryToImproveAlign( cast(II->getArgOperand(AlignOpIdx))->getAlignValue(); Align PrefAlign = DL.getPrefTypeAlign(Type); Align NewAlign = Fn(PtrOp, OldAlign, PrefAlign); - if (NewAlign <= OldAlign) + if (NewAlign <= OldAlign || + NewAlign.value() > std::numeric_limits().max()) return false; Value *V = diff --git a/llvm/test/Transforms/InferAlignment/masked.ll b/llvm/test/Transforms/InferAlignment/masked.ll index 1b8d26417d75e..13acf9b50e7e8 100644 --- a/llvm/test/Transforms/InferAlignment/masked.ll +++ b/llvm/test/Transforms/InferAlignment/masked.ll @@ -29,6 +29,18 @@ entry: ret void } +define <2 x i32> @null(<2 x i1> %mask, <2 x i32> %val) { +; CHECK-LABEL: define <2 x i32> @null( +; CHECK-SAME: <2 x i1> [[MASK:%.*]], <2 x i32> [[VAL:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: [[MASKED_LOAD:%.*]] = tail call <2 x i32> @llvm.masked.load.v2i32.p0(ptr null, i32 1, <2 x i1> [[MASK]], <2 x i32> [[VAL]]) +; CHECK-NEXT: ret <2 x i32> [[MASKED_LOAD]] +; +entry: + %masked_load = tail call <2 x i32> @llvm.masked.load.v2f64.p0(ptr null, i32 1, <2 x i1> %mask, <2 x i32> %val) + ret <2 x i32> %masked_load +} + declare void @llvm.assume(i1) declare <2 x i32> @llvm.masked.load.v2i32.p0(ptr, i32, <2 x i1>, <2 x i32>) declare void @llvm.masked.store.v2i32.p0(<2 x i32>, ptr, i32, <2 x i1>)