[PATCH] D76116: [Verifier] Remove invalid verifier check

Serguei Katkov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 12 21:54:09 PDT 2020


skatkov created this revision.
skatkov added a reviewer: reames.
Herald added subscribers: jfb, hiraditya.

According to LangRef for unordered atomic memory transfer intrinsics
"The first three arguments are the same as they are in the @llvm.memcpy intrinsic, with the added constraint that len is required to be a positive integer multiple of the element_size. If len is not a positive integer multiple of element_size, then the behaviour of the intrinsic is undefined."

So the len is not multiple of element size is just an undefined behavior and verifier should complain about that
as undefined behavior is allowed in LLVM IR.

This change removes the verifier check for this condition


https://reviews.llvm.org/D76116

Files:
  llvm/lib/IR/Verifier.cpp
  llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll


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
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<ConstantInt>(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);
     };


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76116.250123.patch
Type: text/x-patch
Size: 2855 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200313/ad0e7285/attachment.bin>


More information about the llvm-commits mailing list