[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