[llvm-commits] [llvm] r146360 - in /llvm/trunk: lib/VMCore/Verifier.cpp test/Verifier/cttz-undef-arg.ll

Chandler Carruth chandlerc at gmail.com
Sun Dec 11 20:36:02 PST 2011


Author: chandlerc
Date: Sun Dec 11 22:36:02 2011
New Revision: 146360

URL: http://llvm.org/viewvc/llvm-project?rev=146360&view=rev
Log:
Teach the verifier to reject all non-constant arguments to the second
argument of the cttz and ctlz intrinsics.

Added:
    llvm/trunk/test/Verifier/cttz-undef-arg.ll
Modified:
    llvm/trunk/lib/VMCore/Verifier.cpp

Modified: llvm/trunk/lib/VMCore/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=146360&r1=146359&r2=146360&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Verifier.cpp (original)
+++ llvm/trunk/lib/VMCore/Verifier.cpp Sun Dec 11 22:36:02 2011
@@ -1688,6 +1688,12 @@
   switch (ID) {
   default:
     break;
+  case Intrinsic::ctlz:  // llvm.ctlz
+  case Intrinsic::cttz:  // llvm.cttz
+    Assert1(isa<ConstantInt>(CI.getArgOperand(1)),
+            "is_zero_undef argument of bit counting intrinsics must be a "
+            "constant int", &CI);
+    break;
   case Intrinsic::dbg_declare: {  // llvm.dbg.declare
     Assert1(CI.getArgOperand(0) && isa<MDNode>(CI.getArgOperand(0)),
                 "invalid llvm.dbg.declare intrinsic call 1", &CI);

Added: llvm/trunk/test/Verifier/cttz-undef-arg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/cttz-undef-arg.ll?rev=146360&view=auto
==============================================================================
--- llvm/trunk/test/Verifier/cttz-undef-arg.ll (added)
+++ llvm/trunk/test/Verifier/cttz-undef-arg.ll Sun Dec 11 22:36:02 2011
@@ -0,0 +1,16 @@
+; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s
+
+declare i32 @llvm.ctlz.i32(i32, i1)
+declare i32 @llvm.cttz.i32(i32, i1)
+
+define void @f(i32 %x, i1 %is_not_zero) {
+entry:
+; CHECK: is_zero_undef argument of bit counting intrinsics must be a constant int
+; CHECK-NEXT: @llvm.ctlz.i32
+  call i32 @llvm.ctlz.i32(i32 %x, i1 %is_not_zero)
+
+; CHECK: is_zero_undef argument of bit counting intrinsics must be a constant int
+; CHECK-NEXT: @llvm.cttz.i32
+  call i32 @llvm.cttz.i32(i32 %x, i1 %is_not_zero)
+  ret void
+}





More information about the llvm-commits mailing list