[llvm-commits] [llvm] r159388 - in /llvm/trunk: lib/VMCore/Verifier.cpp test/Verifier/invoke-1.ll test/Verifier/invoke-2.ll test/Verifier/invoke.ll

Duncan Sands baldrick at free.fr
Fri Jun 29 00:27:15 PDT 2012


Hi Nuno,

> make the verifier accept @llvm.donothing as the only intrinsic that can be invoked

are you interested in tweaking things so that invoke can safely be used with any
intrinsic?  If not, please open a PR about it.

Thanks, Duncan.

> While at it, merge 2 tests and FileCheckize them
>
> Added:
>      llvm/trunk/test/Verifier/invoke.ll
>        - copied, changed from r159385, llvm/trunk/test/Verifier/invoke-1.ll
> Removed:
>      llvm/trunk/test/Verifier/invoke-1.ll
>      llvm/trunk/test/Verifier/invoke-2.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=159388&r1=159387&r2=159388&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/Verifier.cpp (original)
> +++ llvm/trunk/lib/VMCore/Verifier.cpp Thu Jun 28 17:57:00 2012
> @@ -1636,9 +1636,11 @@
>       if (Function *F = dyn_cast<Function>(I.getOperand(i))) {
>         // Check to make sure that the "address of" an intrinsic function is never
>         // taken.
> -      CallSite CS(&I);
> -      Assert1(!F->isIntrinsic() || (CS && i == (CS.isCall() ? e-1 : 2)),
> +      Assert1(!F->isIntrinsic() || i == (isa<CallInst>(I) ? e-1 : 0),
>                 "Cannot take the address of an intrinsic!", &I);
> +      Assert1(!F->isIntrinsic() || isa<CallInst>(I) ||
> +              F->getIntrinsicID() == Intrinsic::donothing,
> +              "Cannot invoke an intrinsinc other than donothing", &I);
>         Assert1(F->getParent() == Mod, "Referencing function in another module!",
>                 &I);
>       } else if (BasicBlock *OpBB = dyn_cast<BasicBlock>(I.getOperand(i))) {
>
> Removed: llvm/trunk/test/Verifier/invoke-1.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/invoke-1.ll?rev=159387&view=auto
> ==============================================================================
> --- llvm/trunk/test/Verifier/invoke-1.ll (original)
> +++ llvm/trunk/test/Verifier/invoke-1.ll (removed)
> @@ -1,10 +0,0 @@
> -; RUN: not llvm-as < %s |& grep {not verify as correct}
> -; PR1042
> -
> -define i32 @foo() {
> -	%A = invoke i32 @foo( )
> -			to label %L unwind label %L		; <i32> [#uses=1]
> -L:		; preds = %0, %0
> -	ret i32 %A
> -}
> -
>
> Removed: llvm/trunk/test/Verifier/invoke-2.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/invoke-2.ll?rev=159387&view=auto
> ==============================================================================
> --- llvm/trunk/test/Verifier/invoke-2.ll (original)
> +++ llvm/trunk/test/Verifier/invoke-2.ll (removed)
> @@ -1,14 +0,0 @@
> -; RUN: not llvm-as %s |& grep {not verify as correct}
> -; PR1042
> -
> -define i32 @foo() {
> -	br i1 false, label %L1, label %L2
> -L1:		; preds = %0
> -	%A = invoke i32 @foo( )
> -			to label %L unwind label %L		; <i32> [#uses=1]
> -L2:		; preds = %0
> -	br label %L
> -L:		; preds = %L2, %L1, %L1
> -	ret i32 %A
> -}
> -
>
> Copied: llvm/trunk/test/Verifier/invoke.ll (from r159385, llvm/trunk/test/Verifier/invoke-1.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/invoke.ll?p2=llvm/trunk/test/Verifier/invoke.ll&p1=llvm/trunk/test/Verifier/invoke-1.ll&r1=159385&r2=159388&rev=159388&view=diff
> ==============================================================================
> --- llvm/trunk/test/Verifier/invoke-1.ll (original)
> +++ llvm/trunk/test/Verifier/invoke.ll Thu Jun 28 17:57:00 2012
> @@ -1,10 +1,65 @@
> -; RUN: not llvm-as < %s |& grep {not verify as correct}
> -; PR1042
> +; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s
>
> +; PR1042
>   define i32 @foo() {
> +; CHECK: The unwind destination does not have a landingpad instruction
>   	%A = invoke i32 @foo( )
>   			to label %L unwind label %L		; <i32> [#uses=1]
>   L:		; preds = %0, %0
>   	ret i32 %A
>   }
>
> +; PR1042
> +define i32 @bar() {
> +	br i1 false, label %L1, label %L2
> +L1:		; preds = %0
> +	%A = invoke i32 @bar( )
> +			to label %L unwind label %L		; <i32> [#uses=1]
> +L2:		; preds = %0
> +	br label %L
> +L:		; preds = %L2, %L1, %L1
> +; CHECK: The unwind destination does not have a landingpad instruction
> +; CHECK: Instruction does not dominate all uses
> +	ret i32 %A
> +}
> +
> +
> +declare i32 @__gxx_personality_v0(...)
> +declare void @llvm.donothing()
> +declare void @llvm.trap()
> +declare i8 @llvm.expect.i8(i8,i8)
> +declare i32 @fn(i8 (i8, i8)*)
> +
> +define void @f1() {
> +entry:
> +; OK
> +  invoke void @llvm.donothing()
> +  to label %cont unwind label %cont
> +
> +cont:
> +  %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
> +          filter [0 x i8*] zeroinitializer
> +  ret void
> +}
> +
> +define i8 @f2() {
> +entry:
> +; CHECK: Cannot invoke an intrinsinc other than donothing
> +  invoke void @llvm.trap()
> +  to label %cont unwind label %lpad
> +
> +cont:
> +  ret i8 3
> +
> +lpad:
> +  %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
> +          filter [0 x i8*] zeroinitializer
> +  ret i8 2
> +}
> +
> +define i32 @f3() {
> +entry:
> +; CHECK: Cannot take the address of an intrinsic
> +  %call = call i32 @fn(i8 (i8, i8)* @llvm.expect.i8)
> +  ret i32 %call
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>





More information about the llvm-commits mailing list