Index: llvm/lib/IR/Verifier.cpp =================================================================== --- llvm/lib/IR/Verifier.cpp +++ llvm/lib/IR/Verifier.cpp @@ -4412,15 +4412,6 @@ "must be a power of 2", Call); - if (auto *LengthCI = dyn_cast(AMI->getLength())) { - uint64_t Length = LengthCI->getZExtValue(); - uint64_t ElementSize = AMI->getElementSizeInBytes(); - Assert((Length % ElementSize) == 0, - "constant length must be a multiple of the element size in the " - "element-wise atomic memory intrinsic", - Call); - } - auto IsValidAlignment = [&](uint64_t Alignment) { return isPowerOf2_64(Alignment) && ElementSizeVal.ule(Alignment); }; Index: llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll =================================================================== --- llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll +++ llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll @@ -9,7 +9,7 @@ ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3) - ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic + ; CHECK-NOT: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4) ; CHECK: incorrect alignment of the destination argument @@ -36,7 +36,7 @@ ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3) - ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic + ; CHECK-NOT: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4) ; CHECK: incorrect alignment of the destination argument @@ -63,7 +63,7 @@ ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 3) - ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic + ; CHECK-NOT: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 7, i32 4) ; CHECK: incorrect alignment of the destination argument