From: Hans Wennborg Date: Wed, 17 Jun 2020 08:26:30 +0000 (+0200) Subject: [IR] Don't copy profile metadata in createCallMatchingInvoke() X-Git-Tag: llvmorg-12-init~2825 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=16ad6eeb94ff0619288fb9b3a2287076d5f32ae1;p=platform%2Fupstream%2Fllvm.git [IR] Don't copy profile metadata in createCallMatchingInvoke() The invoke instruction can have profile metadata with branch_weights, which does not make sense for a call instruction and will be rejected by the verifier. Differential revision: https://reviews.llvm.org/D81996 --- diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 7c0cb51..d0f0c8f 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1985,6 +1985,11 @@ CallInst *llvm::createCallMatchingInvoke(InvokeInst *II) { NewCall->setAttributes(II->getAttributes()); NewCall->setDebugLoc(II->getDebugLoc()); NewCall->copyMetadata(*II); + + // If the invoke had profile metadata, drop it. + if (NewCall->hasMetadata(LLVMContext::MD_prof)) + NewCall->setMetadata(LLVMContext::MD_prof, nullptr); + return NewCall; } diff --git a/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll b/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll index b11b7c1..5758b67 100644 --- a/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll +++ b/llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll @@ -7,9 +7,10 @@ declare void @bar() define i32 @test1() personality i32 (...)* @__gxx_personality_v0 { ; CHECK-LABEL: @test1( ; CHECK-NEXT: call void @bar() +; CHECK-NOT: !prof ; CHECK-NEXT: ret i32 0 invoke void @bar( ) - to label %1 unwind label %Rethrow + to label %1 unwind label %Rethrow, !prof !0 ret i32 0 Rethrow: %exn = landingpad {i8*, i32} @@ -17,6 +18,8 @@ Rethrow: resume { i8*, i32 } %exn } +!0 = !{!"branch_weights", i32 369, i32 0} + define i32 @test2() personality i32 (...)* @__gxx_personality_v0 { ; CHECK-LABEL: @test2( ; CHECK-NEXT: call void @bar() [ "foo"(i32 100) ]