mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-11 13:37:07 +00:00
Teach the verifier to reject all non-constant arguments to the second
argument of the cttz and ctlz intrinsics. llvm-svn: 146360
This commit is contained in:
parent
083a91fab1
commit
d733f059d0
@ -1688,6 +1688,12 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
||||
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);
|
||||
|
16
test/Verifier/cttz-undef-arg.ll
Normal file
16
test/Verifier/cttz-undef-arg.ll
Normal file
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user